Datenabfrage über SNMP (OID)

Deutsch
stonix
2009-05-13
2009-06-10
  • stonix

    stonix - 2009-05-13

    Halli Hallo,

    folgendes Problem konnte ich nach langer Recherche im Internet nicht lösen:

    In meinem Projekt habe ich globale Netzwerkvariablen deklariert, welche nach verschiedenen Ereignissen über UDP versendet werden. Jedoch sollen keine UDP-Pakete übers Netz laufen, sondern SNMP-Pakete die nach einer SNMP-Get-Anfrage erst gepackt und versendet werden.

    Hierzu sollen die globalen Netzwerkvariablen in die SNMP-Baumstruktur eingegliedert werden. Somit erhalten die Variablen eine OID (Object Identifier) und können über SNMP-Get ermittelt werden.

    Wo und wie kann ich die globalen Netzwerkvariablen einer OID zuweisen?

    Die Bibliotheken (1) WagoLibSnmpEx_02.lib und (2) WagoLibSnmpManager_02.lib machen zunächst den Eindruck, als ob sie für solche Anforderungen erstellt wurden. Bei genauerer Betrachtung jedoch, ist die 1. Bibliothek für Trap-Meldungen (zyklische SNMP-Meldungen) und die 2. Bibliothek für SNMP-Get und SNMP-Set Routienen, die vom Controller aus gehen. Der Controller soll aber auf die Get- und Set-Nachrichten antworten und nicht selber verschicken.

    Ein Vertreter meinte euphorisch, als er uns das Produkt vorgestellt hat, dass dies kein Problem sei. Leider finde ich die Lösung nicht.

    Bitte um einen kleinen Hinweis. Kann/muss ich per "klicki-bunti" die OIDs zuweisen, oder muss ein neues Programm geschrieben werden. Geht es überhaupt, oder sind die OIDs fest verankert und "verdratet"?

    Grüße

    Stefan

     
  • cmoeller

    cmoeller - 2009-05-14

    Hallo Stonix,

    es funktioniert. Und zwar ist der SNMP-Agent Bestandteil der Firmware des 841. Er muss aber im WebBasedManagement auf den Seiten "Port" und "SNMP" aktiviert werden.

    Von WAGO bekommst du ein MIB-File das alle verfügbaren Informationen und deren OID's beschreibt.

    Für deine Aufgabe sind die beiden DWORD-Tabellen

    wioPlcDataReadArea(1.3.6.1.4.1.13576.10.1.100.1.1.2. 1 ..255) und wioPlcDataWriteArea(1.3.6.1.4.1.13576.10.1.100.1.1.3. 1 ..255) intressant.

    Das heist die OID's sind bereits definiert, aber wie nun die Prozessdaten auf die OID's mappen?

    Die Antwort liegt in der Bibliothek "WagoLibSnmp.lib", sie ist seit CoDeSys 2.3.9.3 Bestandteil des WAGO-Target-Setup.

    Du findest die Bibliothek im Installationspfad von CoDeSys typisch "C:\Programme\WAGO-Software\CoDeSys V2.3\Targets\WAGO\Libraries\32_Bit".

    In dieser Bibliothek findest du die Funktionen

    • SNMP_GET_PLCDATA_READAREA()

    • SNMP_SET_PLCDATA_WRITEAREA()

    Mir hat eine Mail an den wago-support geholfen.

    Gruss cmoeller

     
  • stonix

    stonix - 2009-05-14

    freu-hüpf-hüpf-spring

    Viiielen Dank für Deine richtungsweisende Worte. Über Kubuntu habe ich bereits ein "snmpwalk" mal über das Gerät laufen lassen. Was da an Informationen zurück kommen ist der Wahnsinn. Mir sind dann gleich die wioPlcDataWriteArea/ReadArea- und Index.0..255 aufgefallen (die Bezeichnung sagt ja schon alles). Aber darüber hinaus stand ich vor einer Wand.

    Werd mich mal jetzt wieder weiter ran machen.

    Gruß und nochmals Danke cmoeller

    Stefan

     
  • stonix

    stonix - 2009-05-14

    Funktioniert. Passt und speichert ab. Ist auch über SNMP-Get abrufbar.

    Ein kleines Problem hab ich noch. Im Index 0 kann nichts abgespeichert werden. Schätze mal es liegt daran, dass der 0-Index ein Knotenpunkt ist.

    Nun für die anderen:

    1) Programm:

    Bibliothek einbinden: WagoLibSnmp.lib

    ... dann programmieren:

    VAR
    WriteSuccess:BOOL  := FALSE;
    END_VAR
    ___________________________________________________________
    WriteSuccess := SNMP_SET_PLCDATA_WRITEAREA(1,123456); (*Schreibt in den Index 1 den Wert 123456*)
    (*liefert TRUE zurück bei Erfolg, ansonsten FALSE*)
    

    2) WAGO einrichten:

    Auf der WAGO-Konfigurationswebseite in der Navigation:

    • PORT

    SNMP Enabled (Port 161, 162)

    • SNMP

    SNMP v1/v2c (connection based)

    Protocol Enable

    1.Manager IP: "IP des PCs"

    Community Name: public

    3) Wert abrufen:

    Mit einem SNMP-Programm abfragen, wie z. B. Paessler SNMP Tester 3.1

    http://www.heise.de/software/download/paessler_snmp_tester/29883

    4) Parameter eingeben:

    Werte:

    Local IP: "IP des PCs"

    Device-IP: "IP des Wago I/O-Systems"

    Port: 161

    SNMP Version: SNMP V1

    Community: public

    Custom OID: 1.3.6.1.4.1.13576.10.1.100.1.1.3.1 <-

    Yippi-ja-jey...

     
  • Anonymous - 2009-05-21

    Originally created by: Wu Fu

    Hallo zusammen,

    super Beitrag mit einer sehr genauen Beschreibung.

    Nur leider funktioniert es bei mir nicht.

    @stonix Ich hab mal meine Einstellungen als Screenshot angehängt. Könntest du vielleicht mal drüber schauen, evtl. siehst du ja meinen Fehler? Wäre auf jeden Fall total nett.

    Ich hab das ganze auf einem KNX-Controller 750-849 probiert, der müsste aber auch snmp unterstützen.

    IMG: Tester.JPG

    IMG: Codesys.JPG

    IMG: Wago 750

     
  • stonix

    stonix - 2009-05-25

    Hi, die Fehlermeldung hatte ich auch mal. Das ist ein grundsätzliches Problem mit der Verbindung.

    Sehr gute Fehlerbeschreibung. Eine Info bräucht ich noch. Im WAGO-Web-Based Management, Navigation: Information

    IP address

    Subnet mask

    Gateway

    Hostname

    Domainname

    Bei der Navigation "SNMP" kannst Du "Trape Enable" deaktivieren (-> None).

     
  • Anonymous - 2009-05-25

    Originally created by: Wu Fu

    Hi, danke dir für deine Antwort.

    Ich denke ich hab den bzw. die Fehler gefunden.

    Ich habe ganz einfach nicht dran gedacht, dass bei Änderungen der Port und SNMP Konfiguration der Controller resetet werden muss. Dabei stehts doch auf jeder Seite dabei. Ich hab die nachfolgende Fehlermeldung mal angehängt.

    Der weitausgrößere Haken an der Sache ist, dass der KNX-Controller 750-849 den Befehl "SNMP_SET_PLCDATA_WRITEAREA" wahrscheinlich nicht unterstützt. In der Bausteinbeschreibung ist nur der 750-841 erwähnt. Danach hab ich noch eine "snmpwalk" laufen lassen, welcher mir nur OID 1.3.6.1.2.1.1.1.0 angezeigt hat.

    Bei dir wurden mit 841 wahrscheinlich mehr OID angezeigt, oder?

    mfg

    IMG: Tester.JPG

    IMG: Walk.JPG

     
  • stonix

    stonix - 2009-05-26

    Hi,

    jup, schätze auch, dass das der Grund ist. Ich weis nicht in welchen Geräten die Bibliothek unterstützt wird. In der Doku vom WAGO Ethernet Controller gibt es eine Seite mit SNMP-Daten. Dort sind die Teilbäume erklärt und dort findet man auch die PLCDATA_WRITEAREA und PLCDATA_READAREA.

    http://www.wago.com/wagoweb/documentation/750/ger_manu/841/m084100d.pdf

    Seite 312, Kapitel 8.2.19 Plc Data Group (das letzte Teilkapitel im Kapitel 8 Anhang).

    Gruß

    Stefan

     
  • Anonymous - 2009-05-26

    Originally created by: Wu Fu

    Tja, hab mir jetzt die Handbücher vom 750-849 und vom 750-871 durchgesehen und konnte leider PLCDATA_WRITEAREA und PLCDATA_READAREA nicht finden. Beiden Controllern fehlen die Wago-MIB-Gruppen unter welche die PLC-Data-Group fällt, wenn ich das richtig verstanden habe.

    Wundert mich eigentlich, besonders beim 750-871, da ich gedacht habe, dass ist der selbe Controller wie der 750-841 nur mit 2-Port Switch.

    Naja, man kann nicht alles haben.

    mfg

     
  • stonix

    stonix - 2009-05-28

    Das ist mal echt doof.

    Hätte ich mir auch so vorgestellt.

    Danke für die Info.

     
  • Anonymous - 2009-05-28

    Originally created by: Wu Fu

    Vielleicht "lernen" das die Controller auch noch.

    Hab jetzt bei meinen 750-841 zu Hause die Firmware 16 drauf gezogen und die ganze Prozedur wiederholt und siehe da dieses mal funktionierts.

    Jetzt habe ich allerdings ein neues Problem. Ich möchte gerne negative Zahlen auslesen, sprich Realwerte. Mit SNMP_SET_PLCDATA_WRITEAREA kann aber leider nur Doppelwort weitergegeben werden.

    Weiß dazu jemand eine Lösungsmöglichkeit.

    mfg

     
  • stonix

    stonix - 2009-05-29

    Ui ui ui...

    das ist glaub ich nicht so leicht möglich.

    Zu aller erst sind es ja DWORD-Felder, d. h. als Integer kommt es hald darauf an, wie man die Felder interpretiert.

    Bei negativen Werten, wird das höherwertige Bit (MSB) auf 1 gesetzt. Beim Herauslesen wirst Du allerdings immer eine positive Zahl bekommen. Wie Du sie dann weiterverarbeitest, ist dann eine andere Geschichte.

    Siehe Einheitskreis:

    In den OIDs PlcDataReadArea kannst du mit einem SNMP-Set Zahlenwerte hineinschreiben und intern mit der Steurung herauslesen. Wenn Du beispielsweise "-3" hineinschreibst erhälst du als Bestätigung "253" zurück:

    \# snmpset -v2c -cpublic 192.168.1.100 1.3.6.1.4.1.13576.10.1.100.1.1.2.1 i -3
    SNMPv2-SMI::enterprises.13576.10.1.100.1.1.2.1 = INTEGER: 253
    

    Die "-3" hat nämlich bei der vorzeichenbehafteten Zweierkomplementdarstellung den Wert "1111 1101" und das ist 253.

    Gruß

    IMG: Bild

     
  • Anonymous - 2009-06-10

    Originally created by: Wu Fu

    Wenn auch spät, vielen Dank für deine ausführliche Antwort.

    Schade, schade. Ich sehe momentan auch keine Lösungsmöglichkeit.

    Wollte das Programm von Pässler gerne zur einfachen Trendarstellung verwenden. Aber ohne negative Zahlen bringts mir leider nichts. Leider ist momentan die Möglichkeit von Wago zur Trenddarstellung ziemlich begrenzt.

    mfg

     

Log in to post a comment.