Показано с 1 по 2 из 2

Тема: контроль/диагностика соединения ModBusTCP Slave из кода

  1. #1
    Пользователь
    Регистрация
    06.02.2023
    Адрес
    Новосибирск
    Сообщений
    13

    По умолчанию контроль/диагностика соединения ModBusTCP Slave из кода

    Имеется СПК (MB TCP Master), несколько модулей Mx210 (MB TCP Slave), подключенных с использованием шаблона Owen.
    Имеется книжка "CDS 3.5 Modbus v 3", а точнее пункт 4.6 из этой книжки.
    Задача: из кода контролировать состояние Ведомых модулей.
    Практика показала:
    1. использовать $(DeviceName).xError невозможно - он не поднимается, зато вместо него вечно поднят $(DeviceName).xBusy независимо от того, подключен физически модуль или отключен.
    2. $(DeviceName).byModbusError использовать для получения подробностей состояния канала тоже не получается: значения либо Response_successful, либо Undefined.
    3.$(DeviceName)_OwenDriver.ComState - значение "Connecting" при разрыве связи. Но создать переменную такого же типа "ModbusTcpComState" у меня не получилось, так же как и найти таблицу значений, которая есть для "byModbusError" в пункте 4.6 книги.
    Из интересного:
    1. можно использовать $(DeviceName).xInitDone для определения текущего состояния связи с модулем: поднят, когда устройство подключено и опущен, когда связи с устройством нет.
    2. можно использовать byModbusError для определения текущего состояния связи, но не более: ни причину, ни ошибку получить не получится - Undefined.
    3. Можно использовать ModBusTCPMasterName.uiConnectedClients, чтобы узнать, что количество клиентов меньше или равно требуемому (в течение работы кол-во модулей не меняется).

    Дальше начинаются вопросы:
    1. Есть ли возможность что-то сделать с ведомым устройством в случае потери связи: перезагрузить, повторно инициализировать, перенастроить и тд используя только протокол ModBus TCP и команды из кода?
    2. Есть ли возможность перезапустить "устройство ModbusTCP Master" из кода для повторной инициализации всех ведомых устройств?
    3. Есть ли возможность перезапустить "устройство Ethernet" (на котором висит ModbusTCP Master) из кода?
    4. Есть ли более корректные способы получения информации о состоянии связи? Чтобы видно было "CRC_Fail" или "Response_timeout" вместо Undefined?
    5. Возможно ли что-то сделать ещё из кода, чтобы предпринять попытки принудительного восстановления связи?

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,171

    По умолчанию

    Добрый день.

    1. использовать $(DeviceName).xError невозможно - он не поднимается, зато вместо него вечно поднят $(DeviceName).xBusy независимо от того, подключен физически модуль или отключен.
    2. $(DeviceName).byModbusError использовать для получения подробностей состояния канала тоже не получается: значения либо Response_successful, либо Undefined.
    См. здесь: https://youtu.be/IFUN4cYskRI

    Но создать переменную такого же типа "ModbusTcpComState" у меня не получилось, так же как и найти таблицу значений
    Надо так (но сначала - в свойствах библиотеки IoDrvModbusTCP в менеджере библиотек поставить галочку "Только квалифицированный доступ" - это будет упомянуто и в видео выше).

    Код:
    eState: IoDrvModbusTCP.ModbusTCPComState;
    2023-06-28_12-45-06.png

    1. Есть ли возможность что-то сделать с ведомым устройством в случае потери связи: перезагрузить, повторно инициализировать, перенастроить и тд используя только протокол ModBus TCP и команды из кода?
    В случае потери связи невозможно что-то сделать, так как нет связи.

    2. Есть ли возможность перезапустить "устройство ModbusTCP Master" из кода для повторной инициализации всех ведомых устройств?
    3. Есть ли возможность перезапустить "устройство Ethernet" (на котором висит ModbusTCP Master) из кода?
    5. Возможно ли что-то сделать ещё из кода, чтобы предпринять попытки принудительного восстановления связи?
    Всё происходит автоматически за счет галочки Автоподключение в компоненте Modbus TCP Master.

    4. Есть ли более корректные способы получения информации о состоянии связи? Чтобы видно было "CRC_Fail" или "Response_timeout" вместо Undefined?
    См. видео выше.

Похожие темы

  1. Диагностика ошибок в ответе Modbus-slave.
    от johnny0000 в разделе ПЛК1хх [М02]
    Ответов: 13
    Последнее сообщение: 10.05.2023, 08:56
  2. ПЛК100-K-L ModBusTCP Master-Slave
    от Doomers в разделе Эксплуатация
    Ответов: 53
    Последнее сообщение: 11.04.2022, 19:33
  3. Ответов: 3
    Последнее сообщение: 08.04.2022, 15:51
  4. Modbus контроль ошибок соединения
    от aven в разделе Сетевые технологии
    Ответов: 17
    Последнее сообщение: 22.05.2021, 12:07
  5. Убийство флеш памяти ПЛК160 LectusOPC ModbusTCP-SLave
    от gtdd1962 в разделе OPC Серверы
    Ответов: 5
    Последнее сообщение: 14.01.2016, 14:17

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •