= 16; Line.Stations[iStation].Alarms[iAlarm].Severity := E_Severity.Warning; Line.Stations[iStation].Alarms[iAlarm].Code := 1000 + DINT(iAlarm); Line.Stations[iStation].Alarms[iAlarm].Message := CONCAT('alarm-', TO_STRING(iAlarm)); Line.Stations[iStation].Alarms[iAlarm].Source := CONCAT('Station-', TO_STRING(iStation)); END_FOR // Stats — monotonic production counters. Line.Stats.UnitsProduced := Line.Stats.UnitsProduced + 1; IF (tick MOD 100) = 0 THEN Line.Stats.UnitsRejected := Line.Stats.UnitsRejected + 1; Line.Stats.RejectReasons[1 + ((DINT_TO_INT(UDINT_TO_DINT(tick / 100))) MOD 5)] := Line.Stats.RejectReasons[1 + ((DINT_TO_INT(UDINT_TO_DINT(tick / 100))) MOD 5)] + 1; END_IF Line.Stats.UpTimeSeconds := tick / 100; // 10 ms task tick -> approx seconds ]]>