数码之家

 找回密码
 立即注册
搜索
查看: 1202|回复: 6

[家电] 给智能空气开关开发配套软件

[复制链接]
发表于 2024-1-6 15:47:02 | 显示全部楼层 |阅读模式
本帖最后由 garyjohnson 于 2024-1-6 16:07 编辑

最近接了个私活,给智能开关开发配套软件,需求是控制开关打开和关闭,读取电压、电流等信息,整体思路是很简单的,就是简单的并口收发,但实际开发过程中踩了很多坑,跟大家分享一下

软件界面镇楼






头一次听说modbus这个协议,研究了一下,这个协议是由8个16进制数组成,第一个是设备号,第二个是方法,第三、第四是寄存器地址,第五、第六读取操作是长度/写入操作是数据,第七、第八是校验位

例如这样:01 03 00 34 00 01 C5 C4


设备号就是设备的编号,可以多个设备并口并联,根据设备号向对应的设备发送指令

方法主要用03和06,03读,06写

最大的坑:当执行port.Read的时候,第一次只返回设备号,第二次才会返回一个byte数组,数组的第二个元素开始是数据,有的是两个(文档中单个地址的),有的是四个(文档中带~的,两个地址的,需要分别判断并转换为数据),我之前没发现这个问题,无论怎样都返回只有一个元素01的数组,后来写了个10次循环,看到每次从缓冲区中读出来的结果,才发现这个问题


第一个坑:文档里单位不对,写的是V,好在有破解IC卡的经验,研究了一下返回的16进制数,发现两个拼接在一起是以mV为单位的电压,例如返回00 03 AA 36,就把它们连起来,然后换成10进制就是240182mV,240.182V,电流同理,文档也是错误的,转换后是mA




发送:01 03 00 18 00 02 44 0C
第一次返回:01
第二次返回:03 00 03 AA 36 ……很长一串,只取第二、三、四、五个值


第二个坑,我之前以为直接发送01或04就可以打开、关闭开关,结果不是这么个事,需要向地址02 50中写入01才可以执行打开开关的操作,这个要仔细看文档才能找到

例如打开开关的指令是:01 06 02 50 00 01 49 A3






第三个坑:之前我老怕它失败,用的是08(强制分闸),然后发现执行08以后就不能执行01了,手工推也推不上去,看来这设备安全性还是可以的


附全套代码(为了兼容性没有使用第三方modbus库,全靠手工拼接):
https://url67.ctfile.com/f/22262267-1000041904-beb1aa?p=9963 (访问密码: 9963)



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 3家元 +52 收起 理由
jalor + 10 请教,马云家卖的涂鸦智能计量空气开关,其.
hongo + 12 原創內容
数码家园 + 30

查看全部打赏

发表于 2024-1-7 08:52:32 | 显示全部楼层
厉害了
还分享了代码,虽然我看不懂
回复 支持 反对

使用道具 举报

发表于 2024-1-7 09:01:50 | 显示全部楼层
有借鉴意义
回复 支持 反对

使用道具 举报

发表于 2024-1-7 10:11:13 | 显示全部楼层
写了Y/1000了吧

modbus是工业上最常用的通讯协议了。
回复 支持 反对

使用道具 举报

发表于 2024-1-7 12:37:55 来自手机浏览器 | 显示全部楼层
485设备最常用的协议,支持多设备公用一条数据线
回复 支持 反对

使用道具 举报

发表于 2024-1-13 19:27:32 | 显示全部楼层
请教,马云家卖的涂鸦智能计量空气开关,其电流读取方式是什么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-13 20:36:08 | 显示全部楼层
@jalor 这个你只能看文档或百度查 要是需要研究什么得送我个设备 我手里没有
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-2 21:42 , Processed in 0.296400 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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