cpor3.0 사용하여 rs232 통신을 하려고 하는 생짜 입니다..(한3주됐나)
궁금한것이 넘 많아 책두보고 하는데 자세하게 나온것이 없어서요...
아주 왕...초보라서요.....선배님들 부탁드립니다...
전 기계에 연결하여 그내용을 일반 문자로 읽고싶습니다...
궁금증1>buf:=buf+str;(밑에 내용참조)
memo2.Lines.add(buf); 여기에 원래 헥사값이 나와야 하는것 아닌가요..?
(이상한 문자 화살표,네모,별 포함돼 있음)
궁금증2>헥사로 전환하여 내용을 보니깐(모니터링프로그램이용) data 내용중
0a(LF) 줄바꿈이 있는데 한줄로 쭉나오죠..?? 메모장 0a나오면 줄바꿈해줄수
없나요 그냥chr($0a)하면 될것 같은데 안돼네요...
궁금증3> stx/etx가 일반문자인데...어떻게 구분하죠...
예>etx= completed stx=start
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
const
stx='start'; //chr($)\
etx='ent';//chr($)
ent=chr($0A);
var
Rx_data,buf,str:string;
spos,epos,i:integer;
begin
comport1.ReadStr(str,count);
for i:=1 to length(str) do
begin
buf:=buf+str;
memo2.Lines.add(buf);
//buf 내용을 볼려고 하는데 여기 내용이 헥사 값이 아니네요
//이상하게 start 엊쩌구 저쩌구 completed 가찍히네요
// data 내용이 한줄로 쭉 나오는데...
spos:=pos(stx,buf);
epos:=pos(etx,buf);
Rx_data:=copy(buf,spos,epos-spos); //data 만가져오기
memo1.Text:=memo1.Text + Rx_data;
end;
end; +
참조하세요...
procedure TfrmMain.ComPort1RxChar(Sender: TObject; Count: Integer);
const
_STX = #02;
_ETX = #03;
_EOT = #04;
_ENQ = #05;
_ACK = #06;
var
Str: String;
i: integer;
begin
ComPort1.ReadStr(Str, Count);
// 포트에 들어온 모든 데이터
Memo1.Text := 'COM1:[' +IntToStr(Count) +' byte] ' +Str;
for i := 1 to Length(Str) do begin
if (Str[i] in ['0'..'9', _STX, _ETX]) then begin
if Str[i] = _STX then begin
ReadStart_ := True;
Label1.Caption := '';
end else
if Str[i] = _ETX then begin
ReadStart_ := False;
// 완성된 데이터
Memo1.Lines.Add('[COM1: Data]' +Label1.Caption);
end else
if ReadStart_ then Label1.Caption := Label1.Caption +Str[i];
end;
end;
end;