Таймеры и триггеры CODESYS. Еще один шаг Arduino к классическому ПЛК

Случается программировать контроллеры (ПЛК) в среде CODESYS. Все, кто имел дело с этой системой, знают, что в любом проекте присутствует библиотека Standard.lib, в которой реализованы базовые таймеры, триггеры, счетчики и некоторое кол-во других функций и функциональных блоков. Многие из этих блоков постоянно используются в программах для ПЛК. А сама библиотека, как и языки программирования CODESYS, является воплощением стандарта IEC 61131-3, т.е. призвана помочь при программировании классических ПЛК задач.
Одна из особенностей программ для ПЛК в том, что основной цикл программы должен выполняться без существенных задержек, в нем не должно быть внутренних циклов с неопределенным временем выхода или синхронных вызовов «задумчивых» функций, особенно это касается коммуникаций по медленным каналам. Обновление входных и выходным образов процесса происходит только на границе основного цикла, и чем дольше мы будем «сидеть» внутри одной итерации цикла, тем меньше мы будет знать о реальном состоянии объекта управления, в конечном итоге сработает watchdog переполнения времени выполнения цикла. Многие могут мне возразить, сказав, что современные ПЛК многозначны, есть с поддержкой аппаратных прерываний. Согласен, но разговор о таких системах не входит в мои планы, я же хочу поговорить о (квази, псевдо — выбирайте) ПЛК однозадачной реализации (без прерываний) на базе микропроцессорной платформы Arduino, в котором есть только один основной цикл. Кстати, не лишним будет сказать, что на написание данной заметки меня сподвигла статья Ардуино-совместимый ПЛК CONTROLLINO, часть 1 о попытке аппаратного воплощения Arduino в пром. ПЛК.
Несколько слов об Arduino. С точки зрения программиста ПЛК, Arduino — это типичный контроллер с одним очень быстрым или, наоборот, очень медленным циклом loop(). На время выполнения цикла не накладывается никаких ограничений, и он может отработать и один, и бесконечное кол-во раз — по замыслу программиста. Когда программа проста и сводится к выполнению последовательных операций, регуляторов, без параллельных событий, то достаточно чередовать операции бесконечными вложенными циклами проверки условий и синхронными задержками типа delay(). Последовательные шаги такой программы будут выполняться буквально построчно, просто и логично. Но, как только возникает необходимость в программировании параллельных операций, необходимо менять парадигму программы.
В однозадачной системе добиться видимой параллельности можно только очень быстрым последовательным сканированием параллельных состояний, не задерживаясь подолгу на каждом вызове функции или проверке условия. С физическими входами-выходами проблем нет, функции отрабатывают достаточно быстро, а вот delay() становится неоправданным тормозом. И вот тут на смену приходят неблокирующие таймеры, те самые, которые в программировании ПЛК являются классикой. Суть в том, что для их работы используется миллисекундный счетчик времени, и все действия привязаны к значениям этого глобального счетчика.
А теперь давайте вспомним ту самую Standard.lib из CODESYS. В ней как раз реализованы МЭК-овские неблокирующие таймеры. Я взял ее за основу и портировал функции таймеров и триггеров в библиотечный код Arduino (С++). Т.е. попытался приблизить Arduino к классическому ПЛК.
Ниже я приведу краткое описание портированных функциональных блоков (FB) CODESYS и их аналоги в моей библиотеке plcStandardLib, все временные диаграммы верны для новой библиотеки Arduino. Подробнее описание исходных блоков можно посмотреть, например, в русскоязычной справке по CODESYS.
TON — функциональный блок «таймер с задержкой включения»
Входы IN и PT типов BOOL и TIME соответственно. Выходы Q и ET аналогично типов BOOL и TIME. Пока IN равен FALSE, выход Q = FALSE, выход ET = 0. Как только IN становится TRUE, начинается отсчет времени (в миллисекундах) на выходе ET до значения, равного PT. Далее счетчик не увеличивается. Q равен TRUE, когда IN равен TRUE, а ET равен PT, иначе FALSE. Таким
образом, выход Q устанавливается с задержкой PT от фронта входа IN.
В Arduino IDE:
Временная диаграмма работы TON:

TOF — функциональный блок «таймер с задержкой выключения»
Входы IN и PT типов BOOL и TIME соответственно. Выходы Q и ET аналогично типов BOOL и TIME. Если IN равен TRUE, то выход Q = TRUE и выход ET = 0. Как только IN переходит в FALSE, начинается отсчет времени (в миллисекундах) на выходе ET. При достижении заданной длительности отсчет останавливается. Выход Q равен FALSE, если IN равен FALSE и ET равен PT, иначе — TRUE. Таким образом, выход Q сбрасывается с задержкой PT от спада входа IN.
В Arduino IDE:
Очень похоже на TON, для краткости:
Временная диаграмма работы TOF:

TP — функциональный блок «импульс-таймер»
Входы IN и PT типов BOOL и TIME соответственно. Выходы Q и ET аналогично типов BOOL и TIME. Пока IN равен FALSE, выход Q = FALSE, выход ET = 0. При переходе IN в TRUE выход Q устанавливается в TRUE и таймер начинает отсчет времени (в миллисекундах) на выходе ET до достижения длительности, заданной PT. Далее счетчик не увеличивается. Таким образом, выход Q генерирует импульс длительностью PT по фронту входа IN.
В Arduino IDE:
Очень похоже на TON, для краткости:
Временная диаграмма работы TP:

R_TRIG — функциональный блок «дeтектор фронта»
Функциональный блок R_TRIG генерирует импульс по переднему фронту входного сигнала. Выход Q равен FALSE до тех пор, пока вход CLK равен FALSE. Как только CLK получает значение TRUE, Q устанавливается в TRUE. При следующем вызове функционального блока выход сбрасывается в FALSE. Таким образом, блок выдает единичный импульс при каждом переходе CLK из FALSE в TRUE.
Пример CODEDESYS на языке ST:
В Arduino IDE:
F_TRIG — функциональный блок «дeтектор спада»
Функциональный блок F_TRIG генерирует импульс по заднему фронту входного сигнала.
Выход Q равен FALSE до тех пор, пока вход CLK равен TRUE. Как только CLK получает значение FALSE, Q устанавливается в TRUE. При следующем вызове функционального блока выход сбрасывается в FALSE. Таким образом, блок выдает единичный импульс при каждом переходе CLK из TRUE в FALSE.
В Arduino IDE:
RS_TRIG — функциональный блок RS-триггер / SR_TRIG — функциональный блок SR-триггер
Переключатель с доминантой выключения, RS-триггер:
Переключатель с доминантой включения:
Входные переменные SET и RESET1 — как и выходная переменная Q1 типа BOOL.
Общие сведения о языке ST¶
ST (Structured Text) – это текстовый язык высокого уровня общего назначения, по синтаксису схожий с языком Pascal. Удобен для программ, включающих числовой анализ или сложные алгоритмы. Может использоваться в программах, в теле функции или функционального блока, а также для описания действия и перехода внутри элементов SFC. Согласно IEC 61131-3 ключевые слова должны быть введены в символах верхнего регистра. Пробелы и метки табуляции не влияют на синтаксис, они могут использоваться везде.
Выражения в ST выглядят точно также, как и в языке Pascal:
Порядок их выполнения – справа налево. Выражения состоят из операндов и операторов. Операндом является литерал, переменная, структурированная переменная, компонент структурированной переменной, обращение к функции или прямой адрес.
Типы данных¶
Согласно стандарту IEC 61131-3, язык ST поддерживает весь необходимый набор типов, аналогичный классическим языкам программирования. Целочисленные типы: SINT (char), USINT (unsigned char), INT (short int), UINT (unsigned int), DINT (long), UDINT (unsigned long), LINT (64 бит целое), ULINT (64 бит целое без знака). Действительные типы: REAL (float), LREAL (double). Специальные типы BYTE, WORD, DWORD, LWORD представляют собой битовые строки длиной 8, 16, 32 и 64 бит соответственно. Битовых полей в ST нет. К битовым строкам можно непосредственно обращаться побитно. Например:
a.3 := 1; (* Установить бит 3 переменной a *)
Логический тип BOOL может иметь значение TRUE или FALSE. Физически переменная типа BOOL может соответствовать одному биту. Строка STRING является именно строкой, а не массивом. Есть возможность сравнивать и копировать строки стандартными операторами. Например:
Для работы со строками есть стандартный набор функций (см. приложение 2, раздел «Строковые операции с переменными типа STRING»).
Специальные типы в стандарте IEC определены для длительности (TIME), времени суток (TOD), календарной даты (DATE) и момента времени (DT).
В таблице 3.1 приведены значения по умолчанию, соответствующие описанным выше типам.
Таблица 3.1 – Значения по умолчанию для типов данных IEC 61131-3
| Тип(ы) данных | Значение |
| BOOL, SINT, INT, DINT, LINT | 0 |
| USINT, UINT, UDINT, ULINT | 0 |
| BYTE, WORD, DWORD, LWORD | 0 |
| REAL, LREAL | 0.0 |
| TIME | T#0S |
| DATE | D#0001-01-01 |
| TIME_OF_DAY | TOD#00:00:00 |
| DATE_AND_TIME | DT#0001-01-01-00:00:00 |
| STRING | ‘’ (пустая строка) |
По умолчанию, все переменные инициализируются нулем. Иное значение переменной можно указать явно при ее объявлении. Например:
str1: STRING := ‘Hello world’;
В определённых ситуациях при разработке программных модулей удобно использовать обобщения типов, т.е. общее именование группы типов данных. Данные обобщения приведены в таблице 3.2.
Часть 18: Работа С Rs И Sr Триггерами В Codesys 24.07.2016
Видео Часть 18: Работа с RS и SR триггерами в CoDeSys загружено 24.07.2016 18:09 пользователем DIGITORIA, продолжительность: 05:18.
Новые видео на канале Digitoria
- Терминал Сбора Данных Urovo Rt40 — Тсд Для Жестких Условий Эксплуатации
- Комплексное Решение На Основе Пьезоструйной Печати Для Обязательной Маркировки Молока И Воды
- Промышленный Манипулятор Elfin L10 От Компании Han's Robot Перекладывает Картонные Короба
Подписывайтесь на наш Telegram канал! @thewikihow открыть Мониторим видео тренды 24/7
Русские Блоги
Безопасность данных: Чтобы свести к минимуму риск нарушения безопасности данных, мы рекомендуем следующие организационные и технические меры:
* Избегайте доступа к ПЛК и управляющим сетям из открытых сетей и Интернета.
* Используйте VPN для удаленного доступа.
* Установите брандмауэр.
* Если вы хотите опубликовать файл визуализации в Интернете, установите пароль для предотвращения несанкционированного доступа.
* Используйте последнюю версию сервера шлюза и веб-сервера.
Установите CODESYS:
нота
Установка включает систему разработки, шлюз CODESYS и CODESYS Control Win V3, а доступ к его службам можно получить через панель задач Windows. Эти три программы необходимы для моделирования контроллера на компьютере.
О содержании вашего первого проекта
В этом уроке вы напишете простой контроллер холодильника.
завершенный проект RefrigeratorControl.project_archive допустимый " Projects Находится в каталоге установки CODESYS под каталогом.
В дополнение к образцу проекта, который вы создадите шаг за шагом, завершенный проект также содержит полные визуальные операции и диагностику.
- Как и в традиционном холодильнике, температура задается пользователем, вращая регулятор.
- Реальную температуру холодильник определяет с помощью датчиков. Если он будет слишком высоким, холодильник запустит компрессор с регулируемой задержкой.
- Компрессор остывает, пока не достигнет желаемой температуры за вычетом гистерезиса в 1 градус. Гистерезис предназначен для предотвращения слишком сильных колебаний фактической температуры вокруг заданного значения температуры, что приведет к тому, что компрессор будет постоянно отключаться и открываться сам по себе.
- Если дверца открыта, внутри холодильника загорится свет. Если дверь открыта слишком долго, раздается прерывистый звуковой сигнал.
- Если компрессор не достигает заданного значения температуры даже при длительной работе двигателя, зуммер издает постоянный звуковой сигнал.
План проэкта:
Процесс охлаждения контролируется в основной программе приложения, а управление сигналами выполняется в другом программном блоке. Standard Необходимые стандартные функциональные блоки представлены в библиотеке.
Поскольку в этом примере проекта реальный датчик температуры и фактический привод не подключены, вам также необходимо написать программу для моделирования повышения и понижения температуры.
Это позволит вам контролировать работу контроллера холодильника в онлайн-режиме.
Переменные, которые будут использоваться всеми функциональными блоками, должны быть определены в списке глобальных переменных.
готовы
Вы установили систему разработки CODESYS и запустили ее с файлом конфигурации по умолчанию «CODESYS V <текущая версия>».
Окно фрейма системы разработки открывается со стандартной строкой меню; открытого проекта пока нет.
Создайте проект и выберите устройство ПЛК
Выбрать командуFile ‣ New Project。
вTemplatesОкно, выберитеStandard Projectшаблон.
Введите имя и место хранения проекта и нажмитеOKКнопка.
⇒ ОткрытьStandard ProjectДиалоговое окно, тип устройства ввода и язык реализации основной программы.
вDeviceСписок, выберите элементCODESYS Control Win V3。
вPLC_PRGВыберите элемент в спискеContinuous Function Chart (CFC)
, затем щелкнитеOKКнопка.
⇒ Проект открывается в окне фрейма CODESYS.
В левой части окна фреймаDevicesВ представлении вы увидите «Дерево устройств». Ранее выбранное устройство ПЛК имеет имя по умолчанию.Deviceдисплей.
запрограммированного вами приложения ПЛКApplicationОбъект уже установлен наPLC LogicПод объектом.
ApplicationУже включеныPLC_PRGОсновная программа иLibrary managerОбъект.
Library managerУже включеныIoStandardс участиемStandardБиблиотека.IoStandardТребуется для конфигурации ввода / вывода.StandardБиблиотека содержит все функции и функциональные блоки, описанные в стандарте IEC 61131-3.
Task ConfigurationОбъект монтируется внизу номера устройства, в том числеMain task,Main taskконтрольPLC_PRGОбработка. Например, объекты, используемые для визуализации, можно вставлять вTask ConfigurationНиже.
кромеIoStandardс участиемStandardВ дополнение к библиотеке этот пример проекта также требуетUtilБиблиотека:
Дважды щелкните в дереве устройствLibrary managerОбъект.
В строке заголовка редактора щелкнитеAdd libraryА потом вAdd libraryВыбрать в диалоговом окнеUtilБиблиотека.
нажмитеOKКнопка подтверждения выбора
⇒UtilБиблиотека добавлена вLibrary managerВ библиотеке функциональные блоки библиотеки доступны для использования в вашем проекте.
Напишите в проекте управляющее приложение: Для этого см. Следующий раздел:
Объявить глобальные переменные
Сначала объявите переменные, которые вы хотите использовать во всем приложении. Для этого пожалуйстаApplicationСоздайте список глобальных переменных:
1. ВыберитеApplicationИ в контекстном меню выберите командуAdd Object ‣ Global Variables List. Имя, которое будет введено автоматическиGVLизменить наGlob_VarИ нажмитеAddподтвердить.
⇒Object
Glob_VarПоявляться в
Applicationпод.GVLРедактор открывается в правой части дерева устройств.
Когда появляется текстовое представление, оно уже содержит ключевые слова VAR_GLOBAL с участием END_VAR . В нашем примере, щелкнув в правой части редактора
Кнопка для активации табличного представления.
⇒ Появится пустая строка. Курсор включенNameКолонка.
Выберите команду в контекстном менюInsert。
⇒ Откройте поле ввода. ОдновременноScope VAR_GLOBAL с участиемData type BOOL Эта строка заполняется автоматически.
В полеNameПечатать rTempActual 。
Двойной кликData typeПоле в столбце.
⇒ Теперь поле можно редактировать, и появляется кнопка
。
Нажмите кнопку
И выберитеInput assistant。
Выберите тип данныхREALИ нажмитеOKКнопка.
вInitializationВведите значение в столбец, например 8.0.
Таким же образом объявите следующие переменные.
| название | тип данных | Начальное значение |
|---|---|---|
| rTempActual | REAL | Числа, например 8.0 |
| rTempSet | REAL | Числа, например 8.0 |
| rDoorOpen | BOOL | FALSE |
| timAlarmThreshold | TIME | T#30S После того, как компрессор проработает это время, раздается звуковой сигнал. |
| rDoorOpenThreshold | TIME | T#10S Время после открытия двери, а затем отправить сигнал |
| bCompressor | BOOL | FALSE |
| bSignal | BOOL | FALSE |
| bLamp | BOOL | FALSE |
Создайте основную программу управления охлаждением в редакторе CFC.
Теперь вы будете в основном блоке программы, созданном по умолчанию.PLC_PRGОсновная функция приложения описана в: Если фактическая температура выше, чем заданная температура плюс гистерезис, компрессор будет активирован и начнет охлаждение. Если фактическая температура ниже заданного значения за вычетом гистерезиса, компрессор выключается.
Чтобы описать эту функцию на языке реализации CFC, выполните следующие действия:
1. Дважды щелкните дерево устройств.PLC_PRG。
⇒ Откроется редактор CFCPLC_PRGТабл. Редактор объявлений появляется над графическим редактором в текстовой или табличной форме. ПравильноToolsокно.
вToolsЩелкните в окнеInput, А затем перетащите его в редактор CFC, чтобы вставить с помощью мыши.
Щелкните элемент в редакторе CFC, затем щелкните
Откройте помощник ввода. ИзVariablesКатегория, выберитеApplication ‣ Glob_VarПеременные в rTempActual . Таким образом, вы можете ссылаться на глобальные переменные здесь rTempActual 。
То же, что и 3. Используйте глобальные переменные rTempSet Создайте еще один ввод.
Создайте еще один ввод и нажмите на три вопросительных знака. И замените его именемrHysteresis。
⇒Поскольку это не имя известной переменной, оно отображаетсяAuto DeclareЧат. Имя было заполнено в диалоговом окне.
использоватьData type REAL с участиемInitializationзначение 1 Заполните поля в диалоговом окне «Объявить переменную». Щелкните кнопку ОК.
⇒ переменная rHysteresis Появляется в редакторе объявлений.
Теперь вставьте еще один функциональный блок: щелкните в окне инструментовBoxЭлемент и перетащите его в редактор CFC с помощью мыши.
⇒ Функциональный блок появляется в редакторе CFC.
использовать ADD заменить. 。
⇒( )ADDФункциональные блоки предоставляются стандартной библиотекой. Он добавляет все подключенные к нему входы.
воля Glob_Var.rTempSet Вход подключен кADDфункциональный блок. Для этого щелкните входной выходной разъем и перетащите его наADDВерхний вход функционального блока.
Аналогично введите rHysteresis Подключитесь к нижнему входу функционального блока ADD.
⇒ Два входа rHysteresis и rTempSet теперь добавляются с помощью ADD.
Если вы хотите переместить элемент в редакторе, щелкните пустую область в элементе или в рамке, чтобы выбрать элемент (красная граница, красный оттенок). Удерживая мышь, перетащите элемент в желаемое положение.
Создайте еще один функциональный блок на правой стороне функционального блока ADD. Его функция — сравниватьGlob_Var.rTempActualс участиемGlob_Var.rTempSet + rHysteresisСумма. Назначить функциональный блок GT (Больше чем) функция.
⇒ GT Функциональный блок также поступает из Standard Библиотека работает следующим образом: IF (upper input > lower input) THEN output
ВойдетGlob_Var_rTempActualПодключен кGTВерхняя входная клемма функционального блока.
воляADDВыход функционального блока подключен кGTНижний вход функционального блока.
Теперь в соответствии с условиями входа (Set-Reset) вGTСоздайте функциональный блок в правой части функционального блока для запуска или остановки охлаждающего компрессора. В поле. Введите имя в SR . Используйте Enter, чтобы закрыть функциональный блок ( SR_0 ) Поле ввода открылось выше.
Название претензии SR_0 И тип данных SR Переменные. Нажмите наOKКнопка.
⇒ Standard Определено в библиотекеSRФункциональные блоки используются вGTОпределение вывода функционального блока THEN . Появляется ввод SET1 с участием RESET 。
воляGTВыходной разъем на правой стороне функционального блока подключается кSR_0Функциональный блокSET1войти.
⇒ SR Вы можете изменить логическую переменную из FALSE Установить как TRUE , А потом вернемся. Если вы войдетеSET1Удовлетворено, для логической переменной установлено значение TRUE . Если устраивает RESET Условие, переменная снова будет сброшена. Логическая (глобальная) переменная в нашем примере — bCompressor 。
Создать элементOutputИ присвоить его глобальной переменной Glob_Var.Compressor . вGlob_Var.Compressorс участиемSRВыходной разъем Q1 Проведите между ними линию.
Теперь укажите состояние, в котором компрессор должен быть снова выключен, то есть вход RESET функционального блока SR получает сигнал TRUE. Для этого вы должны создать условия, противоречащие вышеизложенному. Для этого используйте функциональные блоки SUB (минус) и LT (меньше).
Наконец, создайте следующую схему CFC: 
Создавайте программные блоки для управления сигналами в редакторе лестничных диаграмм
В другом программном блоке вы теперь выполните управление сигналом зуммера тревоги и включите и выключите лампочку. Он подходит для реализации на языке лестничных диаграмм (LD).
В отдельной сети обрабатываются следующие сигналы:
* Если компрессор работал слишком долго из-за высокой температуры, непрерывный звуковой сигнал привлечет внимание.
* Если дверь открыта слишком долго, прерывистый сигнал используется для привлечения внимания.
* Пока дверь открыта, свет горит.
В дереве устройствApplicationНиже используйтеLadder Diagram (LD)Язык реализации создает тип какProgramОбъект POU. ИмяSignals。
⇒SignalsТема появляется вPLC_PRGВ дереве устройств ниже. Открыть в редакторе лестничных диаграммSignalsТабл. Редактор объявлений отображается вверху,ToolsОкно появляется справа. LD содержит пустую сеть.
Создайте программу в сети, когда компрессор работает слишком долго и не достигает заданного значения температуры, он подает звуковой сигнал. Для этого вставьте функциональный блок таймераTON. Он только переключает логический сигнал ИСТИНА на TRUE :вToolsВ окнеFunction blocksВыберите следующийTON, И перетащите его мышкой в пустую сеть, а затем перетащите в появившийся прямоугольникStart hereМесто. Отпустите кнопку мыши, когда поле станет зеленым.
⇒ Функциональный блок отображается в виде прямоугольника с вводом и выводом, и автоматически присваивается имя экземпляра TON_0 . Указанный выше вход по умолчанию отображается как контакт перед функциональным блоком.
нота
Если вы хотите прочитать интерактивную справку функционального блока, поместите курсор в строку символов «TON» функционального блока, а затем нажмите F1 ключ.
При программировании, пока компрессор охлаждения начинает работать, функциональный блок будет активирован: Glob_Var.Compressor Назовите контакт на верхнем входе. Вы ужеGVL Glob_VarЭта логическая переменная определена в.
нота
Когда вы начинаете вводить имя переменной в позиции ввода, вы автоматически получаете список всех переменных, имя которых начинается с входного символа, и их можно использовать здесь. Такая помощь является стандартной настройкой интеллектуального программирования в опции CODESYS.
Вставьте сигнал, который нужно активировать. Для этого из категории инструментовLadder elementsПеретащите одинCoilЧтобы TON Выход функционального блока Q . Назовите катушку Glob_Var.bSignal 。
Определено из TON Период времени от активации функционального блока до отправки сигнала: определение осуществляется через переменную Glob_Var.timAlarmThreshold Продолжайте, переменная TON_0 ввод PT . Для этого щелкните прямоугольник с тонкой стороной справа от входного соединения и введите имя переменной.
Щелкните функциональный блок TON и выберите в контекстном менюRemove unused FB call parametersкоманда.
⇒ Неиспользуемый выход ET удаляется.
Во второй сети LD программирование таково, что если дверь открыта слишком долго, она будет периодически посылать сигналы.
Щелкните место под первой сетью в окне «Редактор», а затем выберите из контекстного меню.Insert networkкоманда.
⇒ Отображается пустой номер сети 2.
Как и в первой сети, реализуйтеTONФункциональный блок, используемый для сигнала активации управления временем, на этот раз глобальной переменной входа IN Glob_Var.rDoorOpen триггер. Печатать PT , Добавить глобальные переменные GlobVar.timDoorOpenThreshold 。
Кроме того, на выходе функционального блока TON сети Q На, сUtilДобавить в библиотекуBLINKФункциональный блок и названный Blink_0 。
BLINKПарная переадресация Q Время сигнала и, следовательно,GlobVar.bSignalВремя.
Вставьте один за двумя контактамиcoilЭлемент и присвоить ему глобальные переменные lob_Var.bSignal 。
Для этого объявите локальные переменные timSignalTime:TIME:= T#1S; И войти TIMELOW с участием TIMEHIGH Вставьте эту переменную в TRUE 1 секунда, для FALSE 1 секунда.
Нажмите наTONФункциональный блок и выберите в контекстном менюRemove unused FB call parametersкоманда.
⇒ Неиспользуемый вывод ET был удален.
В третьей сети LD, пока дверь открыта, свет горит. Для этого вставьте слева от нее другую сеть, GlobVar.rDoorOpen , Непосредственно подключен к катушке Glob_Var.bLamp 。
CODESYS непрерывно обрабатывает сеть LD. Теперь вставьте переход к сети 3 в конце сети 1, чтобы убедиться, что выполняется только сеть 1 или только сеть 2:
С помощью мыши щелкните сеть или выберите сеть 3 в поле номера сети. Выберите команду в контекстном менюInsert label. использовать DoorIsOpen Заменить текст метки в левом верхнем углу сети Label :
Выберите сеть 1.JumpЭлемент изToolsОкноGeneralПеретащите категорию в сеть. Поместите его в появившийся прямоугольникAdd output or jump hereВот.
⇒ Появится элемент перехода. Цель перехода по-прежнему указана как . 。
Выбрать . И нажмите кнопку
. Выберите из возможных обозначений этикетки DoorIsOpen И нажмитеOKподтвердить.
⇒ Тег сети 3 выполняется.
Программа LD теперь выглядит так: 
Вызвать сигнальную программу в основной программе
В нашем примере программы основная программаPLC_PRGДолжен позвонитьSignalsПрограмма выполняет обработку сигнала.
Дважды щелкните в дереве устройствPLC_PRG。
⇒ Открыть в редактореPLC_PRGпрограмма.
Поставитьfunction blockЭлемент изToolsПеретащите представление наPLC_PRGВ редакторе.
Воспользуйтесь помощником ввода изFunction block callsДобавить вызов функционального блока в категориюSignalsпрограмма.
Создайте блок ST для моделирования
Поскольку приложение в этом примере проекта не связано с реальными датчиками и исполнительными механизмами, теперь вы должны написать программу для моделирования повышения и понижения температуры. Это позволит контролировать работу контроллера холодильника в онлайн-режиме.
Вы можете создавать программы моделирования, используя структурированный текст.
Программа повышает температуру до тех пор, пока не начнется основная программа.PLC_PRGОпределите, что заданное значение температуры было превышено, и включите охлаждающий компрессор. Затем программа моделирования снова снижает температуру, пока основная программа снова не отключит компрессор.
вApplicationВниз вставьтеProgramТип и язык реализацииSTизPOUИ назвалSimulation。
Реализуйте следующий код в редакторе ST:
нота
Для облегчения работы и мониторинга всей программы управления рекомендуется визуализация. Файл визуализации, созданный с помощью CODESYS Visualization, устанавливается в завершенный пример проекта этого руководства, который поставляется со стандартной установкой CODESYS (каталог Projects). Вы можете загрузить этот проект в контроллер и запустить его, чтобы увидеть, как он работает с визуализацией. При запуске Live_Visu отобразит значок холодильника, который может воспроизводить работу программы моделирования без какого-либо ввода. Однако, пока кнопка включения / выключения нажата мышью, дверцу можно открывать и закрывать, а заданную температуру на игле поворотного контроллера можно регулировать. В этом уроке мы не будем реализовывать создание визуализаций. Планируется предоставить подходящее учебное пособие в контексте онлайн-справки CODESYS Visualization.
Указание выполняемой программы в конфигурации задачи
В предустановленную конфигурацию задачи входит основная программаPLC_PRGВызов. Для нашего примера проекта вы также должны добавитьSimulationВызов программы.
В дереве устройств используйте мышь для перемещенияSimulationПеретащите запись вTask ConfigurationвнизMainTaskна.
⇒ Функциональный блок моделирования вставляется в конфигурацию задачи.
Если вы хотите просмотреть конфигурацию задачи, дважды щелкнитеMainTaskЗапись открывает редактор.
⇒ В таблице в нижней части редактора вы увидите ПМ, вызываемый задачей:PLC_PRG(Вставлено по умолчанию) иSimulation. Тип вызова задачи — с интервалом в 20 миллисекунд.Cyclic. В онлайн-режиме задача выполняет эти два функциональных блока один раз за цикл.
Определите «активное приложение», которое взаимодействует с ПЛК.
применениеApplicationИмя вDevicesОкно выделено жирным шрифтом. Это означает, что это приложение установлено как «активное приложение». Связь с контроллером указывает на это приложение.
-
вApplicationЩелкните правой кнопкой мыши и выберите из контекстного менюSet Active Applicationкоманда.
Отладка приложения
При вводе кода CODESYS сразу же предупредит вас о грамматической ошибке красной волнистой линией под соответствующим текстом. Нажмите F11 Проверяется синтаксис всего приложения, и результат проверки отображается в окне сообщения. При необходимости используйтеView ‣ MessagesКоманда открытия окна сообщения. Затем вы можете выбрать сообщение и использовать F4 Клавиша для перехода к соответствующей позиции в коде.
Вы можете только после этого загрузить в контроллер безошибочное приложение.
Установите соединение с ПЛК: Для этого обратитесь к следующему разделу:
Запустите сервер шлюза и ПЛК
Запустите сервер шлюза:
программа GatewaySysTray Стандартная установка вместе с CODESYS. Вы можете общаться с сервером шлюза через эту программу. Сервер шлюза автоматически запускается как служба при запуске системы. Проверьте, есть ли на панели задач Windows значки программ
. Если сервер шлюза не запущен, значок будет следующим:
. В этом случае вы можете открыть меню «Шлюз», щелкнув значок и выбравStart Gatewayкоманда.
программа CODESYSControlSysTray Также как часть стандартной установки CODESYS. Вы можете общаться со службой управления CODESYS через эту программу. Начиная с CODESYS V3.5 SP2, служба управления больше не запускается автоматически. Это сделано для предотвращения несанкционированного доступа. Запустите ПЛК следующим образом: щелкните на панели задач Windows.
, Откройте меню ПЛК и выберите командуStart PLC. Если ПЛК работает, значок меняется на
. Диалоговое окно, которое появляется при запуске, указывает, что запущенный ПЛК позволяет программировать. Обязательно соблюдайте приведенные выше инструкции по технике безопасности!
Во время первой настройки связи: добавьте шлюз
- Дважды щелкните в представлении устройстваDeviceВход(CODESYS Control Win V3)。
нота
Если это ваша первая конфигурация связи с использованием CODESYSV3, теперь вы должны определить локальный сервер шлюза. Если вы определили сервер шлюза, он будет отображаться вCommunicationТабл. В этом случае теперь вы можете продолжить шаги по настройке канала связи.
Сервер шлюза поставляется с установкой CODESYS.
-
Выбрать командуGateway ‣ Add Gateway。

В поле вводаNameВойдите в шлюзsymbolic name。
вDriversВыбрать из спискаTCP/IPвход.
Двойной кликIP-AddressПравый столбец строки и введите в поле ввода localhost 。
⇒ В редакторе устройстваCommunication SettingsВкладка (1) заполнит шлюз. Если шлюз работает нормально, на графике шлюза появится зеленый кружок: 
Настроить канал связи
Теперь определите канал связи устройства, а затем используйте канал через установленный вами шлюз. Для этого дважды щелкните в дереве устройств.DeviceВход, откройте редактор устройстваCommunication SettingsТабл.
Нажмите наScan networkКнопка для поиска всех доступных устройств в локальной сети.
⇒ появляетсяSelect deviceВ диалоговом окне (1) перечислены все устройства, которые могут быть к нему подключены. 
Выберите запись в дереве для имени вашего компьютера.
нота
Теперь все коммуникативное поведение полностью связано с этим каналом. Имейте это в виду, если в вашем проекте несколько каналов связи.
Применение в ПЛК: см. Следующие главы
Загрузите приложение в ПЛК
Требования: Приложение скомпилировано без ошибок. См. Отладку приложений.
1. ВыберитеOnline ‣ Loginкоманда.
⇒ Появится диалоговое окно с вопросом, следует ли загружать приложение в контроллер.
2. НажмитеYesКнопка.
⇒ Приложение загружено в контроллер.DevicesЗаписи о контроллере и приложении в окне имеют зеленый фон. Stop Появляется за объектом приложения. Текущее состояние контроллера отображается на панели задач:
。
Запустить приложение
Если вы выполнили требования этого руководства, теперь вы можете использоватьPLC Device(CODESYS Control Win V3)Application。
-
вDevicesЩелкните правой кнопкой мыши в окнеApplicationОбъект и выберите в контекстном менюStartкоманда.
Мониторинг и одноразовая запись значения переменной во время выполнения
Затем вы можете увидеть «мониторинг» значений переменных в различных программных функциональных блоках, и вы можете установить конкретное значение переменной в CODESYS.
Вы можете просмотреть фактические значения переменных приложения в онлайн-просмотре или в списке мониторинга редактора функциональных блоков. В этом примере мы ограничимся мониторингом в редакторе функциональных блоков.
Требования: Приложение работает на контроллере.
Дважды щелкните в дереве устройствPLC_PRG,Signals,Simulationс участиемGlob_VarObject, откройте онлайн-просмотр редактора.
⇒ В части объявления каждого представления фактическое значение переменной (1) в контроллере отображается вValueСтолбец (3) в таблице выражений (см. Рисунок).
Мониторинг в части реализации зависит от языка реализации: для не-логических переменных значение всегда находится в прямоугольном поле справа от идентификатора. В редакторе текстовых структур это также относится к логическим переменным. Мы называем это «встроенным наблюдением». В графическом редакторе значение логической переменной отображается цветом линии подключения вывода: черный FALSE , Синий означает TRUE : 
Наблюдайте за изменениями значений переменных в каждом функциональном блоке. Например, вы можетеGlob_VarСмотрите в rTempActual с участием Compressor Как значение изменяется из-за обработки программы моделирования.
Установите значение переменной на контроллере один раз:
Курсор помещается в GVLGlob_VarВ онлайн-просмотре.
Чтобы установить новую уставку, дважды щелкните выражение rTempSet рядом, поблизостиPrepared value(2) Колонка.
⇒ Открывается поле ввода.
Введите значение 9 и выйдите из поля ввода.
Чтобы выбрать открытую дверь, используйте выражение rDoorOpen рядом, поблизостиPrepared valueЩелкните один раз в поле. Введем значение TRUE . Щелкните еще раз 3 раза, чтобы увидеть переключение подготовленного значения на FALSE , Затем вернитесь к пустому, затем вернитесь TRUE 。
Чтобы записать подготовленное значение ИСТИНА только один раз, нажмите Ctrl + F7.
⇒ Эти два значения отправляются вValueКолонка (3). переменная rDoorOpen Его значение больше не изменяется, и теперь заданное значение температуры составляет 9 градусов. переменная timTemp Становится 1s , Поскольку дверца холодильника теперь «открыта»,SimulationНагрев должен быть лучше, чем раньше ( 2s )быстро.
Устанавливайте точки останова и переходите через них во время выполнения
«Отладка»: в целях устранения неполадок вы хотите проверить значения переменных в определенных точках кода. Вы можете определить точки останова для выполнения и пошагово выполнять инструкции.
Требования: Приложение загружено в контроллер и работает.
Двойной кликSimulationОткройте программу в редакторе.
Поместите курсор в строку кода iCounter:= iCounter + 1; И нажмите F9
⇒
Значок появляется перед строкой кода. Это указывает на то, что на этой строке установлена точка останова. Значок сразу изменится на
. Желтая стрелка всегда указывает на следующую инструкцию, которую нужно обработать.
заменить
Появляется на панели задач.
Наблюдайте за онлайн-мониторингом илиsimulationПеременные в декларационной части программы iCounter Значение.
⇒ Значение переменной больше не изменяется. Обработка останавливается в точке останова.
Нажмите F5 Перезапустить обработку.
⇒ Программа снова останавливается в точке останова после одного цикла. iCounter Увеличено на 1.
Нажмите F8 Выполните следующий шаг обработки.
⇒RETURNв iCounter:= iCounter + 1; Конец командной строки выделяется желтым цветом.
Нажмите еще раз F8 Выполните следующий шаг обработки.
⇒ Обработка перехода кPLC_PRGРедактор. Нажимайте повторно F8 Показывает, как выполняется программа. Инструкции, которые необходимо выполнить, каждый раз отмечаются желтыми стрелками.
Чтобы деактивировать точку останова и вернуться к нормальной обработке, снова установите курсор в строке кода и нажмите F9 . затем нажмите F5 Снова разместить заявку
Режим.
Выполнить один цикл во время выполнения
Требования: Приложение загружено в контроллер и работает.
Как упоминалось выше, один шаг в программе моделирования iCounter:= iCounter + 1 Строка.
Нажмите Ctrl + F5 Или выберитеDebug ‣ Single CycleВыполнить одиночный цикл.
⇒ Обработка запускает цикл, а затем снова останавливается в точке останова. iCounter увеличился на 1.
Нажмите еще несколько раз Ctrl + F5 Можно просмотреть один цикл. затем нажмите F5
⇒ Программа запускается снова, без остановки и без принудительных значений. переменная temp Снова имеет ценность 1s 。
Снова появляется в строке состояния.
Интеллектуальная рекомендация
Реализация JavaScript Hashtable
причина Недавно я смотрю на «Структуру данных и алгоритм — JavaScript», затем перейдите в NPMJS.ORG для поиска, я хочу найти подходящую ссылку на библиотеку и записывать его, я могу исполь.
MySQL общие операции
jdbc Транзакция: транзакция, truncate SQL заявление Transaction 100 000 хранимая процедура mysql msyql> -определить новый терминатор,Пробелов нет mysql>delimiter // mysql> -создание хранимой .
Используйте Ansible для установки и развертывания TiDB
жизненный опыт TiDB — это распределенная база данных. Настраивать и устанавливать службы на нескольких узлах по отдельности довольно сложно. Чтобы упростить работу и облегчить управление, рекомендуетс.
Последняя версия в 2019 году: использование nvm под Windows для переключения между несколькими версиями Node.js.
С использованием различных интерфейсных сред вы можете переключаться между разными версиями в любое время для разработки. Например, развитие 2018 года основано наNode.js 7x версия разработана. Тебе эт.
![]()
Шаблон проектирования — Создать тип — Заводской шаблон
Заводская модель фабрикиPattern Решать проблему: Решен вопрос, какой интерфейс использовать принципСоздайте интерфейс объекта, класс фабрики которого реализуется его подклассом, чтобы процесс создания.