- Beiträge
- 5.465
- Reaktionspunkte
- 1.425
-> Hier kostenlos registrieren
Hallo zusammen
Ich versuch grad verzweifelt eine Modbuskommunikation von einer WAGO auf ein CEAP Fahrstreifensignalumsetzer aufzubauen.
Die Kommunikation steht soweit ich kann also Register senden und empfangen ohne das der Treiber einen Timeout meldet. Aber das schreiben und Empfangen von Werten will irgendwie noch nicht so richtig klappen.
Ich habe das was ich bis jetzt habe mal auf Online gestellt wenn jemand mal reinschauen will.
http://www.vollmi.ch/sps/Modbus_120203.zip
Und auch mal einen Seriallog aufgezeichnet.
http://www.vollmi.ch/sps/CEAP_LOG.zip
Der Modbus Slave arbeitet mit 32Bit Registern.
In der WAGO habe ich also ebenfalls 32Bit Strukturen gebildet. Dem Modbustreiber übergebe ich diese 32Bit Struktur an eine 16Bit Struktur mit
zum lesen
und
Schreiben.
Das funktioniert soweit. Also ich kann online in den typSlaveData sehen das kopiert wurde.
Aber obwohl ich testweise in Register 1 schreibe und genau von da auch wieder lese und auch mit dem terminal direkt auf dem Slave zugreife sehe ich keine veränderung des registers.
Dem Treiber selber sage ich er soll Startadresse 2 nehmen und Quantity 2 also zwei 16Bit wörter übertragen. Das heisst für mich er muss auf Register 1 schreiben.
mache ich einen Denkfehler?
mfG René
Ich versuch grad verzweifelt eine Modbuskommunikation von einer WAGO auf ein CEAP Fahrstreifensignalumsetzer aufzubauen.
Die Kommunikation steht soweit ich kann also Register senden und empfangen ohne das der Treiber einen Timeout meldet. Aber das schreiben und Empfangen von Werten will irgendwie noch nicht so richtig klappen.
Ich habe das was ich bis jetzt habe mal auf Online gestellt wenn jemand mal reinschauen will.
http://www.vollmi.ch/sps/Modbus_120203.zip
Und auch mal einen Seriallog aufgezeichnet.
http://www.vollmi.ch/sps/CEAP_LOG.zip
Der Modbus Slave arbeitet mit 32Bit Registern.
In der WAGO habe ich also ebenfalls 32Bit Strukturen gebildet. Dem Modbustreiber übergebe ich diese 32Bit Struktur an eine 16Bit Struktur mit
Code:
SysMemCpy(ADR(typModBus_Status[1]), ADR(typSlaveData[1].Response_Data[0]), SIZEOF(typModBus_Status[1]));
und
Code:
SysMemCpy(ADR(typSlaveData[1].Write_Data[0]), ADR(typModBus_Init[1]), SIZEOF(typModBus_Init[1]));
Das funktioniert soweit. Also ich kann online in den typSlaveData sehen das kopiert wurde.
Aber obwohl ich testweise in Register 1 schreibe und genau von da auch wieder lese und auch mit dem terminal direkt auf dem Slave zugreife sehe ich keine veränderung des registers.
Dem Treiber selber sage ich er soll Startadresse 2 nehmen und Quantity 2 also zwei 16Bit wörter übertragen. Das heisst für mich er muss auf Register 1 schreiben.
mache ich einen Denkfehler?
mfG René