PDA

Просмотр полной версии : ПР100. Теряется связь при опросе с ПК



artem_vo_
02.12.2025, 19:24
Добрый день.
Столкнулся со странным поведением ПР100 при опросе их с ПК. Есть 3 ПР100 подключенные к компьютеру через конвертер RS485 - USB к компьютеру. ПР100 в режиме "СТОП", без программы и используются как модули ввода/вывода. Порт каждой сконфигурен на скорость 19200, 8 бит, без четности, 1 стоповый (19200 8N1). Адреса им заданы 16 64 и 128. Конвертер RS485 - USB в системе виден как компорт, с которым работает пользовательская программа. Задача программы в фоне обновлять состояния входов/выходов всех трех ПР100 и по команде включать или выключать дискретные выходы. По началу все хорошо - система работает, состояния ПР обновляются их выходы переключаются по требованию. Так система может проработать например 2 часа, а потом связь теряется без видимых причин. Я логирование добавил и вижу что команда в порт записана а ответ не пришел. Я не могу прочитать из порта. И ладно бы ответ с кодом ошибки modbus или мусор, так ничего нет. В таком состоянии система может пробыть до 5 минут а потом ответ приходит, связь восстанавливается и все снова работает. Я не останавливаю опрос а пытаюсь восстановить связь хоть как-то. В этом поведении нет никакой систематики: система может проработать и 2 часа и больше а потом 10 минут работает и 5 висит без ответа от ПР в попытках открыть/закрыть порт и восстановиться. Порт из системы не пропадает.
Вот так соединение было с ПК через USB
87028
Потом переделали через конвертер в Ethernet, думали помехи и вот так поможет:
87029
Не помогло. Стало как будто бы лучше но все равно отваливается связь. Перед переводом в ethernet обновили прошивки всех трех ПР до версии 2.70 (скачал последнюю версию лоджика и через нее обновил прошивки)
Помогите! Я уже не понимаю что происходит. Притом что рядом по такой же схеме через USB на 30-40 метрах кабеля в пучке с силовыми вперемешку на комп уходят 2 ПР102 и 2 ICP DAS M7017C на скорости 115200, тоесть 4 устройства на одной нитке RS485 и вся эта связка работает без нареканий.

kondor3000
02.12.2025, 19:31
Вероятно выходы только записываются, то есть обмена долго нет и связь отваливается.
А должны постоянно читаться (циклически) и записываться когда надо (по изменению или по биту).

artem_vo_
02.12.2025, 22:26
Чтение идет постоянно. алгоритм в псевдокоде вот такой:


// цикл крутится в отдельном потоке
пока не остановлен опрос делаем:
пока в очереди есть команды делаем:
// из команды узнаем какой ПР, какой выход в какое состояние перевести
найти пр
установить выход
конец

для каждого ПР в списке делаем:
прочитать регистры дискр.входов// получить маску дискрвходов
задержка(32 милисек)
прочитать регистры дискр.выходов// получить маску дискрвыходов
задержка(32 милисек)
прочитать регистры аналог.входов
задержка(время_милисек)
конец
конец

время задержки (в псевдокоде это время_милисек) между опросом ПР и переходом на следующий оборот цикла я пробовал и маленькое (50 75 100 мс) и большое (от 1 до 5 секунд). всеравно связь ломается. причем если таки связь сломалась ни писать маску выходов в регистр ни читать регистры не получается пока не оживет

FPavel
03.12.2025, 18:39
При диагностике на компьютере состояния прерывания связи - прервите цикл опроса, закройте порт, и снова начните (открыть порт и начать опрашивать).
Если при этом связь восстановится - ошибка в программе компьютера, где-то большой таймаут ожидания потерянного байта или всей посылки.

Валенок
04.12.2025, 09:20
При диагностике на компьютере состояния прерывания связи - прервите цикл опроса, закройте порт, и снова начните (открыть порт и начать опрашивать).
Если при этом связь восстановится - ошибка в программе компьютера, где-то большой таймаут ожидания потерянного байта или всей посылки.
Если про com, то я бы добавил что переокрывать порт только если все девайсы в списке показали таймаут. Ессно это подразумевает отсутствие блокирующих операций и диких таймаутов больших среднего времени транзакции + 10...15мс. Ну и по таймауту переходить не по списку а к другому девайсу.

Общий алгоритм описал выше kondor3000, я б добавил про выяснить, можно ли прочитать сразу все входы, а если нет, положить болт на режим ввода-вывода и написать простейший проект ПР складывающий все в одну область (слейва)

Ну и не заниматся ерундой а перейти на 115200 (если вернётесь к com)

И накой хрен там какие-то задержки в 32 мс?