В ролике показано, как базовый модуль LOGO! Ver 8 FS4 продолжает обмен по Modbus TCP после перевода в STOP, из-за чего модули ввода-вывода не переходят в безопасное состояние, а верхний уровень получает ложные нулевые данные без ошибок связи. Для диагностики автор подключает клиент и сервер Modbus TCP между LOGO! и S7-1200, считает биты состояния и ошибок кольцевыми счётчиками и демонстрирует поведение обмена при остановке и запуске базового модуля.
- 00:00 Поведение модулей ввода-вывода при потере связи с базовым модулем
- 02:43 Настройка Modbus TCP клиента и сервера между LOGO! и ПЛК
- 06:45 Счетчики для битов состояния Modbus TCP
- 12:52 Клиент Modbus TCP на S7-1200
- 13:47 Биты контроля и ошибок при обмене по Modbus TCP
- 15:52 Ложные данные при остановке базового модуля без разрыва связи
- LOGO! Ver 8 FS4
- Modbus TCP
- S7-1200
- ПЛК
- SCADA
Кому полезно: Инженерам АСУ ТП, занимающимся интеграцией и диагностикой Modbus TCP на LOGO! и S7-1200.
Описание составлено автоматически по расшифровке речи в ролике.
Расшифровка видео
0:00 Добрый день, уважаемые подписчики и гости нашего канала. Сегодня у нас на обзоре такая интересная тема, хотелось бы с вами поделиться вот такой вот информацией. В процессе тестирования базового модуля с модулями ввода вывода ЕБМБ.
0:20 У нас целая программа испытаний, мы выяснили. Вот вот вот такую особенность, что вот давайте посмотрим, вот сейчас вот, допустим, базовый модуль функционирует. Он, получается, опрашивает линии ввода вывода все вот. Об этом можно судить хотя бы по тому, что вот посмотрите, вот видите светодиоды, которые. У нас сопровождает пакеты, принятые отправленные, вот они работают. Как только я начал тест, допустим. О том, что у нас, допустим, базовый модуль, когда отключается, есть такие настройки, как, допустим, у базового модуля. В принципе они есть и у Лого, и. У других контроллеров, когда теряется связь, базовый модуль должен перейти в так называемое безопасное состояние. Она программируется, то есть он. Выставляет аналог выхода в то состояние, которое я предварительно запрограммировал и релейные выхода. Он тоже при потере связи тоже выставляет. То есть он какие то может обесточить, а некоторые, допустим, зависимости от нашей задачи, наоборот, включить? Вот что у меня произошло, я получается.
1:50 Остановил программу базового модуля, вот вот она. Дал команду все, но почему то у меня вот эти вот модули? По истечении у меня здесь с таймами стоял 30 секунд, они не перешли в безопасное состояние. Я начал разбираться и вот что выяснил вот. Если вы посмотрите опять на светодиоды, видите? Видите, они как с такой же частотой моргали, так и моргают, несмотря на то, что базовый. Модуль у нас находится в восстановленном состоянии, то есть я предположил, что оказывается часть программное обеспечение базового. Модуля, несмотря на то что я его остановил, продолжает функционировать, в частности, программа, которая занимается в Бастисе и обменом.
2:43 Что я для этого сделала, давайте сейчас перейдем программу логосов комфорт и. Я вам все расскажу, вот смотрите. Поскольку на На стороне, допустим, базового модуля. И модуля ввода вывода никакой визуализации, вот Басте себе и при соединении у меня нет. Я какое решение принял, я могу создать это соединение такое же клиентское только на стороне. Программа логического контроллера, в частности, есть 7200.
3:25 Я так также создал ее, его создал, вот вот она у меня по списку 3 идет, вот наш клиент 192 168 10 164 вот. Я его открываю порт 502. Также Айпи адрес указал и. Что я здесь делаю так же, как и. Бабы получается базовый модуль, у нас записывает состояние счетчиков, которая располагается по адресу св. Дабл Ю. 0 по в Дабл Ю. 8 Это 6 слов, потому что значение счетчиков это двойные слова. Вот и я вот на дирекшен направлении я указываю, что я начинаю писать в.
4:18 Программно логический контроллер, вот даю смещение, на 1 то есть у нас получается область памяти. В культ регистры 1 также 6 слов все я указал. Окей, кроме того, я, я также наоборот, сделала модбас соединение. Только серверная, вот давайте посмотрим тут. Я указал уже порт 505 в принципе и все, то есть у меня уже любой коммуникационный участок. В данном случае это программного я хочу считать это с программного логического контроллера. И он у меня будет клиентом, а сам базовый модуль будет являться сервером.
5:07 И все давайте теперь перейдем в программу Те порталы. Я покажу, какую, чтобы какое мы там программное обеспечение, соответственно, написали для анализа. Так вот, смотрите, что мы сделали на стороне. Программа логического контроллера, 7200 поскольку у нас сам клиент находится на стороне базового модуля Лого. Мы здесь применяем программный блок Мод Бад Сервер соответствующим образом его программируем и.
5:42 Буфер данных у нас мы будем располагать в программном блоке. Я его назвал много сервер, вот здесь у нас состояние получается 3. Счетчиков получается что? Клиент нам сюда будет писать эти данные, и мы здесь все это будем наблюдать в динамике. Это раз основная идея, в чем заключается для того, чтобы проанализировать. Что у нас происходит, когда мы базовый модуль отключаем? Вот у нас есть 3 в нашем распоряжении 3 выхода. Это НДР не юда, то Редди, когда, допустим, клиент.
6:24 Записывает данные на сервер. Вот этот вот бит в случае успешной записи активируется на 1 машинный цикл Реди др. Если клиент считал данные сервера и все прошло удачно. Сервер на 1 машинный цикл тоже устанавливает этот бит и соответственно. Если произошла какая то какая то коллизия, то есть он не несовпадение контрольных сумм, невозможность. Обработки данного запроса, то программа Модба сервер на 1 программный цикл устанавливает этот бит. Вот и все дальше я что применил, поскольку все эти биты их невозможно отследить.
7:17 На с помощью мониторинга я что пригнил, я их завел просто напросто на счетчик. Мы их просто подсчитываем в динамике, то есть, если у нас есть коммуникационный обмен, мы его видим как раз по. Этому счетчику, поскольку мы у нас носит коммуникационный обмен периодически характер, то есть каждые 80 миллиардекунд. У нас клиент выходит на связь, и у сервера запрашивает данные вот что. Мы как раз его бить, да даты р я просто завожу, завел на счетчик. То есть он у нас счетчик Кольцевой, то есть идет, от считает от 0 до 1000 сбрасывается и опять, то есть нам здесь важно и. Прежде всего, изменения, то есть мы считаем, бит яррор тоже мы считаем такой же кольцевой счетчик. То есть если у нас пойдут какие то ошибки связи, мы это тоже увидим и бит у нее дата ради.
8:18 Тоже заведен на кольцевой счетчик. Вот давайте теперь посмотрим, я включаю режим мониторинга. Что мы, что мы видим, вот вот, пожалуйста, давайте теперь вот от начала начнем. Во 1 мы видим, что вот этот вот. Программный модуль он подсвечивается зеленым, то есть он работает, и получается, что мы видим. Это значит, что клиент обращается к серверу. Папа, поскольку клиент пишет к нам, а не считывает данные. Вот дата ради бит, он не активируется. Ошибок по связи мы не наблюдаем все нормально и вот.
9:09 Смотрите, бит НДР с определенной периодичностью инкриминируется, то есть коммуникационный обмен идет, и это мы отлично видим. Если ее вот я, я тогда задал себе вопрос, если мы сейчас по идее остановим.
9:30 Базовый модуль остановим, тогда у нас должен прекратиться и коммуникационный обмен. Давайте теперь попробуем это сделать, я, я вот. Сейчас тогда переходим в программу много софт комфорт, я вот даю команду на останов. Тут надо немножечко подождать. Я хочу, чтобы это было сделано, как говорится, в реальном режиме. Все вот здесь он нам нам предлагает, какой модуль остановить. Вот я говорю, 103 модуль необходимо остановить. Все вот он подтверждает. Локо находится в режиме стоп, то есть он установлен все. Давайте теперь нажимаю, я квитирую окей, давайте теперь перейдем.
10:38 В те портал и смотрим, оказывается, что у нас, несмотря на то, что модуль остановлен. Программа, которая занимается. Соединением она продолжает работать. Давайте посмотрим, какие данные мы получаем. Получается, мы получаем нули, но программа работает, то есть. Вот я думаю, это 1 из причин, почему наши модули. Ввода вывода, где БМБ не перешли в режим безопасного отключения. То есть, что у нас происходит, получается, что когда я останавливаю базовый модуль?
11:31 Сама программа у нас, поскольку сам базовый модуль перестает обсчитывать значение сама программа. Получается, у нас пересылает уже заведомо ложный на? 100 ты значения, получается, связь у нас есть, есть, но данные все эти получается ложные. Вот и все, вот сейчас я включу опять немного, это времени займет.
12:00 Модуль. Вот у меня коммуникационный обмен пошел. Я включил модуль. Данные начали поступать, но. Получается, что программа, которая занималась коммуникационным обменом, она не прекращала свою работу, так скажем? Более того, мы создали еще клик клиентское соединение, как я вам уже говорил на стороне.
12:52 С 7 1200 вот оно. Если у нас получается, сервер располагается на стороне базового модуля, тогда мы здесь применяем команду МОД БАС клиент. Также все это запрограммировали, то есть указали Айди. Айпи, адрес этого модуля порт 505. Мы там мы там указали, и получается с области Хольд регистров. Считываем вот эти вот данные получается с адреса 4000 0 0 1 6 слов и располагает все это. Вот по этому адресу Луго Дата, вот они находятся.
13:47 Вот они в принципе, то есть это одни и те же данные, вот смотрите вот. То есть они получаются либо с помощью сервера, либо с помощью клиента? Вот получается 2 и здесь вот это те же данные, все теперь также вот здесь, у нас в нашем распоряжении есть. 2 Бита за контролем, это когда, допустим, клиент обратился на. Сервер запросил данные и получил эти данные, и все прошло успешно. Он на 1 программный цикл, вот этот бидан устанавливает единицу. Если что то пошло не так, то есть отсутствие соединения.
14:39 Неправильно посчиталась контрольная сумма либо сервер выдал команду, что невозможно ответить на этот коммуникационный запрос то же самое на 1 коммуникационный. Программный цикл устанавливается бит Еррор. Все это мы можем тоже также наблюдать, вот она где, вот она где.
15:14 Вот получается, Мосба Мосба, клиент дан Воды. Здесь также я применил кольцевой счетчик от 0 до 10.00 и получается, и на бит Яров тоже применил кольцевой счетчик от 0 до 10.00, вот что мы сейчас. Наблюдаем то, что у нас идет коммуникационный обмен, то есть клиент запрашивает данные, получает их все нормально, ошибок нет. Вот давайте сейчас так также проверим такую же процедуру, то есть.
15:49 Мы остановим. Базовую воду в ногу и посмотрим, что у нас происходит. Я здесь опять даю команду на остановку. Все вот он показано, что базовый модуль у нас находится в режиме стоп, квитирую, переходим обратно на программу. Что мы видим, получается, что? Коммуникационный обмен у нас. Продолжается, то есть никаких ошибочек не возникает, то есть мой контроллер. Которую сейчас в данном случае участвует как клиент обращается на сервер. Базового модуля и получает оттуда данные, но проблема в том, что он получает уже оттуда. Вот смотрите, вот станция 3 заведомо ложные данные. Вот здесь вот все нули, получается, базовый модуль у нас остановлен, а?
17:04 Коммуникационный обмен у нас. Не разрывается, и ошибки мы не получаем. Мы должны получить ошибку, по которой мы уже должны принимать соответственно решение. Здесь у нас как бы все нормально, нам шлются нули. Вот давайте я сейчас этот активирую.
17:28 Обратно вот этот вот переведу его в режим ран, мы посмотрим. Все. Вот у нас получается. Данные мы начали принимать модуль, заработал. Смотрим. У нас получается коммуникационный обмен, не прекращался, это раз и никаких ошибок в процессе коммутации. Допустим, включение запуск модуля, остановка модуля не происходило, вот и все эти, чем это это чревато.
18:23 Программисты, которые как раз занимаются системной интеграции, должны в принципе все свои программы. Я считаю, будьте очень внимательны и проверяйте вот на этот вот сценарий. Когда у вас произойдет остановка в базовом модуле, тогда получается, что? Наверх, допустим, на Скада систему или на контроллер верхнего уровня, вы получаете 100 она неверные данные. Мы считаем, что это программная уязвимость, то есть любой. Человек умышленно или не умышленно переведя базовый модуль состояния останова до.
19:07 Можем, как говорится, ввести нашу систему верхнего уровня в заблуждение, потому что данные туда идут, допустим. Различного характера и там, где может быть имеет смысл. Допустим, если мы пересылаем статус каких то. Дискретных сигналов у нас соответственно каждый бит имеет свое значение. Допустим, если мы до этого пересылали какие, то, допустим, данные, а тут нам. Пришли данные все нули, это значит, что система может воспринять о значении, что, допустим, все контакты разомкнулись или все контакты замкнули, замкнулись. Это все что угодно может быть, поэтому мы сейчас для вас хотим разработать определенные рекомендации для того, чтобы как диагностировать данный вид. Программной уязвимости и чтобы вы это включали у себя в программные блоки, чтобы обеспечить функциональную безопасность, все спасибо за внимание.
Расшифровка сделана автоматически (Yandex SpeechKit) и может содержать ошибки в терминах.
В очередном нашем видео, мы рассматриваем важное замечание касательно коммуникации LOGO! Ver8 Fs4 по протоколу MODBUS TCP