|
해결하셨다니 다행이네요.
Rx 이벤트에서 처리를 어떻게 하셨는지요...
Rx 이벤트는 하나의 데이터가 수신될 때 항상 발생하니 이 과정에서는 버퍼를 클리어 시키면 데이터를 잃어버릴 수 있습니다.
RxChar 이벤트를 이용하시면 특정한 문자가 수신될 때 이벤트를 발생시킬 수 있습니다.
어떤 장비든 끝을 알리는 문자가 있을테니 이 이벤트를 이용하시든지...
Rx 이벤트 내에서 InBufferCount를 체크하셔서 30개 이상 들어왔을 때 버퍼에서 가져오시면 될 듯 싶습니다.
그리고 버퍼 클리어는 별로 쓸 일이 없던데요.
특정 명령을 보내기 전 Rx 버퍼에 쓰레기 값들을 비울 때나 쓰면 될 것 같습니다.
newhuni 님이 쓰신 글 :
: 해결하였습니다.
:
: 제가 잘못알고 있는 부분을 찾았습니다.
: 저는 장비에서 30Byte의 데이타를 보내오면 ComPort의 Rx이벤트에서 한꺼번에 받아서 처리하는 것으로
: 알고있었습니다.
:
: ComPort->Read(buf, Count);
:
: 즉, 이때 Count는 30을 가리키고, 데이타는 모두 Buf에 저장되는 것으로 생각했었는데.
: 데이타가 많을경우 이벤트가 2번발생하여 나누어서 처리하네요...
:
: 소스에서 RX,TX 버퍼를 클리어시키는 루틴이 타이밍이 맞지 않아서 데이타를 모두 받기전에
: 버퍼 클리어가 되니까.. 데이타를 수신하지 못 하는 것이었습니다.
:
: 여튼 해결해서 다행인데.... 제가 알아낸 것이 맞나요???
: 맞다면... Buffer를 클리어 시키는 타이밍은 어떻게 잡아야 하나요?
: 무조건 Endbit를 체크하여 클리어 시켜야 하나요??
:
: newhuni 님이 쓰신 글 :
: : 하드웨어 구성은 아래와 같습니다.
: : --------------------------------------------------------------------------------
: : TX)
: : 노트북->USB to Serial컨버터->Rs232 to Rs485컨버터->장비
: : RX)
: : 장비->Rs232 to Rs485컨버터->USB to Serial컨버터->노트북
: : --------------------------------------------------------------------------------
: :
: : 현재 장비에 데이타는 정상적으로 전달되고, 장비에서의 응답도 정상적으로 COM1포트에 들어옵니다.
: : 오실로로 찍어보니 TX신호 레벨은 10V, RX신호는 8V 레벨이구요...
: :
: : USB to Serial 컨버터 회사에 연락해 보니 컨버터가 지원하는 통신속도는 9600까지라고 하더군요
: : 그래서 속도도 다시 바꾸어 테스트 하였으나 동일한 현상입니다.
: :
: : 이해가 안가는 것은 다른장비에서는 노트북의 USB to Serial컨버터를 사용해도 아무 문제가 없었습니다.
: : 그런데 이번 장비만 노트북의 USB to Serial컨버터를 사용하면 RX신호를 받지 못하네요...
: : 그렇다고 장비가 문제가 있는가...하면 이 장비를 일반 PC의 COM포트를 사용하면 정상적으로 동작합니다.
: :
: : CPort컴포넌트의 RX이벤트에서 들어오는 데이타는 14Byte인데, Count는 계속 1을 갖고 있습니다.
: : 도데체 머가 문제인지 모르겠군요... 휴........... ㅡ.ㅡa
: :
: : CPort컴포넌트가 불안한 건지.... 그냥 다른컴포넌트를 알아봐야 하는지..
: : 아니면 직접 API로 구성해야 하는지 고민이 드네요....
: :
: : 권기식.with☆ 님이 쓰신 글 :
: : : 안녕하세요?
: : :
: : : 장비쪽 하드웨어가 어떻게 구성되어있는지 알아야 정확한 답을 해드릴 수 있겠네요..
: : :
: : : 아마도 시리얼 포트에서 나오는 +/-12V를 이용할텐데...
: : :
: : : 12V 이하에서 동작이 보장되지 않도록 설계되어있다면 USB to RS232 케입블로는 동작을 안할 수 있습니다.
: : :
: : : 이 케이블에서는 약 8V의 전압이 출력됩니다.
: : :
: : : 어쨌든 이 문제는 사용하시는 장비의 하드웨어적인 문제로 생각됩니다.
: : :
: : : 그럼...
: : :
: : : newhuni 님이 쓰신 글 :
: : : : 노트북에 시리얼 포트가 없어서 USB To Serial을 이용하여 COM1을 만들어 장비를 제어하고 있습니다.
: : : : 사용하는 것은 CPort 3.0이구요... 데이타 보내는 것은 이상없이 잘 됩니다.
: : : : 그런데... 장비로 부터 수신되는 데이타가 정확히 들어오지 않습니다.
: : : :
: : : : 데스크 탑 PC에서는 정상적으로 동작합니다.
: : : :
: : : : USB To Serial을 이용해서 통신을 하는것과 PC에 붙어있는 시리얼 포트를 이용하여 통신을 하는것과
: : : : 다른부분이 있는지요...
: : : :
: : : : 혹시 CPort 3.0으로 USB to Serial으로 생성한 컴포트로 통신을 하면 동작에 장애가 생길 수 있습니까???
|