Modbus SerialPort 、TCP协议

一、简介

什么是协议?

详解Modbus通信协议---清晰易懂-CSDN博客

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(循环冗余校验)在线计算_ip33.com

错误校验(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是不需要虚拟串口的

打开服务端

打开客户端

通讯S->C:

 通讯C->S:

Modbustcp通过wireshark抓包分析

 Modbus TCP报文详解与wireshark抓包分析_tcp/ip_weixin_47680367-GitCode 开源社区

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值