2012-12-18 7 views
1

libnodave 라이브러리를 사용하여 Siemens 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

항상 상황이 이상하고 멀티 스레딩이 진행되는 것처럼 문제가 있습니다.

아직 전화가 readBytes 인 동안 writeBytes으로 전화를 걸었으며 결과가 엉망입니다.

뮤텍스를 추가하고 더 나은 타이밍을 고정했습니다.