e!COCKPIT : Exemple de gestion Modbus - MA2ID - Modbus e!COCKPIT - Modification et initialisation des variables master

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;