Beckhoff cx8090 und Modbus: Slave lesen.

knuppel

Level-1
Beiträge
189
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich möchte gerne vom CX8090 aus die Register eines DAQ-Modules lesen. Die Daten dort befinden sich in den Registern 40001 biss 40008. Das DAQ ist über einen Schnittstellenwandler (FL-Com Server Uni) an das Netzwerk angeschlossen. Über ein Testprogramm kann ich auf das Gerät zugreifen und Daten auslesen.
Nun soll der CX8090 die Daten dort auslesen.
Hier mein PLC Programm http://questiator.com/images/image.php?di=FCSO.

Kann mir jemand sagen was ich da falsch mache?

P.s.: Ich bin "Wiedereinsteiger" in SPS und CO.

EDIT: die nUnitID habe ich auf 16#01 geändert, da das DAQ die Modbus Adresse 1 hat.
 
Zuletzt bearbeitet:
So sieht der Teil meines Programmes aus:
(*Modbus Funktion 1. Lesen digitaler Ausgänge*)
readreg(
sIPAddr:= '10.2.130.96',
nTCPPort:= 502,
nUnitID:=1,
nQuantity:= 8,
nMBAddr:= 40001,
cbLength:= SIZEOF(ReadData),
pDestAddr:= ADR(ReadData),
bExecute:=TRUE ,
tTimeout:=t#2s ,
bBusy=> ,
bError=> ,
nErrId=> ,
cbRead=> );

Wenn bExecute auf True gesetzt wird passiert folgendes:



Fehler 1794 bedeutet: invalid index group
 
Ich nehme mal an, dass der Modbus TCP Server installiert wurde und die Einstellungen richtig getroffen wurden?
Als nMBAddr ev. mal mit 1 probieren, es kann sein, dass durch Verwendung der Modbus-Funktion 1 automatisch
nach den Registern 40000x gefragt wird. Eventuell mit Wireshark schauen, was der CX rausschickt. (wenn überhaupt)

Zum Testen würde ich die Variable .bExecute mit einer Variable oder Zeittakt versorgen.

Grüße
 
Modbus.jpg

Im Anhang eine Grafik, zur Erläuterung des Mappings der Datenbereiche durch den Modbus TCP Server.
Hier sieht man z.B., dass das erste Register das mit Read Holding Registers (x03) ab 12288 beginnt
und nicht wie ev. erwartet ab 0...

Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe schon einiges versucht, habe mal die Adresse 40001 und mal 1 probiert.
Ich glaube nicht, daß der CX Verbindung zum FL-Com- Server hat, dieser würde blinken sobald er etwas empfängt oder sendet.

Habe bExecute mal auf true gesetzt, siehst du auf dem zweiten Bild, was ich angefügt habe. "Invalid Index group".
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du hast noch eine lb6 Lib in deinem Projekt, hat da nichts verloren, rausnehmen. Dann schau doch mal nach ob du im Sytem Verzeichniss die TcModbusSrv.exe Datei liegen hast. Dann kannst du noch mal schauen ob der Server geht, Tools für Modbus TCP findest du im Internet.
Sonst hinterleg mal dein SPS Programm.
 
CERHOST kannte ich bis jetzt noch nicht, konnte mich aber auf dem CX einloggen und hab ein PING an den Slave geschickt und eine Antwort bekommen.
 
Ja so, bekommst du nun 1861 als Fehler? Das heißt TimeOut. Ping geht immer noch?
Probier mal mit dem Tool ob es überhaupt geht:
http://www.win-tech.com/html/demos.htm
Wenn ja schick eine Screen shot von den Settings vielleicht wird man dann daraus schlau, wenn es mit dem Tool auch nicht geht musst du wohl den Hersteller deines Modbus Server fragen...
 
Zurück
Oben