Mise en place
Pour des raisons de simplification au niveau des tests, la communication modbus sera réalisée en TCP. Nous utiliserons donc les blocs fonctionnels TCP de la bibliothèque WagoAppPlcModbus.
Nous allons dans un premier temps créer l'arborescence de notre projet de la manière suivante :
Définition des variables et renseignement du bloc coté esclave :
PROGRAM PLC_MODBUS_SLAVEVAR
FbSlave:WagoAppPlcModbus.FbMbSimpleServerTcp;
xOpen: BOOL;
wPort: WORD;
utKeepAlive: WagoAppPlcModbus.typKeepAlive;
bUnitId: BYTE;
IIdentifyObject: WagoAppPlcModbus.I_IdentifyBaseObject;
axDiscreteInputs:ARRAY[1..10] OF BOOL;
axCoils:ARRAY[1..10] OF BOOL;
awInputRegisters:ARRAY[1..10] OF WORD;
awHoldingRegisters:ARRAY[1..1000] OF WORD;
END_VAR
FbSlave(
xOpen:= xOpen,
wPort:=wPort ,
utKeepAlive:=utKeepAlive ,
xIsOpen=> ,
xError=> ,
oStatus=> ,
udiConnectedClients=> ,
bUnitId:= bUnitId,
IIdentifyObject:= IIdentifyObject,
axDiscreteInputs:= axDiscreteInputs,
axCoils:= axCoils,
awInputRegisters:= awInputRegisters,
awHoldingRegisters:=awHoldingRegisters ,
oMbAccessInfo=> );
Définition des variables et renseignement du bloc coté maitre :
PROGRAM PLC_MODBUS_MASTER
VAR
fbMaster:WagoAppPlcModbus.FbMbMasterTcp;
xConnect: BOOL;
sHost: STRING;
wPort: WORD;
utKeepAlive: WagoAppPlcModbus.typKeepAlive;
eFrameType: WagoAppPlcModbus.eMbFrameType;
tTimeOut: TIME;
utQuery: WagoAppPlcModbus.typMbQuery;
xTrigger: BOOL;
utResponse: WagoAppPlcModbus.typMbResponse;
END_VAR
fbMaster(
xConnect:= xConnect,
sHost:= sHost,
wPort:=wPort ,
utKeepAlive:=utKeepAlive ,
eFrameType:=eFrameType ,
tTimeOut:= tTimeOut,
utQuery:= utQuery,
xTrigger:= xTrigger,
utResponse:=utResponse ,
xIsOpen=> ,
xError=> ,
oStatus=> );