普通PC通过USB转485串口 ModBus-RTU通信协议控制伺服电机
RS485 是半双工通信(2 线制),可以一点对多点进行组网,而且 RS485 是用缆线两端的电压差值来表示传递信号,这与 RS232 电气特性大不一样。RS485 仅仅规定了接收端和发送端的电气特性,并没有规定或推荐任何数据协议
RS485 采用两根通信线,通常用 A 和 B 或者 D+和 D-来表示。逻辑“1”以两线之间的电压差为+(0.2~6)V 表示,逻辑“0”以两线间的电压差为-(0.2~6)V 来表示,是一种典型的差分通信,
电平与 TTL 电平兼容,可方便与 TTL 电路连接。
优点:
-
RS485的接口信号电平比RS231-C低,不易损坏接口电路的芯片,且该电平与TTL电平兼容,方便于TTL电路相连接。
-
RS485的数据最高传输速率为10Mbps。其平衡双绞线的长度与传输速率呈反比,在100kbps速率下,才可能使用规定的最长电缆长度,只有在很短的距离下才能获得最高传输速率。
-
RS485接口采用平衡驱动器和差分接收器的组合,抗共模干扰能力强,即抗噪声干扰性好,因而通信距离远,最大传输距离大约为1200m,实际可达3000m。
-
RS485接口在总线上允许连接多达128个收发器,既具有多站能力。同时需要两个终端电阻,其阻值要求等于传输电缆的特性阻抗。在短距离300m内传输时可不连接终端电阻。
RS-232与RS-422及RS-485三者之间的特性与区别
modbus协议已经成为通用工业标准,通过协议,控制器与控制器、控制器通过网络(以太网)与其他设备之间可以实现串行通信。RTU即远程终端单元,消息中每8位包含两个十六进制字符。在相同的波特率下,这种方法比ASCII方式传送的数据量大。
- 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数据地址
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主机就完成了一次对从机数据的读操作,实现了通讯。
意义:例如上面的 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主机计算的)相等,如果不相等那么说明数据传输有错误这些数据不能要。
- 常用功能码
01 (0x01) 读线圈
02 (0x02) 读离散量输入
03 (0x03) 读保持寄存器
04(0x04) 读输入寄存器
05 (0x05) 写单个线圈
06 (0x06) 写单个寄存器
15 (0x0F) 写多个线圈
16 (0x10) 写多个寄存器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?