(* Tank level control: reference solution in IEC 61131-3 Structured Text. *) VAR_GLOBAL Auto_Mode AT %IX0.0 : BOOL; (* Auto/manual selector, 1 is auto *) Level AT %IW0 : INT; (* Level transmitter, 0 to 1000 is 0 to 100 percent *) LSH AT %IX0.1 : BOOL; (* High level switch, 1 above 90 percent *) LSL AT %IX0.2 : BOOL; (* Low level switch, 1 below 10 percent *) Fill_Valve AT %QX0.0 : BOOL; (* Fill valve solenoid, 1 opens *) High_Alarm AT %QX0.1 : BOOL; (* High level alarm lamp *) Level_Meter AT %QW0 : INT; (* Panel meter, 0 to 1000 *) END_VAR PROGRAM Main (* Level reads 0 to 1000 for 0 to 100 percent. Fill from 40 percent up to 80, *) (* and never past the high switch or out of auto. *) IF Auto_Mode AND Level < 400 THEN Fill_Valve := TRUE; END_IF; IF Level > 800 OR LSH OR NOT Auto_Mode THEN Fill_Valve := FALSE; END_IF; Level_Meter := LIMIT(0, Level, 1000); High_Alarm := LSH; END_PROGRAM