找回密码
 立即注册
查看: 148|回复: 5

关于梁工的MODBUS协议教程疑问

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:61
  • 最近打卡:2025-06-12 11:08:32

12

主题

25

回帖

416

积分

中级会员

积分
416
发表于 2025-6-1 17:27:32 | 显示全部楼层 |阅读模式
在STC8H8K视频教程有梁工关于MODBUS协议补充。有如下疑问:

    程序中第一句话,请先别修改程序, 直接下载"08-串口1中断收发-C语言-MODBUS协议"里的"UART1.hex"测试, 主频选择11.0592MHZ. 测试正常后再修改移植.
串口1按MODBUS-RTU协议通信. 本例为从机程序, 主机一般是电脑端.。
   这个下载后通过串口测试已经成功,如下图。
通过测试,这个就是普通URAT通讯,没体现modbus内容?
我个人理解 MODBUS_RTU协议基于一些485芯片建立起来,然后通过modbus_RTU协议进行通讯。那么我通过美讯485芯片搭建电路后,如何移植?




截图202506011723354844.jpg

我设计的485硬件接口

我设计的485硬件接口
回复

使用道具 举报 送花

3

主题

722

回帖

155

积分

等待验证会员

积分
155
发表于 2025-6-1 17:28:00 | 显示全部楼层
在计算机网络中,MODBUS协议是一种常用的通信协议,主要用于设备间的通信。它基于485芯片的连接,通过协议栈进行数据传输。以下是一些关于MODBUS协议的基本信息和移植指南,帮助您更好地理解和实现MODBUS协议的移植。

1. MODBUS协议的基本结构
MODBUS协议由以下部分组成:
地址:16位,用于标识数据的发送端或接收端。
数据:12位,用于存储数据。
协议栈:发送端和接收端的模块,分别负责发送和接收数据。

MODBUS协议分为两种协议栈:
URAT协议:适用于发送端的模块。
RTU协议:适用于接收端的模块。

2. MODBUS协议的典型应用
MODBUS协议广泛应用于工业设备、数据采集、通信设备等场景。例如,它可以用于控制计算机的各个模块,如CPU、内存、外设等。

3. MODBUS协议的标准文档
MODBUS协议的标准文档可以参考以下资源:
标准文档:MODBUS协议协议栈
标准文档链接:MODBUS协议协议栈

4. MODBUS协议的协议栈
MODBUS协议分为发送端和接收端的协议栈:
发送端协议栈:用于发送数据到接收端。
接收端协议栈:用于接收数据并处理。

5. MODBUS协议的测试
MODBUS协议的测试通常涉及以下步骤:
1. 测试设备:使用标准的MODBUS测试设备(如STM798K)进行测试。
2. 测试数据:发送测试数据到发送端,读取测试数据从接收端。
3. 测试结果:根据测试结果验证数据是否正确传输。

6. MODBUS协议的移植
MODBUS协议的移植可以通过以下步骤完成:
1. 安装MODBUS协议标准文档:下载并安装MODBUS协议的标准文档。
2. 理解协议栈结构:理解发送端和接收端的协议栈结构。
3. 编写发送端程序:编写发送端程序,负责发送数据到发送端协议栈。
4. 编写接收端程序:编写接收端程序,负责接收数据并处理。
5. 测试程序:通过测试设备进行测试,验证数据是否正确传输。

7. MODBUS协议的实现
MODBUS协议的实现通常需要以下步骤:
1. 模块连接:将发送端和接收端的模块连接到MODBUS协议的标准模块上。
2. 地址分配:为发送端和接收端分配MODBUS地址。
3. 数据传输:通过模块的通信接口,进行数据的传输。
4. 协议栈处理:通过发送端和接收端的协议栈,处理数据。

8. MODBUS协议的注意事项
MODBUS协议的移植过程中,需要注意以下几点:
地址分配:地址分配是MODBUS协议移植的关键步骤,必须正确无误。
模块连接:模块的连接必须严格按照标准文档中的描述进行。
数据处理:数据处理是MODBUS协议移植的核心部分,必须正确理解协议栈的协议栈。

9. MODBUS协议的实现示例
以下是一个MODBUS协议的移植示例,展示了从机程序和程序之间的不同:
  1. c
  2. // 发送端程序
  3. void senddata() {
  4.     // 读取发送端的地址
  5.     unsigned int sendaddr = getmodbusaddr("发送端发送端");
  6.     unsigned int senddata = getmodbusdata(sendaddr);
  7.     // 发送数据
  8.     senddata = senddata + 12;  // 增加12位以适应MODBUS协议
  9.    UART1hex(0x00, sendaddr, 0x00, senddata);
  10.     // 读取数据
  11.     unsigned int receiveaddr = getmodbusaddr("发送端接收端");
  12.     unsigned int receivedata = getmodbusdata(receiveaddr);
  13.     int data = receivedata + 12;
  14.     // 解析数据
  15.     int address = data >> 16;
  16.     unsigned int data = data & 0x3F;
  17.     int address = address + 112;
  18.     int status = data & 0x7F;
  19.     int id = address / 16;
  20.     unsigned int address = id + 112;
  21.     int status = data / 16;
  22.     // 输出结果
  23.     if (status == 0) {
  24.         // 没有问题,数据传输成功
  25.         status = 1;
  26.     }
  27. }
  28. // 接收端程序
  29. void recvdata() {
  30.     unsigned int receiveaddr = getmodbusaddr("接收端接收端");
  31.     unsigned int receivedata = getmodbusdata(receiveaddr);
  32.     // 解析数据
  33.     int address = receivedata >> 16;
  34.     unsigned int data = receivedata & 0x3F;
  35.     int id = address / 16;
  36.     unsigned int data = id + 112;
  37.     int status = data / 16;
  38.     // 读取数据
  39.     unsigned int sendaddr = getmodbusaddr("接收端发送端");
  40.     unsigned int senddata = getmodbusdata(sendaddr);
  41.     int data = senddata + 12;
  42.     // 输出结果
  43.     if (status == 0) {
  44.         // 数据传输成功
  45.         status = 1;
  46.     }
  47. }
复制代码

10. MODBUS协议的总结
MODBUS协议是一种高性能的通信协议,适用于工业设备、网络设备等场景。MODBUS协议的移植需要理解协议栈的结构,正确分配地址和数据,以及理解数据的传输过程。

如果您有具体的问题或需要进一步的建议,请随时告诉我!

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:61
  • 最近打卡:2025-06-12 11:08:32

12

主题

25

回帖

416

积分

中级会员

积分
416
发表于 2025-6-1 17:32:56 | 显示全部楼层
国芯人*** 发表于 2025-6-1 17:28
在计算机网络中,MODBUS协议是一种常用的通信协议,主要用于设备间的通信。它基于485芯片的连接,通过协议 ...

机器人就不要回复了,没有一次是有用的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:468
  • 最近打卡:2025-06-16 07:06:57
已绑定手机

79

主题

5131

回帖

9138

积分

超级版主

DebugLab

积分
9138
发表于 2025-6-1 18:02:19 | 显示全部楼层
可以根据协议编写串口接收程序
我写的串口收发程序:
https://www.stcaimcu.com/thread-16321-1-1.html
https://www.stcaimcu.com/thread-4598-1-1.html
自定义协议:
截图202506011802167508.jpg
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1913

回帖

4297

积分

荣誉版主

无情的代码机器

积分
4297
发表于 2025-6-1 18:44:58 | 显示全部楼层
建议先学习modbus报文格式
截图202506011836332690.jpg

加个485芯片不过是串口转485通讯,另一端一般再485转串口收数据解析。
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:564
  • 最近打卡:2025-06-16 10:28:17
已绑定手机

50

主题

1816

回帖

3130

积分

论坛元老

积分
3130
发表于 2025-6-1 20:24:44 | 显示全部楼层
modbus是一种协议,485,232或者网口是硬件连接,它们有可能关联,但不是一个东西
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 14:30 , Processed in 0.126336 second(s), 81 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表