关于STM32F1精英版读取rs485传感器的数据的一些疑问

2019-07-20 23:30发布

本帖最后由 郑忠毅 于 2019-5-31 10:00 编辑

现在身边设备有:
  • STM32F1的单片机开发板
  • RS485 - modbus-16的水质PH值传感器
  • RS485转USB

主要想要完成单片机读取到传感器的数据,(传感器和单片机的相互通信)。


       仔细查看了modbus协议,我的理解是 只要单片机和传感器可以相互传输字节流,就基本完成通信。具体的数据,只要把对应的十六进制数据转换一下便可以得到;在一定程度上可能不用关心CRC16的校验码,因为读取数据的报文是固定的,CRC已经计算好了,只要写死在程序里就可以;疑问一:不知道是否理解的对?)下方图片是传感器提供的通信格式;
传感器提供的通信格式 传感器提供的通信格式
       鉴于上方的理解,我使用的是 精英版 源码 《实验24 485实验》,不知道这个实验的源码是否可以满足我的需求(疑问二:不知道这个实验源码 发送 和 接收的模块,是否可以使用),使用过程中,我将u8 rs485buf[8]的值从cnt改为{0x01,0x03,0x00,0x01,0x00,0x02,0x95,0xCB},并且发送到传感器,传感器确实返回了值,但是返回的值和我在电脑上用串口工具直接连传感器时完全不一样,返回的值类似于 ff  e0  cf  c0  e  ff  ,ff  e0  ff  e0  cf  ff 这样的和通信协议上不一样的值(疑问三:为什么会返回这样的值,我该如何处理?);有趣的是为了验证是否真的是和传感器通信,我做了以下的一些调试:
  • 断开了485的物理连接,不会有返回值;
  • 修改单片机的CRC(修改最后的2个字节,随便改为0x01,0x03,0x00,0x01,0x00,0x02,0x95,0xCC),也不会有如何设置的返回;
下图是使用串口工具连接传感器是调试的页面,可以用正常返回报文。
QQ截图20190530154918.png

从零开始搞这些,感觉非常吃力,之前一直WEB开发,非常感谢能有大佬可以帮忙解惑。

下方是实验源码
实验24 485实验.zip (3.3 MB, 下载次数: 14) 2019-5-31 09:59 上传 点击文件名下载附件
实验源码





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
21条回答
郑忠毅
1楼-- · 2019-07-21 21:03
nashui_sx 发表于 2019-5-30 17:39
用专业的调试助手把
用03号命令直接读取就好了

这个工具我用过的,现在主要问题是编程过程中,读取传感器返回的值不对。
nashui_sx
2楼-- · 2019-07-21 21:26
 精彩回答 2  元偷偷看……
郑忠毅
3楼-- · 2019-07-22 02:14
nashui_sx 发表于 2019-5-31 09:29
是的。。。。

是这样的,我现在主要问题可能是编程上,单片机读来的数据完全不对,可以帮忙看看吗?单片机返回的数据没有按照协议来,反而是 ff  e0  cf  c0  e  ff 这样的数据,但是如果命令不对,单片机又读取不了返回的数据,这个很困扰我
郑忠毅
4楼-- · 2019-07-22 04:38
nashui_sx 发表于 2019-5-31 09:31
能有啥不对,crc校验不通过的数据你又不处理,

返回的数据理论上是按照modbus协议来类似于 01 03 02 00 00 BB 44 有ID地址,功能码,数据,CRC校验码之类的,但是我收到的数据是ff  e0  ff  e0  cf  ff 这样的不规则的数据,而且在程序中我故意写错命令,真的也得不到返回的值,所以不清楚该怎么搞
nashui_sx
5楼-- · 2019-07-22 05:15
 精彩回答 2  元偷偷看……
郑忠毅
6楼-- · 2019-07-22 08:38
nashui_sx 发表于 2019-5-31 09:43
上代码吧,测试下就知道代码还是硬件问题了

好的,代码就是 《实验24 485实验》的代码,基本没什么改 我马上发一下main和rs485.c

一周热门 更多>