Коллеги, всех приветствую!
Используем PLC в качестве модуля удаленного ввода\вывода.
Управляем из самописного софта с использованием библиотеки jlibmodbus 1.2.9.7.
Вызываем библиотеку
<dependency>
<groupId>com.intelligt.modbus</groupId>
<artifactId>jlibmodbus</artifactId>
<version>1.2.9.7</version>
</dependency>
Запись значения и запрос статуса
TcpParameters tcpParameters = new TcpParameters();
tcpParameters.setHost(InetAddress.getByName(ip));
tcpParameters.setKeepAlive(true);
tcpParameters.setPort(Modbus.TCP_PORT);
ModbusMaster m = ModbusMasterFactory.createModbusMasterTCP(tcpParam eters);
m.setResponseTimeout(5000); // 5 seconds timeout
if (!m.isConnected()) {
m.connect();
}
Boolean isOpenValueChanged = false;
int slaveId = 1;
m.writeSingleCoil(slaveId, offset, true);
boolean[] changedValue = m.readCoils(slaveId, offset, 1);
if (changedValue != null && changedValue.length > 0 && changedValue[0]) {
isOpenValueChanged = true;
}
log.info("modbus isOpenValueChanged: " + isOpenValueChanged);
При большой интенсивности запросов - контроллер переходит в непонятное состояние, пингуется, соединение отваливается по таймауту, в Codesys не подключается. Помогает только сброс переключателем на морде или по питанию.
debug и конфиг на PLC прикладываю.
Не знаем куда копать.