PDA

Просмотр полной версии : ПЛК110-30 + jlibmodbus 1.2.9.7



gonz1k
12.05.2022, 09:39
Коллеги, всех приветствую!

Используем 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 прикладываю.

Не знаем куда копать.

capzap
12.05.2022, 11:42
Вам стоит изучить сам протокол, на каждый запрос следует дождаться ответа и только после посылать новый запрос. И даже при однократном выполнении этого кода, Вы пытаетесь отправить два запроса одновременно и на запись и на чтение