안녕하세요...
고수님들께 질문드립니다.
제가 만들고자하는것은 시리얼 통신으로 데이터를 수신받아서 다른처리 없이 그냥 메모장에 뿌려주는 프로그램입니다.
COMPORT만으로 해보려니 속도 때문인지 안되네요..
comdatapaket으로 해보려고 하는데 기본지식도 없고 여기저기 글올라온것을 참고하여 만들어 볼려니
잘 안되네요. 부디 도와주십시요.
아래 제가 만들고 있는소스에서 보완해야할 부분을 짚어 주시면 감사하겠습니다.
1. 수신 데이터 정보
- 데이터 형태(hex값) :
7E XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
E7 (중간 데이터 XX값이
7E가 생길수 도 있음)
- 데이터 크기 : 18Byte 고정
- 데이터 주기 : 10ms 고정
2. 폼에 memo1,ComPort1,ComDataPacket1 을 생성한다.
3. ComDataPacket1의 Events창에서 ComPort항목에 ComPort1과 연결한다.
4. ComDataPacket1의 Events창에서 OnPacket항목에 ComDataPacket1packet와 연결한다.
5. 소스
procedure TForm1.FormCreate(Sender: TObject);
begin
ComDataPacket1.StartString := #$7E;
ComDataPacket1.StopString := #$E7;
end;
procedure TForm1.ComDataPacket1Packet(Sender: TObject; const Str: string);
var
str1 : string;
begin
ComPort1.Read(str1,18);
Memo1.Lines.Add('데이터 --> ' + str1);
end;
6. 출력결과
아래 그림처럼 수신내용이 전혀 나타나지 않네요...
짚어봐야 할 사항 들입니다.
1. 통신포트를 설정하고 , 통신포트를 열었는가?
2. 통신포트의 설정내용은 정확한가? 보레이트 속도 예 : 9600, 패리티 예 : N, 데이터비트 예 : 8, 스톱비트 예 : 1
3. 통신 주기가 충분한가? 9600bps 속도라면 1미리초에 한 바이트를 수신 또는 송신할수 있다. 18바이트 라면 18밀리초가
걸리므로 10미리초의 주기는 부족하다.
4. 패킷이 결함이 있는가? 패킷의 시작자와 종료자가 패킷의 데이터에 나타날수 있는 방식은 결함이 있는 방식이다.
패킷의 내용 중에 데이터의 길이를 포함하지 않거나, 체크섬을 포함하지 핞는 패킷은 결함이 있는 방식이다.
패킷에 결함이 있다면, 실시간으로 데이터가 중첩되지 않을 주기로 데이터의 수신이 들어 오도록 해야한다.
이상의 내용을 파악하기 바랍니다.