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

Posted shiqi17

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了普通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内传输时可不连接终端电阻。

RS485引脚定义

RS-232与RS-422及RS-485三者之间的特性与区别

技术图片

技术图片

二、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,很简单的)计算出来的结果,其实就像是计算累加和那样。(累加和:就是010600010017加起来的值,然后它的算法就是加法)。
作用:在数据传输过程中可能数据会发生错误,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) 写多个寄存器

技术图片

以上是关于普通PC通过USB转485串口 ModBus-RTU通信协议控制伺服电机的主要内容,如果未能解决你的问题,请参考以下文章

485转ttl后串口命令怎么发

一个有485接口的电压表,通过这样的转接口和电脑通讯,不知怎样接线

电脑和USB和RS485和电表怎么连接

9针串口RS232RS485之间的差异

9针串口RS232RS485之间的差异

关于STM32串口调试RS485时自动进入接收中断