我正在使用libnodave
库与Siemens S7 PLC进行通信。它工作正常,直到我尝试写字节。我几乎总是超时。
我必须连接的代码:
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(超时)。
在写入之前更改超时或直接移动连接例程无效。
答案 0 :(得分:1)
随着事情变得奇怪,并且有多线程正在进行,存在问题。
我在调用writeBytes
的同时仍在调用readBytes
,但结果却很糟糕。
添加互斥锁并更好地修复它。