MSComm控件串口通信?救急!(100分)

  • 主题发起人 主题发起人 yjhzzgl
  • 开始时间 开始时间
Y

yjhzzgl

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾请看:
485通讯指令协议
接口规格:
计算机为主控制机(主机),设备为从机(分机)。
1、通讯方法:485异步通讯,双绞线总线方式
2、波特率:19200bps
3、控制字方式:1位开始位,8个数据位,一个停止位,无奇偶校验
通讯协议格式:
----------------------------------
|开始标志|分机地址|命令|数据|校验|
----------------------------------
[开始标志]长度1个字节,主机给分机发4个AAH
分机给主机发4个BBH
[分机地址]长度1个字节,00H---FEH
[广播地址]FFH
[参数]
[校验]长度1个字节,是设备地址、命令和参数中所有字节的异或和
/////////////////////////////////////////////////////////////////////
1. LED亮或者灭
[功能]让板上的LED亮或者灭。
[命令]A5h
[参数]01(亮)或者00(灭)
分机送回:不返回命令
例如:
主机:AA AA AA AA 08(分机地址) A5 01 AC(校验)

我要请教的是AC(校验)在程序中如何写才能得到,谢谢!
procedure TForm1.Button1Click(Sender: TObject);
var
buffer_send: array of byte;
begin
MSComm1.OutBufferCount:=0;
buffer_send:=VarArrayCreate([0,7], varbyte);
buffer_send[0]:=$aa;
buffer_send[1]:=$aa;
buffer_send[2]:=$aa;
buffer_send[3]:=$aa;
buffer_send[4]:=$05;
buffer_send[5]:=$a3;
buffer_send[6]:=$01;
buffer_send[7]:=
// $ac怎么得到?
mscomm1.Output:=buffer_send;
end;
注:使用VB的MSComm通信控件

 
对不起
buffer_send[4]:=$08;
buffer_send[5]:=$a5;
 
你为什么要自己发送校验码,你只要在组件设置校验位就行了,组件自己会给你产生的。
 
to yostgxf:
老大,请你详细指点一下,在组件中如何设置校验位,属性中好象没有。
另外,哪位高手会呀,请指点。
不胜感谢!
 
[校验]长度1个字节,是设备地址、命令和参数中所有字节的异或和

08(分机地址) A5 01

(08 xor $A5) xor 01 =$AC

自己写个异或和循环就可以啦
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部