"Запоминание" в дорасчетных каналах

Просмотр 7 сообщений - с 1 по 7 (из 7 всего)
  • Автор
    Сообщения
  • #7752
    kustar
    Участник

    Столкнулся с ситуацией.
    Одно из пяти MODBUS устройств «подвесило» всю линию.
    Коммуникатор сообщает об ошибке по всем пяти КП.
    Исчезли текущие данные в таблицах и на схемах. Что естественно.
    А значения пары дорасчетных каналов не исчезли — запомнились последние перед зависанием.
    Формулы GetByte() и GetBit().
    Так и должно быть?

    #7754
    Mikhail
    Модератор

    Чтобы корректно обрабатывать статусы каналов, нужно немного усложнить формулу:
    GetBit(…); Stat(101)
    где 101 — номер исходного канала
    Каким образом одно устройство подвесио всю линию?

    #7759
    kustar
    Участник

    ОК. А если в дорасчетном канале используются несколько каналов ТИ и ТС? Статус по «AND»?
    Каким образом одно устройство подвесио всю линию?
    Сам удивляюсь! На 485-й линии 5 MODBUS устройств. Читаю все пять в цикле в одной линии связи коммуникатора. Цикл — ок. 4 сек. Для каждого устройства свой .xml файл конфигурации. Все устройства разные. Когда подключил последнее (по времени) — были сомнения в его (устройства) корректной работе с MODBUS протоколом. Через пару дней сомнения подтвердились. Контроллер отработал аварийную ситуацию, повис сам и подвесил соседей. Перезагрузка его по питанию исправила ситуацию.
    Общаюсь с разработчиком контроллера. Он доводит протокол.

    #7767
    Mikhail
    Модератор

    Если несколько каналов, то формула для расчёта статуса будет более сложная, но принцип всё равно тот же.

    #7768
    Mikhail
    Модератор

    Надо сначала логически решить как Вы хотите обрабатывать статусы.

    #7770
    kustar
    Участник

    Понятно. Где поподробнее почитать про статусы?

    #7774
    Mikhail
    Модератор

    Существующие статусы Вы посмотрите в таблице Типы событий. Вам нужно написать функцию, которая будет возвращать тот или иной статус в зависимости от статусов тех каналов, от которых она зависит. Алгоритм Вы определяете сами. Функция должна возвращать число типа int.
    Затем вместо Stat в GetBit(…); Stat(101) Вы пишете свою функцию.

Просмотр 7 сообщений - с 1 по 7 (из 7 всего)
  • Вы должны авторизироваться для ответа в этой теме.