-> Hier kostenlos registrieren
Hallo,
ich versuche mich momentan an einer Modbus RTU Verbindung zwischen 2 Controllern im e!COCKPIT. Dabei möchte ich, dass der Master die Daten an den Slave sendet. Im Slave und Master sind jeweils die gleichen Datenstrukturen enthalten.
Ich möchte am Ende eine Master-Datenstruktur versenden in welcher mehrere weitere Datenstrukturen enthalten sind die dann wiederum die Variablen enthalten. Die Master-Datenstruktur ist vom Typ "UNION".
So sehen meine Bausteine aus:
PROGRAM PRG_Modbus_Master
VAR
ModbusMaster : FbMbMasterSerial;
xConnect : BOOL;
xIsConnected : BOOL;
xError : BOOL;
xTrigger : BOOL;
tTimeOut: TIME := T#2S;
utQuery : typMbQuery;
utResponse : typMbResponse;
Data : ARRAY[0..124] OF WORD := Master_Datenstruktur;
END_VAR
utQuery.bUnitId :=1;
utQuery.awWriteData := Data;
ModbusMaster(
xConnect:= xConnect,
I_Port:= COM1,
udiBaudrate:= 9600,
usiDataBits:= 8,
eParity:= 1,
eStopBits:= 3,
eHandshake:= 0,
ePhysical:= RS485,
xIsConnected=> xIsConnected,
xError=> xError,
oStatus=> ,
eFrameType:= eMbFrameType.RTU,
tTimeOut:= tTimeOut,
utQuery:= utQuery,
xTrigger:= xTrigger,
utResponse:= utResponse);
------------------------------------------------------------------------------
PROGRAM PRG_Modbus_Slave
VAR
ModbusSlave : FbMbSimpleServerSerial;
xConnect : BOOL;
xIsConnected : BOOL;
xError : BOOL;
InputRegister : ARRAY[0..65000] OF WORD;
HoldingRegisters : ARRAY[0..65000] OF WORD;
axCoils : ARRAY [1..100] OF BOOL;
axDiscreteInputs : ARRAY [1..100] OF BOOL;
oMbAccessInfo : fbMbAccessInfo;
Data : Master_Datenstruktur;
END_VAR
ModbusSlave( xConnect:= xConnect,
I_Port:= COM2,
udiBaudrate:= 9600,
usiDataBits:= 8,
eParity:= 1,
eStopBits:= 3,
eHandshake:= 0,
ePhysical:= RS485,
eFrameType:= eMbFrameType.RTU,
xIsConnected=> xIsConnected,
xError=> xError,
oStatus=> ,
bUnitId:= 1,
axDiscreteInputs:= axDiscreteInputs,
axCoils:= axCoils,
awInputRegisters:= InputRegister,
awHoldingRegisters:= HoldingRegisters,
oMbAccessInfo=> oMbAccessInfo);
Data := InputRegister;
------------------------------------------------------------------------------
TYPE Master_Datenstruktur :
UNION
stStruktur1 : ST_Struktur1;
stStruktur2 : ST_Struktur2;
...
END_UNION
END_TYPE
------------------------------------------------------------------------------
TYPE ST_Struktur1 :
STRUCT
rDaten : REAL;
sDaten : STRING;
...
END_STRUCT
END_TYPE
-----------------------------------------------------------------------------
Das ist jetzt nur eine Beispielstruktur. Am Ende soll die Datenstruktur mehrere 100 Variablen enthalten.
Jetzt meine Frage dazu:
1. Kann das mit meiner Parametrierung so funktionieren oder muss ich da noch etwas dran verändern?
2. Ich bin mir nicht sicher ob ich das mit der Datenstruktur so machen kann. Ist das so richtig oder muss ich da anders rangehen?
3. Gibt es eine genaue Beschreibung wozu die einzelnen Variablen da sind, bzw. vielleicht ein Parametrierungsbeispiel?
Gruß
ich versuche mich momentan an einer Modbus RTU Verbindung zwischen 2 Controllern im e!COCKPIT. Dabei möchte ich, dass der Master die Daten an den Slave sendet. Im Slave und Master sind jeweils die gleichen Datenstrukturen enthalten.
Ich möchte am Ende eine Master-Datenstruktur versenden in welcher mehrere weitere Datenstrukturen enthalten sind die dann wiederum die Variablen enthalten. Die Master-Datenstruktur ist vom Typ "UNION".
So sehen meine Bausteine aus:
PROGRAM PRG_Modbus_Master
VAR
ModbusMaster : FbMbMasterSerial;
xConnect : BOOL;
xIsConnected : BOOL;
xError : BOOL;
xTrigger : BOOL;
tTimeOut: TIME := T#2S;
utQuery : typMbQuery;
utResponse : typMbResponse;
Data : ARRAY[0..124] OF WORD := Master_Datenstruktur;
END_VAR
utQuery.bUnitId :=1;
utQuery.awWriteData := Data;
ModbusMaster(
xConnect:= xConnect,
I_Port:= COM1,
udiBaudrate:= 9600,
usiDataBits:= 8,
eParity:= 1,
eStopBits:= 3,
eHandshake:= 0,
ePhysical:= RS485,
xIsConnected=> xIsConnected,
xError=> xError,
oStatus=> ,
eFrameType:= eMbFrameType.RTU,
tTimeOut:= tTimeOut,
utQuery:= utQuery,
xTrigger:= xTrigger,
utResponse:= utResponse);
------------------------------------------------------------------------------
PROGRAM PRG_Modbus_Slave
VAR
ModbusSlave : FbMbSimpleServerSerial;
xConnect : BOOL;
xIsConnected : BOOL;
xError : BOOL;
InputRegister : ARRAY[0..65000] OF WORD;
HoldingRegisters : ARRAY[0..65000] OF WORD;
axCoils : ARRAY [1..100] OF BOOL;
axDiscreteInputs : ARRAY [1..100] OF BOOL;
oMbAccessInfo : fbMbAccessInfo;
Data : Master_Datenstruktur;
END_VAR
ModbusSlave( xConnect:= xConnect,
I_Port:= COM2,
udiBaudrate:= 9600,
usiDataBits:= 8,
eParity:= 1,
eStopBits:= 3,
eHandshake:= 0,
ePhysical:= RS485,
eFrameType:= eMbFrameType.RTU,
xIsConnected=> xIsConnected,
xError=> xError,
oStatus=> ,
bUnitId:= 1,
axDiscreteInputs:= axDiscreteInputs,
axCoils:= axCoils,
awInputRegisters:= InputRegister,
awHoldingRegisters:= HoldingRegisters,
oMbAccessInfo=> oMbAccessInfo);
Data := InputRegister;
------------------------------------------------------------------------------
TYPE Master_Datenstruktur :
UNION
stStruktur1 : ST_Struktur1;
stStruktur2 : ST_Struktur2;
...
END_UNION
END_TYPE
------------------------------------------------------------------------------
TYPE ST_Struktur1 :
STRUCT
rDaten : REAL;
sDaten : STRING;
...
END_STRUCT
END_TYPE
-----------------------------------------------------------------------------
Das ist jetzt nur eine Beispielstruktur. Am Ende soll die Datenstruktur mehrere 100 Variablen enthalten.
Jetzt meine Frage dazu:
1. Kann das mit meiner Parametrierung so funktionieren oder muss ich da noch etwas dran verändern?
2. Ich bin mir nicht sicher ob ich das mit der Datenstruktur so machen kann. Ist das so richtig oder muss ich da anders rangehen?
3. Gibt es eine genaue Beschreibung wozu die einzelnen Variablen da sind, bzw. vielleicht ein Parametrierungsbeispiel?
Gruß
Zuletzt bearbeitet: