要向一个模块发送查询命令,命令格式31H、13H、PORT、Sum,PORT表示第几个端口,从1H开始共16个,Sum=31H + 13H + PORT
收到命令后模块回应31H、13H、PORT、 H、L、CCR,PORT是询问的端口号,传输内容=H×256+L,均为16进制数,
用mscomm的实现发送和接收,要怎么写?:
收到命令后模块回应31H、13H、PORT、 H、L、CCR,PORT是询问的端口号,传输内容=H×256+L,均为16进制数,
用mscomm的实现发送和接收,要怎么写?:
MSCOMM1.PortOpen := True;
MSCOMM1.Output := '你的指令';
在MSCOMM1Comm事件里
Showmessage(MSCOMM1.Input);不过不推介用MSCOMM.相当的不稳定.有时候能发.但收不到数据.
用SPCOMM吧.或者直接用API -WriteFile和ReadFile
Form1: TForm1;
Viewstring:string;
i:integer;
rbuf,sbuf:array[1..4] of byte;implementation{$R *.dfm}
//打开串口
procedure TForm1.FormShow(Sender: TObject);
begin
comm1.StartComm;
end;
//关闭串口procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;
//发送数据
//自定义的发送过程
procedure Tform1.senddata;
var
i:integer;
commflg:boolean;
begin
viewstring:='';
commflg:=true;
for i:=1 to 4 do
begin
if not Form1.comm1.writecommdata(@sbuf[i],1) then
begin
commflg:=false;
break;
end;
sleep(2); {发送时字节间的延时}
viewstring:=viewstring+inttohex(sbuf[i],2)+'';
end;
viewstring:='发送'+viewstring;
memo1.lines.add(viewstring);
memo1.lines.add('');
if not commflg then messagedlg('发送失败!',mterror,[mbyes],0);
end;//接收过程procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
var
i:integer;
begin
viewstring:='';
move(buffer^,pchar(rbuf)^,bufferlength);
for i:=1 to bufferlength do
viewstring:=viewstring+inttohex(rbuf[i],2)+'';
viewstring:='接受'+viewstring;
memo1.lines.add(viewstring);
memo1.lines.add('');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
sbuf[1]:=byte($31);
sbuf[2]:=byte($13);
sbuf[3]:=byte($01);
sbuf[4]:=byte($45);
senddata;{调用发送函数}
end;end.