Практический разбор опроса ПЛК ОВЕН ПЛК-100 из OpenSCADA по Modbus TCP. Показаны создание проекта в CODESYS с Modbus TCP Slave, настройка сокет-транспорта и Modbus-контроллера в OpenSCADA, чтение и запись регистров, выравнивание регистров при чтении Float и вырезание отдельного бита из 16-битного регистра.
- 00:02 Проверка связи с ПЛК ОВЕН ПЛК-100 по Ethernet
- 01:09 Создание проекта в CODESYS и настройка Modbus TCP Slave
- 06:03 Настройка транспорта TCP и UDP в OpenSCADA
- 09:02 Создание Modbus-контроллера и карты регистров
- 13:59 Выравнивание регистров и ошибки при чтении Float
- 21:09 Вырезание бита из 16-битного регистра
- OpenSCADA
- Modbus TCP
- ОВЕН ПЛК-100
- CODESYS
- TCP
Кому полезно: Инженерам АСУ ТП, настраивающим опрос ПЛК по Modbus TCP в OpenSCADA
Описание составлено автоматически по расшифровке речи в ролике.
Расшифровка видео
0:02 Всем привет продолжаем играть с Опен Скадой, и сегодня у нас будет матба с Ти Си. Пи, принципе, можно было бы использовать какой нибудь симулятор Мальбасса. Допустим, Диакслейв, это самый простой и правильный на самом деле вариант, но я взял пл кашку. Это плк стол от компании Овен, не смотрите на морду. Она прошита именно овиновской прошивочкой. Здесь у нас есть 6 релюшек, 8 дискретных ходов и еще бипер. 1 Делом нужно проверить, что с полкашка действительно есть связь, попробуем ее попинговать.
0:51 Адрес у нее 172-16-33 254. И на пакеты она отвечает, то есть все нормально, запустилась, работает. Теперь давайте создадим какой нибудь простенький проект в КДСиз. Я сразу же поясню 1 момент. К сожалению, я с программированием под Пэлкашки Кодесис знаком на уровне. На держи флэшку с проектом, загрузи обновление, так что если начинаю нести. Всякую дичь, то извиняйте, это как бы не моя область, поэтому шарю здесь. Я очень, очень мало создаем новенький проект, у меня плк 100 рл версия.
1:42 Здесь ничем нет, не будем и давайте попробуем подключиться параметры связи. Я уже выставил вот он, ай пи адрес. Пробуем подключиться зальем пустую программу туда, и для проверки можно попробовать, допустим, включить бипер. Это спешила Аут, давайте я микрофон поднесу сразу к нему поближе, чтобы вы могли слышать.
2:20 Ну как видите, ПЛК, что действительно управляется все, как положено. Теперь сделаем ее матбаз, Слейф, устройство добавить под элемент мат бас слейф и укажем, что нужно. Работать, как ти си пи, никакие настройки больше производить не буду. То есть порт по умолчанию 502 и добавим сюда чуть чуть регистров? Ну штучки 3 обычных регистра, которые.
2:49 Которые двубайтовые. Давайте добавим флот, то есть число с плавающей точкой, добавим четырехбайтный, то есть полноценный интеджер, который 32 битный, ну и добавим еще сюда 8 бит. Все дерево раскрою. И на этом принципе можно завершить написание проекта. Не побоюсь этого слова сейчас при подключении в все будет проинициализировано. Нулями, как вы видите, вот они значения регистров. Давайте сюда что нибудь запишем, это можно делать прям на лету.
3:38 Просто несколько раз кликнув по АТ, и он даст заменить. Отличника теперь перейдем к Опен Скаде, открываем виртуалочку. Она у меня уже запущена фоне, вот висит никаких правок с прошлого видео. Я не вносил, то есть у меня здесь добавлен 1. Мадбасс контроллер, это Овен в 110 8 а который я ранее опрашивал и добавлен последовательный выходной транспорт. Это ЮСБ ТУ РС 485 конвертер, теперь нужно добавить сюда еще и плкшку.
4:22 У нас будет соединяться по. Эзернету, то есть по тисипи айпи. Можно, конечно, чтобы уж наверняка проверить, что с ней есть связь именно из виртуальной машины, хотя по другому быть не должно 172-16-33 254. Вот она отвечает на пакеты, все нормально. По аналогии с прошлым видео сначала создаем транспорт, далее создаем контроллер и последний шаг в этот контроллер. Добавляем, какие то параметры, которые мы с него хотим считать. Начнем с транспорта, естественно, это у нас сокет и сокет. Нужно создавать именно в выходной, потому что Скада посылает запросы по алкашке входные. Здесь уже есть несколько штук, это опен сканер, контрол интерфейс основной.
5:15 ВВВ интерфейс и реверсовый интерфейс про них. Я сейчас говорить не буду, расскажу как нибудь. В следующий раз выходной транспорт назовем его, допустим, ПЛК 100. От последовательного интерфейса отличается, как видите, не особо сильно, точно так же. У нас есть блок состояния, абсолютно идентичен и блок конфигурации с именем. Описанием строка с параметрами, давайте взглянем на справочку. Здесь у нас есть 4 варианта, это юник, сокеты, обмен через файлы. Он на он нам не нужен, Равкан, это.
6:03 Каншина тоже не нужна, и 2 варианта, которые конфигурируются похожим образом. Это ти си пи и ю ди Пи, если в 2 словах объяснять разницу между ними, то ти си пи это медленный, но более надежный способ. Передачи Юдипи это быстрый, но без какого либо подтверждения, что информация действительно достигла адресата. У нас это Ти Си Пи, далее идет адрес и порт адрес. У меня 172-16-33 254 а порт стандартный 502.
6:41 Так ошибочка, здесь семерка должна быть. Запускать все точно так же, если я поставлю галочку запускать, то транспорт будет стартовать сразу же при запуске опен скаде. Максимальный размер сегмента МСС я не утверждаю, что действительно так оно и есть, просто подразумеваю, что функция добавлена для совместимости со старым оборудованием. Сейчас стандартная длина пакета в. Интернет, сетях это полтора килобайта, максимальная длина пакета. Бывает, конечно, и больше, но раньше были устройства, которые и эти полтора килобайта перемолотить были не в состоянии, собственно говоря, чтобы.
7:29 Побороть эту проблему можно поставить данное ограничение, которое не позволит самой скаде генерировать. Посылать большие пакеты и в ответ на свои запросы требовать тоже большие пакеты именно вот. Для этих целей служит данный параметр, править его практически никогда не нужно. Временные интервалы здесь все тоже оставляем по умолчанию. Нас эти значения полностью устраивают, объясню, почему В. Отличие от последовательных транспортов, где были подводные камни в виде драйверов там, на преобразователь из ЮСБИ. Допустим, в РС 485 здесь такой проблемы просто нет, поэтому тайминги переосмысливать. Не нужно при подключении через сокеты с созданием транспорта разобрались. Теперь давайте попробуем его запустить, но перед тем как действительно запустить. Я сделаю 1 нехорошую штуку, я вырву.
8:28 Интернет из плкшки и посмотрим, как себя в данном случае поведет Скада. Ставлю галочку, и она подвисла, подвисла на 5 секунд. Собственно говоря, как и указано во временных интералах. Так не туда пнул здесь у нас максимальное время ожидания соединения в секундах. Как раз таки 5 то есть после 5 секунд ожидания вывалилась ошибка, что ну не судьба возвращаем, зарнет.
8:59 Пробуем соединиться. Моментальная реакция так с этим разобрались. Теперь давайте создадим Матбасс контроллер, которым будем опрашивать данную полкашку, так вот я создал Айдишник. Плкстон имя ОВен ПКстон, здесь у нас нужно выбрать матбаст протокол к себе и пи. Он является как бы по умолчанию вариантом и указать адрес транспорта.
9:31 Сейчас у меня 2 транспорта их, естественно, может быть, очень много выбираем интересующий. Это сокет спелка стол, узел назначения у меня, 1 я его не менял в настройках. Можно включать. Давайте теперь добавим параметр, который нужно опрашивать эдифник, да это допустим. И нужно описать перечень атрибутов, то есть нужна карта регистров по карте регистров, поясню немножечко поподробнее. Дело в том, что КДС С. Карту регистров заполняет сам, то есть вот как я накидывал сначала регистр регистр флот.
10:22 2 Регистра еще 8 вид, они все идут подряд. То есть этот у меня нулевой адрес имеет этот адрес? Этот регистр имеет 1 адрес, 2 адрес, этот должен быть 3 и 4 соответственно, так как он занимает. 2 Регистра 5 6 и 7 Соответственно, то есть вот так оно вроде должно быть. Давайте это все внесем, да еще 1 момент забыл. Это скорее связано с тем тем, что я в КДС мало чего понимаю, но.
10:57 В данном примере в данном ролике. У меня все области памяти матбасовские, как вы знаете, 4 это инпут режиссер холдинг Роджер Дискорд и Койл. Они все лежат в 1 месте оперативной памяти. То есть я могу данные вот с этих регистров считывать как функции? Для чтения и инпатриотерести артаты функции для чтения холдинг режиссер-это такая вот небольшая особенность связано. Скорее всего, с тем, что я просто не умею готовить по алкашке, как вернемся к скаде и опишем.
11:39 Напомню, что у нас есть справочка, достаточно подробная. Вызывается она нажатием шрифт ф 1 и кликом по полю справку, по которому мы хотим получить. Мне нужно описать несколько регистров, регистры описываются точно так же, как и я. Делал в прошлом ролике, то есть сначала область памяти, потом адрес.
12:01 Что мы с этими данными хотим делать, читать или писать и далее идут именно так? Область памяти Р, то есть будем читать, как холдинг Регистра адрес 0 хотим только читать. Ну и назовем, допустим, Эр 0. То же самое, сэр, 1 то же самое сэр 2. Эр 3 уже будет сложнее, так как он Фло, то есть нужно указать Суффикс Ф. У нас вот здесь есть в подсказочки дополнительные суффиксы, получить вещественное число из регистров вот. 200 И 201 Здесь у меня же получается из регистров, 3 и 4 то теперь р 4 у меня уже будет. 5 Регистр должен быть и Суффикс, у него должен быть и 4 то есть 30 двухбитный интеджер.
13:07 Так и 4. Это у нас получается 5 он в 7 регистре. Отсюда мы получим значение тех 8 бит, давайте включим опрос и что мы видим так вернем к дефис. Аккуратненько, рядышком мы видим 123 234 и 345. Давайте попробуем изменить какой нибудь из них, допустим, 4 5 6. Изменилось значение, теперь давайте попробуем вбить какой нибудь вещественное, допустим, число и 314-15-92 и 6. И вы видите дичь полнейшую дичь во 1. Вместо того чтобы в 1 регистре значение изменилось, оно у нас изменилось в 2 не регистре, прошу. Прощения в атрибуте, который вот указали в скате. Почему это произошло дело в том, что при формировании карты регистров в Кадесис? Она формируется особым образом, то есть регистры в оперативной памяти, которые занимают 2 Байта, могут располагаться только по смещению кратному 2. То есть 0 2 4 6 и так далее я говорю сейчас не про адреса регистров, а именно про вот Байты в оперативной памяти.
14:47 Регистры, которые занимают 4 Байта, то есть, допустим, флот или, как я здесь, указал 2 двойное слово. Даблвор, то есть полноценный интеджер, они могут занимать пространство. Только на смещение, 4 то есть 0 4 8 12 и так далее, что здесь произошло. Здесь занято 2 здесь занято, 2 здесь занято. 2 То есть следующий должен был быть на смещении 6?
15:18 А я добавил 4 Байтовый, то есть, соответственно, у меня 2 бита между. Вот этим и вот этим. Остались незанятые. И о регистра с вещественным значением, где сейчас записано число пи. У него на самом деле не 3 должен быть адрес, а 4 и соответственно, так как я считывал 3 4 и 5 6 так у меня получилось, что половинка этого регистра оказалась в 1 атрибуте. Половинка этого регистра оказалось в другом атрибуте. В итоге получили дичь, и это сделано намеренно, чтобы показать вот такую вот забавную особенность. Так исправим ошибочку, то здесь у нас получается 4 здесь, 6 и здесь соответственно 8.
16:12 Принять включить? И поставить на обновление. Как видите, число считалось корректно. Теперь попробуем записать какое то значение в интеджер, но большой в 16 битах можно передать число от 0 до 65 535. Допустим, давайте я сейчас передам 100000 это больше, чем то число, что я называл.
16:41 И оно было принято, то есть можно точно сказать, что это действительно считалось полноценный интеджер 30 двухразрядный. Отлично, и остаются у нас только биты с битами, тут все достаточно интересно.
17:02 Сейчас я буду их поочередно зажигать, вот зажег 1 бит. Значение переменной регистр точнее стало равным, 1 1 считывается, допустим, зажгу 2 вид, который. Соответствует четверки, здесь стала пятерка, здесь стала пятерка. Отлично, то есть вот этой комбинации битов, я могу максимум выставить значение 255.
17:31 И давайте теперь попробуем механизм использовать встроенный скаду для чтения отдельных бисерин. Из регистра, то есть, допустим, меня будет интересовать бит номер 3 из регистра 8. Здесь у нас подсказочки есть специальный суффикс для этого, вот он. Позволяет получить определенный вид, из какого то регистра это подчеркивание б и номер, то есть не нужно. Здесь добавить суффикс б интересует 3. Считаем, с 0 да и не забываем, что нужно обязательно уникальное имя.
18:15 Указывать уникальный идентификатор указывать, иначе строчка проигнорируется. Если такое имя уже есть, принять, включить трибуты. Сейчас мы видим, что у нас появился как бы виртуальный. Койл, ой, не койл бит, то есть значение не 0 1, а именно тру или Фулс. Ну, в данном переводе ВКЛ выкл, давайте я попробую этим регистром. Не регистром битом поуправлять, вот я его снял. Обновилась и циферка здесь 247 стала, и виртуальный бит, так называемый зажжем обратно.
19:02 Тоже обновилась информация, в результате мы научились данные читать. Теперь давайте попробуем их записать, так как я считывал из области памяти холдинг. Мне достаточно просто в в данном месте добавить. Буковку Дабл Ю в справке, как говорится. Сначала нужно указать область памяти, адрес Регистра, далее что мы хотим делать, читать, писать или и то, и другое вместе. Ну, давайте добавим запись для всех регистров.
19:37 Ну кроме 1 ладно, 1 пропустим применить, как видно. Как видите, всюду, где я добавил запись, появились поля для ввода. Кстати, поле для ввода вещественного значения чуть чуть длиннее. Давайте попробуем переписать значение в регистре Арнольд. Я сейчас изменил в ячейке значение, и чтобы она отправилась, действительно, отправилась, нужно подтвердить. Видите, здесь еще старое значение 456 отправляем, все переписалось. 123 То же самое сделаем, допустим, здесь 3 215 отправляем значение, обновилось ой.
20:27 В Интеджере полноценном тоже значение обновилось, теперь пробиты. При вырезании бита из регистра все остальные трогаться не будут. То есть если я сейчас сниму эту галочку, то здесь у меня только 3 бит изменится, остальные останутся, как были попробуем. Так видите, так оно и произошло, возвращая галочку, остальные остались нетронутыми. И еще мы не сделали 1 вещь, мы не считывали. Полноценные биты, то есть здесь бит виртуальный. Я его вырезаю из регистра, который считывал функции чтения именно 16 Байт 16 Битного Регистра. Теперь давайте попробуем считать именно бит 1 бит, добавим его сюда, допустим, пусть он будет 1.
21:37 Ц 1 р ц 1. То есть считываем из области памяти Койл Регистр, 1 только считываем, не записываем и имя у него будет Сайдин. В принципе логично было бы предположить, что раз я считываю убиты, то я считываю именно вот этот вот бит. Но, как видите, несостыковка здесь, он у меня выключен, а здесь он включен. Я пробую мигать, но ничего не происходит. Это абсолютно нормальная ситуация, потому что на самом деле я бит считываю вот из этого регистра здесь, у нас значение 123.
22:28 Давайте я его заменю на 0. И, как вы видите, здесь бит стал выключен. Теперь я в него запишу, двойку двойка означает, что 1 бит числа как раз таки будет установлен в. Логическую единицу и ц 1 у нас зажжется. Вот такая вот забавная особенность с размещением нескольких областей памяти в 1 и том же месте.
22:58 О чем я и говорил в самом начале данного ролика? Подведем итог, научились опрашивать надбавки Сипи. Устройства опробовали механизм вырезания бита из шестнадцатибитного регистра, то есть не как. Вы классический способ берем регистр, берем маску, накладываем маску на регистр, тем самым выделяя интересующие нас биты. А вот все сделать сама, Скада и мы получаем, ну так скажем, виртуальный.
23:30 Регистр типа там дискрет инкут или типа поил неважно виртуальный. И еще, кроме этого, научились управлять ПЛК что или любым устройством пом от вас. Ти Си Пи, то есть посылать какие то команды записывать регистр, ничего еще скажу. Подписывайтесь на канал, впереди много интересного.
Расшифровка сделана автоматически (Yandex SpeechKit) и может содержать ошибки в терминах.
Рассматриваем подсистему транспортов (только сокеты), опрашиваем и передаем данные в ПЛК по Modbus TCP на примере Овен ПЛК-100.