|
네.. 보내는쪽은 그냥 micom 장비라... log 같은것도 없어 확인할수 없지만...
오실로스코프로 신호를 찍어보면...데이타는 나온게 분명합니다...
통신 속도는 19200,38400 에서 똑같은 현상입니다..
이론상으로 200밀리초에 100byte정도는 받아낼수 있어야 하는데..
cport가 이 정도는 다 받아낼수 있을꺼라 생각되는데..
windows쪽에서 장비에서 보낸것만큼 못 받고 있는 느낌인데... windows쪽의 rxbuffer쪽의 데이타가
언제 소멸되는지는등...어디가 문제 인지 알수가 없네요...
*)데이타가 들어왔음에도 rxchar event가 안뜨는 경우가 있나요?
수고하세요.
evergreen 님이 쓰신 글 :
: Packet를 보내는 쪽에서
: Packet를 모두 보냈는지(아마도 ComPort1->Write()의) 결과를 확인해 보세요.
:
:
: linuxman 님이 쓰신 글 :
: : CPORt 2.64를 사용하고 있습니다.
: :
: : 상대쪽 장비에서 약 250~300밀리초 단위로 약 100 byte정도의 완전한 프레임(임의로 정의한 Soh ~ EOT 까지) 을 계속 writing 하고 있습니다.
: : ComPort1RxChar 에서 읽어 보면 frame이 통째로 빠지는 느낌이 듭니다.
: : 중간에 rxbuffer 에서 하나의 프레임이 완전히 사라지는 느낌입니다. ( 즉 100 byte의 프레임을 100번 보내면, 80번정도는 못 받는 그런현상 )
: : 이런 현상이 왜 일어나나요?
: :
: : (그런데..시간을 약 300밀리초 ~ 500밀리초로 writing 하면 100번 보내면, 100번 수신합니다)
: :
: : rx,tx buffer는 4096으로 설정하였습니다.
: :
: : ComPort1 ==>
: : BaudRate = br19200
: : Port = 'COM1'
: : Parity.Bits = prNone
: : StopBits = sbOneStopBits
: : DataBits = dbEight
: : Events = [evRxChar, evTxEmpty, evRxFlag, evRing, evBreak, evCTS, evDSR, evError, evRLSD, evRx80Full]
: : Buffer.InputSize = 4096
: : Buffer.OutputSize = 4096
: : FlowControl.OutCTSFlow = False
: : FlowControl.OutDSRFlow = False
: : FlowControl.ControlDTR = dtrDisable
: : FlowControl.ControlRTS = rtsDisable
: : FlowControl.XonXoffOut = False
: : FlowControl.XonXoffIn = False
: : OnRxChar = ComPort1RxChar
: :
: :
: : 그런데..CPort의 void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count) ..
: : {
: : BYTE recvBuf[512];
: : int iLen,i;
: :
: : memset(recvBuf,'\0',sizeof(recvBuf));
: : iLen=ComPort1->Read(recvBuf,Count);
: :
: : }
|