'Panel PC'에 해당되는 글 1건
- 2014.06.19 Windows 7에서 C# Wait Timing
Windows 7에서 C# Wait Timing
간만에 글을 씁니다.
RS-485 통신을 하는데, Panel PC에 내장되어 있는 RS-485 변환기가 반쪽짜리이더군요.
(정말 황당합니다. 이렇게 만들어져 있다니)
RTS 신호는 Enable로 해야만 송신이 되고, 이 때는 수신이 안되는 군요.
송신을 완료한 후, RTS 신호를 Disable로 해야 한다는 군요. 그제서야 수신이 됩니다.
Embedded 장치와 연동해서 할 때는 송신과 수신이 번갈아 가며 되기 때문에, 송신이 끝나면 무조건 수신 상태이어야 하기에 언제 송신이 끝났는지 정확하게 아는 것이 매우 중요합니다.
.
문제는, Windows 7에서 C#으로 프로그래밍이 되어 있는데, 송신이 언제 완료되었는지 알 길이 없다는 것입니다.
구글링해 보니, 헐~~~ 시간 계산해서, 기다렸다가 신호를 바꾸라는 군요.
시간 계산이야 하면 되지만, 문제는 기다리는 것입니다.
C#에서 제공하는 Sleep 함수는 ~~~ 그 말도 많은 함수 ~~~~
파라미터가 ms 단위로 되어 있기는 하지만, 오차가 15 ms 정도 나더군요.
뭐 상황에 따라 더 날 수도 있을 지도... (첨부화일 에서 시험해 보니 가관이군요)
결국은 Loop 돌면서 기다려야 합니다. (현재까지의 결론입니다.)
혹시 글을 읽으시는 분 들 중에서 고견이 있으면 댓글 부탁합니다.
두서 없이 적었기에 다른 분을 위해서 정리합니다.
<RS-485 통신 in Panel-PC>
1. 통신 설정
* 흐름 제어 사용하지 않음
2. 송신 절차
1) RTSenable = TRUE
2) 대략 1~2ms 정도 기다림,
3) Write data
4) data가 다 보내 질 때 까지 기다림 (송신 속도 * data 수) (참고로 data 수는 1 byte 보낼때,
start, stop bit가 추가됨을 포함하여 bit 수를 계산해야 함. 즉 1 byte 보낼 때 bit 수는
총 10 bit 입니다)
5) 다 보낸 후, 대략 1~2ms 기다림
6) RTSenable = FALSE
3. 수신 절차
1) RTSenable == FALSE 인 상태는 수신 상태임.
<첨부1.윈도우에서 sleep 함수로 기다릴 때 시간 재기
>
그럼, 도움이 되기를...