Hauptmenü

PLCWinNT Modbus

Begonnen von Wold, 15. Juli 2012, 15:53:53

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

Wold

Hallo,

ich versuche gerade aus einem Programm auf einer PLCWin NT Daten über ModBus auszulesen bzw. zu schreiben.
Mein Problem:
Wie bekomme ich die Modbusadresse einer bestimmten Variablen raus.

Bei der SPS die ich habe Wago 750-849 ist z.B QX26.0 ModbusAdresse 538
oder MX512.0 die 12800
Zu entnehmen aus der Doku von der 750-849

Aber zur PLCWinNT finde ich nichts vergleichbares.

Hat da einer eine Idee? Oder die Lösung.

Vielen Dank für eure Bemühungen.

Mudla

Hi!

Du solltest ja in deiner Doku (kenne leider WAGO nicht) die Startadressen fü ModBus haben.

Wenn ich das jetzt richtig interpretiere, dann sollte das für %QX0.0  MB-Adresse 512 sein.

Das bedeutet dann, wenn du mit Funktion 03 (Read Holding Registers) das Register 512 ausliest, bekommst du ein WORD mit den Bits %QX0.0 bis %QX0.7. Folglich sollte Reg. 513 %QX1.0 bis %QX1.7 enthalten. Die Variable %QX39.3 ist dann im Register 551 (512 + 39).

Du kannst natürlich auch einzelne Bits auslesen, die Funktion sollte "02 - Read Input Status" und "01 - Read Coil Status" sein.

Grüße
Mudla

Wold

Hallo,

vielen Dank für deine Antwort.
Das ist mir soweit alles klar.
Kann ja von dem Projekt auf der PLCWinNT (SoftSPS) aus Daten auf meiner SPS Wago 750-849 lesen und schreiben.
Das funktioniert ja sowit alles ganz gut.

Nur fehlt mir die Zuordnung der Modbusadresse zu den Variablen auf der SoftSPS (PLCWinNT).

Siehe Anhang:
zuweisung von der 750-849.

Dies bräuchte ich von der SoftSPS.

LG
David

[gelöscht durch Administrator]

Mudla

Hallo!

Sorry, ich hab ich gestern warscheinlich falsch verstanden :)

Du möchtest mit deiner WAGO Daten von PLCWnNT auslesen, oder?

Ich hab mit PLCWinNT nie gearbeitet, daher ist alles weitere rein theoretisch!

Ich gehe mal davon aus, dass die SoftSPS keine ModBus-Unterstützung von Haus aus hat, deshalb brauchst du dort einen ModBus-Slave-Baustein.
Dort schreibst du dann die Daten, die du haben willst, in die zuständigen Arrays, und kannst sie dann mit dem MB_Master auslesen.


warHoldingRegister : ARRAY [1..ModbusSlave_uiMaxHoldingRegister] OF WORD; (Beispiel des MB_Slave-Bausteins von Möller)

wDaten1 -> warHoldingRegister[1] == MB-Register 1 beim auslesen
wDaten2 -> warHoldingRegister[2] == MB-Register 2 beim auslesen
wDaten3 -> warHoldingRegister[59] == MB-Register 59 beim auslesen
...


Grüße
Mudla

Mudla

Hallo Wold,

konntest du dein Problem lösen?

Grüße
Mudla

Wold

Hallo,
leider noch nicht.
Auch mangels zeit.
Meld mich wieder.

Lg
David