2012-12-18 130 views
1

我正在使用libnodave庫與西門子S7 PLC進行通信。它工作正常,直到我嘗試寫入字節。我幾乎總是超時。每當我嘗試「writeBytes」時,libnodave都會超時

我必須連接的代碼:

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仍在繼續,搞亂了結果。

添加一個互斥鎖和更好的時機修復它。

相關問題