ComPort 콤포넌트를 사용해서 기계와 컴퓨터를 연결했습니다.
그런데 RS232가 무선 RS232 입니다.
유선으로 TEST하면 문자값 (ABCDE)를 보내면 제대로 받는데
무선으로 하면 'A'가 먼저들어오고 난 후 'BCDE'가 들어옵니다.
읽혀지는 값에 따라 다음 값을 보내주어야 하는데 읽혀지는 값이
두번에 나누어서 읽려져 다음 값을 보내지 못합니다.
어떻게 해결해야 하나요 ?
그리고 ComPort에서 기계에 AT+BTINFO?라는 값을 보내면
RETURN 되는 값이 해당 RS232의 SERIAL번호와 현재 상태
즉 STANYBY 인지 아닌지를 보내오는데 ComPort의 RxChar 이벤트에서
어떻게 하면 STANDBY 가 들어올때 까지 기다릴 수 있나요 ?
계속 이벤트를 발생할 수 도 없고.... 전혀 감이 잡히지 않습니다.
또 한가지는 RxChar 이벤트(읽혀지는 이벤트)에서 한 번 문자를 읽어서
showmessage()를 이용해서 잠시 멈춘 후 진행하면 다음 값을 제대로 읽는데
showmessage()를 하지않고 sleep(1000)를 이용해서 하면 다음값을
제대로 읽지 못합니다. (Event내에서 Showmessage()로 읽혀지는 값 확인했음) 왜 그런가요 ? 강제적으로 Showmessage()를 보내주는 효과를
줄 수 있나요 ?
긴 질문 읽어주셔서 감사합니다. RS232 통신은 처음해보는 거라 전혀 감이
없습니다. 자세히 알려 주시면 정말로 감사하겠습니다.
그리고 시간이 없어서 ... 미안하데 빠른 답변 부탁드립니다.
일단 무선RS232이라고 한다면 블루투스to232 converter 혹은 RF를 이용한 232 converter를 사용한다고 보여지는데.. 장치간에 delay가 존재합니다.
유선으로 할 경우와는 좀 다르죠... converter가 가지는 delay이 이니까요..
일단은 콤포넌트에 있는 readinterval을 길게 잡아야 겠네요.. default는 -1일건데 500정도(너무 많나?) 혹은 그 이상 주어 보세요...
RxChar이벤트 내에서 기다리는 건 좀 무리가 있어 보입니다. 어짜피 버퍼의 값은 이미 읽어 온 뒤니까요... 일정 간격으로 쓰는 이벤트가 있다면 혹은 쓰레드를 이용한다면 timer를 이용해서 쓰기 쓰레드 혹은 쓰기 이벤트를 잠시 죽여 두고 timer이벤트가 쓰기 쓰레드 혹은 이벤트를 살리도록 한다면 timer 설정시간동안은 프로그램이 RxChar를 기다리는 효과가 나지요..
윗분이 설명 잘 해놓으신것 같습니다. 제가 보기에도 그 이유일것 같네요...