1

我正在使用该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(超时)。

更改超时,或直接在写入之前移动连接例程都没有效果。

4

1 回答 1

1

一如既往,事情变得很奇怪,并且正在进行多线程,问题就出现了。

我在打电话writeBytes的时候打电话readBytes还在继续,弄乱了结果。

添加一个互斥锁和更好的时间修复它。

于 2012-12-19T09:47:16.157 回答