• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

MODBUS 协议传感器读取数据?

18362201019 2018-04-29 浏览量:1428

前提:用STM32单片机串口读取RS232接口IMU传感器的数据,传感器与单片机之间的连接使用232转TTL。(相关电路工作正常)
我的操作:按照数据手册中的协议内容(如下图所示),用串口向IMU传感器发送字符数组(0x3a,0x0b......)(如下图),然后串口中断接收传感器发来的数据。

但是接收不到数据!!!!这是什么原因?

QQ图片20180428152411.png

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 接收不到的原因有很多。

    硬件上的连接是不是正确,电平是不是匹配等等。

    软件上,串口配置 是不是正确。波特率是不是对等等。

    可以先进行串口的自发自收进行测试

    • 发布于 2018-05-01
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:7
  • 看报文你用的是ASCII格式自定义命令,但你发送的字节序列里面包含非ASCII格式数据,肯定不对。
    • 发布于2018-04-29
    • 举报
    • 评论 2
    • 0
    • 0
18362201019 回复了 apleilx :啥意思,没明白你的意思,我向传感器发的就是手册上的那个字符型数组啊,(0x3a0x0b0x000x0b0x0d0x0a) 回复
apleilx 回复了 apleilx :0x0B0x00都是控制符,正常应该是字符串“:0B000B\r\n”另外还要注意奇偶校验和传感一样。 回复

  • MODBUS协议​通信的数据格式都是hex十六进制格式的[0x3a 0x0b ...],不是字符数组["0x3a 0x0b..."],这两种格式完全不同,MODBUS的从机自然不能识别。

    • 发布于2018-04-29
    • 举报
    • 评论 1
    • 0
    • 0
18362201019 回复了 donatello :我发的就是hex十六进制格式的[0x3a 0x0b ...],unsigned char[6]=[0x3a 0x0b ...]我表述错了,可这样还是无法收到数据? 回复

  • 直接发送16进制数据字节;如果报文发送都没问题,要看下波特率等设置了,还有串口开启中断情况。
    • 发布于2018-04-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 如果完全收不到任务数据,那模块应该都没有正常工作的,检查下模块的工作 状态,检查指令之前是否有其他依赖操作,另外,MODBUS是一套协议,不是单指令的,至少它是有检测是否在线的内容的,使用前建议仔细阅读
    • 发布于2018-04-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 报文是否正常;看下模块那边是什么都没收到还是收到的认为不对丢掉了;串口设置对不对,这个也要查一下。
    • 发布于2018-04-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 先确定你的协议是否有问题,再确定你的数据是否正常,再检查你的主从站设置是否正确,需要逐级排查
    • 发布于2018-05-01
    • 举报
    • 评论 0
    • 0
    • 0

  • 检查你的串口的波特率是否匹配,其次就是你要发送的读数据指令报文是按照16进制的数组发送,实在读不出数据,教你一个简单的办法,手里应该有USB转COM模块吧,在电脑上下载一个串口调试助手,先使用串口助手调试通,在再芯片上进行操作。
    • 发布于2018-05-02
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

MODBUS 协议传感器读取数据?