Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

Структурированный текст , сокращенно ST или STX , является одним из пяти языков, поддерживаемых стандартом IEC 61131-3 , предназначенным для программируемых логических контроллеров (ПЛК). [1] [2] Это язык высокого уровня с блочной структурой, синтаксически напоминающий Паскаль , на котором он основан. [3] Все языки используют общие элементы IEC61131 . Переменные и вызовы функций определяются общими элементами, поэтому в одной программе можно использовать разные языки стандарта IEC 61131-3.

Поддерживаются сложные операторы и вложенные инструкции:

  • Итерационные циклы (REPEAT-UNTIL; WHILE-DO)
  • Условное исполнение (IF-THEN-ELSE; CASE) [3]
  • Функции (SQRT (), SIN ())

Пример программы [ править ]

(* простой конечный  автомат *) TxtState : =  STATES [ StateMachine ] ;СЛУЧАЙ  StateMachine  OF  1 :  ClosingValve () ;  StateMachine  : =  2 ;  2 :  Открывающий клапан () ; ELSE  BadCase () ; END_CASE ;

В отличие от некоторых других языков программирования, для оператора CASE нет провала: вводится первое совпадающее условие, и после выполнения его операторов блок CASE остается без проверки других условий.

Дополнительные примеры программирования ST [ править ]

// Конфигурация ПЛК КОНФИГУРАЦИЯ  DefaultCfg  VAR_GLOBAL  b_Start_Stop  :  BOOL ;  // Глобальная переменная для представления логического значения.  b_ON_OFF  :  BOOL ;  // Глобальная переменная для представления логического значения.  Start_Stop  AT  % IX0 . 0 : BOOL ;  // Цифровой вход ПЛК (Адрес 0.0)  ON_OFF  AT  % QX0 . 0 : BOOL ;  // Цифровой выход ПЛК (адрес 0.0). (Катушка)  END_VAR // Планируем выполнение основной программы каждые 20 мс.  TASK  Tick ( ИНТЕРВАЛ  : =  t # 20 мс ) ; ПРОГРАММА  Main  WITH  Tick  :  Monitor_Start_Stop ; END_CONFIGURATIONPROGRAM  Monitor_Start_Stop  // Фактическая программа  VAR_EXTERNAL  Start_Stop  :  BOOL ;  ON_OFF  :  BOOL ;  END_VAR  VAR  // Временные переменные для логической обработки  ONS_Trig  :  BOOL ;  Rising_ONS  :  BOOL ;  END_VAR // Начало логики  // Поймать передний край. Один выстрел из Start_Stop input  ONS_Trig  : =  Start_Stop  AND  NOT  Rising_ONS ;  // Основная логика для Run_Contact - включить / выключить ---  ON_OFF  : =  ( ONS_Trig  AND  NOT  ON_OFF )  OR  ( ON_OFF  AND  NOT  ONS_Trig ) ; // Логика  повышения  One Shot Rising_ONS : =  Start_Stop ; END_PROGRAM

Пример функционального блока [ править ]

// ================================================ ======================= // Временной счетчик функционального блока: инкрементный счет временного интервала // ============ ================================================== ========= FUNCTION_BLOCK  FB_Timed_Counter  VAR_INPUT  Выполнить  :  BOOL  : =  FALSE ;  // Триггерный сигнал для начала  отсчета по времени Time_Increment  :  REAL  : =  1.25 ;  // Введите время цикла (в секундах) между счетчиками  Count_Cycles  :  INT  : =  20 ;  // Количество  желаемых циклов счета END_VAR  VAR_OUTPUT  Timer_Done_Bit  :  BOOL  : =  FALSE ;  // Бит одного выстрела, указывающий, что цикл таймера  завершен Count_Complete  :  BOOL  : =  FALSE ;  // Выходной бит, указывающий, что счет завершен  Current_Count  :  INT  : =  0 ;  // Накопление значения счетчика  END_VAR  VAR  CycleTimer  :  TON ;  // Таймер FB из библиотеки команд  CycleCounter  :  CTU ;  // Счетчик FB из библиотеки команд  TimerPreset  :  TIME ;  // Преобразование Time_Increment в секундах в MS  END_VAR  // Начало программирования функционального блока  TimerPreset  : =  REAL_TO_TIME ( in  : =  Time_Increment )  *  1000 ; CycleTimer (  in  : =  Выполнить,  И  НЕ  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

Ссылки [ править ]

  1. ^ Bacidore, Майк (16 мая 2018). «Следует ли мне ограничивать программирование релейной логикой или использовать все стандарты IEC 61131?» . Дизайн управления .
  2. ^ Стевич, Том (5 мая 2017). «Очень краткая история платформ программирования ПЛК» . Дизайн управления .
  3. ^ a b Роос, Нике. «Программирование ПЛК с использованием структурированного текста» . Государственный университет Пенсильвании . Департамент компьютерных наук Университета Неймегена.