4. Configuration
56
To help on the development of such applications, there are following pratical examples, in ST
language, for the main POFIBUS modules (DI, DO, AI. AO), based on Nexto Serie's PROFIBUS
slaves (NX5110). The user should feel encouraged to make any needed adaptation and change to fit
to its application.
ATTENTION
For the routines, presented in sequence, correct functioning it is necessary to enable “Status in
Diagnose” in the PROFIBUS slaves.
The development of PROFIBUS I/O modules quality points update routine must began from quality
variables declaration and initialization, from a GVL.
VAR_GLOBAL
QUALITY_PB_NX1005_I: LibDataTypes.QUALITY:= (VALIDITY:= VALIDITY_INVALID, FLAGS:=
(FLAG_RESTART:= TRUE));
QUALITY_PB_NX1005_O: LibDataTypes.QUALITY:= (VALIDITY:= VALIDITY_INVALID, FLAGS:=
(FLAG_RESTART:= TRUE));
QUALITY_PB_NX6000: LibDataTypes.QUALITY:= (VALIDITY:= VALIDITY_INVALID, FLAGS:=
(FLAG_RESTART:= TRUE));
QUALITY_PB_NX6100: LibDataTypes.QUALITY:= (VALIDITY:= VALIDITY_INVALID, FLAGS:=
(FLAG_RESTART:= TRUE));
END_VAR
PROFIBUS Digital Inputs Quality
// PROFIBUS digital inpunt quality update, module NX1005
// In communication sucess case with PROFIBUS slave (address = 99)...
IF DG_NX5001.tMstStatus.abySlv_State.bSlave_99 = TRUE THEN
// Waits the PROFIBUS slave become apt to exchange data and diagnostics
// (It is necessary to wait, avoiding invalid quality generation)
IF DG_NX5110.tPbusHeadA.tStatus1.bStation_Non_Existent = FALSE AND
DG_NX5110.tPbusHeadA.tStatus1.bStation_Not_Ready = FALSE AND
DG_NX5110.tPbusHeadA.wIdentNumber > 0 THEN
QUALITY_PB_NX1005_I.FLAGS.FLAG_COMM_FAIL:= FALSE;
// If there is a module presente on the bus (slot = 2) and
// if there isn’t no modules config problem (general) and
// if there is no config problem in that module (specific) and
// if there isn’t fatal error identification by the module...
IF (DG_NX5110.tPbusHeadA.dwModuleNotPresent AND SHL(1, 2)) = 0 AND
DG_NX5110.tPbusHeadA.tSummarized.bConfigMismatch = FALSE AND
DG_NX1005_24_Vdc_8_DO_Trans_8_DI.tGeneral.bConfigMismatch = FALSE AND
DG_NX1005_24_Vdc_8_DO_Trans_8_DI.tGeneral.bFatalError = FALSE THEN
QUALITY_PB_NX1005_I.VALIDITY:= VALIDITY_GOOD;
QUALITY_PB_NX1005_I.FLAGS.FLAG_RESTART:= FALSE;
QUALITY_PB_NX1005_I.FLAGS.FLAG_FAILURE:= FALSE;
QUALITY_PB_NX1005_I.FLAGS.FLAG_OLD_DATA:= FALSE;
ELSE
QUALITY_PB_NX1005_I.VALIDITY:= VALIDITY_INVALID;
QUALITY_PB_NX1005_I.FLAGS.FLAG_FAILURE:= TRUE;
// If the point have ever been updated once...
IF NOT QUALITY_PB_NX1005_I.FLAGS.FLAG_RESTART THEN
QUALITY_PB_NX1005_I.FLAGS.FLAG_OLD_DATA:= TRUE;
END_IF
END_IF
END_IF
// In PROFIBUS communication failure with the PROFIBUS slave...
ELSE
QUALITY_PB_NX1005_I.VALIDITY:= VALIDITY_INVALID;
QUALITY_PB_NX1005_I.FLAGS.FLAG_COMM_FAIL:= TRUE;
QUALITY_PB_NX1005_I.FLAGS.FLAG_FAILURE:= FALSE;
// If the point have ever been updated once ...
IF NOT QUALITY_PB_NX1005_I.FLAGS.FLAG_RESTART THEN
QUALITY_PB_NX1005_I.FLAGS.FLAG_OLD_DATA:= TRUE;
END_IF
END_IF
PROFIBUS Digital Output Quality
// PROFIBUS digital output quality update, module NX1005
// In communication sucess case with PROFIBUS slave (address = 99) ...
IF DG_NX5001.tMstStatus.abySlv_State.bSlave_99 = TRUE THEN