Тайм-аут 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 все еще продолжается, портя результаты.

Добавление мьютекса и улучшенное время исправили это.

Другие вопросы по тегам