伺服驱动器MODBUS通讯协议测试样本 - 副本

杭州日鼎控制技术有限公司

RIDING驱动器通讯测试

MODBUS测试

测试准备:

1.硬件测试:

(1)与硬件工程师确定MODBUS通讯接口定义:MAX485通讯的A+,B-;

(2)信号线上EMC测试,群脉冲测试和雷击浪涌测试;

2.软件测试:

(1)由软件工程师提供测试的具体内容以及更改点;

(2)提供需要进行测试的驱动器型号以及电机代码(On-16);

(3)软件的测试版本号首先确认(On-17);

注:由软件工程师首先确定软件版本号,若更改点有歧义,请确认后进行测试;

Modbus通讯口是使用RS-485串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验;

RIDING伺服驱动器的modbus通讯说明

——串口调试助手篇1.Modbus通讯协议介绍

伺服驱动器可以采用Modbus模式进行上位机通讯,协议格式为:8个数据位、一个停止位、无校验位,发送接收数据都是以16进制格式进行。

站号,地址单元,数据单元均采用16进制数;校验位为CRC(LRC)校验,由校验计算工具生成

Modbus支持的功能码:

(1)03,表示读取保持寄存器;

(2)06,表示写单个模拟量寄存器;

2.RIDING伺服驱动器的modbus通讯参数的基本设置:

(1)PN-81=1;//*RTU协议:1;ACSII协议:0;

(2)PN-82=1;//*站号设定范围:1~31;

(3)PN-83=1;//*波特率设定:0-----4800;1-----9600;2-----19200;3-----38400;4-----57600;

5-----115200;

(4)Modbus通讯协议:8个数据位,一个停止位,无校验;

(5)测试时不需要焊接120Ω的匹配电阻;

(6)如开机会出现dE报警,选择Fn-06 参数初始化。

3.RIDING伺服驱动器的modbus通讯协议的两种模式

(Pn-81):RTU模式和ASCII模式

(1)RTU模式01 03 00 1E 00 0C 25 C9(读取12个参数)

01 03 00 1E 00 07 64 0E(读取7个参数)

a)RTU模式的简易功能说明:

1)读命令 03;(读命令一次最多可以读取12个参数)

1>读取Pn-01的参数:01 03 00 00 00 01 84 0A;

详解,01表示站号;03表示功能码读取;00表示读取参数地址的高8位16进制编码;00表示读取参数地址的低8位16进制编码;00表示读取数

据个数的高8位16进制编码,01表示读取数据个数的低8位16进制编码;

84 0A是CRC校验码;

2>驱动器返回的值:01 03 01 00 04 49 87;

详解,01表示站号;03表示功能码读取;01表示读取参数的个数;00表示读取数据的高8位16进制编码;04表示读取数据的低8位16进制编码;

49 87是CRC校验码;

2)写命令06;

1>写入Pn-01的参数:01 06 00 00 00 01 48 0A

详解,01表示站号;06表示功能码写入;00表示写入参数地址的高

8位16进制编码;00表示写入参数地址的低8位16进制编码;00

表示写入数据的高8位16进制编码,01表示写入数的低8位16进制

编码;48 0A是CRC校验码;

2>驱动器返回的值:01 06 00 00 00 01 48 0A

详解,01表示站号;06表示功能码写入;00表示写入参数地址的高

8位16进制编码;00表示写入参数地址的低8位16进制编码;00

表示写入数据的高8位16进制编码,01表示写入数的低8位16进制

编码;48 0A是CRC校验码;

b)RTU模式的简易运行示例

1)速度模式运行:

1>速度模式使能:01 06 08 00 01 01 4B FA;

2>给定使能+正方向:01 06 08 00 01 11 4A 36;

3>给定使能+反方向:01 06 08 00 01 21 4A 22;

4>速度模式给定速度:01 06 08 02 00 50 2A 56;//0050表示16进制

数,是十进制数的80;命令表示额定转速的万分之80:

2500*80/10000=20rpm/min(可观察On-01平均转速和On-19实时转速)

5>速度模式给定速度200r/min: 01 06 08 02 03 20 2B 42

6>给定速度为0:01 06 08 02 00 00 2A 6A;

7>速度模式去掉使能状态:01 06 08 00 00 01 4A 6A;

电机额定转速(Pn-A3)的50%:01 06 08 02 13 88 27 3C;

电机额定转速(Pn-A3)的100%,万分之一;01 06 08 02 27 10 30 56;

只的是(给定的额定转速>Pn-34设定的值时,此时按最大转速运行)

2)速度模式的多段速运行,通过修改参数为Pn-31,Pn-32,Pn-33的参数值实现多段速模式运行:

1>由参数Pn-31控制速度正转的代码:01 06 08 00 01 51 4B C6;

由参数Pn-31控制速度反转的代码:01 06 08 00 01 61 4B D2;

2>由参数Pn-32控制速度正转的代码:01 06 08 00 01 91 4B 96;

由参数Pn-32控制速度反转的代码:01 06 08 00 01 A1 4B 82;

3>由参数Pn-33控制速度正转的代码:01 06 08 00 01 D1 4A 66;

4>由参数Pn-33控制速度反转的代码:01 06 08 00 01 E1 4A 72;

5>速度停车的代码:01 06 08 00 01 01 4B FA;(只能在多段速时有效)

6>速度复位的代码:01 06 08 00 04 01 48 AA;

3)位置模式运行:(测试时先给定位置在给定速度)

4):01 03 08 16 00 08 A7 A8;(注:86 A0为低8位00 01 为高八位)

5)清除当前命令(On-05)和反馈脉冲(On-04):01 06 08 08 00 03 4A 69 6)报警复位(Fn-04); 01 06 08 08 00 04 0B AB

7)清楚报警记录: 01 06 08 08 00 05 CA 6B

1>位置模式使能:01 06 08 00 01 00 8A 3A;

2>位置模式给定位置高位:01 06 08 04 00 01 0B AB;

位置模式给定位置低位:01 06 08 05 86 A0 F9 B3;//*正转100000

脉冲;//0001 86A0表示+100000;

位置模式给定位置高位:01 06 08 04 00 0F 8A 6F

位置模式给定位置低位:01 06 08 05 42 40 AA FB; //*正转1000000

脉冲;//000F 4240表示+1000000;

3>位置模式给定位置高位:01 06 08 04 FF FE 0A 1B;

位置模式给定位置低位:01 06 08 05 79 60 B8 13;//*反转100000

脉冲;//FFFE 7960表示-100000;

4>位置模式给定速度:01 06 08 02 00 32 AB BF;额定转速的

50/10000=0.5%,24rpm;(0032表示十六进制数,十进制为50, 命令

转速为额定转速的万分之50,但是在位置环时电机的最小转速

24r/min)

5>位置模式给定速度50r/min:01 06 08 02 00 C8 2B FC (00C8表示

十六进制数,十进制为200,命令额定转速的万分之2%。

2500*200/10000=50r/min)

6>位置模式去掉使能状态:01 06 08 00 00 00 8B AA;

7>位置复位的代码:01 06 08 00 04 00 89 6A;

注:驱动器给定的位置模式的速度命令指令,最小的速度单位是24rpm,

当转速不足24rpm时,按照24rpm运行;当转速小于48rpm,大于24rpm

时,仍然按照24rpm运行;转速等于48r/min,按照48r/min ;列如:设

定转速为X,则X在这个区间运行24n

8)力矩模式运行:

1>力矩模式使能: 01 06 08 00 01 02 0B FB;

2>力矩模式力矩: 01 06 08 03 00 32 FA 7F

3>速度Pn-31正转: 01 06 08 00 01 52 0B C7 ;

4>力矩停车代码: 01 06 08 00 04 02 08 AB;

注:力矩模式暂时不能进行速度给定。

(2)ASCII模式

a)RTU转换为ACSII模式:01 06 00 50 00 00 89 DB;

b)ACSII转换为RTU模式::010*********A8;

c)ASCII模式的简易功能说明:

1)读命令 03;(读命令一次最多可以读取12个参数)

1>读取Pn-01的参数::010*********FB

;//输入命令的结束符是Enter。

详解,“:”表示开始符;01表示站号;03表示功能码读取;00表示读取参数地址的高8位16进制编码;00表示读取参数地址的低8位16进制编

码;00表示读取数据个数的高8位16进制编码,01表示读取数据个数的低

8位16进制编码;FB是LRC校验码;结束符Enter。

2>驱动器返回的值: :010*******FA;

详解,“:”表示开始符;01表示站号;03表示功能码读取;01表示读取参数的个数;00表示读取数据的高8位16进制编码;04表示读取数据的

低8位16进制编码;FA是LRC校验码。

2)写命令06;(写命令每次只能写入一个参数)

1>写入Pn-01的参数: :010*********F7

;//输入命令的结束符是Enter。

详解,“:”表示开始符;01表示站号;06表示功能码写入;00表示写入参数地址的高8位16进制编码;00表示写入参数地址的低8位16进制编码;00表示写入数据的高8位16进制编码,02表示写入数的低8位16进制编码;F7是LRC校验码;结束符Enter。

2>驱动器返回的值: :010*********F7

详解,“:”表示开始符;01表示站号;06表示功能码写入;00表示写入参数地址的高8位16进制编码;00表示写入参数地址的低8位16进制编码;00表示写入数据的高8位16进制编码,02表示写入数的低8位16进制编码;F7是LRC校验码。

注:但发送正确的输入指令时,返回值出现汉字,则表示的内容为输入多代码,需清空输入多余的输入指令

4.虚拟IO口的测试(#0807):01 06 08 07 00 FF 7A 2B;

(对应On-11~On-12)

(1)输入口Input:

a)第一个输入口:01 06 08 07 00 01 FB AB;

b)第二个输入口:01 06 08 07 00 02 BB AA;

c)第三个输入口:01 06 08 07 00 04 3B A8;

d)第四个输入口:01 06 08 07 00 08 3B AD;

e)第五个输入口:01 06 08 07 00 10 3B A7;

f)全部输入口:01 06 08 07 00 1F 7B A3;

g)第六个输入口01 06 08 07 00 20 3B B3(Pr-80)

h)第13个输入口01 06 08 07 10 00 37 AB(Pr-87)

i)关闭输入口:01 06 08 07 00 00 3A 6B;

(2)输出口Output:(目前只能测试3个)

a)第一个输出口:01 06 08 06 00 01 AA 6B;

b)第二个输出口:01 06 08 06 00 02 EA 6A;

c)第三个输出口:01 06 08 06 00 04 6A 68;

d)全部输出: 01 06 08 06 00 07 2A 69;

e)关闭输出口:01 06 08 06 00 00 6B AB;

(3)测试方法:

a)测试输入口时,需要对应On-11的值,从右到左依次为,第一个

输入口,第二个输入口,第三个输入口,第四个输入口,第五个

输入口;

b)测试输出口时,需要对应On-12的值,从右到左依次为,第一个

输出口,第二个输出口,第三个输出口;

(4) 输入虚拟端口测试:D0~D4为MI1~MI5表示输入端口

测试时要将输出口设置成相应的端口输出。

读取虚拟口参数命令01 03 08 24 00 01 C6 61

返回值:01 03 02 00 1F F9 8C 列入返回值中1F表示为16进制数转换为为二进制数为11111。即输入端口PN11~PN15全部为1(闭合状态)。00表示为Pr80~Pr81的端口状态为0(断开状态)

输出虚拟端口测试:D0~D3为MI1~MI4表示输出端口01 03 08 25 00 01 97 A1

01 03 02 00 07 F9 86

列入返回值中07表示为16进制数转换为为二进制数为111。即输出端口PN15~ PN17全部为1(闭合状态)。

5.状态区读取(#0810~#0823):

读取状态区的24个参数:0810H~081BH 01 03 08 10 00 0C 46 6A

081CH~0823H 01 03 08 1C 00 0C 86 69

6.站号测试(Pn-82):

采用RTU模式测试:Pn-81=1;PN-83=1(默认波特率9600);

站号的独立性测试(一个下位机只响应一个站号(从机)):试在设定站号下,输入其它站号指令,不响应(即无数据返回),再次输入本站号指令,能够按照发送命令执行,则通讯功能正常。监控Sn-01的运行状态。

(1)位置模式使能:01 06 08 00 01 00 8A 3A;Sn-01显示P-P1n;(站号1)图1;

(2)速度模式使能:01 06 08 00 01 01 4B FA;Sn-01显示n-Son;(站号1)图2;

(3)位置模式使能:02 06 08 00 01 00 8A 09;Sn-01显示n-Son;(发送站号2指令)图3 ;

(4)速度模式使能:02 06 08 00 01 01 4B C9;Sn-01显示n-Son;(发送站号2指令)图4;

(5)位置模式使能:01 06 08 00 01 00 8A 3A;Sn-01显示P-P1n;(站号1)图5;

(6)速度模式使能:01 06 08 00 01 01 4B FA;Sn-01显示n-Son;(站号1)图6;

(7)符合上述显示,则通讯功能正常。(下附图串口调试助手说明,按照上述步骤操作);

图1

图2

图3

图4

图5

图6

7.波特率测试:01 03 00 52 00 01 25 DB;//波特率修改

后,伺服驱动器需要断电有效;波特率设定:0-----4800;

1-----9600;2-----19200;3-----38400;4-----57600;

5-----115200;

(1)波特率设置为4800:01 06 00 52 00 00 28 1B;

(2)波特率设置为9600:01 06 00 52 00 01 E9 DB;

(3)波特率设置为19200:01 06 00 52 00 02 A9 DA;

(4)波特率设置为38400:01 06 00 52 00 03 68 1A;

(5)波特率设置为57600:01 06 00 52 00 04 29 D8;

(6)波特率设置为115200:01 06 00 52 00 05 E8 18;

图A

上图A,红色箭头:串口调试助手的波特率设定为4800bps;蓝色箭头:读取Pn-83的参数的值为0;与设定的值一致,此时通讯正常;

图B

上图B,修改串口小助手的波特率为9600bps;由于驱动器的波特率为4800bps;此时二者的波特率不一致,则数据通讯失败,会出现乱码;

8.重要参数测试

注:(86 A0为低8位00 01 为高八位)

编码器反馈反应的是电机运转的圈数,必须加上使能信号,使能信号去除编码器反馈为0

2.速度给定命令:目前驱动器给定的位置模式的速度命令指令,最小的速度单位是24rpm,

当转速不足24rpm时,按照24rpm运行;当转速小于48rpm,大于24rpm时,仍然按照24rpm运行;依次类推;

速度模式的转速按照实际给定的值来确定;即万分之1,表示实际转速为(1/10000)*2500=0.25rpm;

9.附录1:一个ModeBus数据帧的构成

读命令在Servo中分为读取参数,读取实时数据,读取历史数据,其数据帧的构成都是一样的。

(1)读命令时的数据帧构成

发送读参数命令时的数据帧构成:

SciBuff[0]:开始符,为“:”对应的ASCII码0x3a;

[1,2]:站号,两位十进制数表示,例如站号15,分别存1和5的ASCII码到数组中;

[3,4]:功能码,=3:读;=6:写;=8:无操作;

[5,6,7,8]:读取的参数号,四位十进制数表示;

[9,10,11,12]:本次读取参数的个数,四位十进制数表示;

[13,14]:校验位;取和求反

[15]:=0x0d,结束符CR;

[16]:=0x0a,结束符LF;CR+LF=回车,表示本帧数据发送完毕;

返回读参数命令是的数据帧构成:

SciBuff[0]:开始符,为“;”对应的ASCII码0x3a;(不变)

[1,2]:站号,两位十进制数表示,例如站号15,分别存1和5的ASCII码到数组中;

(不变)

[3,4]:功能码,=3:读;=6:写;=8:无操作;(不变)

[5,6]:返回数据的长度,两位十进制数表示;(实际长度*2)

[7,…,54]:读取的参数,最多12个参数,每个参数用四位十进制数表示;(有效数据)[55,56]:校验位;取和求反

[57]:=0x0d,结束符CR;

[58]:=0x0a,结束符LF;CR+LF=回车,表示本帧数据发送完毕;

(2)写命令时的数据帧构成

发送写命令时的数据帧构成:

SciBuff[0]:开始符,为“;”对应的ASCII码0x3a;

[1,2]:站号,两位十进制数表示,例如站号15,分别存1和5的ASCII码到数组中;

[3,4]:功能码,=3:读;=6:写;=8:无操作;

[5,6,7,8]:写参数的地址,四位十进制数表示;

[9,10,11,12]:写参数的值,四位十进制数表示;

[13,14]:校验位;取和求反

[15]:=0x0d,结束符CR;

[16]:=0x0a,结束符LF;CR+LF=回车,表示本帧数据发送完毕;

返回写命令时的数据帧构成:

按照发送过来的数据原样返回。

(3)校验出错时的数据帧构成

SciBuff[0]:开始符,为“;”对应的ASCII码0x3a;

[1,2]:站号,两位十进制数表示,例如站号15,分别存1和5的ASCII码到数组中;

[4]:0x38;

[5,6]:错误代码,两位十进制数表示;

[7,8]:校验位

[9]:=0x0d,结束符CR;

[10]:=0x0a,结束符LF;CR+LF=回车,表示本帧数据发送完毕;

10.附录2:RIDING伺服驱动器的地址单元

地址单元:

0000H~07FFH:参数区(列如:读取Pn-01的值01 03 00 00 00 01 84 0A

返回值 01 03 01 00 04 49 87)

0800H~08FFH:命令区(SciServoCom)

+00H():运行模式设定

D0~D3:00=位置;01=速度;10=力矩;

D4~D5:00=停车;01=FWD;10=REV;11=Reserved;

D6~D7:00=多段速无效;01=多段速1;10=多段速2;11=多段速3;

D8:SCI使能

D9:SCI急停

D10:SCI复位

D11~D15:Fnxx功能

=0:NULL

=1:FN01(JOG:点动运行)

=2:FN02(Prt:清除当前命令和反馈脉冲)

=3:FN03(CPrt:清除计算脉冲)

=4:FN04(rt:报警复位)

=5:FN05(ALrt:报警记录初始化)

=6:FN06(PArt:参数初始化)

=7:FN07(oFFt:自动补偿调整)

=8:FN08(保留)

=9:FN09(保留)

=10:FN10(ESY.1:简易运行)

=11:FN11(Ptn:模式运行)

+01H(RecordMode):

D0~D3:采样时间设置(1ms PU,1ms default)

D4:=1,启动时保存;=0,停止时保存

D5:=1,允许采样;=0,禁止采样

D6~D15:采样变量选择

D6=SpeedNow(实际转速,单位0.1RPM)

D7=SpeedRef(实际转速,单位0.1RPM)

D8=IQNow(Q轴实际电流,单位PU)

D9=IQRef(Q轴给定电流,单位PU)

D10=IDNow(D轴实际电流,单位PU)

D11=IDRef(D轴给定电流,单位PU)

D12=PosiErr(位置误差,单位个)

D13=PosiNow(位置累积,单位个)

D14=CurrI(力矩,单位百分比)

D15=CurrU(U相电流,单位A)

+02H:运行速度给定值(额定速度万分比,0.0001)

+03H:运行力矩给定值(百分比,0.0001)

+04H:运行位置给定值高位

+05H:运行位置给定值低位(高位发送后发送低位有效)

+06H:虚拟IO,D0~D3对应Pn15~Pn18

+07H:虚拟IO,D0~D13对应Pn10~Pn14 Pr-80~Pr-87设定的功能

+08H:=3 清除反馈脉冲和当前命令

=4 报警复位

0810H~082FH:状态区

+00H:当前运行状态字+01H:故障代码

+02H:当前转速+03H:指令转速

+04H:平均转矩+05H:直流电压

+06H:命令积算脉冲(Lo) +07H:命令积算脉冲(Hi)

+08H:返回积算脉冲(Lo) +09H:返回积算脉冲(Hi)

+0AH:位置偏差(Lo) +0BH:位置偏差(Hi)

+0CH:编码器反馈(Lo)(断使能清零)+0DH:编码器反馈(Hi) (断使能清零)+0EH:速度环反馈脉冲LO(断使能不清零)+0FH:速度环反馈脉冲HI(断使能不清零)+10H:电角度+11H:脉冲串输入频率

+12H:散热器温度+13H:模拟给定电压

+14H:虚拟IO输入:D0~D13:MI1~MI5(Pn-11~Pn-15)MI6~MI13(Pr-80~Pr-87)对应输入端口

+15H:虚拟IO输出:MO1 ~MO3 对应PN15~Pn-17的输出的端口

//灰色为暂时未添加;

注:驱动器输入线未接大地,电脑接地时,通过上位机给驱动器发命令时,由于地线干扰,返回值不断接收。

modbus_通讯协议_实例

上海安标电子有限公司 ——PC39A接地电阻仪通信协议 通信协议: 波特率:9600数据位:8校验位:无停止位:1 上位机(计算机): 字节号 1 2 3 4 5 6 7 8 意义ID Command 数据地址V alue CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,读:3或4,写:6 3 数据地址:2个字节,寄存器地址,读从100开始,写从200开始 4 V alue:2个字节,读:个数(以整型为单位),写:命令/ 数据(以整型为单位) 5 CRC:计算出CRC 下位机(PC39A): 读数据,若正确 字节号 1 2 3 3+N (N=个数*2) 3+N+1 3+N+2 意义ID Command=3 / 4 数据个数数据CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,收到的上位机命令 3数据个数:1个字节,返回数据个数(以字节为单位) 4 V alue:N个字节,是返回上位机的数据 5 CRC:计算出CRC 写命令,若正确 返回收到的数据: 若错误 字节号 1 2 3 4 5 意义ID Command 数据CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,收到的上位机命令或上0x80, 如收到3,返回0x83 3数据:1个字节,错误的指令 错误指令 1:表示command不存在 2:表示数据地址超限 4 CRC:计算出CRC

例如读PC39A 电流数据: 机器地址为12,电流的数据地址100,数据为15.45(A) (一个整型数据) 主机: ID Command 数据地址 V alue CRC 16进制 0x0c 0x03 0x0064 0x0001 CRC_H CRC_L 10进制 12 3 100 1 CRC_H CRC_L 从机返回 如正确: ID Command 数据个数(以字节为单位) V alue CRC 16进制 0x0c 0x03 0x002 0x0609 CRC_H CRC_L 10进制 12 3 2 1545 CRC_H CRC_L 如错误: ID Command 数据 CRC 16进制 0x0c 0x83 0x02 CRC_H CRC_L 10进制 12 131 2 CRC_H CRC_L 例如发PC39A 启动命令: 机器地址为12,命令的地址200,数据为25000(25000表示启动) 主机: ID Command 数据地址 V alue CRC 16进制 0x0c 0x06 0x00c8 0x61a8 CRC_H CRC_L 10进制 12 6 200 25000 CRC_H CRC_L 从机返回 如正确: ID Command 数据地址 V alue CRC 16进制 0x0c 0x06 0x00c8 0x61a8 CRC_H CRC_L 10进制 12 6 200 25000 CRC_H CRC_L 如错误: ID Command 数据 CRC 16进制 0x0c 0x86 0x02 CRC_H CRC_L 10进制 12 134 2 CRC_H CRC_L 0011 10000110 错误码0x83 功能码0x06错误码0x86

基于Modbus协议实现单片机与PLC之间的通讯

基于Modbus协议实现单片机与PLC之间的通讯 来源:PLC&FA 作者:蔡晓燕赵兴群万遂人董鹏云 关键词:可编程控制器 Modbus 通讯协议 1 引言 HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。它有字母、汉字、图形和图片等不同的显示,界面简单友好。配有长寿命的薄膜按钮键盘,操作简单。它一般采用具有集成度高、速度快、高可靠且价格低等优点的单片机[1]作为其核心控制器,以实现实时快速处理。PLC和单片机结合不仅可以提PLC的数据处理能力,还可以给用户带来友好简洁的界面。本文以Modbus通讯协议为例,详细讨论了一个人机系统中,如何用C51实现单片机和PLC之间通讯的实例。 2 Modbus通讯协议[4] Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。 Modbus协议提供了主—从原则,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。主设备查询的格式:设备地址(或广播,此时不需要回应)、功能代码、所有要发送的数据、和一错误检测域。从设备回应消息包括确认地址、功能码、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。 控制器能设置为两种传输模式:ASCII和RTU,在同样的波特率下,RTU可比ASCII方式传送更多的数据,所以采用KTU模式。 (1) 典型的RTU消息帧 典型的RTU消息帧如表1所示。

RTU消息帧的地址域包含8bit。可能的从设备地址是0...127(十进制)。其中地址0是用作广播地址,以使所有的从设备都能认识。主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。 RTU消息帧中的功能代码域包含了8bits,当消息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行为;当从设备回应时,它使用功能代码域来指示是正常回应(无误)还是有某种错误发生(称作异议回应,一般是将功能码的最高位由0改为1)。 从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代 码所定义的行为。这包括了像不连续的寄存器地址,要处理项的数目,域中实际数据字节数。如果没有错误发生,从从设备返回的数据域包含请求的数据。如果有错误发生,此域包含一异议代码,主设备应用程序可以用来判断采取下一步行动。 当选用RTU模式作字符帧时,错误检测域包含一16Bits值(用两个8位的字符来实现)。错误检测域的内容是通过对消息内容进行循环冗长检测(CRC)方法得出的。CRC域附加在消息的最后,添加时先是低字节然后是高字节。 (2) 所有的Modbus功能码 Modbus的功能码定义如表2所示。

(完整版)MODBUS通讯协议-RTU要点

Modbus 通讯协议 (RTU传输模式)本说明仅做内部参考,详细请参阅英文版本。

第一章Modbus协议简介 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。 此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。 当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。 协议在一根通讯线上使用应答式连接(半双工),这意味着在一根单独的通讯线上信号沿着相反的两个方向传输。首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,在相反的方向上终端设备发出的应答信号传输给主机。协议只允许在主计算机和终端设备之间,而不允许独立的设备之间的数据交换,这就不会在使它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。 1.1 传输方式 传输方式是一个信息帧内一系列独立的数据结构以及用于传输数据的有限规则,以RTU 模式在Modbus总线上进行通讯时,信息中的每8位字节分成2个4位16进制的字符,每个信息必须连续传输下面定义了与Modebus 协议– RTU方式相兼容的传输方式。 代码系统 ?8位二进制,十六进制数0...9,A...F ?消息中的每个8位域都是一个两个十六进制字符组成 每个字节的位 ?1个起始位 ?8个数据位,最小的有效位先发送 ?1个奇偶校验位,无校验则无 ?1个停止位(有校验时),2个Bit(无校验时) 错误检测域 ?CRC(循环冗长检测)

很好的威纶通MODBUSRTU通讯协议与变频器通讯案例

很好的威纶通 M O D B U S R T U通讯协议与变频器通讯案例 公司标准化编码 [QQX96QT-XQQB89Q8-NQQJ6Q8-MQM9N]

本文研究的是触摸屏通过MODBUS RTU通讯协议与变频器通讯实现变频器的控制。触摸屏采用威纶通TK6070IP,变频器用汇川MD380通用系列。通过触摸屏编程软件,编辑控制画面实现变频器的启动、停止、速度调节、多段速速度设置,通过宏指令实现工程值与实际值的转换。 一、MODBUS RTU 简介: 为了在自动化系统之间、自动化系统和所连接的分散的现场设备之间进行信息交换,如今串行现场总线被主要用作通讯系统。成千上万的应用已经强烈地证明了通过使用现场总线技术,可以节省多至40%的接线、调试及维护的费用。仅仅使用两根电线就可以传送现场设备的所有相关信息,比如输入和输出数据、参数、诊断数据。过去使用的现场总线往往是制造商的特定现场总线,并且同其它现场总线不兼容。如今使用的现场总线几乎是完全公开和标准化的。这就意味者用户可以以最合理的价格选择最好的产品,而不用依赖于每个独立的制造商。Modbus RTU是一种国际的、开放的现场总线标准。作为一种很容易实现的现场总线协议,在全世界范围内,Modbus得到了成功的应用。应用领域包括生产过程中的自动化、过程控制和楼宇自控。MODBUS RTU通讯协议的报文如图1。 图1 MODBUS RTU 通讯协议的报文功能码如下: 01H 读取线圈状态。从执行机构上读取线圈(单个位)的内容; 02H 读取离散量输入。从执行机构上读取离散量输入(多个位)的内容; 03H 读取保持寄存器。从执行机构上读取保持寄存器(16位字)的内容; 04H 读取输入寄存器。从执行机构上读取输入寄存器(16位字)的内容; 05H 强置单线圈。写数据到执行机构的线圈(单个位)为“通”(“1”)或“断”(“0”); 06H 预置单寄存器。写数据到执行机构的单个保持寄存器(16位字); 0FH 强置多线圈。写数据到执行机构的几个连续线圈(单个位)为“通”(“1”) 或“断”(“0”); 10H 预置多寄存器。写数据到执行机构的几个连续的保持寄存器(16位字)。 二、威纶通编程软件介绍: EB8000软件中MODBUS协议的设备类型为0x、1x、3x、4x、5x、6x,还有 3x_bit,4x_bit,6x_bit,0x_multi_coils等,下面分别说明这些设备类型在MODBUS协议中支持哪些功能码。 0x:是一个可读可写的设备类型,相当于操作PLC的输出点。该设备类型读取位状态的时候,发出的功能码是01H,写位状态的时候发出的功能码是05H。写多个寄存器时发出的功能码是0fH。

modbus协议下上位机编程实例

竭诚为您提供优质文档/双击可除modbus协议下上位机编程实例 篇一:modbus协议下的上位机地址 Rs485采取流量计数据,经串口com1的2号地址读到int ouch中来,双字40001、40002为浮点型瞬时流量,读到上位机项目为40001F双字40004、40005为长整型累计流量,读到上位机项目为40004l 驱动设置与intouch标记名的设置 驱动设置: 项目名设置 注:在不修改驱动设置的情况下,s=s1+s2*65535 s=s2+s1*65535 根据各个厂家的仪表,上面工式有区别,设计时各个测试一下。 篇二:modbus通讯协议实例 上海安标电子有限公司 ——pc39a接地电阻仪通信协议 通信协议:

波特率:9600数据位:8校验位:无停止位:1 上位机(计算机): 注:1id:1个字节,由单机来定(0~255) 2command:1个字节,读:3或4,写:6 3数据地址:2个字节,寄存器地址,读从100开始,写从200开始4Value:2个字节,读:个数(以整型为单位),写:命令/数据(以整型为单位)5cRc:计算出cRc下位机(pc39a ):注:1id:1个字节,由单机来定(0~255) 2command:1个字节,收到的上位机命令 3数据个数:1个字节,返回数据个数(以字节为单位)4Value:n个字节,是返回上位机的数据5cRc:计算出cRc 写命令,若正确返回收到的数据:若错误注:1id:1个字节,由单机来定(0~255) 2command:1个字节,收到的上位机命令或上0x80, 如收到3,返回0x83 3数据:1个字节,错误的指令错误指令 1:表示command不存在2:表示数据地址超限 4cRc:计算出cRc 例如读pc39a电流数据: 机器地址为12,电流的数据地址100,数据为15.45(a)(一个整型数据)

Modbus通讯协议(TCP和RTU)

1MODBUS RTU 读寄存器请求序号意义所占字节字节存放格式 1从设备地址1个字节0x00?0xff 2功能码1个字节0x03 3起始寄存器基地址两个字节高字节在前 4寄存器个数两个字节高字节在前 5CRC校验码两个字节低字节在前 读寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x03 3数据长度1个字节寄存器个数×2 4数据寄存器个数×2个字节每个寄存器高字节在前5CRC校验码两个字节低字节在前 写单个寄存器请求序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x06 3起始寄存器地址两个字节高字节在前 4寄存器值两个字节 高字节在前 5CRC校验码 两个字节 低字节在前 写单个寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x10 3起始寄存器地址两个字节高字节在前 4寄存器值两个字节 高字节在前 5CRC校验码 两个字节 低字节在前 1

写多个寄存器请求序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x10 3起始寄存器地址两个字节高字节在前 4寄存器个数两个字节 高字节在前 5数据长度 1个字节 寄存器个数×2  6数据寄存器个数×2个字节每个寄存器高字节在前7CRC校验码 两个字节 低字节在前 写多个寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x10 3起始寄存器地址两个字节高字节在前 4寄存器个数两个字节 高字节在前 5CRC校验码 两个字节 低字节在前 错误返回序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节请求功能码+0x80 3错误码1个字节 其代号见下面表格4CRC校验码 两个字节 低字节在前 错误代号错误代号意义 0x01不支持该功能码 0x02越界 0x03寄存器数量超出范围 0x04读写错误 2

电磁流量计实用标准MODBUS通讯协议详情(1)

电磁流量计转换器 通讯协议 2012-10-12

目录 一、概述................................................................................................. - 2 - 二、网络结构及接线................................................................................ - 2 -

三、Modbus协议RTU帧格式 .............................................................. - 2 - 四、Modbus协议命令编码定义............................................................. - 4 - 五、电磁流量计MODBUS寄存器定义 ................................................... - 5 - 1. 电磁流量计MODBUS寄存器地址定义............................................... - 5 - 2.PLC地址设置说明................................................................................ - 5 - 3.组态王地址设置说明............................................................................. - 6 -4.数据含义说明 .................................................................................... - 6 -六、通讯数据解析................................................................................... - 7 -1读瞬时流量 .......................................................................................... - 7 -2.读瞬时流速:....................................................................................... - 8 -3读累积流量 .......................................................................................... - 8 - 5.读总量流量单位 ................................................................................. - 10 - 6.读报警状态 ........................................................................................ - 10 - 七、应用举例........................................................................................ - 11 - 1.C语言MODBUS 示例程序............................................................... - 11 - 2.modbus调试软件modbus poll通讯实例....................................... - 13 - 3.modbus调试软件modscan32通讯实例 ......................................... - 15 - 4.组态王6.53通讯实例 ........................................................................ - 17 - 5.力控 6.1通讯实例.............................................................................. - 21 -

modbus通讯协议

Modbus通讯协议 图片: 图片: 图片:

Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。此协议支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。 当在网络上通信时,Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。 Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master 端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。

Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP 协议是一个面向连接的可靠协议。另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus协议的可靠性较好。 下面我来简单的给大家介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其中TCP和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。所以在这里我仅介绍一下Modbus的ASCII和RTU协议。 下表是ASCII协议和RTU协议进行的比较: 通过比较可以看到,ASCII协议和RTU协议相比拥有开始和结束标记,因此在进行程序处理时能更加方便,而且由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。但是因为它传输的都是可见的ASCII 字符,RTU传输的数据每一个字节ASCII都要用两个字节来传输,比如RTU传输一个十六进制数0xF9,ASCII就需要传输’F’’9’的ASCII码0x39和0x46两个字节,这样它的传输的效率就比较低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。

MODBUS标准通讯协议

MODBUS 标准通讯协议(简版) (基于Modbus 应用协议RTU 通讯模式) 1. 前言 本协议适用于符合MODBUS 标准通讯协议的规定以及在Modbus 网络上以RTU 模式通信运行的设备和应用软件。本协议按照Modbus 应用协议标准制定。 2. 波特率可选范围 代码 6 7 8 9 10 11 12 13 14 波特率 2400 4800 9600 14400 19200 28800 38400 57600 115200 3. RTU 通讯数据传输模式 3.1 RTU 模式每个字节( 11 位 )的格式为 : 通讯传输为异步方式,并以字节(数据帧)为单位。在主站和从站之间传递的每一个数据帧都是11位的串行数据流。 编码系统: 8–位二进制,报文中每个8 位字节含有两个4 位十六进制字符(0–9, A –F) 数 据 位: 1个 起始位 8个 数据位, 首先发送最低有效位 1个 奇偶校验(注:偶校验是要求的,其它模式( 奇校验,无校验 )也可以使用) 1个 停止位 (注 :使用无校验时要求2个停止位) 帧校验域:循环冗余校验(CRC) 3.2 字符的串行传送方式: 每个字符或字节按如下顺序发送(从左到右):最低有效位 (LSB) . . . 最高有效位 (MSB) 通过配置,设备可以接受奇校验、偶校验或无校验。如果无奇偶校验,那么传送一个附加的停止位来填充数据帧使其成为完整的11位异步字符: 3.3 数据编码: Modbus 处理的所有数据按照存储数据的类型可以分为位寄存器(容量为1位)和16位寄存器(容量为16位)两种,它们的宽度都是16位(Data is packed as two bytes per register),协议允许单个选择65536个数据项,而且其读写操作可以越过多个连续数据项直到数据大小规格限制,这个数据大小规格限制与事务处理功能码有关。在Modbus PDU 中从0~65535寻址每个数据。 Modbus 使用一个‘big-Endian ’表示地址和数据项,即最高有效字节在低地址存储,最低有效字节在高字节存储。这意味着当发送多个字节时,首先发送最高有效位例如: 寄存器大小 值 16位 0x1234 发送的第一字节为0x12,然后发0x34。 4. RTU 报文帧结构 Modbus RTU 报文帧格式如下: 地址码 功能码 数据区 错误校验码 2 字节 1字节 1字节 0到252字节 CRC 低 CRC 高

Modbus协议讲解

Modbus协议讲解 一、基本术语 1、字word、字节byte、位bit 1 word = 2 byte; 1 byte = 8 bit. 2、校验码 校验码是由前面的数据通过某种算法得出的,用以检验该组数据的正确性。代 码作为数据在向计算机或其它设备进行输入时,容易产生输入错误,为了减少 这种输入错误,编码专家发明了各种校验检错方法,并依据这些方法设置了校 验码。 常用的校验有:累加和校验SUM、字节异或校验XOR、纵向冗余校验LRC、循环冗余校验CRC…… 3、协议和接口 协议是一种规范和约定,是一种通讯的语言,规定了通信双方能够识别并使用 的消息结构和数据格式。 接口是一种设备的物理连接,指的是在物理层上的定义,像 RS422/RS232/RS485/以太网口等。协议和接口并不是一个概念,不能混淆。 Modbus协议一般运行在RS485物理接口上,半双工的,是一种主从协议。 二、Modbus协议概述

Modbus协议是应用于电子控制器上的一种通用语言,实现控制器之间、控制器由网络和其它设备之间的通信,支持传统的RS232/RS422/RS485和最新发展的以太网设备。它已经成为一种通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中控制。此协议定义了一个控制器能认识使用的消息结构。 Modbus协议是一种请求——应答方式的协议。 三、两种传输方式 1、ASCII模式 ASCII:美国标准信息交换代码 特点: ②消息中每个8bit都作为两个ASCII字符发送 ②1个起始位、7个数据位、1个奇偶校验位和1个停止位(或者两个停止位) ③错误检测域是LRC检验 ④字符发送的时间间隔可达到1秒而不会产生错误 2、RTU模式 RTU:远程终端单元 特点: ①消息中每个8bit字节包含两个4bit的十六进制字符,因此,在波特率相 同的情况下,传输效率比ascii传输方式大 ②1个起始位、8个数据位、1个奇偶校验位和1个停止位(或者两个停 止位)

2019很好的威纶通MODBUS RTU通讯协议与变频器通讯案例

本文研究的是触摸屏通过MODBUS RTU通讯协议与变频器通讯实现变频器的控制。触摸屏采用威纶通TK6070IP,变频器用汇川MD380通用系列。通过触摸屏编程软件,编辑控制画面实现变频器的启动、停止、速度调节、多段速速度设置,通过宏指令实现工程值与实际值的转换。 一、MODBUS RTU 简介: 为了在自动化系统之间、自动化系统和所连接的分散的现场设备之间进行信息交换,如今串行现场总线被主要用作通讯系统。成千上万的应用已经强烈地证明了通过使用现场总线技术,可以节省多至40%的接线、调试及维护的费用。仅仅使用两根电线就可以传送现场设备的所有相关信息,比如输入和输出数据、参数、诊断数据。过去使用的现场总线往往是制造商的特定现场总线,并且同其它现场总线不兼容。如今使用的现场总线几乎是完全公开和标准化的。这就意味者用户可以以最合理的价格选择最好的产品,而不用依赖于每个独立的制造商。Modbus RTU是一种国际的、开放的现场总线标准。作为一种很容易实现的现场总线协议,在全世界范围内,Modbus得到了成功的应用。应用领域包括生产过程中的自动化、过程控制和楼宇自控。MODBUS RTU通讯协议的报文如图1。图1 MODBUS RTU 通讯协议的报文功能码如下: 01H 读取线圈状态。从执行机构上读取线圈(单个位)的内容; 02H 读取离散量输入。从执行机构上读取离散量输入(多个位)的内容; 03H 读取保持寄存器。从执行机构上读取保持寄存器(16位字)的内容; 04H 读取输入寄存器。从执行机构上读取输入寄存器(16位字)的内容; 05H 强置单线圈。写数据到执行机构的线圈(单个位)为“通”(“1”)或 “断”(“0”); 06H 预置单寄存器。写数据到执行机构的单个保持寄存器(16位字); 0FH 强置多线圈。写数据到执行机构的几个连续线圈(单个位)为“通”(“1”) 或“断”(“0”); 10H 预置多寄存器。写数据到执行机构的几个连续的保持寄存器(16位字)。 二、威纶通编程软件介绍: EB8000软件中MODBUS协议的设备类型为0x、1x、3x、4x、5x、6x,还有3x_bit,4x_bit,6x_bit,0x_multi_coils 等,下面分别说明这些设备类型在MODBUS协议中支持哪些功能码。 0x:是一个可读可写的设备类型,相当于操作PLC的输出点。该设备类型读取位状态的时候,发出的功能码是01H,写位状态的时候发出的功能码是05H。写多个寄存器时发出的功能码是0fH。 1x:是一个只读的设备类型,相当于读取PLC的输入点。读取位状态的时候发出的功能码为02H。 3x:是一个只读的设备类型,相当于读取PLC的模拟量。读数据的时候,发出的功能码是04H。 4x:是一个可读可写的设备类型,相当于操作PLC的数据寄存器。当读取数据的时候,发出的功能码是03H,当写数据的时候发出的功能码时10H,可写多个寄存器的数据。 6x:是一个可读可写的设备类型,读取数据的时候,发出的功能码也是03H,与4x不同之处在于写数据的时候发出的功能码时06H,即写单个寄存器的数据。 三、变频器参数设置: F0-02 命令源选择为:通讯命令通道(1正转运行、2反转运行、3正转点动、4反转点动、5自由停车、6减速停机); F0-03 主频率源选择为:通讯给定; F0-28 串口通讯协议选择:MODBUS 协议; Fd-00 通讯波特率:9600 BPS; Fd-01 MODBUS 数据格式:偶校检(8-E-1); Fd-02 本机地址:1 Fc-00—Fc-15 1到16段多段速运行速度

关于51单片机上实现modbus协议

你找一个MODBUS的协议详细资料好好看看,就是一种通讯约定,你按照它规定的格式通讯就可以了 协议发送给询问方。Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP 模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus协议的可靠性较好。下面我来简单的给大家介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其中TCP 和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。所以在这里我仅介绍一下Modbus的ASCII和RTU协议。下表是ASCII协议和RTU协议进行的比较:协议开始标记结束标记校验传输效率程序处理 ASCII :(冒号)CR,LF LRC 低直观,简单,易调试 RTU 无无CRC 高不直观,稍复杂 通过比较可以看到,ASCII协议和RTU协议相比拥有开始和结束标记,因此在进行程序处理时能更加方便,而且由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。但是因为它传输的都是可见的ASCII字符,RTU传输的数据每一个字节ASCII都要用两个字节来传输,比如RTU传输一个十六进制数0xF9,ASCII 就需要传输’F’’9’的ASCII码0x39和0x46两个字节,这样它的传输的效率就比较低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。 下面对两种协议的校验进行一下介绍。 1、LRC校验 LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。 LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可。下面是它的VC代码: BYTE GetCheckCode(const char * pSendBuf, int nEnd)//获得校验码 {

相关文档
最新文档