惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
Help Net Security
Help Net Security
P
Privacy International News Feed
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
AWS News Blog
AWS News Blog
K
Kaspersky official blog
A
Arctic Wolf
Latest news
Latest news
T
Threat Research - Cisco Blogs
L
LINUX DO - 最新话题
P
Privacy & Cybersecurity Law Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Google DeepMind News
Google DeepMind News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
月光博客
月光博客
N
News and Events Feed by Topic
Jina AI
Jina AI
博客园 - 司徒正美
WordPress大学
WordPress大学
罗磊的独立博客
雷峰网
雷峰网
AI
AI
Hugging Face - Blog
Hugging Face - Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Security @ Cisco Blogs
博客园 - 三生石上(FineUI控件)
H
Heimdal Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Cisco Blogs
博客园 - 【当耐特】
The Hacker News
The Hacker News
有赞技术团队
有赞技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Schneier on Security
Schneier on Security
博客园 - Franky
S
SegmentFault 最新的问题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Cloudbric
Cloudbric
爱范儿
爱范儿
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Secure Thoughts
Last Week in AI
Last Week in AI
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Know Your Adversary
Know Your Adversary
Google DeepMind News
Google DeepMind News

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解 【002】HTTPS 粗解:证书、TLS 握手与对后端配置的影响 Hermes Agent 一周暴涨五万 Star,但我劝你别急着追 明明连接的是Redis的DB0,为什么能查到DB3的数据? 【从0到1构建一个ClaudeAgent】协作-Agent团队 熟悉电子元器件之后,电子小白下一步该怎么走? MAF快速入门(23)通过C#类定义Skills .NET 高级开发 | 手写一个对象映射框架 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 mysqldump 参数拾遗:在遗忘与铭记之间 C# .NET 周刊|2026年3月5期 Claude code入门 - 陈彦斌 一文学习入门 ThingsBoard 开源物联网平台 GitHub 热门项目 | 2026年04月16日 如何为GIT设置全局勾子,为每次提交追加信息 Number.isFinite和isFinite与isNaN()和Number.isNaN的区别 PortSwigger SQL注入LAB2 推荐一个测试人必备的Skills,从功能到性能全搞定(附详细实操和安装下载方式) 筑基期:掌握Odoo基础核心知识点02(Odoo XML 开发方式详解) GLM模型这么火,咱们用vllm也咧一个呗! 深入理解 AbortController:从底层原理到跨语言设计哲学 字符串学习笔记 多租户系统框架的基础模块设计和分析设计 Apache SeaTunnel Zeta 为什么能做到“又快又稳”? AI开发-python-LangGraph框架(3-26-LangGraph基本概念及第一个简单样例) Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 ElasticSearch7.X版本配置密码 用Manim实现动态交点计算--从一个动点问题说起 团结引擎+Addressable+Instant Game打包抖音小游戏 function call 实战:让 LLM 自动判断 pod 异常、调用日志工具并完成故障分析 bubseek —— 让 Agent 的足迹,变成团队的洞察 通过 C# 读取并导出 PDF 书签 如何用 GitHub Actions 实现 Steam 自动化发布 【从0到1构建一个ClaudeAgent】并发-后台任务 .NET 高级开发 | 定制 ASP.NET Core 框架 电子小白:什么是运算放大器(运放) zero2Agent:面向大厂面试的 Agent 工程教程,从概念到生产的完整学习路线 堆上的ORW HC32F460 USB CDC通信异常:非对齐访问异常排查 20260413-Hyperbridge 攻击事件:发生在默克尔山上的验证绕过 那些喊着AI 要淘汰你的人,正在靠你的焦虑赚大钱! 深度学习进阶(八)Swin Transformer 最小二乘问题详解19:带先验约束的增量式SFM优化与实现 SnapTranslate 3.0 正式发布:全局划词翻译 + 完整英语学习闭环,一站式搞定查词、记词、复习 工作的意义、工作的困难认知再思考 .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 开了 TUN 模式还是直连?90% 的人都踩过这个坑 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术
Modbus Studio (免费的Modbus主从机软件)
PlayerPencil · 2026-06-15 · via 博客园_首页

Modbus Studio (免费的Modbus主从机软件)

1. 软件用途

Modbus Studio 是一个用于 Modbus RTU / Modbus TCP 调试的桌面工具,主要用于:

  • 作为 Client 连接真实设备并读取、写入点位。
  • 作为 Server 模拟从站,供其他主站软件或设备读取、写入。
  • 使用寄存器字典统一管理地址、名称、数据类型、倍率、单位、权限和备注。
  • 保存工程文件,恢复 Client 数据、Server 数据、寄存器字典、连接配置和报文日志。

2. 为什么要做这个软件

在日常上位机、控制器、传感器和 PLC 调试中,很多工程师会使用 Modbus Poll 和 Modbus Slave 这类工具。它们很经典,也很稳定,但在实际项目交付和反复联调时,会遇到一些不方便的地方。

2.1 Modbus Poll 的常见问题

Modbus Poll 适合快速读取某一段寄存器,但它更偏“地址段调试”,不是“工程点位调试”。项目点位多了以后,常见问题包括:

  • 点位含义需要额外查表,地址 40001 到底是什么变量、单位是什么、倍率是多少,不在工具里形成统一上下文。
  • 多种数据类型需要人工切换或手动换算,例如 UINT16INT16FLOAT_ABCD、倍率 0.1 等,容易算错。
  • 每次调试不同设备时,都要重新配置功能码、起始地址、数量和显示格式。
  • 读取和写入更关注原始寄存器,不够贴近“温度、压力、状态、设定值”这类工程变量。
  • 工程资料、报文日志、点位说明通常散落在 Excel、截图、聊天记录和测试记录中,后续复现困难。

2.2 Modbus Slave 的常见问题

Modbus Slave 适合临时模拟从站,但它通常更关注四个数据区本身,而不是项目字典。实际模拟设备时会遇到:

  • Server 模拟数据和 Client 读取点位往往需要分别配置,两个工具之间不能自然复用同一份点位表。
  • 模拟保持寄存器、输入寄存器、线圈、离散输入时,点位名称、单位、倍率和备注不够直观。
  • 外部主站写入后,虽然寄存器值变化了,但不容易直接看出对应的是哪个业务变量。
  • 项目切换后,模拟数据、连接参数和点位说明不容易完整恢复。
  • Client 调试和 Server 仿真分属两个工具,报文日志、工程配置和测试状态无法统一管理。

2.3 Modbus Studio 要解决什么

Modbus Studio 的目标不是简单复制 Modbus Poll 或 Modbus Slave,而是把常见 Modbus 调试过程整理成一个完整工程:

  • 用一份“寄存器字典”同时驱动 Client 和 Server。
  • Client 只读取字典里定义的点位,不读无关地址。
  • Server 只模拟字典里定义的点位,不生成无意义的固定地址表。
  • 每个点位都有地址、名称、数据类型、长度、读写权限、倍率、单位和备注。
  • 原始 HEX 和工程解析值同时显示,写入解析值时自动反算为设备原始值。
  • TCP / RTU Client、TCP / RTU Server、报文日志和工程管理放在同一个软件里。
  • 工程文件可以保存连接配置、Client 数据、Server 数据、寄存器字典和报文日志,方便下次继续调试或交付给同事。

简单来说,Modbus Poll 和 Modbus Slave 更像“协议调试工具”,而 Modbus Studio 更想做成“项目调试工作台”。它让一次调试留下完整的工程上下文,而不是只留下几个临时地址和一堆零散截图。

3. 启动软件

Modbus Studio\Modbus Studio.exe

4. 基本使用流程

推荐按以下顺序使用:

  1. 在“寄存器字典”中配置点位。
  2. 在“Client”中连接设备,软件会按字典自动循环读取。
  3. 如需模拟从站,在“Server”中按同一份字典配置数据并启动服务。
  4. 在“报文日志”中查看 TX/RX 原始报文和解析结果。
  5. 在“工程管理”中保存为 .mbs 工程文件。

5. 寄存器字典

寄存器字典是软件的核心。Client 和 Server 都会根据字典中的地址和长度工作,不会读取或显示字典之外的点位。

5.1 字典字段说明

字段 说明
分组 用于分类点位,例如“温度传感器”“系统状态”。
地址 Modbus 显示地址,例如 40001
名称 点位名称,例如“设定温度”。
数据类型 解析原始值时使用的数据格式。
长度 占用的 16 位寄存器数量,位区通常为 1。
读写权限 R 只读、W 只写、RW 读写。
比例因子 用于工程值换算。
单位 显示单位,例如 kPa%
备注 点位用途、范围或调试说明。

5.2 地址范围

地址范围 Modbus 区域 Client 行为 Server 行为
00001 - 09999 线圈 Coil 可读取,可写线圈 可模拟,可切换开关值
10001 - 19999 离散输入 Discrete Input 可读取,只读 可模拟,只读区
30001 - 39999 输入寄存器 Input Register 可读取,只读 可模拟寄存器值
40001 - 49999 保持寄存器 Holding Register 可读取,可写寄存器 可模拟寄存器值

说明:界面中填写的是常见 Modbus 显示地址,协议报文会自动转换为零基地址。例如 40001 会转换为协议地址 0

5.3 数据类型

支持的数据类型:

  • UINT16
  • INT16
  • UINT32
  • INT32
  • FLOAT_ABCD
  • FLOAT_CDAB
  • FLOAT_BADC
  • FLOAT_DCBA
  • BCD
  • BIT

选择数据类型后,软件会自动给出推荐长度,用户也可以手动修改。

5.4 比例因子

界面显示的解析值与设备原始值之间按比例因子换算:

解析值 = 原始值 × 比例因子
原始值 = 解析值 ÷ 比例因子

示例:

原始值 比例因子 界面解析值
250 0.1 25
1234 0.01 12.34

写入“解析值”时,软件会自动反算为原始寄存器值再发送。

6. Client 使用

Client 页面用于连接真实 Modbus 设备。

6.1 连接 RTU 设备

  1. 在左侧“连接配置”选择协议类型为 Modbus RTU
  2. 点击“刷新”获取串口列表。
  3. 选择端口、波特率、数据位、停止位、校验位和超时时间。
  4. 点击“连接 RTU”。
  5. 连接成功后,状态会显示为已连接。

6.2 连接 TCP 设备

  1. 在左侧“连接配置”选择协议类型为 Modbus TCP
  2. 输入主机地址,例如 127.0.0.1
  3. 输入端口,例如 502
  4. 设置超时时间。
  5. 点击“连接 TCP”。

6.3 自动读取

Client 不再依赖手动输入功能码、起始地址和数量。连接成功后,软件会根据寄存器字典自动循环读取:

  • 线圈区使用 01
  • 离散输入区使用 02
  • 保持寄存器区使用 03
  • 输入寄存器区使用 04

可在顶部设置“循环周期”,单位为毫秒。

6.4 合并读取

“合并读取”开启后,软件会尝试把相邻或接近的字典点位合并为较少的读取请求,减少报文数量。

适合:

  • 点位地址连续。
  • 设备支持一次读取较长寄存器数量。

如果设备对读取范围要求严格,或不允许读取未定义地址,可以关闭“合并读取”。

6.5 数据显示

Client 表格显示:

列名 说明
地址 字典中的显示地址。
名称 点位名称、数据类型和长度。
原始值 / 状态 寄存器显示 HEX,位区显示开关状态。
解析值 根据数据类型和比例因子计算后的值。
倍率/单位 当前点位的比例因子和单位。
权限 RWRW
备注 字典备注。

读取失败的行会高亮提示,方便定位某个地址或长度配置错误。

6.6 写入线圈

满足以下条件时可以写线圈:

  • 地址在 00001 - 09999
  • 权限为 WRW
  • 当前已经连接设备。

操作方法:

  1. 在 Client 表格中找到线圈点位。
  2. 点击“原始值 / 状态”列中的开关。
  3. 软件会发送写线圈报文。

6.7 写入保持寄存器

满足以下条件时可以写保持寄存器:

  • 地址在 40001 - 49999
  • 权限为 WRW
  • 当前已经连接设备。

支持两种写入方式:

写入位置 说明
原始值 / 状态 输入 HEX 原始值,例如 00640000 0064
解析值 输入工程值,软件按数据类型和比例因子自动编码。

输入完成并确认后,软件会立即写入设备。写入期间如果正在轮询,软件会短暂停止轮询,写入完成后再恢复。

7. Server 使用

Server 页面用于模拟 Modbus 从站。

7.1 Server 数据来源

Server 不再生成固定地址表,而是完全根据寄存器字典显示数据。

如果某个区域为空,说明寄存器字典中没有该区域的地址。

7.2 启动 TCP Server

  1. 进入“Server”页面。
  2. 协议类型选择 Modbus TCP
  3. 设置监听地址,例如 0.0.0.0
  4. 设置监听端口,例如 502
  5. 点击“启动服务”。

提示:Windows 上监听 502 端口可能需要管理员权限。调试时可使用 15025020 等普通端口。

7.3 启动 RTU Server

  1. 协议类型选择 Modbus RTU
  2. 选择串口和波特率。
  3. 设置从机地址。
  4. 点击“启动服务”。

RTU Server 需要真实串口或虚拟串口工具配合测试。

7.4 编辑 Server 数据

Server 表格按四个区域切换:

  • 线圈 0xxxx
  • 离散输入 1xxxx
  • 输入寄存器 3xxxx
  • 保持寄存器 4xxxx

位区可以直接切换开关值。寄存器区可以编辑:

  • 原始值 HEX
  • 解析值

如果服务已经启动,修改会立即同步到 Server 内部数据区,外部主站下一次读取即可获得新值。

7.5 外部主站写入

当外部主站写入线圈或保持寄存器时:

  • Server 会更新对应字典点位的值。
  • 报文会记录到“报文日志”。
  • “请求计数”会增加。

8. 报文日志

报文日志用于查看通信过程。

显示内容包括:

字段 说明
时间 报文发生时间。
方向 TX 发送或 RX 接收。
协议 RTUTCP
数据 原始十六进制报文。
解析结果 软件解析后的简要说明。
耗时 本次事务耗时,单位 ms。
状态 发送、成功或失败。

日志最多保留 1000 条。可以点击“清空日志”清除当前日志。

9. 工程管理

工程文件使用 .mbs 格式,本质是 JSON 文本文件。

9.1 新建工程

点击“新建工程”会清空当前配置,包括:

  • 连接配置
  • Client 数据
  • Server 数据
  • 寄存器字典
  • 报文日志
  • 工程路径

如果当前工程有未保存修改,软件会先弹出确认提示。

9.2 保存工程

点击“保存工程”会保存当前所有数据,包括:

  • 工程名称、描述、版本
  • RTU / TCP 连接配置
  • Client 从机地址、轮询周期、合并读取配置
  • Client 已读取的数据
  • Server 配置和当前模拟数据
  • 寄存器字典
  • 报文日志
  • Server 请求计数

第一次保存会弹出文件路径选择框。

9.3 另存为

点击“另存为”会强制选择新路径,并把当前工程路径切换到新文件。

9.4 打开工程

点击“打开工程”选择 .mbs 文件后,软件会恢复保存时的所有配置和数据。

9.5 最近工程

最近打开或保存的工程会显示在“最近工程”列表中。点击项目可快速打开;点击删除图标只会移除最近记录,不会删除磁盘上的工程文件。

10. 常见问题

10.1 TCP 连接失败

检查:

  • IP 地址是否正确。
  • 端口是否正确。
  • Server 是否已经启动。
  • 防火墙是否阻止连接。
  • 如果本机测试,Client 主机地址可填 127.0.0.1

10.2 RTU 串口连接失败

检查:

  • 串口是否被其他软件占用。
  • 波特率、数据位、停止位、校验位是否与设备一致。
  • USB 转串口驱动是否正常。
  • 从机地址是否正确。

10.3 某些点位读取失败

检查:

  • 字典地址是否在正确范围。
  • 数据类型长度是否正确。
  • 设备是否允许读取该地址。
  • 合并读取是否读到了设备不支持的空洞地址。

可以尝试关闭“合并读取”后再测试。

11 下载地址

公众杨工碎碎念公众号

留言:

Modbus Studio

即可获取下载链接。