go之goburrow/modbus 学习
goburrow/modbus 是一个用Go语言实现的Modbus协议库,提供了Modbus主机(Master)和从机(Slave)的实现,支持两种主要的Modbus传输模式:Modbus TCP和Modbus RTU。
功能介绍
1. 支持的传输模式
-
Modbus TCP: 这是基于TCP/IP的Modbus通信协议,通常用于以太网或Wi-Fi连接的设备。
goburrow/modbus库通过TCPClientHandler来处理Modbus TCP通信。 -
Modbus RTU: 这是基于串行通信(如RS-232、RS-485)的Modbus协议,通常用于工业自动化环境中的设备。
goburrow/modbus库通过RTUClientHandler来处理Modbus RTU通信。
2. Modbus主机功能(Master)
作为Modbus主机,goburrow/modbus库支持多种Modbus功能码,让你能够与Modbus从机设备进行读写操作:
- 读写寄存器和线圈
ReadCoils(address, quantity)- 读取线圈状态(功能码01)ReadDiscreteInputs(address, quantity)- 读取离散输入状态(功能码02)ReadHoldingRegisters(address, quantity)- 读取保持寄存器值(功能码03)ReadInputRegisters(address, quantity)- 读取输入寄存器值(功能码04)WriteSingleCoil(address, value)- 写单个线圈状态(功能码05)WriteSingleRegister(address, value)- 写单个保持寄存器值(功能码06)WriteMultipleCoils(address, quantity, value)- 写多个线圈状态(功能码15)WriteMultipleRegisters(address, quantity, value)- 写多个保持寄存器值(功能码16)
3. Modbus从机功能(Slave)
goburrow/modbus库主要提供Modbus主机功能,默认并不包含从机功能的实现。要实现从机功能,通常需要手动处理Modbus请求并响应。虽然goburrow/modbus没有直接的从机实现,但可以通过使用底层的TCP或串口库自行处理从机请求。
4. 错误处理
goburrow/modbus提供了基本的错误处理机制。如果在发送Modbus请求或接收响应时出现错误,会返回一个带有错误信息的error对象。
5. 连接管理
- 连接管理:提供了
Connect()和Close()方法,用于与Modbus设备的连接和断开连接。 - 自动重连:通过控制连接的生命周期,支持在连接断开时重新连接的逻辑。
6. 高级功能
- 超时设置:允许通过
Timeout参数设置读写操作的超时时间。 - 从机ID配置:在Modbus通信中,
SlaveId用来指定目标从机的ID。每次操作时可以指定不同的从机ID。 - 数据帧自定义:
goburrow/modbus允许你构建自定义的Modbus数据帧,并直接发送/接收原始帧数据。
7、示例
使用Modbus TCP客户端
以下是一个简单的Modbus TCP客户端示例,用于读取从站设备的保持寄存器值:
package mainimport ("fmt""github.com/goburrow/modbus"
)func main() {// 创建Modbus TCP客户端handler := modbus.NewTCPClientHandler("192.168.1.1:502")handler.Timeout = 10 * time.Secondhandler.SlaveId = 1// 连接到Modbus服务器err := handler.Connect()if err != nil {panic(err)}defer handler.Close()client := modbus.NewClient(handler)// 读取保持寄存器(功能码03),从寄存器地址0开始,读取2个寄存器results, err := client.ReadHoldingRegisters(0, 2)if err != nil {panic(err)}fmt.Printf("Received: %x\n", results)
}
使用Modbus RTU客户端
如果你使用的是Modbus RTU(通常通过串口通信),可以使用如下代码:
package mainimport ("fmt""github.com/goburrow/modbus""time"
)func main() {// 创建Modbus RTU客户端handler := modbus.NewRTUClientHandler("/dev/ttyUSB0")handler.BaudRate = 19200handler.DataBits = 8handler.Parity = "N"handler.StopBits = 1handler.SlaveId = 1handler.Timeout = 10 * time.Second// 打开串口连接err := handler.Connect()if err != nil {panic(err)}defer handler.Close()client := modbus.NewClient(handler)// 读取保持寄存器(功能码03),从寄存器地址0开始,读取2个寄存器results, err := client.ReadHoldingRegisters(0, 2)if err != nil {panic(err)}fmt.Printf("Received: %x\n", results)
}
注意事项
- 超时设置:
handler.Timeout参数设置的是连接和读写操作的超时时间,根据实际网络情况调整。 - 串口参数配置: 如果使用Modbus RTU,请确保串口参数(波特率、数据位、校验位、停止位)与设备匹配。
相关文章:
go之goburrow/modbus 学习
goburrow/modbus 是一个用Go语言实现的Modbus协议库,提供了Modbus主机(Master)和从机(Slave)的实现,支持两种主要的Modbus传输模式:Modbus TCP和Modbus RTU。 功能介绍 1. 支持的传输模式 Mod…...
开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)算法是什么?
开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)算法是什么? 随着计算机视觉技术的快速发展,目标检测(Object Detection)已经在各种应用场景中得到了广泛的应用。然而,传统的目标检…...
【教程】Ubuntu给pycharm添加侧边栏快捷方式
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 以下教程不仅限于pycharm,其他软件也是一样操作 1、进入到pycharm的目录,先通过命令行打开pycharm: ./bin/pycharm…...
三个月外贸小白好迷茫,该何去何从?
最近看到一个共性的问题,也许对于大多数外贸新人来说,都有过这样的困扰和无力感,也许对于每一个没有强大背景的外贸小伙伴来说,可能都是这样一路成长起来的。 大家好,我是一名普通二本英专生,八月中旬入职…...
MySQL数据库——基本查询(Create)
CRUD:Create(创建)Retrieve(读取)Update(更新)Delete(删除) 1.Create ①单行数据全列插入 insert [into] table_name [(colume[,colume]……)] values (value_list) […...
spring-security-1-快速入门
1 功能 身份认证(authentication)授权(authorization)防御常见攻击 身份认证:常见账号密码登录,短信登录 授权:什么样的角色,能看见什么菜单,能访问哪些接口。 2 pom <dependency><groupId>org.springf…...
5 大场景上手通义灵码企业知识库 RAG
大家好,我是通义灵码,你的智能编程助手!最近我又升级啦,智能问答功能全面升级至 Qwen2,新版本在各个方面的性能和准确性都得到了显著提升。此外,行间代码补全效果也全面优化,多种编程语言生成性…...
免费远程控制电脑的软件有哪些?
什么是远程控制? 远程控制是一种通过网络从一台设备操作另一台设备的技术。连接后,用户可以直接远程操作那台电脑进行各种操作。随着科技的不断进步和用户需求的增加,远程控制市场日益蓬勃。远程控制不仅应用于远程办公和远程教学࿰…...
Linux软件包yum
目录 Linux软件包管理器 yum关于rzsz注意事项查看软件包如何安装软件卸载命令 Linux开发工具Linux编辑器-vim使用1. vim的基本概念2. vim的基本操作3. vim正常模式命令集4. vim末行模式命令集5. vim操作总结 小彩蛋 Linux软件包管理器 yum 软件包 在Linux下安装软件ÿ…...
网页的切换与嵌套
网页的切换与嵌套 网页的切换 在浏览器窗口中如果点击超链接标签会在当前的浏览器窗口中显示新的数据,但有些超链接标签点击后却会在一个新的窗口显示数据,这种情况下就无法对新的开的窗口页面进行操作了。 基于这种情况,我们就需要使用dri…...
基于飞桨框架的稀疏计算使用指南
本文作者-是 Yu 欸,华科在读博士生,定期记录并分享所学知识,博客关注者5w。本文将详细介绍如何在 PaddlePaddle 中利用稀疏计算应用稀疏 ResNet,涵盖稀疏数据格式的础知识、如何创建和操作稀疏张量,以及如何开发和训练…...
启明云端WT32C3-S6物联网模块,乐鑫ESP32-C3芯片技术应用
随着物联网技术的飞速发展,智能设备在我们生活中的应用越来越广泛。从智能电网到远程医疗,从楼宇自动化到智能家居,这些技术正在改变我们的生活方式。 在这样的背景下,启明云端推出的WT32C3-S6 WiFi模块以其低功耗、高性价比的特…...
超越流水线,企业研发规范落地新思路
作者:子丑 内容大纲: 1、研发规范≠流程约束 2、自动化工具→研发规范载体 3、研发规范在工具上的落地示例 4、研发规范的选型方法与常见实践 研发规范≠流程约束 这个故事特别适合研发规范的场景,我们要避免成为把猫绑在柱子上的信众…...
财务会计与管理会计(四)
文章目录 月度数据统计分析OFFSET函数在图表分析中的应用 多种费用组合分析图SUMPRODUCT函数 省公司全年数据分析模板INDIRECT、OFFSET函数 多公司分季度数据筛选VLOOKUP、IFERROR函数的应用 淘宝后台数据分析OFFSET函数在跨表取数中的应用 燃气消耗台账数据统计分析图SUMPRODU…...
回归分析系列1-多元线性回归
03 多元线性回归 3.1 简介 多元线性回归是简单线性回归的扩展,允许我们同时研究多个自变量对因变量的影响。多元回归模型可以表示为: 其中,x1,x2,…,xp是 p 个自变量,β0 是截距,β1,β2,…,βp是对应的回归系数&…...
web小游戏开发:拼图——蜂巢拼图
web小游戏开发:拼图——蜂巢拼图 蜂巢拼图游戏规则调整选项切图计算六边形的宽和高铺上背景画出蜂巢制作图块游戏方法打乱排列拖拽图块开始拖拽拖拽移动放置图块小结蜂巢拼图 之前我们已经完成了长方形的拼图代码,包括了三个游戏方式,并讨论了带咬合齿的游戏代码该如何制作…...
springCloud集成activiti5.22.0流程引擎(分支)
springCloud集成activiti5.22.0流程引擎 点关注不迷路,欢迎再访! 精简博客内容,尽量已行业术语来分享。 努力做到对每一位认可自己的读者负责。 帮助别人的同时更是丰富自己的良机。 文章目录 springCloud集成activiti5.22.0流程引擎一.Sprin…...
ppt模板免费网站有哪些?自动美化工具推荐
新的8月,是时候以全新面貌迎接高效办公挑战了! 想要你的PPT演示脱颖而出,却苦于找不到精美又免费的模板? 别担心,今天我来告诉你们:哪个软件有精美免费ppt模板? 今天我为你们精心汇总了6款PPT…...
java实现解析pdf格式发票
为了减少用户工作量及误操作的可能性,需要实现用户上传PDF格式的发票,系统通过解析PDF文件获取发票内容,并直接将其写入表单。以下文章记录了功能实现的代码。 发票样式 发票内容解析 引用Maven 使用pdfbox <dependency><groupI…...
数据结构初阶——算法复杂度超详解
文章目录 1. 数据结构前言1. 1 数据结构1. 2 算法 2. 算法效率2. 1 复杂度的概念 3. 时间复杂度3. 1 大O的渐进表示法3. 2 时间复杂度计算示例3. 2. 1 示例13. 2. 2 示例23. 2. 3 示例33. 2. 4 示例43. 2. 5 示例53. 2. 6 示例63. 2. 7 示例7 4. 空间复杂度4. 1 空间复杂度计算…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
