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

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;