Modification des déclarations de variables coté slave
Afin de pouvoir lire et écrire depuis notre programme dans les données d'échange modbus, les tableaux de variables d'échange vont être déplacés dans la liste de variable globale modbus.
Le nouveau code prend donc la forme suivante :
GVL_MODBUS
VAR_GLOBAL
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
PROGRAM PLC_MODBUS_SLAVE
VAR
FbSlave:WagoAppPlcModbus.FbMbSimpleServerTcp;
xOpen: BOOL;
wPort: WORD;
utKeepAlive: WagoAppPlcModbus.typKeepAlive;
bUnitId: BYTE;
IIdentifyObject: WagoAppPlcModbus.I_IdentifyBaseObject;
END_VAR
FbSlave(
xOpen:= xOpen,
wPort:=wPort ,
utKeepAlive:=utKeepAlive ,
xIsOpen=> ,
xError=> ,
oStatus=> ,
udiConnectedClients=> ,
bUnitId:= bUnitId,
IIdentifyObject:= IIdentifyObject,
axDiscreteInputs:= gvl_modbus.axDiscreteInputs,
axCoils:= gvl_modbus.axCoils,
awInputRegisters:= gvl_modbus.awInputRegisters,
awHoldingRegisters:=gvl_modbus.awHoldingRegisters ,
oMbAccessInfo=> )
;
Initialisation des variables coté slave
Nous allons créer une action afin d'initialiser certaines variables, cette action sera appelée au premier tour de cycle du programme. Il faudra donc aussi créer une variable qui stocke cette information.
Définition de la variable xinit :
xinit:BOOL;
Définition du code appelant l'action init :
IF NOT xinit THEN
ACT_INIT();
xinit:=TRUE;
END_IF
Action ACT_INIT:
xOpen:=TRUE;
wPort:=502;
utKeepAlive.xEnable:=FALSE;
bUnitId:=1;