воскресенье, 25 декабря 2016 г.

Программируемое реле против ПЛК на примере Siemens LOGO vs S7-200

Недавно был у меня спор с одним товарищем (монтажником) по поводу программируемых реле, их отличий от ПЛК и т.п. В общем-то закончилось всё предсказуемо, во-первых, тем, что нет строго определения "программируемого реле", поскольку понятие "контроллер" слишком широкое и включает в себя и программируемые реле тоже. Во-вторых, надо выбирать оборудование в зависимости от решаемой задачи. Нет смысла переплачивать тысячи долларов за какой-нибудь дорогой ПЛК, если можно купить дешевле, долларов за 500, равно как и нет смысла покупать программируемое реле за 10 000 рублей то, что не позволит быстро и эффективно решить задачу, которую можно решить с помощью ПЛК за 20 000 рублей.

В этой статье я хочу рассказать о некоторых нюансах при программировании наноконтроллера (программируемого реле) Siemens LOGO! Сравнивать его я буду с микроконтроллером Siemens S7-200, который стоит вдвое дороже, но при этом имеет гораздо больше функций. Контроллер S7-200 был снят с производства в Германии в конце 2012 года и формально заменён на линейку S7-1200. Однако, сравнивать LOGO! с S7-1200 не имеет смысла, поэтому сравним всё же с S7-200, к тому же в Китае их по прежнему производят, и своей актуальности они не потеряли. Я здесь не буду описывать что-то невероятное для LOGO!, например, сложные математические операции, которые запросто можно осуществить на S7-200. Остановимся на булевой алгебре, т.е. на том, что можно осуществить на языках LAD и FBD, представленных в обоих рассматриваемых контроллерах. Я не использую язык FBD с некоторых пор, поэтому примеры будут только на LAD и, дополнительно, на STL (STL или обобщённое название IL - Instruction List - аналог языка Ассемблера, только для ПЛК), который есть в S7-200.

Адреса я буду писать в формате для S7-200, а в фигурных скобках после них - те же адреса для программы для LOGO!.

Многократное присвоение

Главная проблема LOGO! - невозможность многократного присвоения значения одному и тому же элементу в разных частях программы.

Например, у нас имеется три дискретных входа: I0.1 {I1}, I0.2 {I2}, I0.3 {I3}, по которым срабатывает авария. И есть вход I0.7 {I7} для подтверждения аварии. Бит аварии храним в V0.1 {SF001}.

Напишем программу на Step-7/MicroWIN на языке STL (IL) для S7-200:

 Переведём эту программу на LAD для того же S7-200:

А теперь попытаемся изобразить нечто подобное на LOGO!


На первый взгляд проблем нет. Но мы видим явные отличия от программы для S7-200. Заключаются они в том, что у нас нет возможности создать несколько блоков с названием SF001 и для каждого из них производить операции присвоения (S) и сброса (R). Вот для S7-200 мы как раз могли сделать их все вместе, получив программу вида:

LD I0.1
O  I0.2
O  I0.3
S  V0.1, 1
LD I0.7
R  V0.1, 1

Она работала бы как мой пример для LOGO!, но нам этого как раз не нужно, нам, наоборот, нужно присваивать значения одному и тому же элементу в разных частях программы. На LOGO! мы этого сделать так просто не можем (т.е. теоретически можем, но такую программу будет невозможно нормально просматривать и редактировать), поэтому придётся изворачиваться. Для начала создадим переменные, которые будут отвечать установку бит SF001. Для I1, I2 и I3 это будут биты SF002, SF003 и SF004 соответственно.


Теперь, по идее, нужно по битам SF002, SF003 и SF004 установить бит SF001. Но и тут есть нюанс, а заключается он в том, что поскольку установленный бит SF001 сбрасывает любой из битов его устанавливающих, то LOGO! не даст вам создать такую программу.


Чисто теоретически, такое ограничение - бред, ибо мы имеем дело лишь с пародией на настоящюю релейную схему. На самом деле у нас тут самая обычная программа, которая в машинном коде никаких "блоков" не содержит. Т.е. программа выполняется сверху вниз слева направо, и все ограничения на "рекурсию" искусственны. Но сделать мы ничего с этим не можем, кроме как дополнительно усложнять программу:


Задействовав промежуточный бит M1, мы решили задачу.

Чтобы понять, насколько больше стало бы кода, напишим программу в таком виде на STL для S7-200:

Знаете, что такое "китайский код"? Это вот он самый.

Таймеры

Казалось бы, уж таймеры в программируемом реле должны быть коронной фишкой. Ну, например, есть не самый удобный способ установки бита и его сброса по таймеру в ПЛК S7-200:

Пришлось написать 8 строк кода и задействовать два таймера для простейшей, казалось бы вещи: по одному и тому же биту I0.1 устанавливать с задержкой в 1 секунду бит M0.1, по нему же с такой же задержкой сбрасывать тот же бит.

Попробуем воспользоваться стандартной функцией On-/Off-Delay...




 ...и получаем совсем не то, что хотели. Т.е. первоначально бит устанавливается с задержкой 1 секунда. Но впоследствии, если сигнал I1 пропадает (меньше, чем установленная на выключение 1 секунда), а затем снова появляется, то T001 всё равно сбросится в 0 на некоторое время, которое будет проходить между тем, как таймер на выключение досчитает, а таймер на включение ещё нет. Зачем нужен такой элемент как On-/Off-Delay - мне не понятно.

Попробуем другой способ, задействуем On-Delay (T002) и Off-Delay (T001):


Опять ничего не вышло. Дело в том, что T002 и T001 не должны быть одновременно включены, согласно нашей логике, а именно так оно и получается, поскольку Off-Delay не включается при выключении входа (с паузой), как нам надо, а просто включается вместе с включение входа, а при его выключении с паузой выключается.

Такой способ тоже ничего не даст:

 
В итоге, прекращаем заниматься ерундой и реализуем по аналогии с S7-200:
 

Короче говоря, никаких преимуществ перед S7-200 мы не увидели, а нашли лишь пару ненужных функций.

Итог: если вам надо реализовать управление контроллера безопасности (Safety Controller), управление системой загазованности или простейшей насосной станцией, то программируемое реле вполне можно использовать. Но достаточно, казалось бы, небольшого усложнения задачи, и потребуется уже нормальный ПЛК. Я бы не рекомендовал рисковать. Лучше купить китайский S7-200, чем долго и упорно мучиться с LOGO! (которые, кстати, уже несколько лет в Германии тоже не делают, а делают всё в том же Китае).

суббота, 24 декабря 2016 г.

Как запрограммировать Siemens LOGO! 8

Тут столкнулся с такой проблемой: в LOGO! версии 8 есть порт Ethernet, но нет старого-доброго порта для подключения фирменного кабеля LOGO!. На месте порта, куда раньше он втыкался, расположен порт для разъёма подключения флеш-карты Micro SD.

Попытка запрограммировать порт через интерфейс Ethernet привела к ошибке. Причём, само устройство в сети определяется.


Но дальше дело не идёт, вылазит ошибка следующего содержания:

Some network environment changes are detected. Restart LOGO!Soft Comfort to apply changes


В сети интернет были найдены предположения, что всё дело в настройках сетевой карты, мол, надо их сбросить через коммандную строку, а кто-то говорит, что всё дело в кракозябрах, которые могут находиться в строке с названием выбираемой сетевой карты. Следуя этим советам, я и переустанавливал драйвера, чтоб название сетевухи отображалось в Logo SoftComfort без кракозябр, и сбрасывал настройки неоднократно, - ничего не помогло.

Закончилось всё тем, что я просто выбрал в выпадающем меню "Interface"->"Connect throught" не Ethernet, а Dinamic DNS, ввёл туда вручную 192.168.0.1 (этот IP мне выдал поиск, когда я выбирал интерфейс "Ethernet"), и было мне счастье.
Поствил версию SoftComfort 8.2.0 вместо 8.0.0 - та же история, также только через Dynamik DNS получилось залить программу.

По умолчанию требуется пароль. Пароль: LOGO
Если пароль не подходит (программа ругается, что пароль неправильный), то возможно, что нужно обновить версию LOGO! SoftComfort. Например, такое наблюдалось с версией 8.0, пароль "LOGO" не подходил, а при установке версии 8.2 пароль подошёл. Из явных отличий версии 8.2 от 8.0 - наличие пункта меню Factory Reset (заводской сброс), что актуально для контроллеров LOGO, не имеющих собственного дисплея.

Обновления LOGO! SoftComfort по ссылке. Обновления не являются полноценными программами и устанавливается поверх предыдущей версии SoftComfort.

P. S.> Есть интересный момент: в интерфейсе для подключения можно выбирать не только Ethernet, но и кабель LOGO!, тот самый, через которые подключаются предыдущие модели. Вот только по факту такого разъёма на LOGO! 8 физически нет. Замечательная история ))

P. S. 2> Касательно заливки программы через флешку microSD. На флешку записывается откомпилированный файл проекта с расширением .bin. В Logo SoftComfort странным образом реализовано создание этого *.bin-файла. Компиляция вызывается через обычное сохранение файла (File->Save As), где надо поменять тип сохраняемого файла на бинарный - bin. Возможность сохранять в такой тип файла появляется только для программ, написанных на языке FBD, поэтому если пишите на LAD, то перед компиляция в бинарный файл нужно конвертировать проект в FBD:
Интересно, что первая попытка прошить бездисплейный Logo! таким способом не увенчалась успехом - оказалось, что при сохранении bin-файла нельзя менять стандартное имя этого файл LOGO_U_P.bin, иначе Logo! его игнорирует при включении питания и программу с него не забирает.

Как стереть абсолютно всё с ПЛК S7-200 Smart

Есть слот Micro SD в контроллерах S7-200 Smart. На эти флеш карты можно записывать  команды, например, сброса контроллера (почему его не реализовать в MicroWin Smart - непонятно).

Но сброс, действительно, нужен, например, если контроллер запоролен под завязку, т.е. запрещает вообще всё, что можно. Для сброса контроллера в таком случае нужно взять Micro SD флешку, создать на ней текстовый файл S7_JOB.S7S с текстом внутри: RESET_TO_FACTORY.

Чтобы произвести сброс, надо выключить ПЛК, вставить в него флешку, включить ПЛК, через пару секунд он начнёт моргать - значит, всё готово, можно выключать, флешку вынимать, контроллер к использованию готов.

четверг, 8 декабря 2016 г.

Заказные номера и размеры панелей Siemens Smart Line

Заказные номера

Smart 700   v1: 6AV6 648-0AC11-3AX0

Smart 700IE v2: 6AV6 648-0BC11-3AX0

Smart 700IE v3: 6AV6 648-0CC11-3AX0

Smart 700IE v4: 6AV6 648-0DC11-3AX0

 

Smart 1000   v1: 6AV6 648-0AE11-3AX0

Smart 1000IE v2: 6AV6 648-0BE11-3AX0

Smart 1000IE v3: 6AV6 648-0CE11-3AX0

Smart 1000IE v4: 6AV6 648-0DE11-3AX0

 

Габаритные размеры

Размеры панелей v3 (из инструкции): 

Размеры панелей v1 и v2 (мои измерения):

7":

габариты: 213 х 158.5

задняя часть: 197 х 136.8

в т.ч. верхняя выступающая часть: 197 х 109.8

дисплей: 155.5 х 88

10":

габариты: ??? х 221.6

задняя часть: 257.8 х 199.7

в т.ч. верхняя выступающая часть: 257.8 х 178.1

дисплей: 223 х 133.2

Характеристики панелей Smart v3 


среда, 7 декабря 2016 г.

Частные случаи ПИД-регулирования

В процессе применения ПИД-регуляторов выявляются некоторые его недостатки. В этой статье я рассмотрю 2 случая, которые не удавалось реализовать посредством обычного цифрового ПИД-регулятора.



1. Регулировка при высокой инерционности

Задача: осуществлять ПИД-регулирование температуры жидкости внутри ёмкости путём подачи теплоносителя в рубашку данной ёмкости. 



Регулирующий механизм – клапан на трубопроводе теплоносителя, расположенный в относительном отдалении от ёмкости. Регулируемый параметр – температура в ёмкости.

Температура теплоносителя в рубашке ёмкости неизвестна. Температура теплоносителя не регулируется.


Основной проблемой являлась инерция. Она изначально присутствует в системе, причём, в таком виде, что её даже теоретически нельзя преодолеть настройкой регулятора (температура внутри ёмкости всегда будет значительно превосходить уставку).



Таким образом, изменение коэффициентов регулирования приведёт либо к очень медленному нагреву ёмкости, либо к её перегреву, поскольку, после достижения заданной температуры, ёмкость в любом случае продолжит по инерции нагреваться.

Решение: по мере приближения текущего значения к заданной температуре принудительно уменьшать уставку. На новую уставку должны влиять одновременно и старая (оригинальная) уставка, и температура теплоносителя.

Формула:




Коэффициент K2 рассчитывается через K3 – коэффициент, задаваемый в процентах, который устанавливает конечное значение уставки. Это такое значение, которому будет равна рассчитанная уставка в момент, когда она будет достигнута (т.е. когда будет выполняться условие Tтек = Tзд.н).




2. Управление редуцирующим клапаном, установленным перед главным регулирующим клапаном

Задача: осуществить ПИД-регулирование давления газа после редуцирующего клапана, после которого утсновлен регулирующий клапан (перед ёмкостью, в которой измеряется давление)

.

Регулировка давления клапаном перед ёмкостью отдельно не рассматривается, но известно текущее и заданное давление после этого клапана, известен также процент его открытия. 

Рассматриваемый редуцирующий клапан служит для предварительного понижения давления в трубопроводе. Поскольку величина давления перед ним значительно превосходит заданную величину давления в ёмкости, он в большей мере влияет на конечное давление в ёмкости, чем клапан, установленный непосредственно перед ней. 


Осуществление отдельного регулирования каждым из клапанов приведёт к тому, что смысл использования И-составляющей при управлении клапаном перед ёмкостью потеряет всякий смысл, а Д-составляющую для этого клапана придётся значительно завышать на случай резкого повышения давления после редуцирующего клапана.

Решение: при расчёте ПИД-регулятора, управляющего редуцирующим клапаном, корректировать уставку давления газа после этого клапана таким образом, чтобы она зависела от текущего процента открытия регулирующего клапана перед ёмкостью, от изменения давления в ёмкости, а также от предыдущей рассчитанной уставки.

Формула (рекуррентная):
 



1. Расчёт выполняется при условии, что P1 – P1(пред) > 0, т.е. давление в ёмкости увеличивается. Если это условие не выполняется, то Pзд.н.1 = Pзд.1

2. Знак +/– определяется, исходя из:



3. Pзд.н.1 не должно быть меньше 0 и больше, чем Pзд.1