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

相关文章

Spring Boot整合Redis注解实现增删改查功能(Redis注解使用)

《SpringBoot整合Redis注解实现增删改查功能(Redis注解使用)》文章介绍了如何使用SpringBoot整合Redis注解实现增删改查功能,包括配置、实体类、Repository、Se... 目录配置Redis连接定义实体类创建Repository接口增删改查操作示例插入数据查询数据删除数据更

使用python生成固定格式序号的方法详解

《使用python生成固定格式序号的方法详解》这篇文章主要为大家详细介绍了如何使用python生成固定格式序号,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录生成结果验证完整生成代码扩展说明1. 保存到文本文件2. 转换为jsON格式3. 处理特殊序号格式(如带圈数字)4

Java使用Swing生成一个最大公约数计算器

《Java使用Swing生成一个最大公约数计算器》这篇文章主要为大家详细介绍了Java使用Swing生成一个最大公约数计算器的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下... 目录第一步:利用欧几里得算法计算最大公约数欧几里得算法的证明情形 1:b=0情形 2:b>0完成相关代码第二步:加

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV