воскресенье, 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


пятница, 14 октября 2016 г.

S7-1200 и скоростные счётчики (HSC)

Некоторое время назад возникла необходимость подключить энкодеры к S7-1200. В результате обнаружились некоторые нюансы в работе импульсных входов S7-1200 для подсчёта входных импульсов.

1. Выходные сигналы энкодера


Энкодеры генерируют 3 выходных сигнала. Использовать в программе можно от 1 до 3 сигналов в зависимости от задачи.

1 сигнал. Фаза А или Фаза B.

Использование 1 сигнала означает простой подсчёт импульсов, каждый фронт (переход с 0 на 1 входного дискретного сигнала будет означать появление нового импульса). Нет разницы какой сигнала использовать, фазу А или фазу B.

2 сигнала. Фаза А + Фаза B.

Два сигнала необходимы, чтобы не только определить количество импульсов, но и направление вращения. Т.е. второй сигнал смещён на 90 градусов относительно первого, если рассматривать возникновение импульсов как вращение. А на дискретных входах второй сигнал повторяет первый, но возникает на половину периода раньше или позже и заканчивается соответственно. Зная, какой сигнал (Фаза А или Фаза B) возникает раньше при повороте двигателя в ту или иную сторону, можно определить направление вращения.

3 сигнала. Фаза А + Фаза B + сигнал сброса Z

Третий импульс (референтная метка) служит для того, чтобы определить начальное положение. Поскольку оно является нулевой точкой, то этом положении счётчик импульсов сбрасывается. Поэтому он называется в S7-1200 просто сигналом сброса (reset input)

 

 2. Дискретные входы контроллера S7-1200


Контроллер может использовать максимум 18 дискретных входов для функций скоростных счётчиков, что включает в себя 14 дискретных входа на самом контроллере и 4 входа на плате 6ES7 221-3AD30-0XB0.
Максимальное количество счётчиков - 6 штук. Входы деляться на три группы:

1. 200 кГц, 4 DI (плата 6ES7 221-3AD30-0XB0)

2. 100 кГц, 6 DI (I0.0 - I0.5)

3. 30 кГц, 8 DI (I0.6 - I1.5)



Принцип следующий: чем больше входов используется для счётчиков, тем меньше остаётся возможностей использовать более скоростные счётчики, т.е., например, вы используется плату для подключения импульсных сигналов 200 кГц, но при этом собираетесь считать все три максимально возможных импульса (A, B, Z). Таким образом, у вас остается только один незадействованный канал на 200 кГц. Нь если считать импульс по одному каналу, то можно делать это отдельно для четырёх разных энкодеров.

3. Настройка входов в TIA Portal


Настройка довольно-таки проста, в Device Configuration дважды щёлкнуть по контроллеру, далее в разделе General ищем пункт High Speed Counters, тут настраиваем каждый счётчик (HSC1 .. HSC6).

Подпункт Function:  
Type of Counting задаёт, что мы будем считать (количество импульсов или их частоту). 



Operating phase устанавливает, сколько мы задействуем фаз (т.е. нужно ли нам знать направление вращения). 


Установка "A/B counter" в пункте "Operating phase" деалет возможным учёт направления движение и, соответственно, производит подсчёт импульсов в плюс и в минус относительно текущего значения. Установка "Two phase" позволяет прибавлять к текущему значению счётчика при фронте на одной фазе и отнимать от текущего значения при фронте на другой фазе.
 
Подпункт Reset to initial value: опция Use external reset input устанавливает импульсный вход сброса (Z).

Чтобы вручную сбрасывать счётчик импульсов, необходимо использовать функциональный блок (FB) CTRL_HSC. Вызов производится через экземплярный DB:
"CTRL_HSC_DB"(HSC := "Local~HSC_1", CV := true, NEW_CV := "SP_New_CV");
где
CTRL_HSC_DB - экземплярный DB,
Local~HSC_1 - это "Local~" наименование скоростного счётчика
SP_New_CV - это значение, на которое сбрасывается счётчик

Функцию сброса достаточно выполнять один раз только в том цикле, где это необходимо.

Для каждого выбранного DI автоматически указывается его разрешающая способность (Гц).

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




Подпункт I/O Addresses: вот тут и хранится то самое значение счётчика. Start address - это адрес в области памяти I. 

 
Забавно, что именно I память используется для этих целей. S7-1200 и так отличился, в отличие от S7-200 его аналоговые входы/выходы пронумерованы в одной области с дискретными (в S7-200 AIW0 и I0.0 не пересекались, например). А тут ещё и скоростные счётчики втиснусь. Я рекомендую использовать такое простое разграничение: 

I 0.0, I0.1, I0.2... - для DI, 
IW 500, IW502, IW504... - для аналоговых входов модулей контроллера
IW 900 и IW902 - для аналоговых входов самого ПЛК
ID 1000, ID 1004... - для скоростных счётчиков.

При использовании контроллера CPU1215C я бы рекомендовал также отделять адреса аналоговых выходов ПЛК (QW 900,..) от ан. выходов модулей (QW 500,..), поскольку это упрощает замену контроллера 1214C на 1215C и наоборот. 

Далее, если значение измерялось в частоте (frequency), то его необходимо перевести в понятные единицы в зависимости от энкодера (т.е. имп/сек разделить на имп/об, в результате имеем об/сек).

 

НЮАНСЫ.


Ну, вот всё вроде ясно и понятно... было бы, если бы не пара нюансов.

1. В интернете полно информации, которая может вас ввести в заблуждение. Это информация о старых моделях контроллеров S7-1200, у которых назначение каждого DI для скоростных счётчиков было строго расписано.


К современным моделям контроллеров (прошивка 4.х) это всё отношения не имеет. Подробнее для старых моделей можно почитать тут.

2.Следует иметь ввиду, что энкодеры выдают сигналы разного напряжения. Плата 200 кГц существует в двух вариантах: для 5 В и для 24 В. Но на самом контроллере входы 100 кГц предназначены только для напряжения 24 В.
У ПЛК CPU1217C последние 4 входа, рассчитанные на частоту до 1 МГц, рассчитаны на напряжение 1.5 В.

P. S. Некоторые иллюстрации и материалы взяты из этой статьи.

воскресенье, 3 апреля 2016 г.

Постоянное требование установщика в Windows 8 перезагрузить компьютер при установке TIA Portal

На Windows 8 недавно возник косяк при установке TIA Portal - несколько раз установщик просил перезагрузить компьютер, но после перезагрузки ничего не менялось - запрос на перезагрузку повторялся снова и снова. На сайте Microsoft описаны какие-то обновления с исправлениями, которые нужно установить, иные же сайты предлагают чего-то там менять в реестре в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager, предлагают отредактировать ключ PendingFileRenameOperations, короче говоря, дают кучу бесполезных советов никак на установку TIA Portal не влияющих. А нужно сделать всего одну простую вещь - удалить этот раздел Session Manager из реестра и всё. Если до этого уже была произведена перезагрузка, то после удаления раздела ещё раз перезагружаться не надо, можно смело продолжать установку.

Update 2022. Один комментатор написал, что достаточно удалить из раздела Session Manager только сам ключ PendingFileRenameOperations. Тогда, в далёком 2016 году, когда я устанавливал TIA Portal v13 на Windows 8, такой способ не проканал. Т.е. я этот параметр редактировал, потом удалил - ничего не помогало, пока не удалил весь раздел. Возможно, что с более новыми версиями портала ситуация иная.