14、modbus poll 使用教程小记1

news2024/11/28 13:29:58

开发平台: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1815944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

dll文件丢失了要如何处理?教你一键修复所有dll缺失的方法

dll文件丢失了要如何处理?其实dll文件的丢失还是比较常见的,它的丢失会引起一些程序无法启动,所以我们必须要去修复dll文件,这点是毋容置疑的,其修复方法也是有很多种的,今天就来给大家详细的聊一下dll文件…

BUAA-2024年春-OO第四单元总结

正向建模与开发 在本单元中,我们需要模拟一个小型的图书管理系统,完成图书馆所支持的相关业务,并遵守一定的规章制度。与前几次不同的是,本单元中,我们需要预先将自己的设计思路用UML来实现,然后进行编程。…

Coze+Discord:打造你的免费AI助手(教您如何免费使用GPT-4o/Gemini等最新最强的大模型/Discord如何正确连接Coze)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 准备Discord📝 准备Coze🔌 连接💡 测试效果⚓️ 相关链接 ⚓️📖 介绍 📖 你是否想免费使用GPT-4o/Gemini等最新最强的大模型,但又不想花费高昂的费用?本文将教你如何通过Coze搭建Bot,并将其转发…

RAG系统进阶(五)文本分割优化技巧及代码

背景 前边在介绍RAG系统时提到了文本分割(或分段)的作用和重要性。也提到了分段后所带来的一些问题,比如由于分段导致检索出来的TOP-n的结果可能未包含完整的答案。 粒度太大可能导致检索不精准,粒度太小可能导致信息不全面问题的…

教你一段代码激活计算机系统

方法简单粗暴,再也不用遭受未激活的烦恼了! 新建文本 输入代码,把文件后缀.txt改.bat slmgr /skms kms.03k.org slmgr /ato

2024-2025最新软考系统架构设计师的复习资料教材,解决如何快速高效通过该考试,试题的重点和难点在哪里?案例分析题和论文题的要点和踩坑点分析

目录 引言考试概述 考试结构考试内容 复习策略 制定复习计划学习资源 知识点详解 系统架构基础设计原则与模式系统分析与设计软件开发过程项目管理系统集成性能与优化安全性设计新兴技术 试题解析 选择题案例分析题论文题 重点与难点分析模拟试题与答案参考资料总结 引言 系…

DeepSpeed Pipeline并行

DeepSpeed为了克服一般Pipeline并行的forward时weights,和backward时计算梯度的weights, 二者不相同的问题,退而求其次,牺牲性能,采用gradient-accumulate方式,backward时只累积梯度至local,并不更新weights&#xff1…

css display:grid布局,实现任意行、列合并后展示,自适应大小屏幕

现有6X7列的一个布局&#xff0c;如下图所示 想要用户能组成任意矩形盒子&#xff0c;并展示内容&#xff0c;具体效果如下&#xff08;仅为一个示例&#xff0c;其实可以任意组合矩形&#xff09;&#xff1a; html代码&#xff1a; <div class"grid-container"…

SQL 截取函数

目录 1、substring 2、left 3、right 4、substring_index 1、substring 用途&#xff1a;字段截取从指定开始的字符开始&#xff0c;截取要的数&#xff1b;指定开始的字符数字可以用负的&#xff0c;指定开始的字符从后往前(向左)数&#xff0c;截取要的数不能为负。 语…

BoxSizer布局

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在前面的实例中&#xff0c;使用了文本和按钮等控件&#xff0c;并将这些控件通过pos参数布置在pannel画板上。虽然这种设置坐标的方式很容易理解&am…

GitLab教程(四):分支(branch)和合并(merge)

文章目录 1.分支&#xff08;branch&#xff09;&#xff08;1&#xff09;分支的概念&#xff08;2&#xff09;branch命令 2.合并&#xff08;merge&#xff09;&#xff08;1&#xff09;三个命令pullfetchmergegit fetchgit mergegit pull &#xff08;2&#xff09;合并冲…

C++开源软件:跨平台本地密码管理器KeePassXC/KeePassDX

KeePassXC、KeePass和KeePassDX在功能、平台和特点上有所区别&#xff0c;以下是对这三款密码管理器的清晰区分&#xff1a; KeePassXC&#xff1a; 平台&#xff1a;跨平台&#xff0c;支持Windows、macOS和Linux等主流操作系统。 安全性&#xff1a;使用AES加密算法&#x…

路虽远,行则将至 - 附暑期实习、秋招历程经验分享

前言 大家好 许久没有时间静下心来打开编辑器写文章了 忙碌暂过&#xff0c;难得一闲时 求学三年&#xff0c;终到离别时 回忆过往&#xff0c;枯燥且多彩 有一点经验&#xff0c;以文字形式分享&#xff0c;希望帮助到大家 可能是这段时间事多且杂&#xff0c;加上很长一…

NSS题目练习8

[SWPUCTF 2022 新生赛]numgame 打开发现不能直接更改数值&#xff0c;会变成负数&#xff0c;快捷键不能用&#xff0c;输入view-source查看源代码&#xff0c;发现js文件 点开后发现最下面有个酷似flag的东西 提交后是错的&#xff0c;看着像是base64&#xff0c;解码后得到另…

The Sandbox 游戏创作比赛|巴黎 CITY JAM

The Sandbox City Jam 邀请大家参与 The Sandbox 全新 Game Jam&#xff1a;City Jam&#xff01;活动将以社区为中心&#xff0c;每次一个城市&#xff0c;旨在将国际文化带入The Sandbox。你可以通过参与比赛赢得奖品&#xff0c;发展技能&#xff0c;并与其他创作者为伴&…

autosleep框架设计与实现

在低功耗系统中&#xff0c;autosleep是一个较小的模块&#xff0c;是低功耗主流程的入口。在Linux内核中&#xff0c;autosleep是休眠流程的触发点和入口点&#xff0c;PM Core的休眠流程入口pm_suspend()就是被autosleep的睡眠工作队列调用而进入休眠的。 该功能的支持受宏…

反向代购系统建站技术详解

一、引言 随着全球化趋势的深入和电商行业的快速发展&#xff0c;反向代购&#xff08;Reverse Daigou&#xff09;作为一种新兴的商业模式逐渐受到关注。反向代购&#xff0c;即海外消费者通过国内电商平台购买国内商品并委托平台或第三方进行国际配送&#xff0c;满足了海外…

[Java基本语法] 从0到1带你精通Java基本语法

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;线程与…

类和对象(二)(C++)

初始化列表 class Date{public:Date(int year, int month, int day){_year year;_month month;_day day;}private:int _year;int _month;int _day;}; 虽然上述构造函数调用之后&#xff0c;对象中已经有了一个初始值&#xff0c;但是不能将其称为对对象中成员变量的初始化…

第十五篇——条件熵和信息增益:你提供的信息到底值多少钱?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 通过这篇文章&#xff0c;我知道了条件熵和信息增益&#xff1b;如果你试…