乖
乖乖小妹
Unregistered / Unconfirmed
GUEST, unregistred user!
我使用mscomm控件进行串口的操作,选择inputmode为1 - comInputModeBinary,发送十六进制如下:
Function outbox(const str:string):string;
//输出数据打包 (固值输出,
//输出参数和读数据命令)
var
datastr:array of string;
n:byte;
i,j:integer;
instr:string;
outstr:string;
begin
n:=length(str);
n:=n div 2;
setlength(datastr,n+3);
datastr[0]:='FF';
//起始符
datastr[1]:='FE';
//设备地址
datastr[2]:='FE';
j:=0;
for i:=3 to n+2do
begin
datastr:=copy(str,j*2+1,2);
j:=j+1;
end;
//datastr[n+3]:='00';
outstr:='';
for i:=0 to n+2do
begin
[red]outstr:=outstr+chr(strtoint('$'+datastr));[/red]
end;
result:=outstr;
end;
但是这种发送十六进制数据的方法,在发送01~10(好像是这个我忘了)是正常,发送别的如1E就会发送错误,收到的就不是1E而是别的,这是怎么回事啊?应该怎么发送十六进制数据阿?
Function outbox(const str:string):string;
//输出数据打包 (固值输出,
//输出参数和读数据命令)
var
datastr:array of string;
n:byte;
i,j:integer;
instr:string;
outstr:string;
begin
n:=length(str);
n:=n div 2;
setlength(datastr,n+3);
datastr[0]:='FF';
//起始符
datastr[1]:='FE';
//设备地址
datastr[2]:='FE';
j:=0;
for i:=3 to n+2do
begin
datastr:=copy(str,j*2+1,2);
j:=j+1;
end;
//datastr[n+3]:='00';
outstr:='';
for i:=0 to n+2do
begin
[red]outstr:=outstr+chr(strtoint('$'+datastr));[/red]
end;
result:=outstr;
end;
但是这种发送十六进制数据的方法,在发送01~10(好像是这个我忘了)是正常,发送别的如1E就会发送错误,收到的就不是1E而是别的,这是怎么回事啊?应该怎么发送十六进制数据阿?