TComPort로 16진수 주고 받기... 고수님의 조언을...
시리얼 통신, TComPort를 이용해서 특정 기기와 아래와 같이 16진수로 통신을 하려고 합니다. 텔파이 초보다 보니 TComPort.Write와 TComPort.Read로 데이터를 읽고 보내는 것까지는 알겠는데 어떤 방식으로 보내고 받아야 하는지 헤메고 있습니다. 혹 가능하시다면 예제로 고수님의 도움을 요청합니다. -.-;
보는 값:
EE 81 0D
받는 값:
EE 91 0A 0A 01 02 03 04 05 06 07 08 0C 01 0C 0D
이전에 TComport를 사용했었는데, 정확한 메소드는 잘 기억이 안나네요.
Read, Write를 하실수 있다고 하셨으니 벌써 데이터를 보내고 읽는것을 하실수 있는것 아닌지요.
문자던 16진수던 결국 똑같이 2진수로 전달되는 것이 때문에 Read, Write 하는 버퍼에 16진수 데이터
값을 넣어주시면 되요.
특정 기기가 동기형인지 비동기 식인지는 모르겠지만, 일반적으로 기기와 통신할때는 기기의 처리 속도가
있기 때문에, 경우에 따라 한바이트씩 쪼개서 약간 딜레이를 해 주거나 아니면 보내고 약간 딜레이 또는 타임
아웃시간을 좀 늘려주어야할 경우가 있습니다.
메소드가 맞는지는 모르겠지만, 이런 형태로 보내시면 될꺼예요.
<!--CodeS-->
var
command : Array [0..2] of Byte;
response : Array [0..100] of Byte;
begin
command[0] := $EE;
command[1] := $81;
command[2] := $0D;
Comport1.Write(Command[0],High(Command));
Comport1.Read(response[0],16);
<!--CodeE-->
이런 비슷한 식으로 받으시면 되요..
참고로, 수신하는데이터의 양이 일정하지 않고 맨뒤에 $0D를 인식해서 처리해야한다면,
한바이트씩 받아서, $0D인지 확인하면서 버퍼에 저장하는 루틴을 만들어서
사용하셔야 할꺼예요..