modbus的使用说明——个人使用心得

本文详细介绍了Modbus协议在云端数据采集中的应用,包括不同数据位和寄存器的读取,以及大端和小端存储模式。重点讲解了Modbus中的读取功能码,如0x01读线圈寄存器、0x02读离散输入寄存器、0x03读保持寄存器和0x04读输入寄存器。此外,还深入探讨了Modbus地址模型和浮点数的存储与转换,提供了浮点数在Modbus协议中的处理步骤和实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.需求说明

在公司开发的项目中,为了实现云端modbus采集,在其中所学习到的关于mudbus不同数据位及不同寄存器读取的使用心得。


2.Modbus中的寄存器与数据位

Modbus的存储方式:
        大端存储:
                大端存储简单说就是一个int x = 0x12345678.
                小端存储保存为: 78 56 34 12
                大端存储则是: 12 34 56 78  (大端存储不需要倒过来) 

Modbus基础格式:
                主机读取从机输入寄存器数据格式:

数据格式:
        8位举例:
                modbus传递8位的 00 01 :这个表示的就是1。
                换算方式可以理解为:2的 01次方就是这个8位数据的值。

        16位举例:
                modbus传递16位的 00 01 :这个表示的就是1。
                换算方式可以理解为:前两位00*256 + 01*1就是这个16位数据的值。
        32位举例:
                modbus传递32位的 00 02 00 01 :这个表示的就是65538。
                换算方式可以理解为:后两位(00 01)*65536 + (00 02)*1,这里需要倒过来了。
读功能码:
        0x01: 读线圈寄存器
                实际上就可以类比为开关量,每个bit都对应一个信号的开关状态。所以一个byte就可以同时控制8路的信号。比如控制外部8路io的高低。

 

        0x02: 读离散输入寄存器
                他也是每个bit表示一个开关量,而他的开关量只能读取输入的开关信号,是不能够写的。比如我读取外部按键的按下还是松开。所以功能码也简单就一个读的 0x02。

EasyExcel 是一款基于Java的简单、高效的 Excel 文件读写工具,可以用于在后端实现 Excel 文件的导入导出功能。EasyExcel 提供了一种简单的方式来实现 Web 导出功能,下面是一个实现示例: 1. 首先,确保你的项目已经引入了 EasyExcel 的依赖。可以在 Maven 或者 Gradle 配置文件中添加以下依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency> ``` 2. 创建一个 Controller 类,并添加一个导出 Excel 的接口方法。例如: ```java import com.alibaba.excel.EasyExcel; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; @Controller @RequestMapping("/excel") public class ExcelController { @GetMapping("/export") @ResponseBody public void exportExcel(HttpServletResponse response) throws IOException { // 创建数据源,这里使用一个示例数据 List<User> userList = new ArrayList<>(); userList.add(new User("张三", 18)); userList.add(new User("李四", 20)); userList.add(new User("王五", 22)); // 设置响应头 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("用户信息表", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); // 使用 EasyExcel 导出 Excel 文件 EasyExcel.write(response.getOutputStream(), User.class).sheet("用户信息").doWrite(userList); } // 定义一个简单的 User 类,用于演示 public static class User { private String name; private Integer age; public User(String name, Integer age) { this.name = name; this.age = age; } // getter setter 方法省略 } } ``` 3. 在浏览器中访问 `/excel/export` 接口,即可下载导出的 Excel 文件。 以上就是使用 EasyExcel 实现 Web 导出 Excel 的简单示例。你可以根据自己的需求,调整数据源导出的 Excel 格式等内容。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值