Texto estruturado

Este artigo não cita nenhuma fonte e pode conter informações imprecisas (relatado em março de 2021).

Se você tiver livros ou artigos de referência ou se souber de sites de qualidade que tratam do assunto discutido aqui, conclua o artigo fornecendo as referências úteis para sua verificabilidade e vinculando-as à seção " Notas "  e referências  ”( editar artigo ).

Encontre fontes em "  Texto Estruturado  "  :

O texto estruturado , ou Texto Estruturado ( ST ) em inglês , é uma das cinco linguagens de programação para controladores lógicos programáveis (CLPs) definidos pelo padrão IEC 61131-3 . É uma linguagem de alto nível e sua estrutura lembra as linguagens Ada e Pascal .

O formato desses arquivos foi padronizado em XML pela PLCopen .

Instruções mais ou menos complexas são suportadas, por exemplo:

Programa de amostra

(* simple state machine *) TxtState := STATES[StateMachine];   CASE StateMachine OF 1: ClosingValve(); ELSE  ;; BadCase(); END_CASE;

Outro exemplo de programação ST

// PLC configuration CONFIGURATION DefaultCfg VAR_GLOBAL b_Start_Stop  : BOOL; // Global variable to represent a boolean. b_ON_OFF  : BOOL; // Global variable to represent a boolean. Start_Stop AT %IX0.0:BOOL; // Digital input of the PLC (Address 0.0) ON_OFF AT %QX0.0:BOOL; // Digital output of the PLC (Address 0.0). (Coil) END_VAR // Schedule the main program to be executed every 20 ms TASK Tick(INTERVAL := t#20ms); PROGRAM Main WITH Tick : Monitor_Start_Stop; END_CONFIGURATION PROGRAM Monitor_Start_Stop // Actual Program VAR_EXTERNAL Start_Stop  : BOOL; ON_OFF  : BOOL; END_VAR VAR // Temporary variables for logic handling ONS_Trig  : BOOL; Rising_ONS  : BOOL; END_VAR // Start of Logic // Catch the Rising Edge One Shot of the Start_Stop input ONS_Trig  := Start_Stop AND NOT Rising_ONS; // Main Logic for Run_Contact -- Toggle ON / Toggle OFF --- ON_OFF := (ONS_Trig AND NOT ON_OFF) OR (ON_OFF AND NOT ONS_Trig); // Rising One Shot logic Rising_ONS := Start_Stop; END_PROGRAM Exemplo de declaração de um bloco funcional //======================================================================= // Function Block Timed Counter : Incremental count of the timed interval //======================================================================= FUNCTION_BLOCK FB_Timed_Counter VAR_INPUT Execute  : BOOL := FALSE; // Trigger signal to begin Timed Counting Time_Increment  : REAL := 1.25; // Enter Cycle Time (Seconds) between counts Count_Cycles  : INT  := 20; // Number of Desired Count Cycles END_VAR VAR_OUTPUT Timer_Done_Bit  : BOOL := FALSE; // One Shot Bit indicating Timer Cycle Done Count_Complete  : BOOL := FALSE; // Output Bit indicating the Count is complete Current_Count  : INT  := 0; // Accumulating Value of Counter END_VAR VAR CycleTimer  : TON; // Timer FB from Command Library CycleCounter  : CTU; // Counter FB from Command Library TimerPreset  : TIME; // Converted Time_Increment in Seconds to MS END_VAR // Start of Function Block programming TimerPreset := REAL_TO_TIME(in := Time_Increment) * 1000; CycleTimer( in := Execute AND NOT CycleTimer.Q ,pt := TimerPreset); Timer_Done_Bit := CycleTimer.Q; CycleCounter( cu := CycleTimer.Q ,r := NOT Execute ,pv := Count_Cycles); Current_Count := CycleCounter.cv; Count_Complete := CycleCounter.q; END_FUNCTION_BLOCK

Link