Столкнулся с ситуацией.
Одно из пяти MODBUS устройств «подвесило» всю линию.
Коммуникатор сообщает об ошибке по всем пяти КП.
Исчезли текущие данные в таблицах и на схемах. Что естественно.
А значения пары дорасчетных каналов не исчезли — запомнились последние перед зависанием.
Формулы GetByte() и GetBit().
Так и должно быть?
Чтобы корректно обрабатывать статусы каналов, нужно немного усложнить формулу:
GetBit(…); Stat(101)
где 101 — номер исходного канала
Каким образом одно устройство подвесио всю линию?
ОК. А если в дорасчетном канале используются несколько каналов ТИ и ТС? Статус по «AND»? Каким образом одно устройство подвесио всю линию?
Сам удивляюсь! На 485-й линии 5 MODBUS устройств. Читаю все пять в цикле в одной линии связи коммуникатора. Цикл — ок. 4 сек. Для каждого устройства свой .xml файл конфигурации. Все устройства разные. Когда подключил последнее (по времени) — были сомнения в его (устройства) корректной работе с MODBUS протоколом. Через пару дней сомнения подтвердились. Контроллер отработал аварийную ситуацию, повис сам и подвесил соседей. Перезагрузка его по питанию исправила ситуацию.
Общаюсь с разработчиком контроллера. Он доводит протокол.
Существующие статусы Вы посмотрите в таблице Типы событий. Вам нужно написать функцию, которая будет возвращать тот или иной статус в зависимости от статусов тех каналов, от которых она зависит. Алгоритм Вы определяете сами. Функция должна возвращать число типа int.
Затем вместо Stat в GetBit(…); Stat(101) Вы пишете свою функцию.
Автор
Сообщения
Просмотр 7 сообщений - с 1 по 7 (из 7 всего)
Вы должны авторизироваться для ответа в этой теме.