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 に答える