Spaßige Lektionen von WinCC OA. Modbus TCP-Treiber / Sudo Null IT News

Im Rahmen des Kurses “Grundlagen” werden die Themen der Arbeit mit Treibern in WinCC OA sehr mittelmäßig behandelt, und im Rahmen meines Grundkurses – noch mittelmäßiger. Um diesen Mangel zu beheben, wurde die heutige Notiz verfasst.

Es sollte beachtet werden, dass die Einrichtung des Modbus-TCP-Treibers aus unklaren Gründen komplizierter ist als bei S7/S7plus. Eine einfache Poke-Methode (die sogenannte “Engineering Intuition”) kann das Problem nicht lösen, Sie müssen einige Nuancen kennen. Dies wird zum Beispiel von Vyacheslav Lapshin auf seiner Website „Quick Projects“ sehr gut beschrieben. In seiner Beschreibung wurden jedoch einige Details weggelassen, daher werde ich meine eigene Version des Leitfadens erstellen.

Ich arbeite in der CASCADE-Umgebung Version 3.18 Beta. Tatsächlich ist dies eine OEM-Lieferung von WinCC OA von SibCom (https://www.sybcom.ru)

Als Server (Slave-Gerät) des Modbus-Protokolls habe ich eine frei programmierbare SPS.

Ich arbeite traditionell in einem englischsprachigen Umfeld, ohne auf Russisch umzusteigen.

Bei Unklarheiten empfehle ich, auf die „nummerierten“ Teile des Grundkurses zu verweisen.

Zunächst erstellen wir ein leeres Projekt mit “klassischen” Sicherheitseinstellungen und ausgewählter NextGen-Archivierung. Ich beschreibe nicht alle Schritte zum Erstellen eines Projekts, das sind bereits offensichtliche Dinge. Ich setze kein Root-Passwort für das Bildungsprojekt.

Führen Sie das erstellte Projekt aus und gehen Sie zur Konsole. Wir fügen den Modbus-Treiber hinzu (nämlich den Modbus-Treiber, nicht den Modbus-Server!). Wenn Sie die Option „-num 10“ hinzufügen, setzen Sie sie auf die Zahl 10.

Wir stellen sicher, dass der Treiber gestartet wurde, und er wurde gestartet, da sein Status in der Konsole 2 ist und die Statusfarbe grün ist.

Und jetzt tun wir eine sehr nicht offensichtliche Sache. Öffnen Sie die Konfigurationsdatei unseres Projekts. Ich erinnere Sie daran, dass es über die Projekteigenschaften im Projektmanager geöffnet werden kann.

Und dort müssen wir folgendes eingeben:

[mod_10]

tcpServerPort=502

Vergessen Sie nicht, dass die Konfigurationsdatei mit einer Leerzeile enden muss.

Die 10 im Abschnitt mod_10 stimmt offensichtlich mit der Treibernummer überein, die wir beim Hinzufügen zur Konsole angegeben haben. Nach dem Ändern der Konfigurationsdatei müssen Sie den Modbus-Treiber neu starten. Slava schreibt, dass das gesamte Projekt neu gestartet werden muss. Ich habe jedoch speziell ein Experiment durchgeführt und „so und so“ gemacht. In meinem Fall und in meiner Version hat es sich als ausreichend erwiesen, nur den Treiber neu zu starten. Beim ersten Mal schaltete sich natürlich die Windows-Firewall ein und forderte mich auf, die entsprechenden Berechtigungen zu setzen.

In nachfolgenden Experimenten ist die Firewall bereits konfiguriert und fragt nichts ab.

Gehen Sie als Nächstes zur Systemverwaltung und suchen Sie nach den Modbus-Treibereinstellungen.

Drücken Sie die Schaltfläche Erstellen und fügen Sie Mod_Plc_10 zur Liste hinzu. Wie Sie sich denken können, ist 10 die Fahrernummer.

Fügen Sie die IP-Adresse unseres Modbus-TCP-Servers hinzu und aktivieren Sie das Kontrollkästchen Aktiv. So sehen die Einstellungen jetzt aus. Ich erinnere Sie daran, dass die Geräteadresse in der vollständigen Implementierung des Modbus-TCP-Protokolls nur für TCP-RTU-Gates verwendet wird. Normale Modbus TCP-Server ignorieren diesen Parameter. Aber es gibt auch umgekehrte Fälle, und der Server, der kein Gate ist, kontrolliert immer noch seine Unit-ID. Da bei der Implementierung des Modbus-Protokolls jeder auf seine Weise verrückt spielt, ist es schwierig, das Verhalten des Slave-Geräts im Voraus vorherzusagen. In unserem Fall ist der Modbus-TCP-Server korrekt implementiert und die Unit-ID wird ignoriert.

Klicken Sie auf die Schaltfläche Anwenden. Wenn Sie erwarten, dass nach dem Anklicken des Zustands statt „Nicht verbunden“ „Verbindend“ oder „Verbunden“ angezeigt wird, dann hoffen Sie vergebens. Der Verbindungsstatus ändert sich erst nach dem Hinzufügen der ersten _address config zu einem beliebigen Datenpunkt, für den wir traditionell das Para-Modul öffnen. Ich verwende den vordefinierten DPT ExampleDP_Int und erstelle den ersten DP namens MyInt.

Fügen Sie die _address-Konfiguration hinzu und beginnen Sie mit der Konfiguration

Wir werden mit Speicherregistern arbeiten. Das allererste Register in meiner SPS ist ein 16-Bit-Int mit Vorzeichen, das im SPS-Programm jede Sekunde um 1 erhöht wird. Dementsprechend geben wir den Konvertierungstyp = Int16 an. Vergessen Sie nicht, eine Umfragegruppe hinzuzufügen.

In der Umfragegruppe nicht vergessen die Gruppe zu aktivieren, sonst funktioniert der Austausch nicht.

Schließlich machen wir die Adresse aktiv (aktivieren Sie das Kontrollkästchen).

Gehen Sie zu config _original.

Der einmal pro Sekunde gelesene Wert entspricht dem Wert in der SPS. Diese Erfahrung war ein Erfolg. Übrigens erscheint nach dem Hinzufügen des ersten Signals die Meldung Verbunden im Treiberfenster.

Die nächsten beiden Register sind in meinem Fall ein 32-Bit-Int. Holen wir uns einen weiteren Datenpunkt namens MyDInt desselben Typs und richten ihn ein.

Der Konvertierungstyp ist bereits Int32, das sind zwei Register. Wir setzen den Offset – 1 (Nullregister ist MyInt, das erste und zweite Register sind MyDInt). Die Befragungsgruppe bleibt gleich. Wir gehen zur ursprünglichen Konfiguration über und beobachten ungültige Daten.

Der Wert des Signals beträgt hier entweder mehrere Millionen oder mehrere Milliarden, was sich grundlegend vom Wert in der SPS = 5440 unterscheidet (jedes zweite Inkrement wird auch für dieses DInt programmiert). Kommen wir zu den Treibereinstellungen. Ein Modbus-Register besteht aus 16 Bits, zwei Bytes. Zwei Register sind 32 Bit, 4 Byte oder Doppelwort. Und die Reihenfolge der Bytes in einem Wort ist möglicherweise nicht im Voraus bekannt. Wir sehen uns die Registerkarte Erweiterte Einstellungen an und finden die Reihenfolge der Register. Was ist standardmäßig eingestellt – ich weiß es nicht. Aber für alle Fälle versuchen wir es mit der Big-Endian-Reihenfolge, wie bei den Intel-Prozessoren.

Vergessen Sie nicht, auf Übernehmen zu klicken. Nach dieser Änderung stimmt der Wert von MyDInt mit dem Wert in der SPS überein. Während ich diese Notiz schreibe, vergeht natürlich die Zeit, und jetzt beträgt der Signalwert nicht mehr 5440, sondern etwas mehr.

Für alle Fälle schauen wir bei MyInt nach, ob dort etwas kaputt gegangen ist.

Es ist nicht kaputt gegangen, was zu erwarten war. Mit dem nächsten Parameter erhalten wir eine Variable vom Typ Real (auch zwei Register). Auf der Steuerungsseite wird dieser Wert nicht mehr erzwungen, also schreiben wir sowohl lesend als auch schreibend. Erstellen und Konfigurieren eines Datenpunkts vom Typ ExampleDP_Float

Der auf der SPS-Seite eingestellte Wert wurde berücksichtigt

Lassen Sie uns die _smooth-Konfiguration zu diesem DP im Alt/Neu-Vergleichsmodus hinzufügen. Andernfalls wird es problematisch, einen neuen Wert in das Para-Modul einzufahren, da dieser jede Sekunde überschrieben wird.

Wir ändern den Wert im Para-Modul und klettern, um den Controller zu überprüfen. Alles arbeitet.

Und schließlich habe ich mich entschlossen zu prüfen, ob es möglich ist, ein DPE vom Typ bool zu setzen und es als ein bisschen wie ein Speicherregister zu lesen. Wie sich herausstellte, können Sie.

Das fünfte Register ist das Wort MyWord in der SPS. Ich gebe Bitnummer = 1 an (Nummerierung in diesem Fall ab Eins). Ich versuche den Wert zu lesen/schreiben, alles klappt.

Das sechste Register im SPS-Datenbaustein wird durch ein Bit dargestellt. Ich mache Sie darauf aufmerksam, dass ich in diesem speziellen Fall die Bitnummer nicht auf 1, sondern auf 9 setzen muss, da die Bytes im Wort vertauscht werden, was nicht zu gewinnen ist. Dies liegt vor allem an der wortweisen Ausrichtung der Informationen in den Simatic-Datenbausteinen beim Standardzugriff.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *