Тайм-аут libnodave всякий раз, когда я пытаюсь `writeBytes`
Я использую libnodave
библиотека для связи с ПЛК Siemens S7. Работает нормально, пока не попробую записать байты. У меня почти всегда тайм-аут.
Код, который я должен подключить:
fds.rfd = libnodave.openSocket(port, address.ToString());
fds.wfd = fds.rfd;
if (fds.rfd > 0) {
di = new libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k);
di.setTimeout(10000000);
dc = new libnodave.daveConnection(di, 0, 0, 2);
if (0 == dc.connectPLC()) {
_status.connected = true;
}
}
и записать байты (в другом методе, вызванном на более позднем этапе):
dc.writeBytes(libnodave.daveDB, datablock, address, bytestowrite, buftosend);
который почти всегда возвращает -1025 (тайм-аут).
Изменение времени ожидания или перемещение процедуры соединения непосредственно перед записью не имеет никакого эффекта.
1 ответ
Решение
Как всегда, когда все становится странным, и происходит многопоточность, возникает проблема.
Я звонил writeBytes
пока был звонок readBytes
все еще продолжается, портя результаты.
Добавление мьютекса и улучшенное время исправили это.