一、简介
什么是协议?
Modbus调试软件--ModbusPoll、ModbusSlave使用详解_modbus slave-CSDN博客
本文全面是学习上面两篇博文
两台PC之间信息传输共同遵守的物理(高低电平) 的标准文件,就是协议,举一个很简单的例子,就是有两个家庭子女谈彩礼,男方(家境一般)感觉20w的彩礼是比较高的,属于高彩礼,但是女方(家庭很好)感觉50w 属于低彩礼,这时候两家都是站在自己的立场看问题,没有一个评判标准,什么是高 什么是低,那么就需要一个有威性的人来中间调和,定一个标准(这个就是大家都能接受的)来评判,这个标准就是协议(以上只是一个假想案例)。
Modbus的简介
Modbus 是一种用于电子设备之间的通信协议,广泛应用于工业自动化和控制系统中。它由 Modicon(现在是施耐德电气的一部分)在1979年开发,最初是为了他们的可编程逻辑控制器(PLC)而设计的
Modbus协议是一种应用层报文传输协议,协议本身并没有定义物理层,定义了控制器能够认识和使用的消息结构,不管它们是经过何种网络进行通信的
Modbus就是一个总线通信协议,像IIC SPI这种,但是他不依赖于硬件总线
Modbus之所以使用广泛,是有他的优点的
Modbus协议标准开放、公开发表且无版权要求
Modbus协议支持多种电气接口,包括RS232、RS485、TCP/IP等,还可以在各种介质上传输,如双绞线、光纤、红外、无线等
Modbus协议消息帧格式简单、紧凑、通俗易懂。用户理解和使用简单,厂商容易开发和集成,方便形成工业控制网络
Modebus通信过程
模式:一主多从
模式:一主多从
模式:一主多从
Modbus通信中只有一个设备可以发送请求。其他从设备接收主机发送的数据来进行响应也就是说,Modbus不能同步进行通信,主机在同一时间内只能向一个从机发送请求,总线上每次只有一个数据进行传输,即主机发送,从机应答,主机不发送,总线上就没有数据通信(从机不会自己发送消息给主站,只能回复从主机发送的消息请求)
什么是RS-485 RS-232
RS232,RS485是一种电平标准
RS-232
RS232:是电子工业协会(Electronic Industries Association,EIA) 制定的异步传输标准接口,同时对应着电平标准和通信协议(时序),其电平标准:+3V~+15V对应0,-3V~-15V对应1
RS485
RS485是一种串口接口标准,为了长距离传输采用差分方式传输,传输的是差分信号,抗干扰能力比RS232强很多。两线压差为-2~-6V表示0,两线压差为+2~+6V表示1
Modebus存储区
存储的数据类型可以分为 :布尔量 和 16位寄存器
Modbus协议规定了4个存储区 分别是0 1 3 4区, 其中0区和4区是可读可写,1区和3区是只读
从机地址: 每个从机都有唯一地址,占用一个字节,范围0-255,其中有效范围是1-247,其中255是广播地址(广播就是对所有从机发送应答)
功能码: 占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改从机的数据,所以不同功能码对应不同功能.
数据: 根据功能码不同,有不同功能,比方说功能码是查询从机的数据,这里就是查询数据的地址和查询字节数等。
校验: 在数据传输过程中可能数据会发生错误,CRC检验检测接收的数据是否正确
功能码
Modbus协议类型
Modbus RTU:
这是 Modbus 的一种串行通信形式,使用二进制编码和 RTU模式采用16 位CRC校(循环冗余检验)来保证数据的可靠性。它在串行线路上发送数据,以点对点或多点的方式进行通信 ,传输速度比较慢。十六进制表示数据的方式
Modbus报文帧结构
读取保持寄存器报文解析:
发送报文含义:
16位寄存器=16位=2个字节
16位寄存器=16位=2个字节
16位寄存器=16位=2个字节
功能码: 03 表示读取保存寄存器,而读取保持寄存器的是再4区,地址范围是从40001开始到99999的位置结束
知道了功能码之后,也就是说我们能传输的数据实在4区(40001-99999)上面写入的。
因此数据的起始位置就是 0x6B(十六进制)=6*16+11=107,那么对应的寄存器的位置是:
40001+107=40108 ,
数量高 和数量低 :0X02表示的是数据的个数,也就是说两个数据,
数据的位置就是0x6B 和0x6B+1=0x6C ,也就是我想要从站 寄存器的位置:40108 和40109 的值
返回报文含义
一个字节是8位,那么4个字节就是32位,32位表示用16进制表示就是2个,那么就是两个寄存器
同理:返回的报文的字节分别是02 2B 01 06 ,0x022B(十六进制)就是40108 对应的值
0x0106就是40109 的对应的内容
长度是和要读取的数据有馆:数量高*2+3
案例2
从VB4-VB99 是96个字节,两个字节是一个寄存器 ,那么就是96/2=48个寄存器。
由于开始的位置 是从寄存器的第二个位置开始,那么结束位置就是
48=30(十六进制)
length=48 个寄存器
CRC校验
错误校验(CRC)域占用两个字节包含了一个16位的二进制值。CRC值由传输设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较,如果这两个值不相等,就发生了错误。
比如主机发出01 06 00 01 00 17 98 04, 98 04 两个字节是校验位,那么从机接收到后要根据01 06 00 01 00 17 再计算CRC校验值,从机判断自己计算出来的CRC校验是否与接收的CRC校验(98 04主机计算的)相等,如果不相等那么说明数据传输有错误,这些数据就不能要。
Modbus ASCII:
这种形式使用 ASCII 字符进行数据编码,较 Modbus RTU 更容易调试,但相对来说效率较低,ASCII格式采用纵向冗余校验的校验和。 LRC校验
Modbus TCP/IP:
这是 Modbus 在以太网上的变体,通过 TCP/IP 协议进行数据传输。它结合了 Modbus 的通信协议和 TCP/IP 的网络功能,适用于局域网或广域网环境。
Modbus-TCP并不需要从从机地址,而是需要MBAP报文头
格局:
二、助手测试与安装
安装VSPD
添加端口
虚拟好端口后,左侧能看到新虚拟出的 COM3 和 COM4,此时两个端口都没有被占用,处于停用状态
安装调试串口助手
三、Serial Port 串口通信测试
收发数据:从com1 发数据 -》com2 来收数据,实现两个端口的互发互收
简介
Tx = 0表示向主站发送数据帧次数,图中为0次;
Err = 0表示通讯错误次数,图中为0次;
ID = 1表示模拟的Modbus子设备的设备地址,图中地址为1;
F = 03表示所使用的Modbus功能码,图中为03功能码;
SR = 1000ms表示发送周期,也就是1S一次。
红字部分,表示当前的错误状态,“No Connection”表示未连接状态
设置
设置从站
设置寄存器数量
用Poll 链接从站
从站-》发消息-》主站
主站-》发消息-》从站
显示:
四、Modbus TCP 通讯
Modbus TCP是不需要虚拟串口的