Modbus协议详解:功能码与通信格式
需积分: 9 99 浏览量
更新于2024-09-13
收藏 138KB PDF 举报
"该文档详细介绍了在嵌入式开发中常用的Modbus协议功能码,包括读线圈(01)和读保持寄存器(03)的操作,以及相关的通信资料格式、数据校验和错误响应。"
在工业自动化领域,Modbus协议是一种广泛使用的串行通信协议,它允许设备之间进行数据交换。本文档主要关注Modbus协议中的ASCII(美国标准代码交换信息格式)通信模式,这是一种将二进制数据转换为可打印的ASCII字符以便于传输的格式。
1. **ASCII格式的通信资料格式**:
- STX(Start of Text): 启始单元,用“:"(3AH)表示。
- ADDRESS: 设备地址,8位,范围从00(广播)到250(对应变频器地址)。
- FUNC: 命令码,8位,用于指示执行的操作,如01代表读线圈,03代表读保持寄存器。
- DataH, DataL: 数据高字节和低字节。
- LRC(Least Significant Bit Checksum): 最低位校验码,用于检查数据的完整性。
- END: 结束符,包括CR(Carriage Return, 0DH)和LF(Line Feed, 0AH)。
2. **功能码01 - 读线圈**:
- 上位机发送的数据格式包含地址、功能码、寄存器起始地址(ADDRH, ADDRL)、数量(NUMH, Numl)以及LRC校验。
- 变频器返回的数据包括地址、功能码、字节数(BYTECOUNT)、数据(DATA1...DATAN)和LRC校验。
- 错误响应时,功能码前会加上0x81,表示错误类型,如0x8101、0x8102等。
3. **功能码03 - 读保持寄存器**:
- 与读线圈类似,但数量表示要读的保持寄存器数量,且返回数据的BYTECOUNT为2 * NUM。
- 读取保持寄存器通常用于获取设备的配置参数或当前状态。
4. **示例应用**:
- 检测变频器运行方向,通过读取特定寄存器(如CD160和CD161)的值来判断。
- 发送读取线圈请求:“:“010100050001F90D0A”,接收返回数据:“:“01010101FC0D0A”,其中“01”表示变频器状态,1表示反转运行。
5. **数据校验**:
- LRC校验用于确保数据在传输过程中未被篡改。计算方法是对所有数据字节(不包括STX、END和地址)求和,然后取反(模256)。
6. **错误处理**:
- 当出现通信错误或无效命令时,变频器会返回一个错误响应,功能码前加0x81,后跟具体的错误代码。
了解并熟练运用这些Modbus功能码是进行嵌入式系统与变频器等设备通信的基础,对于实现设备间的有效数据交互至关重要。开发者需要根据实际需求选择合适的功能码,并确保正确处理数据校验和错误响应,以确保通信的稳定性和可靠性。
258 浏览量
2020-11-09 上传
2021-10-01 上传
2023-03-31 上传
2023-06-11 上传
2022-09-20 上传
2020-12-11 上传
generaljim
- 粉丝: 0
- 资源: 1
最新资源
- 高清艺术文字图标资源,PNG和ICO格式免费下载
- mui框架HTML5应用界面组件使用示例教程
- Vue.js开发利器:chrome-vue-devtools插件解析
- 掌握ElectronBrowserJS:打造跨平台电子应用
- 前端导师教程:构建与部署社交证明页面
- Java多线程与线程安全在断点续传中的实现
- 免Root一键卸载安卓预装应用教程
- 易语言实现高级表格滚动条完美控制技巧
- 超声波测距尺的源码实现
- 数据可视化与交互:构建易用的数据界面
- 实现Discourse外聘回复自动标记的简易插件
- 链表的头插法与尾插法实现及长度计算
- Playwright与Typescript及Mocha集成:自动化UI测试实践指南
- 128x128像素线性工具图标下载集合
- 易语言安装包程序增强版:智能导入与重复库过滤
- 利用AJAX与Spotify API在Google地图中探索世界音乐排行榜