5. CONFIGURATION
// PROFIBUS analog output quality update, module NX6100
// In communication success 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_NX6100.FLAGS.FLAG_COMM_FAIL:= FALSE;
// If there is a module present on the bus (slot = 4) and
// if there is no modules config problem (general) and
// if there is no config problem in that module (specific) and
// if there is no fatal error identification by the module and
// if there is no calibration error indication and
// if there is no external power supply missing indication and
// if there is no error indication of output in open loop and
// if there is no outputs short circuit indication ...
IF (DG_NX5110.tPbusHeadA.dwModuleNotPresent AND SHL(1, 4)) = 0 AND
DG_NX5110.tPbusHeadA.tSummarized.bConfigMismatch = FALSE AND
DG_NX6100_4_AO_Voltage_Current.tGeneral.bConfigMismatch = FALSE AND
DG_NX6100_4_AO_Voltage_Current.tGeneral.bFatalError = FALSE AND
DG_NX6100_4_AO_Voltage_Current.tGeneral.bCalibrationError = FALSE AND
DG_NX6100_4_AO_Voltage_Current.tGeneral.bNoExternalSupply = FALSE AND
DG_NX6100_4_AO_Voltage_Current.tDetailed.tAnalogOutput_00.bOpenLoop = FALSE
AND
DG_NX6100_4_AO_Voltage_Current.tDetailed.tAnalogOutput_00.bShortCircuit =
FALSE THEN
QUALITY_PB_NX6100.VALIDITY:= VALIDITY_GOOD;
QUALITY_PB_NX6100.FLAGS.FLAG_RESTART:= FALSE;
QUALITY_PB_NX6100.FLAGS.FLAG_FAILURE:= FALSE;
QUALITY_PB_NX6100.FLAGS.FLAG_INACCURATE:= FALSE;
QUALITY_PB_NX6100.FLAGS.FLAG_OLD_DATA:= FALSE;
ELSE
// Condition to turns on imprecision indication
// (check first, because invalid validity must prevail)
IF DG_NX6100_4_AO_Voltage_Current.tGeneral.bCalibrationError = TRUE THEN
QUALITY_PB_NX6100.VALIDITY:= VALIDITY_QUESTIONABLE;
QUALITY_PB_NX6100.FLAGS.FLAG_INACCURATE:= TRUE;
ELSE
QUALITY_PB_NX6100.FLAGS.FLAG_INACCURATE:= FALSE;
END_IF
// Condition to turns on general failure indication (priority)
IF (DG_NX5110.tPbusHeadA.dwModuleNotPresent AND SHL(1, 4)) > 0 OR
DG_NX5110.tPbusHeadA.tSummarized.bConfigMismatch = TRUE OR
DG_NX6100_4_AO_Voltage_Current.tGeneral.bConfigMismatch = TRUE OR
DG_NX6100_4_AO_Voltage_Current.tGeneral.bFatalError = TRUE OR
DG_NX6100_4_AO_Voltage_Current.tGeneral.bNoExternalSupply = TRUE OR
DG_NX6100_4_AO_Voltage_Current.tDetailed.tAnalogOutput_00.bOpenLoop = TRUE
OR
DG_NX6100_4_AO_Voltage_Current.tDetailed.tAnalogOutput_00.bShortCircuit =
TRUE THEN
QUALITY_PB_NX6100.VALIDITY:= VALIDITY_INVALID;
QUALITY_PB_NX6100.FLAGS.FLAG_FAILURE:= TRUE;
// If the point have ever been updated once ...
85