rs232c 통신을 "COMM32" 또는 "COMM" 콤포넌트를 이용하여 통신 프로그램을 작성 하였는데 각각 장단점이 있습니다.
하지만 제가 원하는것은 만족을 할 수 가 없어 고수님들의 조언을 얻고자 이 글을 올립니다.
꼭 보시고 답변 부탁 드립니다. ...
1. 콤포넌트의 기능
COMM32 는 송신시 "00" 을 보낼 수 없고, 수신은 가능 하며 RTS, CTS
제어가 안됨.
COMM 은 송신시 "00" 을 보낼 수 있고, RTS, CTS 제어가 되며 수신버퍼에
"00"가 들어오면 STOP BIT로 생각하는지 그 뒤로는 짤림.
2. 제가 원하는 기능
"1." 내용을 모두 만족하는 방법이나 콤프넌트 소개 바랍니다.
RTS, CTS 제어 및 "00"를 송신도 하고 수신도 되어야함.
3. 프로그램한 내용 (COMM으로 한 내용임 한번 봐 주시고 지적 해 주세요.)
1) 송신
procedure TMainF.write1(code: Integer);
var num, txdata : string;
wrkstr: pchar;
code1 : char;
count, cnt, cnt1, i : integer;
begin
readyflg1 := 0;
cnt := 0;
code1 := char(code);
num := #$55 + #$55 + #$98 + code1 + #$00 + #$55;
count := Length(num);
for i := 1 to count do
txdata := txdata + ' ' + inttohex(Byte(num[i]), 2);
Memo1.Lines.add(txdata);
comm1.SetRTSState(True);
wrkstr := pchar(num);
Comm1.write(wrkstr[0], Count);
comm1.SetRTSState(False);
end;
2) 수신
procedure TMainF.Comm1RxChar(Sender: TObject; Count: Integer);
type
CharBuf = array[0..99] of Char;
var
buffptr : ptrchar;
commbuff : string;
Buffer: ^CharBuf;
begin
GetMem(Buffer, Comm1.ReadBufSize);
Fillchar(Buffer^, Comm1.ReadBufSize, 0);
Comm1.Read(Buffer^, 16);
commbuff := Buffer^;
end;
//이렇게 하면 commbuff 의 내용을 디스플레이 하여 보면 "00"이후의
data는 나오지 않음.
////////////////////////////////////////////////////////////////////
사용하신 콤포런트가 널(NULL)값을 지원하는지 체크해보는게 나을거 같군여
지원된다면
받아드린 변수가 string이라면 그변수 length부분에 널부터 추가되어지는 바이트수만큼 추가를 해주셔야 할거 같은데여