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 空间复杂度计算…...
ArcGIS Pro SDK (十二)布局 4 预定义的形状和箭头
ArcGIS Pro SDK (十二)布局 4 预定义的形状和箭头 文章目录 ArcGIS Pro SDK (十二)布局 4 预定义的形状和箭头1 创建预定义的形状图形元素2 创建预定义的形状图形元素3 创建预定义的形状图形元素4 创建线箭头元素环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0 1 …...
在 Ubuntu 14.04 服务器上安装 ISPConfig3 的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 虽然命令行是一个强大的工具,可以让您在许多情况下快速轻松地工作,但在某些情况下,可视化界面…...
ELK学习笔记
ElasticStack分布式日志系统概述 Elasticsearch: 一个分布式搜索引擎,能够快速存储、搜索和分析大量数据。核心概念包括索引(Index)、文档(Document)和分片(Shard)。使用 RESTful API 进行数据操…...
Python+Selenium+Pytest+POM自动化测试框架封装详解
1、测试框架简介 1)测试框架的优点 代码复用率高,如果不使用框架的话,代码会显得很冗余。可以组装日志、报告、邮件等一些高级功能。提高元素等数据的可维护性,元素发生变化时,只需要更新一下配置文件。使用更灵活的…...
Hidden Marlov Model(HMM)
一、Model 1、将声学特征设为X,经过语音识别得到的tokens设为Y,目标是找到通过X得到Y的最大概率,可以通过概率公式改变为 分为两个概率 2、将tokens序列Y转化为states序列S,声学特征分得更细 3、从states到声学特征的过程 二、HM…...
mamba的安装及下载速度慢问题解决
同事反馈mamba的安装时网络慢 mamba是conda的加速工具,相比于conda 对包和环境的管理,mamba可以实现并行运算。相比于 conda,mamba 是用C重写了 conda 的部分功能,运行效率显著提高,可以进行并行的下载,使…...
【Linux入门】Linux环境搭建
目录 前言 一、发行版本 二、搭建Linux环境 1.Linux环境搭建方式 2.虚拟机安装Ubuntu 22.02.4 1)安装VMWare 2)下载镜像源 3)添加虚拟机 4)换源 5)安装VM Tools 6)添加快照 总结 前言 Linux是一款自由和开放…...
CPU缓存一致性机制详解
CPU缓存一致性机制详解 在多核处理器中,缓存一致性是保证系统正常运行的重要环节。本文详细介绍了缓存一致性协议、写入策略、总线嗅探、目录协议等相关概念,并通过示例代码解释了这些机制是如何在实际应用中工作的。通过学习本文,读者可以深…...
Android 12系统源码_屏幕设备(一)DisplayManagerService的启动
前言 DisplayManagerService是Android Framework中管理显示屏幕相关的模块,各种Display的连接、配置等,都是通过DMS和来管理控制。 在DMS模块中,对显示屏幕的描述分为物理显示屏(physical display)和逻辑显示屏(logical display),…...
《AI视频类工具之十——D-ID》
一.简介 官网:D-ID | The #1 Choice for AI Generated Video Creation Platform D-ID是一个人工智能生成的视频创建平台,可以轻松快速地从文本输入中创建高质量、高性价比和引人入胜的视频,背后的Al技术是由Stable Difusion和GPT.3提供支持,可以在没有任何技术知识的情况…...
wordpress简约企业主题下载/小广告
由于系统升级为Ubuntu 12.04 LTS版,【Linux菜鸟成长记】系列教程将不再更新,接下来会更新Ubuntu 12.04的新功能和使用方法技巧等文章。故将此系列文章整理存档,供自己和大家使用。遗憾的是未能写下搭建Qt开发环境,接下来会有更新。…...
做网站推销手表/抖音推广平台联系方式
Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定。现在我们封装一个“Point类”来实现平面上的点的操作。 根据“append.cc”,完成Point类的构造方法和show()方法,输出各Point对象的构造和析构次序。实现showPoi…...
南充网站建设与维护/百度搜索关键词排名
表现:vue项目中,进入页面的时候,报错如下 原因:我把Echarts 的初始化,写到了created 的回调函数中了, 解决办法:将初始化写到mounted的回调函数中 理由: created: 在模板渲染成htm…...
岳阳做网站/全球外贸采购网
软件无线电SDR应用(1)MATLAB信号产生MATLAB简介常用信号产生函数常用信号处理和滤波函数滤波函数filter单位抽样响应函数impz单位滤波函数freqzMATLAB简介 本系列利用MATLAB和Verilog语言进行软件无线电开发。MATLAB的主要优势体现在以下方面࿱…...
信专业广州网站建设/大地seo视频
本文算是奇"银"技巧吧 ,毕竟官方的数组都没有采用这样的方式 首先上c模板写法 template class 你的模板类 { //.... }; //--------调用--------- //你的模板类<数据类型> 实例对象; //例如 你的模板类 cs; Markup Copy 首先说下 , 上面C代码的 T 是模板…...
网站建设课程设计的必要性/互联网推广引流公司
2.2. 数据的绑定 前面说过了,SpringMVC是方法级的映射,那么Spring是如何处理方法签名的,又是如何将表单数据绑定到方法参数中的?下面我们就来讨论这个问题。2.2.1. 处理方法签名 首先,我们可以在方法签名中放入CookieV…...