小弟初识delphi 对mscomm控件已经有一定了解,现在编写一个上位机软件,实现通过串口与一传感器收发数据,使用Modbus通讯协议(异步11位:1位起始位,8位数据位,2位停止位,无校验位)。
目前具体内容是 用一个EDIT文本框 写入像串口发送数据 ,触发click后,在一个MEMO中显示接收倒的数据
例如:发送01 03 00 00 00 08 44 0c 接收:01 03 0E 25 1C 1F 40 1F 36 1F 30 23 28 23 20 23 25 EE
是着编了很长时间,功能一直不能实现,请各位指点,最好能有代码为例,谢谢,不胜感激!!!!
目前具体内容是 用一个EDIT文本框 写入像串口发送数据 ,触发click后,在一个MEMO中显示接收倒的数据
例如:发送01 03 00 00 00 08 44 0c 接收:01 03 0E 25 1C 1F 40 1F 36 1F 30 23 28 23 20 23 25 EE
是着编了很长时间,功能一直不能实现,请各位指点,最好能有代码为例,谢谢,不胜感激!!!!
buffer2:array of byte;
setlength(buffer2,8); buffer2[0]:=$01; //$01怎么获得你自己想
buffer2[1]:=$03;
buffer2[2]:=$00;
buffer2[3]:=$00;
buffer2[4]:=$00;
buffer2[5]:=$08;
buffer2[6]:=$44;
buffer2[7]:=$0c;
mscomm.output:=buffer2; //发送var
s:=Variant;
buffer3:array of byte;
s:=VarArrayCreate([0,0], varByte);
SetLength(buffer3,11);
i:=0;
if MSComm.InBufferCount=11 then
begin
for i:=0 to 10 do
begin
s:=MSComm.Input ;
buffer3[i]:=s[0];
end;
end;
如果你发送edit.text,实际上送出去的是一个字符串,这个串有两个字节,也就是你实际发送的是 $31 $32('0'和'1'对应的asc码)
但一般来说,命令要求发送的都是二进制数据.比如要你发"01",实际上是发$01 (只有一个字节)比如你发送"01 03 00 00 00 08 44 0c "
应该这样:var
buf:array[1..8]of byte;
begin
buf[1]:=$01;
buf[2]:=$03;
buf[3]:=$00;
buf[4]:=$00;
buf[5]:=$00;
buf[6]:=$08;
buf[7]:=$44;
buf[8]:=$0c;....
end;然后发送buf你要自己理解字符串和二进制数据的区别
此时为二进制接收方式