14、modbus poll 使用教程小记1

2024-06-13 11:12
文章标签 使用 教程 14 modbus poll 小记

本文主要是介绍14、modbus poll 使用教程小记1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开发平台:Win10 64位
Modbus Slave版本:64位 7.0.0
Modbus Poll版本:64位 7.2.2
因为项目中经常会用到modbus协议,所以就避免不了的要使用modbus测试工具,Modbus Slave/Poll无疑是众多测试工具中应用最广泛的。


文章目录

  • 一、Modbus 协议
  • 二、Modbus Slave(Server-从站)
    • 2.1 窗口状态栏
    • 2.2 连接
    • 2.3 新建保存
    • 2.4 配置窗口信息
    • 2.5 数据操作
  • 三、Modbus Poll(Client-主站)
    • 3.1 状态框
    • 3.2 创建连接
    • 3.3 配置窗口信息
    • 3.4 修改寄存器值(06或16功能码时生效):
    • 3.5 显示
  • 四、总结
  • 五、参考文献
    • 5.1 https://www.cnblogs.com/The-explosion/p/11512677.html
    • 5.2 https://blog.csdn.net/u012749085/article/details/125270869


一、Modbus 协议

Modbus协议是一种通用通讯协议并且已广泛应用于当今工业控制领域。控制器相互之间或控制器经由网络(如以太网)可以通过此协议和其它设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等,典型的从设备如PLC可编程控制器等。
Modbus通讯物理接口:

  1. 串口(包括RS232、RS485和RS422)。
  2. 以太网口。
    通讯方式:
    1、异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等):对应的通信模式是Modbus RTU或Modbus ASCII。
    2、以太网:对应的通信模式是Modbus TCP/IP。
    3、高速令牌传递网络:对应的通信模式是Modbus PLUS。
    其通信遵循以下的过程:主设备向从设备发送请求,从设备分析并处理主设备的请求,然后向主设备发送结果。Modbus的工作方式是请求/应答,每次通讯都是主站先发送指令,可以是广播,或是向特定从站的单播;从站响应指令,并按要求应答,或者报告异常。当主站不发送请求时,从站不会自己发出数据,从站和从站之间不能直接通讯。
    在这里插入图片描述
    报文格式:表头 + 功能码 + 数据区 + 校验码
    Modbus TCP基于以太网和TCP/IP协议,Modbus RTU和Modbus ASCII则是使用异步串行传输(通常是RS-232/422/485)。
    在这里插入图片描述
    如图所示,串行传输的物理层是RS-485或RS-232,数据链路层是Modbus的串行传输协议;Modbus TCP传输的1、2、3、4层实现和日常所见的以太网、因特网一样,Modbus默认采用的TCP端口号是502。
    以太网(modbus tcp/ip)
    对于Modbus TCP而言,主站通常称为Client,从站称为Server;而对于Modbus RTU和Modbus ASCII来说,主站是Master,从站是Slave。

二、Modbus Slave(Server-从站)

modbus slave和modbus poll是一款modbus开发和调试工具,具备Modbus从机/主机程序模拟功能,可以非常方便的进行modbus调试。其中Modbus Slave是一个模拟Modbus协议从机的上位机软件,主要用于模拟测试跟其他主机设备通信的过程。该软件内部封装标准Modbus协议栈,通过图形化界面使得操作更为简便。目前软件支持01、02、03、04、05、06、15、16功能码,原始报文查看,数据记录等功能,是调试Modbus协议栈的好帮手。

2.1 窗口状态栏

打开软件后,界面一般如下图所示,其中
ID:表示当前窗口通信的从机地址(Slave ID)
F:表示当前窗口的功能码(Function)
No Connection:表示当前窗口的未连接。
在这里插入图片描述

2.2 连接

两种连接方式:

  1. 普通连接:点击菜单栏"Connection"->“Connect…”(或者按快捷键F3)弹出连接配置窗口。连接选项有多个,“Serial Port”–当前是用串口通信。如果使用的是TCP/IP,则选择“Modbus/TCP”。
    在这里插入图片描述
    Serial Port(串口)配置:在配置窗口中配置好端口号、波特率、数据位、校验位、停止位,一般是9600波特率(9600 Baud),8个数据位(8 Data bits),无校验位(None Parity),1个停止位(1 Stop Bit)。以上参数配置要根据实际通信的从机设备进行匹配设置。对于7以上的版本,会自动识别当前使用了哪些端口,这里会把使用过的端口重命名,方便识别,这一点挺好用的。
    Mode:RTU模式或ASCII模式,这里要根据通信的从机设备进行选择,工业应用的话一般使用RTU模式,很少使用ASCII模式。
    请添加图片描述
    Flow Control(流控制):如果用到的是232、485或422接口,则不需要使用这个配置,按默认即可。配置完点OK即可完成设置进行连接,等待Client(Modbus Poll)端进行读取设置数据即可。
    TCP配置:设置好IP及端口号,Modbus/TCP的默认端口号为502。实际根据从机设备的IP和端口号来设置。Ignore Unit ID可以选择是否忽略设备ID进行通信。
    在这里插入图片描述
  2. 快速连接
    点击菜单栏"Connection"->“Quick Connect”(或者按快捷键F5),或者点击图标进行快速连接。快速连接就是不需要再去设置连接参数,直接根据当前配置开启连接。

2.3 新建保存

点击"File"->“New”,或者点击图标 可以新建一个通信窗口。
在这里插入图片描述
每一个窗口代表一条通信指令或者说一个从站,具体通信的从机地址、寄存器/线圈类型、可读写的寄存器/线圈个数都是可以独立设置的。
在这里插入图片描述
点击"File"->“Save”,或者点击图标进行窗口保存。“File”->"Save as…"则可以另存为一个文件。保存窗口可以把窗口的配置信息一并保存下来。
在这里插入图片描述

2.4 配置窗口信息

点击"Setup"->“Slave Definition…”,或者按快捷键F8,或者在要设置的窗口单击右键,选择"Slave Definition…",可以打开窗口信息配置界面。
在这里插入图片描述

  1. Slave ID:配置从机地址
  2. Function:配置寄存器/线圈类型
  3. Address:配置读/写的寄存器/线圈起始地址
  4. Quantity:配置读/写的寄存器/线圈个数
    在这里插入图片描述
    Rows:可以选择该窗口一列可以显示多少行,数字是对应的行数,最后一个选项"Fit to Quantity"是可以根据前面设置的"Quantity"数量自动匹配行数。
    Hide Alias Columns:可以选择是否隐藏"Alias"列。
    PLC Addresses(Base 1):可以选择通信的基地址是从0开始还是从1开始。
    在这里插入图片描述
    Error Simulation(故障模拟)
    Skip response:跳过响应,目前实测是主机每发10帧,Slave这边会有一帧不回。
    请添加图片描述
    Insert CRC/LRC error:插入CRC/LRC错误,目前实测是主机每发10帧,Slave这边会有一帧返回错误CRC/LRC校验。
    在这里插入图片描述
    Response delay:延迟回复时间,可以设置接收到数据后延时回复的时间。
    在这里插入图片描述
    Return exception 06. Busy:返回设备繁忙状态,即故障码06。
    在这里插入图片描述
    设置完成点"OK"即可。

2.5 数据操作

双击数据的位置,可修改当前地址的寄存器/线圈数值。
“Auto increment"可选择是否每次通信后自动增加数值。(可以作为一个心跳包来使用)
在这里插入图片描述
寄存器备注:双击数据前的空白区域(Alias列),根据实际寄存器/线圈的数据含义,可对其进行定义备注,方便调试时查看。
在这里插入图片描述
数据类型修改:点击需要修改的数据(可以批量选择),右键单击,选择"Format”,根据使用的场景选择不同的数据类型。
在这里插入图片描述
背景色及文字颜色修改:选择要修改的颜色的数据,右键,选择"Foreground",在弹出的窗口中可以设置字体颜色。选择"Background"则可以设置背景色。
字体及大小:选择要修改的数据,右键选择"Font",在弹出的窗口里选择字体、字形及大小,确认即可修改。
在这里插入图片描述

三、Modbus Poll(Client-主站)

Modbus主机仿真器,用于测试和调试Modbus从设备。该软件支持ModbusRTU、ASCII、TCP/IP。用来帮助开发人员测试Modbus从设备或其它Modbus协议的测试和仿真。它支持多文档接口,即,可以同时监视多个从设备/数据域。每个窗口简单地设定从设备ID,功能,地址,大小和轮询间隔。你可以从任意一个窗口读写寄存器和线圈。如果你想改变一个单独的寄存器,简单地双击这个值即可。或者你可以改变多个寄存器/线圈值。提供数据的多种格式方式,比如浮点、双精度、长整型(可以字节序列交换)。

3.1 状态框

在这里插入图片描述
Tx = 0表示向主站发送数据帧次数,图中为0次;
Err = 0表示通讯错误次数,图中为0次;
ID = 1表示模拟的Modbus子设备的设备地址,图中地址为1;
F = 03表示所使用的Modbus功能码,图中为03功能码;
SR = 1000ms表示发送周期,1S一次。
红字部分,表示当前的错误状态,“No Connection”表示未连接状态。

3.2 创建连接

点击Connetion选择Connect…,或者F3快捷键直接通过默认参数设置进行连接,根据从站设备的设置选择是Serial Port(串口)还是Modbus Tcp/IP。
在这里插入图片描述
如果是Serial Port,就需要根据从站设置参数设置端口号,波特率等参数,Mode一般工业选择RTU模式。在这里插入图片描述
如果是Modbus Tcp/IP就需要设置下从站的IP及端口号,一般端口号默认502。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 配置窗口信息

单击Setup----Read/Write Definition… 或者按F8进行参数设置,或者在要设置的窗口单击右键,选择"Read/Write Definition…",会弹出参数设置对话框。
在这里插入图片描述
在这里插入图片描述
Slave ID为要访问的Modbus从机的地址,
Function 功能码的选择,
Address 为寄存器起始地址,根据功能码的不同,访问地址不同,这里默认是Protocol address地址,可以勾选下面的Plc address(Base 1)选择地址从1开始。
Quantity:为访问寄存器个数。
Scan Rate为读取数据周期,轮询发送,单位毫秒。
Modbus协议同时规定了二十几种功能码,但是常用的只有8种,用于对存储区的读写,如下表所示:
在这里插入图片描述
当然我们用的最多的就是03和06 一个是读取数据,一个是修改数据。

3.4 修改寄存器值(06或16功能码时生效):

在主窗口寄存器地址上双击鼠标,弹出修改对话框,可以修改此寄存器的值,06:修改(写入)一个地址,16:修改(写入)多个地址
在这里插入图片描述

3.5 显示

点击Display可以设置数据的显示方式,默认为Signed方式(16进制无符号二进制),数据范围为-32768~32767。
在这里插入图片描述
改变地址开始模式(Plc Address(Base1)和Protocol Address(Base0))。
在这里插入图片描述
查看通讯数据帧:
点击“Display”----“Communication”,可以调出收发数据帧监视信息对话框,用来查看分析收发的数据帧。这其实就是modbus报文。
在这里插入图片描述
Rx为接收到的消息帧,Tx为发送到的数据。报文格式如下:
在这里插入图片描述

注意,报文里面都是16进制表示的,也就是说14是0x14,对应的10进制是20,17是0x17,对应10进制是23,对于Rx来说,上面红框开始的17就代表后面有多个字节,01代表从站站号,03代表功能号,14代表后面有多少字节,1-10分别代表从从站读取的数据,因为一个寄存器地址是用16位数据即两个字节表示的,所以是20个字节,10个寄存器值。

四、总结

笔者使用poll比较多,所以就针对poll说下平常使用中要注意的问题。

  1. 起始地址
    在这里插入图片描述
    PLC Address(Base 1)(PLC地址)
    PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型,例如40001、30002等。
    Protocol address(协议地址)
    指通信时使用的寄存器地址,在实际编程中,由于寄存器PLC地址前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。例如PLC地址40001对应寻址地址0x0000,40002对应寻址地址0x0001,寄存器寻址地址一般使用16进制描述。再如,PLC寄存器地址40003对应协议地址0002,PLC寄存器地址30003对应协议地址0002。在实际编程中,由于前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。在数据报文中,所有的modbus地址都是从0开始的。也就是首次出现的数据项在报文中的地址为0。
    所以这里一定要注意,不管是读数据还是写数据,地址要和PLC或者从站设计者确定下。
  2. 数据类型
    这个也是个很重要的问题,默认poll读取的数据都是按照Signed(有符号16位整型)显示的,如果下位机(从站)不是按照这个来的,比如温湿度、浓度等参数,需要小数表示,一些数据需要32位来表示,这就需要重新设置了,不然读取的数据没问题,但是因为数据格式不对,显示的也不对,比如Signed类型的36,在32位Signed,大端模式下就等于2359297.所以一定要和下位机确定数据格式,尤其是浮点型和32位类型表示的数据的时候。
    在这里插入图片描述
    在这里插入图片描述

五、参考文献

5.1 https://www.cnblogs.com/The-explosion/p/11512677.html

5.2 https://blog.csdn.net/u012749085/article/details/125270869

这篇关于14、modbus poll 使用教程小记1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057139

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2