串口初始化:
MSComm1.CommPort:=1;
MSComm1.Settings:='2400,n,8,1';
MSComm1.InputMode :=1;
MSComm1.RThreshold :=1; //接收缓冲区收到每一个字符都会使MScomm控件产生OnComm事件.
MSComm1.InputLen :=1;功能实现:发送十六进制数据:68 11 11 11 11 11 11 11,返回值应为十六进制表示:FE 11 11 11 11 11 11 11
发送代码:
procedure TForm1.Button1Click(Sender: TObject);
var
sendbuf : array of byte ;
begin
SetLength(sendbuf,8);
sendbuf[0]:=$68;
sendbuf[1]:=$11;
sendbuf[2]:=$11;
sendbuf[3]:=$11;
sendbuf[4]:=$11;
sendbuf[5]:=$11;
sendbuf[6]:=$11;
sendbuf[7]:=$99;
//showmessage(inttostr(sendbuf[7]));
if MSComm1.PortOpen then
MSComm1.Output:=sendbuf;
end;接收代码:
procedure TForm1.MSComm1Comm(Sender: TObject);
var
Vbuf : Variant;
s: array of byte;
i: integer;
temstr:string;
m,inputlen:integer;
begin
if MSComm1.CommEvent = comEvReceive then
begin
inputlen:=MSComm1.InBufferCount;
vbuf := MSComm1.Input;
s:=Vbuf;
for i:=0 to inputlen do //循环读字节
begin
m:=s[i];
temstr:=IntToHex(m,2);
Memo1.Lines.Add(temstr);
end;
end;
end;
问题:在memo1里显示接收到的返回值为:
FE
00
00
00
12
00
00
00
00
11
00
00
00
12
00
00
00
而不是预期的返回值:FE 11 11 11 11 11 11 11为什么呀??????????
MSComm1.CommPort:=1;
MSComm1.Settings:='2400,n,8,1';
MSComm1.InputMode :=1;
MSComm1.RThreshold :=1; //接收缓冲区收到每一个字符都会使MScomm控件产生OnComm事件.
MSComm1.InputLen :=1;功能实现:发送十六进制数据:68 11 11 11 11 11 11 11,返回值应为十六进制表示:FE 11 11 11 11 11 11 11
发送代码:
procedure TForm1.Button1Click(Sender: TObject);
var
sendbuf : array of byte ;
begin
SetLength(sendbuf,8);
sendbuf[0]:=$68;
sendbuf[1]:=$11;
sendbuf[2]:=$11;
sendbuf[3]:=$11;
sendbuf[4]:=$11;
sendbuf[5]:=$11;
sendbuf[6]:=$11;
sendbuf[7]:=$99;
//showmessage(inttostr(sendbuf[7]));
if MSComm1.PortOpen then
MSComm1.Output:=sendbuf;
end;接收代码:
procedure TForm1.MSComm1Comm(Sender: TObject);
var
Vbuf : Variant;
s: array of byte;
i: integer;
temstr:string;
m,inputlen:integer;
begin
if MSComm1.CommEvent = comEvReceive then
begin
inputlen:=MSComm1.InBufferCount;
vbuf := MSComm1.Input;
s:=Vbuf;
for i:=0 to inputlen do //循环读字节
begin
m:=s[i];
temstr:=IntToHex(m,2);
Memo1.Lines.Add(temstr);
end;
end;
end;
问题:在memo1里显示接收到的返回值为:
FE
00
00
00
12
00
00
00
00
11
00
00
00
12
00
00
00
而不是预期的返回值:FE 11 11 11 11 11 11 11为什么呀??????????
...
inputlen:=MSComm1.InBufferCount;
vbuf := MSComm1.Input;
Memo1.Lines.Add('inputlen:'+inttostr(inputlen));//这里发现出现了8,7,6三个数字
...
procedure TForm1.MSComm1Comm(Sender: TObject);
var
Vbuf : Variant;
s: array of byte;
i: integer;
temstr:string;
m,inputlen:integer;
begin
if MSComm1.CommEvent = comEvReceive then
begin
inputlen:=MSComm1.InBufferCount;
vbuf := MSComm1.Input;
m:=Vbuf[0];//因为每次接收的是一个字符,这里Vbuf只有一个元素。
temstr:=temstr+IntToHex(m,2);//这里做累计。
Memo1.Lines.Add(temstr);
end;
end;
可是还是不中,只收到两个字节:FE 11
Memo1.Lines.Add('inputlen:'+inttostr(inputlen));
发现inputlen出现了两次:8和7执行结果如下:
inputlen:8
FE
inputlen:7
11