Modification des déclarations de variables coté master
Afin de pouvoir lire et écrire depuis notre programme dans les données utilisées par le bloc maitre, les informations concernant les requêtes et les réponses des esclaves vont être déplacées 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;
utQuery: WagoAppPlcModbus.typMbQuery;
utResponse: WagoAppPlcModbus.typMbResponse;
END_VAR
PROGRAM PLC_MODBUS_MASTER
VAR
fbMaster:WagoAppPlcModbus.FbMbMasterTcp;
xConnect: BOOL;
sHost: STRING;
wPort: WORD;
utKeepAlive: WagoAppPlcModbus.typKeepAlive;
eFrameType: WagoAppPlcModbus.eMbFrameType;
tTimeOut: TIME;
xTrigger: BOOL;
END_VAR
fbMaster(
xConnect:= xConnect,
sHost:= sHost,
wPort:=wPort ,
utKeepAlive:=utKeepAlive ,
eFrameType:=eFrameType ,
tTimeOut:= tTimeOut,
utQuery:= GVL_MODBUS.utQuery,
xTrigger:= xTrigger,
utResponse:=GVL_MODBUS.utResponse ,
xIsOpen=> ,
xError=> ,
oStatus=> );
Initialisation des variables coté master
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:
xConnect:=TRUE;
sHost:='192.168.1.102'; // Adresse IP de l'esclave (ici l'adresse IP de notre PFC)
wPort:=502;
utKeepAlive.xEnable:=FALSE;
eFrameType:=2;
tTimeOut:=T#100MS;