普通PC通过USB转485串口ModBus-RTU通信协议控制伺服电机

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

普通PC通过USB转485串⼝ModBus-RTU通信协议控制伺服电机RS485通信
RS485 是半双⼯通信(2 线制),可以⼀点对多点进⾏组⽹,⽽且 RS485 是⽤缆线两端的电压差值来表⽰传递信号,这与 RS232 电⽓特性⼤不⼀样。

RS485 仅仅规定了接收端和发送端的电⽓特性,并没有规定或推荐任何数据协议
RS485 采⽤两根通信线,通常⽤ A 和 B 或者 D+和 D-来表⽰。

逻辑“1”以两线之间的电压差为+(0.2~6)V 表⽰,逻辑“0”以两线间的电压差为-(0.2~6)V 来表⽰,是⼀种典型的差分通信,
电平与 TTL 电平兼容,可⽅便与 TTL 电路连接。

优点:
1. RS485的接⼝信号电平⽐RS231-C低,不易损坏接⼝电路的芯⽚,且该电平与TTL电平兼容,⽅便于TTL电路相连接。

2. RS485的数据最⾼传输速率为10Mbps。

其平衡双绞线的长度与传输速率呈反⽐,在100kbps速率下,才可能使⽤规定的最长电缆长
度,只有在很短的距离下才能获得最⾼传输速率。

3. RS485接⼝采⽤平衡驱动器和差分接收器的组合,抗共模⼲扰能⼒强,即抗噪声⼲扰性好,因⽽通信距离远,最⼤传输距离⼤约为
1200m,实际可达3000m。

4. RS485接⼝在总线上允许连接多达128个收发器,既具有多站能⼒。

同时需要两个终端电阻,其阻值要求等于传输电缆的特性阻抗。

在短距离300m内传输时可不连接终端电阻。

ModBus-RTU通信协议
modbus协议已经成为通⽤⼯业标准,通过协议,控制器与控制器、控制器通过⽹络(以太⽹)与其他设备之间可以实现串⾏通信。

RTU即远程终端单元,消息中每8位包含两个⼗六进制字符。

在相同的波特率下,这种⽅法⽐ASCII⽅式传送的数据量⼤。

2.1.1 图解区
2.2 ModBus-RTU详解
Modbus ⼀个⼯业上常⽤的通讯协议、⼀种通讯约定。

Modbus协议包括RTU、ASCII、TCP。

其中MODBUS-RTU最常⽤,⽐较简单,在单⽚机上很容易实现。

上⾯图中看到了报⽂格式:下⾯详细分析⼀条报⽂:01 06 00 01 00 17 98 04
01 06 00 01 00 17 98 04
从机地址功能号数据地址数据 CRC校验
这⼀串数据的意思是:把数据 0x0017(⼗进制23) 写⼊ 1号从机地址 0x0001数据地址
2.1.1 图解报⽂格式
1、主机对从机写数据操作
如果单⽚机接收到⼀个报⽂那么就对报⽂进⾏解析执⾏相应的处理,如上⾯报⽂:
01 06 00 01 00 17 98 04
从机地址功能号数据地址数据 CRC校验
假如本机地址是 1 ,那么单⽚机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据⽆误,则结果是:
HoldDataReg[1] = 0x0017;
MODBUS主机就完成了⼀次对从机数据的写操作,实现了通讯。

2、主机对从机读数据操作
主机进⾏读HoldDataReg[1] 操作,则报⽂是:
01 03 00 01 00 01 D5 CA
从机地址功能号数据地址读取数据个数 CRC校验
那么单⽚机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据⽆误,则结果是:返回信息给主机,返回的信息也是有格式的:
返回内容:
01 03 02 0017 F8 4A
从机地址功能号数据字节个数两个字节数据 CRC校验
MODBUS主机就完成了⼀次对从机数据的读操作,实现了通讯。

2.1.2 CRC校验
意义:例如上⾯的 98 04 是它前⾯的数据(01 06 00 01 00 17)通过⼀算法(见附录2,很简单的)计算出来的结果,其实就像是计算累加和那样。

(累加和:就是010*********加起来的值,然后它的算法就是加法)。

作⽤:在数据传输过程中可能数据会发⽣错误,CRC检验检测接收的数据是否正确。

⽐如主机发出01 06 00 01 00 17 98 04,那么从机接收到后要根据01 06 00 01 00 17 再计算CRC校验值,从机判断⾃⼰计算出来的CRC校验是否与接收的CRC校验(98 04主机计算的)相等,
如果不相等那么说明数据传输有错误这些数据不能要。

2.1.3 功能码
常⽤功能码
01 (0x01) 读线圈
02 (0x02) 读离散量输⼊
03 (0x03) 读保持寄存器
04(0x04) 读输⼊寄存器
05 (0x05) 写单个线圈
06 (0x06) 写单个寄存器
15 (0x0F) 写多个线圈
16 (0x10) 写多个寄存器。

相关文档
最新文档