|
Связь с внешним миром Modbus, RS232, RS485, Lon и другое. |
|
Опции темы | Поиск в этой теме |
15.03.2018, 06:25 | #1 |
Новичок
Регистрация: Jun 2017
Сообщения: 19
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Случайные значения регистра аварий
Есть система диспетчеризации примерно десятка контроллеров, с них по RS485-ому собираются значения регистров на единый сервер. В контроллерах везде залита программа из конструктора, практически без изменений.
Проблема в следующем, периодически на некоторых контроллерах из регистра аварии считывается случайное значение (может и из других, не знаю, но по регистру аварии у меня приходят уведомления), притом происходит это на случайных контроллерах, и временами. К примеру один контроллер начал неделю назад рассылать ошибки с периодом примерно раз в пол дня, сейчас вроде бы успокоился, а вчера ночью другой начал и до утра он прислал сообщение примерно 150 раз (поспать сволочь не дал). Сразу же при получении значения с авариями, следующим запросом приходит реальное значение, можно конечно программно сделать задержку на уведомление, но все равно, по моему, такое поведение не правильное. С чем это может быть связано? Сообщения приходят с правильно подписанной CRC, поэтому на помеху тут грешить нельзя, тут явно контроллер так отвечает. Период опроса примерно раз в секунду, сами контроллеры скорее всего или C2010, или 2G, чуть позже уточню. Пример ошибочного ответа: [ 4, 3, 4, 199, 214, 192, 219, 99, 228 ] Следом через секунду пришел ответ: [ 4, 3, 4, 0, 0, 0, 0, 175, 51 ] |
15.03.2018, 11:31 | #2 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Случайные значения регистра аварий
Цитата:
Поэтому вашу проблему нужно исследовать. Чем подробнее, тем лучше. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
15.03.2018, 11:51 | #3 |
Новичок
Регистрация: Jun 2017
Сообщения: 19
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Случайные значения регистра аварий
Ну из 11, пока, подключенных контроллеров, только два почти регулярно ругаются, остальные молчат, или действительно по делу только ругаются.
Модель контроллеров я сегодня постараюсь узнать, а какие еще данные могут понадобиться? Могу полный лог запросов/ответов сделать, если это поможет. |
15.03.2018, 11:54 | #4 |
Уволен из Сегнетикс
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Случайные значения регистра аварий
Ну, хотя бы, какие аварии фиксируются в журнале? Какие сообщения приходят?
__________________ В сегнетиксе не работаю с самого начала 2019 года. |
15.03.2018, 11:59 | #5 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Случайные значения регистра аварий
Цитата:
Мож по факту у вас пара контроллеров на одном адресе и данные калечатся каким-то образом. Проходили уже такое на форуме. Также проекты всех контроллеров, логи обмена по контроллерам отдельно и общий. Как можно больше всего, даже если 90% этого не пригодится. Лучше 90% лишнего, чем отсутствие 0.01% нужного. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
15.03.2018, 12:13 | #6 | |
Новичок
Регистрация: Jun 2017
Сообщения: 19
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Случайные значения регистра аварий
Цитата:
[15.03.18 09:05] Авария! Система: XXXXX, Приточно-вытяжная система (ПВ) Статус: 1101430188 Описание: авария жалюзи вытяжки, авария вентилятора притока, защита от заморозки, перегрев ТЭН, авария компрессора, авария увлажнителя, авария насоса ВоОхл, угроза пожара, обрыв датчика, обрыв связи, фильтр вытяжки, ошибка версии, неизвестная ошибка, неизвестная ошибка, неизвестная ошибка, невозможность регулировки СО2 или Расхода [15.03.18 09:05] Авария! Система: XXXXX, Приточно-вытяжная система (ПВ) Статус: 512 Описание: авария рекуператора [15.03.18 09:19] Авария! Система: XXXXX, Приточно-вытяжная система (ПВ) Статус: 1101248370 Описание: авария жалюзи притока, авария вентилятора вытяжки, защита от заморозки, перегруз насоса ВоКал, авария компрессора, авария рекуператора, авария увлажнителя, угроза пожара, обрыв датчика, нет воды, фильтр притока, фильтр вытяжки, неизвестная ошибка, неизвестная ошибка, неизвестная ошибка, невозможность регулировки СО2 или Расхода [15.03.18 09:20] Авария! Система: XXXXX, Приточно-вытяжная система (ПВ) Статус: 512 Описание: авария рекуператора [15.03.18 09:47] Авария! Система: XXXXX, Приточно-вытяжная система (ПВ) Статус: 1101004800 Описание: неизвестная ошибка, неизвестная ошибка, неизвестная ошибка, невозможность регулировки СО2 или Расхода [15.03.18 09:48] Авария! Система: XXXXX, Приточно-вытяжная система (ПВ) Статус: 512 Описание: авария рекуператора |
|
15.03.2018, 12:25 | #7 | |
Новичок
Регистрация: Jun 2017
Сообщения: 19
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Случайные значения регистра аварий
Цитата:
Карта регистров контроллера в приложении. Логи поставлю сегодня собираться, как снова забуянит, принесу. Программу чуть позже тоже скину (программист в командировке, все у него). |
|
15.03.2018, 16:46 | #8 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Случайные значения регистра аварий
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
19.03.2018, 11:00 | #9 |
Новичок
Регистрация: Jun 2017
Сообщения: 19
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Случайные значения регистра аварий
Система раскидана по городу в разных зданиях и через интернет идет сбор данных. В пределах одного здания, в данному случае, в сети RS485 находятся слейвом два контроллера. Мое устройство мастером с них собирает данные и высылает на общий сервер. Снифер я поставил на порт 485-го, и эти данные пришли с него, поэтому передача по езернету в данном случае нам не важна.
|
21.03.2018, 12:16 | #10 |
Senior Member
Регистрация: Apr 2008
Сообщения: 204
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Случайные значения регистра аварий
обычно это связано с неправильной обработкой запросов и ответов на стороне скада, отсутствием проверки целостности пакетов при передачи
Простого решения особенно для скады я думаю ты не найдешь У меня моя прога читает данные с 4 х контроллеров и периодически раз в сутки пакеты приходят битые |
22.03.2018, 06:24 | #11 | |
Новичок
Регистрация: Jun 2017
Сообщения: 19
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Случайные значения регистра аварий
Цитата:
Полный лог запросов все не успеваю сделать, виноват, постараюсь в ближайшее время сделать... |
|
22.03.2018, 10:44 | #12 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Случайные значения регистра аварий
Цитата:
На эти грабли даже инсат наступил в своём сервере, а это типа большая и типа крутая контора. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
26.03.2018, 19:40 | #13 |
Новичок
Регистрация: Jun 2017
Сообщения: 19
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Случайные значения регистра аварий
Таки отловил проблему, в общем неверный ответ присылал все же контроллер, но он был в этом не виновен
В общем дело было так, сегодня подключали еще один объект с очень хреновой линией связи (менее 50% запросов проходило) и на нем свистопляска в показаниях куда чаще начала проявляться. Залез в библиотечку модбаса (которой опрашивал контроллеры), сделал вывод всех данных в лог и поймал такую пачку сообщений: 325638 < [251] 325679 < [255] 325697 < [183] 325709 > [1,3,160,33,0,2,182,1] 325721 < [1,3,4,27,210,190,228,45,5] 325733 > [1,3,160,33,0,2,182,1] 325734 < [254] 325745 > [1,3,160,39,0,2,86,0] 325746 < [1,3,4,27,210,190,228,45,5] 325754 < [254] 325757 > [1,3,160,41,0,2,55,195] (первая колонка - время в миллисекундах, дальше данные, зеленый запрос, красный - ответ) Жирным выделил момент, когда произошла описанная мною ситуация, для тех кто не понял, поясню... По логу видно что прилетают иногда одиночные байты данных - которые на самом деле не являются данными, а просто помеха. В выделенном куске кода эта помеха и внесла смуту. По порядку: [1,3,160,33,0,2,182,1] - тут мы запрашиваем данные с некоего регистра (ПЛК 1, функция чтения 3, адрес 160,33, 2 регистра, CRC) [254] - тут прилетела помеха и библиотека решила что вот и ответ пришел, само собой такой пакет распознался как корявые данные и библиотека сообщила программе что данные пришли криво, у меня в коде при таких ситуациях делаются повторно несколько попыток, и это как раз была последняя. Данные мы не получили, да и хрен с ними, чтобы не застревать на одном месте, запрашиваем следующей строкой следующие регистры: [1,3,160,39,0,2,86,0] - адреса следующих регистров 160,39 (какраз мой регистр аварии). Вот тут и возникла ситуация, когда контроллер предыдущий запрос нормально принял, начал доставать из себя данные и готовиться выдать их на линию, и что там какие-то помехи были, он и не в курсе (и что следующий запрос прилетел уже). И само собой далее контроллер отвечает этими данными: [1,3,4,27,210,190,228,45,5], но так как по логике программы опроса уже запрос улетел на следущую порцию данных, то программа и ожидает их, а в реальности данные прилетают из предыдущего регистра. В результате и получаем достоверные по CRC данные, но не в том регистре где ожидали. А теперь кто в этом виноват и как таких ситуаций избежать. Само собой в первую очередь жопу монтажникам и проектировщикам напинать надо, за такую линию, но не об этом сейчас. Проблема 1: в библиотеке выставляется таймаут ожидания запроса, но он работает только при отсутствии данных на линии, в случае ошибки он игнорируется и возвращается управление программе. По моему было бы логичнее при возникновении ошибки все же дожидаться окончания таймаута, тогда бы может быть и потеряли вместе с помехой ответ, но не возникло бы каши... в общем решать тут автору, как лучше делать, закину ему для примера тоже этот лог. Проблема 2: в моем коде после всех попыток получить значение регистра сразу же запрашивался следующий (таймаут делал только между попытками), и мой код успевал отправить запрос целиком еще до ответа контроллера. На данный момент добавление таймаута при ошибке между запросами исправило проблему. Последний раз редактировалось tuxnsk, 26.03.2018 в 19:55 |
26.03.2018, 21:47 | #14 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Случайные значения регистра аварий
Что и требовалось доказать, всё перемешалось в буферах
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |