『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 4827|回复: 6

[技术探讨] 【求助】modbus问题求助

[复制链接]

10

主题

97

帖子

587

积分

高级会员

Rank: 4

积分
587
金钱
490
HASS币
0
发表于 2019-12-31 11:02:02 | 显示全部楼层 |阅读模式
本帖最后由 lnight 于 2019-12-31 11:03 编辑

看了@trz0332 大佬的帖子拼夕夕电表大改造接入homeassistant,想起手边也有485的设备,准备拿过来改改用在自家设备上。
然后调试自家设备的时候,发现不知道是不是我对modbus理解有误,是这样的:

比如我输入01 03 00 08 00 08 C5 CE,按我的理解01是设备地址,03是功能码,第一个08是寄存器地址,第二个08是要读取的位数,后边俩是CRC校验。

这个是可以读出来的

TIM图片20191231105117.png

按我的理解,220这个数是存在08寄存器里的,280这个数是存在09寄存器里的,以此类推。

那我要想单独读取280这个数,那么直接读取09寄存器就可以了。

但是实际上,无论是从09寄存器往后读1个数,还是从07寄存器开始往后读9个数,都是没办法再读出来任何数。

TIM图片20191231105126.png

有没有大佬知道是怎么一回事,是我对modbus理解有误吗,还是这个设备有什么问题呢?

因为我看到@trz0332 大佬写的代码里边是单独读取的寄存器地址,如果我的这个设备没法单独读取每个数的寄存器地址,也就无法使用大佬代码,或者有没有其它的方法可以读取一整条回复数据后再分割呢?

TIM截图20191231105903.png
回复

使用道具 举报

40

主题

2176

帖子

8288

积分

元老级技术达人

积分
8288
金钱
6097
HASS币
110
发表于 2019-12-31 13:29:57 | 显示全部楼层
第一次你是用03功能码,读的是保存寄存器(有值)
第二次你为什么变成了04功能码,读的输入寄存器?
回复

使用道具 举报

10

主题

97

帖子

587

积分

高级会员

Rank: 4

积分
587
金钱
490
HASS币
0
 楼主| 发表于 2019-12-31 15:21:14 | 显示全部楼层
ghostist 发表于 2019-12-31 13:29
第一次你是用03功能码,读的是保存寄存器(有值)
第二次你为什么变成了04功能码,读的输入寄存器? ...

大佬您好,因为这个设备03和04里边都是有数据的,主楼下边那个拿的是04举的例子,但是现在实验是无论03和04,只要不是从8开始读,就都读不出来。
TIM截图20191231151531.png

TIM截图20191231151858.png
回复

使用道具 举报

40

主题

2176

帖子

8288

积分

元老级技术达人

积分
8288
金钱
6097
HASS币
110
发表于 2019-12-31 19:10:51 | 显示全部楼层
试试modscan 吧 看看应答报文
另外是不是数据是float型的 一个占两位 不过这也解释不通啊...
先看看报文吧
回复

使用道具 举报

2

主题

171

帖子

1175

积分

金牌会员

Rank: 6Rank: 6

积分
1175
金钱
1004
HASS币
10
发表于 2019-12-31 20:55:55 | 显示全部楼层
本帖最后由 liuje 于 2019-12-31 20:59 编辑

我們公司專門搞modbus通訊設備.
你說的這個現象  應該是 該設備自己固意弄的特性.    正常的modbus變量, 是不應該有你說的這種問題的.

如果是 0x03 Holding Registers 類型,   那麼使用0x03 (讀單筆或單多筆寄存器),  只要最後一個地址不超限,
不應該不回應.     如果不回應, 就說明並不符合真正的modbus通用標準.     但既然設備是人家設計的.
你也只能迎合此問題.   

我們家的modbus設備是沒有這種問題的.   你碰到的是個案.   
(看你上頭的 python  modbus讀取代碼, 很容易理解的啊,  自己改一下,  新增一個dim變量,  多筆讀進來,
  再把你要的那變量取出來就行了啊!!)

评分

参与人数 1金钱 +5 收起 理由
lnight + 5 感谢大佬给出思路

查看全部评分

回复

使用道具 举报

12

主题

327

帖子

1814

积分

论坛技术达人

积分
1814
金钱
1482
HASS币
40
发表于 2020-1-1 09:00:53 | 显示全部楼层
01 03 00 08 00 08 C5 CE,如果这个能读到8个连续的数据
01 03 00 08 00 01 05 C8,那么这个就能读到第一个数据啊
回复

使用道具 举报

9

主题

98

帖子

705

积分

高级会员

Rank: 4

积分
705
金钱
602
HASS币
30
发表于 2020-1-1 20:52:07 | 显示全部楼层
老老实实用Modscan 扫一下再说。有的Modbus 空地址连读会出错。必须一个一个偏移量的读。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 18:36 , Processed in 0.219872 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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