В прошлой статье Светофор на ПЛК – 30 блоков программа для ПЛК светофора была написана только на FBD.
Новая программа использует все 5 языков стандарта МЭК 601131-3.
Первая секция на IL.
Это похожий на ассемблер язык.
В секции всего 2 строки:
LD — загрузка значения в аккумулятор
S — установка переменное в true, если в аккумуляторе true, иначе переменная не изменяется.
![](http://habr.habrastorage.org/post_images/16b/1e3/e38/16b1e3e38efb544db4208be1c041d0dc.gif)
Генератор импульсов периодом 0,5 секунды написан на FBD, как и в предыдущей версии.
![](http://habr.habrastorage.org/post_images/103/1ce/6ef/1031ce6efc474a9c8337c875608b3859.gif)
Основная секция написана на SFC. Как мне кажется, это самый сложный для применения язык в стандарте МЭК 601131-3.
Программа состоит из шагов и переходов.
При запуске программы выполняется шаг Init.
Следующий шаг выполняется, если усовие перехода за ним истинно. Шаг может быть выполнен с задержкой, время шага может быть ограничено.
На рисунке ниже только однин переход содержит условие. Остальные переходы выполняются всегда.
В конце цепочки выполняется безусловный переход на метку WaitPeople.
![](http://habr.habrastorage.org/post_images/ce6/6a4/5f6/ce66a45f65e764edd9d4354f5a87699d.gif)
Каждый шаг выполняется с задержкой, соответсвующей требуемому времени пребывания светофора в заданном состоянии.
![](http://habr.habrastorage.org/post_images/907/b39/d26/907b39d26dfc02b72f0546c0d9bf17ee.gif)
При выполнении каждого шага выполняется опеределенное действие. В моей программе задано выполнение секции на языке ST.
![](http://habr.habrastorage.org/post_images/476/2f7/095/4762f709533772b91178dedb20e18303.gif)
В проекте добавлена переменная uState, соответсвующая состоянию светофора.
Вот содержимое всех секций, выполнемых по шагам:
![](http://habr.habrastorage.org/post_images/f65/bcf/3b4/f65bcf3b411608acc03ed10d6695126a.gif)
Секция на ST в зависимости от состояния uState записывает значение на булевские переменные, которые потом будут переписаны на выходы. Это можно было сделать в секциях stStep_1..stStep_8, но тогда бы вы не увидели оператора CASE и не поняли бы, что ST — самый близкий для программиста язык из стандарта МЭК 601131-3. Так же в этой секции введена защита от программных ошибок в виде мигающего желтого при неопределенном состоянии.
![](http://habr.habrastorage.org/post_images/302/7b1/817/3027b1817bf761ea15e55f0440abcc54.gif)
Язык LD создан специально для электриков, которым пришлось от разработки релейных схем перейти к ПЛК. Основа LD — контакты и катушки. На схеме видно, что слева расположен проводник, от которого «напряжение» (true) распростроняется направо по ответвлениям.
Нормально разомкнутый контакт (похож на конденсатор) замыкается, если привязанная к нему переменная истинна.
Нормально замкнутый контакт (похож на конденсатор со слэшем внутри) замыкается, если привязанная к нему переменная ложна.
Катушка (2 скобки) пропускает «напряжение» через себя и переписывает его значение (false или true) в привязанную к ней переменную.
В программе данная секция используется для того, чтобы переписать промежуточные переменные в переменные, привязанные к выходам, с защитой от программной ошибки. Зеленый свет загарается только если нет красного на данном светофоре и зеленого на другом светофоре.
![](http://habr.habrastorage.org/post_images/e3d/6f9/850/e3d6f98509164d13aef63cacc708fe73.gif)
Результат работы программы:
Применение всех 5 языков в одной программе не оправдано. Но в реальных проектах иногда приходится применять одновременно 2..3 языка. Чаще всего я использую ST, реже FBD, еще реже IL. SFC и LD в реальных проектах мне применять не приходилось.
Новая программа использует все 5 языков стандарта МЭК 601131-3.
Первая секция на IL.
Это похожий на ассемблер язык.
В секции всего 2 строки:
LD — загрузка значения в аккумулятор
S — установка переменное в true, если в аккумуляторе true, иначе переменная не изменяется.
![](http://habr.habrastorage.org/post_images/16b/1e3/e38/16b1e3e38efb544db4208be1c041d0dc.gif)
Генератор импульсов периодом 0,5 секунды написан на FBD, как и в предыдущей версии.
![](http://habr.habrastorage.org/post_images/103/1ce/6ef/1031ce6efc474a9c8337c875608b3859.gif)
Основная секция написана на SFC. Как мне кажется, это самый сложный для применения язык в стандарте МЭК 601131-3.
Программа состоит из шагов и переходов.
При запуске программы выполняется шаг Init.
Следующий шаг выполняется, если усовие перехода за ним истинно. Шаг может быть выполнен с задержкой, время шага может быть ограничено.
На рисунке ниже только однин переход содержит условие. Остальные переходы выполняются всегда.
В конце цепочки выполняется безусловный переход на метку WaitPeople.
![](http://habr.habrastorage.org/post_images/ce6/6a4/5f6/ce66a45f65e764edd9d4354f5a87699d.gif)
Каждый шаг выполняется с задержкой, соответсвующей требуемому времени пребывания светофора в заданном состоянии.
![](http://habr.habrastorage.org/post_images/907/b39/d26/907b39d26dfc02b72f0546c0d9bf17ee.gif)
При выполнении каждого шага выполняется опеределенное действие. В моей программе задано выполнение секции на языке ST.
![](http://habr.habrastorage.org/post_images/476/2f7/095/4762f709533772b91178dedb20e18303.gif)
В проекте добавлена переменная uState, соответсвующая состоянию светофора.
Вот содержимое всех секций, выполнемых по шагам:
![](http://habr.habrastorage.org/post_images/f65/bcf/3b4/f65bcf3b411608acc03ed10d6695126a.gif)
Секция на ST в зависимости от состояния uState записывает значение на булевские переменные, которые потом будут переписаны на выходы. Это можно было сделать в секциях stStep_1..stStep_8, но тогда бы вы не увидели оператора CASE и не поняли бы, что ST — самый близкий для программиста язык из стандарта МЭК 601131-3. Так же в этой секции введена защита от программных ошибок в виде мигающего желтого при неопределенном состоянии.
![](http://habr.habrastorage.org/post_images/302/7b1/817/3027b1817bf761ea15e55f0440abcc54.gif)
Язык LD создан специально для электриков, которым пришлось от разработки релейных схем перейти к ПЛК. Основа LD — контакты и катушки. На схеме видно, что слева расположен проводник, от которого «напряжение» (true) распростроняется направо по ответвлениям.
Нормально разомкнутый контакт (похож на конденсатор) замыкается, если привязанная к нему переменная истинна.
Нормально замкнутый контакт (похож на конденсатор со слэшем внутри) замыкается, если привязанная к нему переменная ложна.
Катушка (2 скобки) пропускает «напряжение» через себя и переписывает его значение (false или true) в привязанную к ней переменную.
В программе данная секция используется для того, чтобы переписать промежуточные переменные в переменные, привязанные к выходам, с защитой от программной ошибки. Зеленый свет загарается только если нет красного на данном светофоре и зеленого на другом светофоре.
![](http://habr.habrastorage.org/post_images/e3d/6f9/850/e3d6f98509164d13aef63cacc708fe73.gif)
Результат работы программы:
Применение всех 5 языков в одной программе не оправдано. Но в реальных проектах иногда приходится применять одновременно 2..3 языка. Чаще всего я использую ST, реже FBD, еще реже IL. SFC и LD в реальных проектах мне применять не приходилось.
ссылка на оригинал статьи http://habrahabr.ru/post/209290/
Добавить комментарий