|
먼저 4096보레이트는 대략 400byte/sec라 좀 간당간당하네요.
하지만 19200에서도 마찬가지 일이 발생한다면
다른 이유일거 같습니다.
통신이라는게 처음과 끝이라는 경계가 없는것이라
100바이트를 보내도 받는 측에서는 100바이트가 다 들어오기전에 Rxchar 이벤트를 발생시킵니다.
즉 여러번에 걸쳐 읽게 되지요.
그래서 패킷에 처음과 끝을 명시하고 끝 표시가 검출될때까지
전역변수나 static 변수에 데이타를 차곡차곡 이어붙여 저장할 필요가 있습니다.
받는 부분에서 그런 처리를 하고 있는지 궁금하네요. 이후 코드 부탁드립니다.
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);
:
: }
|