Structured text

Last updated

Structured text, abbreviated as ST or STX, is one of the five languages supported by the IEC 61131-3 standard, designed for programmable logic controllers (PLCs). [1] [2] It is a high level language that is block structured and syntactically resembles Pascal, on which it is based. [3] All of the languages share IEC61131 Common Elements. The variables and function calls are defined by the common elements so different languages within the IEC 61131-3 standard can be used in the same program.

Contents

Complex statements and nested instructions are supported:

Sample program

(* simple state machine *)TxtState:=STATES[StateMachine];CASEStateMachineOF1:ClosingValve();StateMachine:=2;2:OpeningValve();ELSEBadCase();END_CASE;

Unlike in some other programming languages, there is no fallthrough for the CASE statement: the first matching condition is entered, and after running its statements, the CASE block is left without checking other conditions.

Additional ST programming examples

// PLC configurationCONFIGURATIONDefaultCfgVAR_GLOBALb_Start_Stop:BOOL;// Global variable to represent a boolean.b_ON_OFF:BOOL;// Global variable to represent a boolean.Start_StopAT%IX0.0:BOOL;// Digital input of the PLC (Address 0.0)ON_OFFAT%QX0.0:BOOL;// Digital output of the PLC (Address 0.0). (Coil)END_VAR// Schedule the main program to be executed every 20 msTASKTick(INTERVAL:=t#20ms);PROGRAMMainWITHTick:Monitor_Start_Stop;END_CONFIGURATIONPROGRAMMonitor_Start_Stop// Actual ProgramVAR_EXTERNALStart_Stop:BOOL;ON_OFF:BOOL;END_VARVAR// Temporary variables for logic handlingONS_Trig:BOOL;Rising_ONS:BOOL;END_VAR// Start of Logic// Catch the Rising Edge One Shot of the Start_Stop inputONS_Trig:=Start_StopANDNOTRising_ONS;// Main Logic for Run_Contact -- Toggle ON / Toggle OFF ---ON_OFF:=(ONS_TrigANDNOTON_OFF)OR(ON_OFFANDNOTONS_Trig);// Rising One Shot logic   Rising_ONS:=Start_Stop;END_PROGRAM

Function block example

//=======================================================================// Function Block Timed Counter :  Incremental count of the timed interval//=======================================================================FUNCTION_BLOCKFB_Timed_CounterVAR_INPUTExecute:BOOL:=FALSE;// Trigger signal to begin Timed CountingTime_Increment:REAL:=1.25;// Enter Cycle Time (Seconds) between countsCount_Cycles:INT:=20;// Number of Desired Count CyclesEND_VARVAR_OUTPUTTimer_Done_Bit:BOOL:=FALSE;// One Shot Bit indicating Timer Cycle DoneCount_Complete:BOOL:=FALSE;// Output Bit indicating the Count is complete            Current_Count:INT:=0;// Accumulating Value of CounterEND_VARVARCycleTimer:TON;// Timer FB from Command LibraryCycleCounter:CTU;// Counter FB from Command LibraryTimerPreset:TIME;// Converted Time_Increment in Seconds to MSEND_VAR// Start of Function Block programmingTimerPreset:=REAL_TO_TIME(in:=Time_Increment)*1000;CycleTimer(in:=ExecuteANDNOTCycleTimer.Q,pt:=TimerPreset);Timer_Done_Bit:=CycleTimer.Q;CycleCounter(cu:=CycleTimer.Q,r:=NOTExecute,pv:=Count_Cycles);Current_Count:=CycleCounter.cv;Count_Complete:=CycleCounter.q;END_FUNCTION_BLOCK

References

  1. Bacidore, Mike (16 May 2018). "Should I limit programming to ladder logic or use all standards within IEC 61131?". Control Design.
  2. Stevic, Tom (5 May 2017). "A very short history of PLC programming platforms". Control Design.
  3. 1 2 Roos, Nieke. "Programming PLCs using Structured Text". Department of Computing Science, University of Nijmegen. CiteSeerX   10.1.1.49.2016 .{{cite journal}}: Cite journal requires |journal= (help)