作者aaa7513231 (浑沌与秩序)
看板ASM
标题[问题] Rs485 Modbus讯号解析
时间Wed Mar 11 23:17:47 2020
大家好,问题如标题所示
遇到一个很神奇的问题,搞得我很烦
我有一组温湿度计,
我用
Max485模组 ( 这种
https://goods.ruten.com.tw/item/show?21447776536912 )
或
USB转Rs485 ( 这种
https://goods.ruten.com.tw/item/show?21440347643873 )
去读,回传讯号都会解析异常
我询问厂商她只说便宜货读不了,用他四千块的USB转Rs485/422模组就读的到
不管我用Max485/SP485ee/VP06/VP22/V6022
各种485的ic都无法读取温湿度计回传的讯号
我用逻辑分析器解析的讯号读如下
https://upload.cc/i1/2020/03/11/zwCeJa.png
这款温湿度讯号回响超快,约0.3ms
https://upload.cc/i1/2020/03/11/rvaJF7.png
其他可正常读取的设备回响就比较长
这是我目前搞了很久,唯一发现的差异点
主要是我开发硬件输出Rs485讯号希望可以读取他,我读其他设备都可以
就这一款温湿度计不行,搞得我心好烦= =
虽然换一款温湿度计就好,但我好想知道原因啊~~~
希望有经验的大大可以分享一下心得
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.232.168.44 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/ASM/M.1583939870.A.F71.html
1F:→ god145145: 不良品吧 叫厂商来当场读给你看 03/12 00:10
2F:推 chuegou: 照你的叙述 你应该是要放温湿度计的详细资料才是 03/12 00:56
温湿度计这一款我有买四组,外加一组厂商的USB转RS485/422转换器
使用厂商的转换器可以正常读取,但用我上述的那些就不行
所以撇除硬体(温湿度计坏掉)或485晶片(上述的晶片我有同时测试读取其他设备正常)
我在想是否温湿度计的回传讯号速度(0.3ms)太快的问题
晶片是读得到讯号,只是解析的格式错误,上述的晶片都是一样的问题
我用DSO138读取的波形如下
https://upload.cc/i1/2020/03/12/IuMnf4.jpg
传送+回传
https://upload.cc/i1/2020/03/12/2xvFT8.jpg
温湿度计讯号回传放大
这问题好难解啊,一个点卡在那里心很烦= =
※ 编辑: aaa7513231 (36.232.168.44 台湾), 03/12/2020 09:44:31
3F:推 god145145: 既然有他的转接就比对一下讯号,再用他的转接去读其它s 03/12 21:42
4F:→ god145145: ersor看看。如果可以就买4000卖12000,你也省事。 03/12 21:42
虽然厂商的转接器可以使用,但我是在开发电路板其中有整合Rs485输出,可以的话还是
希望可以支援多一点的设备,也怕未来又遇到这种问题
5F:→ easypro: 把包覆线的铝套接在两边设备的地看看 03/13 09:56
我只有用两条短线测试,我想线材影响应该不大,但有时间我还是会是买双绞线测试看看
6F:推 wydct: 是否传输格式错误,MODBUS如果传输错误是不会有回传值的 03/13 11:55
格式应该不是问题,我有读取其他设备测试过,谢谢~
7F:推 DRQX: 可能传送接收切换速度过慢 03/14 12:16
我有考虑过这问题,我看过这些晶片的Datasheet,但我猜不出来哪一个是晶片收发切换
速度,我看各家厂商的定义又不太一样,然後我想说乾脆看这款温湿度计的485晶片
是VP22,想说跟你用一样就没问题,结论是测试依旧失败。
8F:→ yunnlai: 看波形, baud rate 应是 9600 bps. parity/stop bit 是 ? 03/15 04:33
9F:→ yunnlai: 试试看 none parity. 03/15 04:40
10F:→ yunnlai: 又,因packet间隔短(0.3ms),且是连续回8Byte-间隔-9Byte, 03/15 04:43
11F:→ yunnlai: 程式最底层读取 UART port 是用 polling 或 interrupt ? 03/15 04:45
12F:→ yunnlai: 建议用 Interrupt 收回传值. 因4000元模组读得到, 推测 03/15 04:46
13F:→ yunnlai: UART port FIFO 应有 8byte以上(概估). 03/15 04:48
14F:→ yunnlai: 简言之,用中断(background)收资料,收到程式(F/W)的Queue 03/15 04:50
15F:→ yunnlai: (通常是宣告array),在Foreground的程式读queue,再解析之. 03/15 04:53
我测试设定是UART为8N1,硬体用Arduino Mega R3
M大讲的比较专业,我会再花时间研究一下,谢谢
谢谢大家帮忙分享经验
因为我家设备简陋,所以测试跟回覆都会比较慢一点
请见谅~
※ 编辑: aaa7513231 (1.165.182.34 台湾), 03/15/2020 10:21:13
16F:推 ureikaze: 你如何切换RE/DE? 检查一下讯号回传时DE是否已经释放 03/16 12:25
17F:推 jimiwm: 同意楼上说法 RE DE 讯号的问题 01/04 12:50