十六进制数据的发送(在线等)(50分)

  • 主题发起人 主题发起人 乖乖小妹
  • 开始时间 开始时间

乖乖小妹

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而是别的,这是怎么回事啊?应该怎么发送十六进制数据阿?
 
我用的就是你说的这个,我可能记错了,但是真的有很多数据用char('$'+数据)发送得到的是错误的数据。
 
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;
outstr:='FFFEFE';
for i:=3 to n+2do

begin

outstr:=outstr+inttohex(strtoint( copy(str,j*2+1,2)),2);
j:=j+1;
end;

result:=outstr;
end;
 
datastr[0]:=#$FF;
//起始符
datastr[1]:=#$FE';
//设备地址
datastr[2]:=#$FE;
outstr:=#$FF#$FE#$FE
 
outstr:=outstr+inttohex(strtoint( copy(str,j*2+1,2)),2);
这里的str的内容可以是我想要发送的十六进制数吗?例如我要发送 '1E',则为
outstr:=inttohex(strtoint('1E'));
是这个意思吗?
 
inttohex(250,2)='FA',inttohex()就是直接把整数变成16进制字符串。
 
TO:zywcd
这样是把整数变成16进制字符串,但是下位机接收到的是ASCII码值,例如发送‘1E’,则下位机收到的就是31 45,而我要得是下位机收到的就是‘1E’,这样怎么做啊?
 
TO:Hexi
这种放送十六进制的方式是可行的,但是有下面这样的问题
var
outstr:string;
out2:string;
i:integer;
begin

mscomm1.PortOpen:=true;
outstr:='';
out2:=inttohex(10,2);
out2:='#$'+out2;
outstr:=#$01+out2;
mscomm1.Output:=outstr;
end;

收到的就是:01 23 24 30 41
是不是不能加入字符串阿,只能是确定要发送什么然后发送‘#$+数据'
 
发送数据时数据丢失,有的时候会出现这样的问题
发送:FF FE FE 04 04 00 2C 06 08 30 12 45 00 00 00 00 01 00 01 00 00 00 00 01 01 00 01 01 00 01 01 01 01 01 01 01 01 01 01 01 01 00 01 00 01 00 01 03 E8 AF 00
这组数据接收是正确的,但是如果发送:FF FE FE 04 04 00 2C 06 08 30 12 46 00 00 00 00 01 00 01 00 00 00 00 01 01 00 01 01 00 01 01 01 01 01 01 01 01 01 01 01 01 00 01 03 E8 00 01 00 01 A3 00,接收就是错误的,接收到的是FF FE FE 04 04 00 2C 06 08 30 12 46 00 00 00 00 01 00 01 00 00 00 00 01 01 00 01 01 00 01 01 01 01 01 01 01 01 01 01 01 01 00 01 03 00 01 00 01 00(E8 和A3数据丢失),这是怎么回事啊?是串口发送数据有问题吗?
 
后退
顶部