Добрый день.
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?
См. видео выше.