小弟初搞串口.选择了spcomm控件.
上位机指令如下:
第X字节 内 容 及 注 解
1 02(XON) 开始
2 A~Z 地址编号
3 A~F 命令A:握手
命令B:读重
4 异或校验 高四位
5 异或校验 低四位
6 03(X0FF) 结束 这个我要怎么组成信息发送给上位机.并用变量保存上位机发回的信息.望 高人指点一二.
上位机指令如下:
第X字节 内 容 及 注 解
1 02(XON) 开始
2 A~Z 地址编号
3 A~F 命令A:握手
命令B:读重
4 异或校验 高四位
5 异或校验 低四位
6 03(X0FF) 结束 这个我要怎么组成信息发送给上位机.并用变量保存上位机发回的信息.望 高人指点一二.
一般都是组织成数组或者结构体 write()下去,
下位机收到正确的命令和数据后就放一组正确的数据到换成区
然后上位机的返回 一般就是一个read()函数读取缓存区的数据,
接着校验读取的到缓存字节是否正确
这样就完成了一次通讯过程。
type
Func04_Send = packed record
case byte of // 04功能命令数据结构
0:
(Adder: byte; // 设备地址编号
Func: byte; // 功能
MemAdder: Word; // 数据地址
DataSize: Word; // 数据长度,单位为字节
Crc16: Word; // CRC校验码
);
1:
(b: array [0 .. 7] of byte);
end;发送方法(不完整,我只选了部分你需要的):
var { Count单位为字(2 字节) }
s: Func04_Send;
begin
s.Adder := CAR_ADDER;
s.Func := $04;
s.MemAdder := Swap(Adder);
s.DataSize := Swap(Count * 2);
s.Crc16 := CRC(s.b[0], 6);
RtuSize := sizeof(Func04_Send); Result := WriteCom(@s, RtuSize); // 发送读取命令
end;
需要安装VB,然后导入VB的MS comm control3.2就OK.
在delphi里调用MSCOMM控件,在网上搜这个控件的属性和方法,很多。