|
통신 소스를 보니 rs-485통신을 쓰시는것 같네요
가능하시면 comport 라이브러리로 바꾸어보세요
(이게 잘되더군요 )
그리고 통신에서 빠른속도로 연속으로 들어올때
이런식으로 하시면 통신버퍼에 오버랩이 생기거나
같은 버퍼를 두번 읽을수 있으니
임시 버퍼를 만들어서 거기에 들어오는것을 무조건
쌓아놓고 주기적으로 블록으로 가져오면서 지워주세요
------------------------------------------------
쩡이 님이 쓰신 글 :
: 답변 감사합니다.
: 전임자가 갑작스레 퇴사해서 이어받은 프로그램이라.. 쿨럭 ㅡ_ㅡ;
: 프로그래밍 실력도 경험도 전혀 없는지라.. 소스 내용이 이해되지는 않네요.
: 우선 TriggerAvail 이넘이 멀하는 것인지 알아봐야겠네요.
: 좋은 하루되세요.
:
:
:
: ayh 님이 쓰신 글 :
: : 다른 분 답변이 없어서, 몇 자 적습나다.
: :
: : 일단, 제 경우에도 AsyncPro를 사용했는데요.
: : Thread는 쓸 일이 없어서, TriggerAvail 이벤트를 이용했습니다.
: :
: : 찾아보시면 컴포넌트 소스에 예제가 포함되어 있을 겁니다만,
: : 일단 한 번 TriggerAvail 이벤트 핸들러를 작성하셔서 테스트 해보시면, 해결의 실마리를 찾아보실 수 있지 않을까 싶어서, 글 올려봅니다.
: :
: : (제 경우에는 이 방식으로 3차례 정도 개발했는데, 언제나 별 문제 없었습니다. ^^ 이것저것 고민할 것도 적고요.. )
: :
: : 아~ 소스 찾아봤는데 델파이 소스네요.
: : 마지막 개발한 게 델파이로 한거라서.. 적당히 변환하시면 될겁니다 ^^
: :
: : procedure TDataModuleIO.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
: : var
: : I : Word;
: : C : Char;
: : S : String;
: : Token : String;
: : begin
: : S := '';
: : for I := 1 to Count do begin
: : C := ApdComPort1.GetChar;
: : case C of
: : #0..#31 : {Don't display} ;
: : else S := S + C;
: : end;
: : end;
: : end;
|