El texto estructurado , abreviado como ST o STX , es uno de los cinco lenguajes admitidos por el estándar IEC 61131-3 , diseñado para controladores lógicos programables (PLC). [1] [2] Es un lenguaje de alto nivel que está estructurado en bloques y se parece sintácticamente a Pascal , en el que se basa. [3] Todos los lenguajes comparten elementos comunes IEC61131 . Las variables y las llamadas a funciones están definidas por los elementos comunes, por lo que se pueden usar diferentes lenguajes dentro del estándar IEC 61131-3 en el mismo programa.
Se admiten declaraciones complejas e instrucciones anidadas:
- Bucles de iteración (REPEAT-HASTA; MIENTRAS-HACER)
- Ejecución condicional (IF-THEN-ELSE; CASE) [3]
- Funciones (SQRT (), SIN ())
Programa de muestra
(* máquina de estado simple *) TxtState : = ESTADOS [ StateMachine ] ;CASE StateMachine OF 1 : ClosingValve () ; StateMachine : = 2 ; 2 : OpeningValve () ; ELSE BadCase () ; END_CASE ;
A diferencia de otros lenguajes de programación, no hay fallos para la instrucción CASE: se ingresa la primera condición coincidente y, después de ejecutar sus declaraciones, el bloque CASE se deja sin verificar otras condiciones.
Ejemplos de programación ST adicionales
// Configuración del PLC CONFIGURACIÓN DefaultCfg VAR_GLOBAL b_Start_Stop : BOOL ; // Variable global para representar un booleano. b_ON_OFF : BOOL ; // Variable global para representar un booleano. Start_Stop AT % IX0 . 0 : BOOL ; // Entrada digital del PLC (Dirección 0.0) ON_OFF AT % QX0 . 0 : BOOL ; // Salida digital del PLC (Dirección 0.0). (Bobina) END_VAR // Programar la ejecución del programa principal cada 20 ms TASK Tick ( INTERVAL : = t # 20 ms ) ; PROGRAMA Principal CON Tick : Monitor_Start_Stop ; END_CONFIGURATIONPROGRAM Monitor_Start_Stop // Programa actual VAR_EXTERNAL Start_Stop : BOOL ; ON_OFF : BOOL ; END_VAR VAR // Variables temporales para el manejo lógico ONS_Trig : BOOL ; Rising_ONS : BOOL ; END_VAR // Inicio de la lógica // Captura el borde ascendente Un disparo de Start_Stop input ONS_Trig : = Start_Stop AND NOT Rising_ONS ; // Lógica principal para Run_Contact - Activar / desactivar --- ON_OFF : = ( ONS_Trig Y NO ON_OFF ) O ( ON_OFF Y NO ONS_Trig ) ; // Lógica Rising One Shot Rising_ONS : = Start_Stop ; END_PROGRAM
Ejemplo de bloque de funciones
// ============================================== ======================= // Contador temporizado del bloque de funciones: recuento incremental del intervalo temporizado // ============ ================================================ ========= FUNCTION_BLOCK FB_Timed_Counter VAR_INPUT Ejecutar : BOOL : = FALSE ; // Señal de activación para comenzar el conteo temporizado Time_Increment : REAL : = 1.25 ; // Ingrese el tiempo de ciclo (segundos) entre conteos Count_Cycles : INT : = 20 ; // Número de ciclos de recuento deseados END_VAR VAR_OUTPUT Timer_Done_Bit : BOOL : = FALSE ; // Bit de un disparo que indica el ciclo del temporizador completado Count_Complete : BOOL : = FALSE ; // Bit de salida que indica que el recuento está completo Current_Count : INT : = 0 ; // Valor acumulado del contador END_VAR VAR CycleTimer : TON ; // Temporizador FB de la biblioteca de comandos CycleCounter : CTU ; // Contador FB de la biblioteca de comandos TimerPreset : TIME ; // Incremento de tiempo convertido en segundos a MS END_VAR // Inicio de la programación del bloque de funciones TimerPreset : = REAL_TO_TIME ( in : = Time_Increment ) * 1000 ; CycleTimer ( en : = Ejecutar Y NO CycleTimer . Q , pt : = TimerPreset ) ; Timer_Done_Bit : = CycleTimer . Q ; CycleCounter ( cu : = CycleTimer . Q , r : = NO ejecutar , pv : = Count_Cycles ) ; Current_Count : = CycleCounter . cv ; Count_Complete : = Contador de ciclos . q ; END_FUNCTION_BLOCK
Referencias
- ^ Bacidore, Mike (16 de mayo de 2018). "¿Debo limitar la programación a la lógica de escalera o utilizar todos los estándares dentro de IEC 61131?" . Diseño de control .
- ^ Stevic, Tom (5 de mayo de 2017). "Una historia muy breve de las plataformas de programación de PLC" . Diseño de control .
- ^ a b Roos, Nieke. "Programación de autómatas mediante texto estructurado" . Universidad Estatal de Pensilvania . Departamento de Ciencias de la Computación, Universidad de Nijmegen.