最后更新:2022-08-03 17:31:43 手机定位技术交流文章
目的:使用 Raspberry-class 4B和CANHAT扩展板读取智能互连测量数据(RS485+modbus RTU)并上传数据到Hyperledger Fabric框架。
我们已经研究了modbus RTU协议,并在智能涡轮流量计的实验中应用过它,这次我们将用485模块的智能插头重新审查它。
实验材料:
树莓派4B/8G:

CANHAT扩充小组:

USB-485转换器:

RS485柜内接口:

RJ45晶头转8PIN端口:

树莓派相关库与例程在上次实验已经安装过了,步骤可参照官网:
RS485 CAN HAT - Waveshare Wiki
或者使用PC端的串行调试助理来测试智能插头的通信。 首先正确连接设备:

这个智能RS485模块化插件连接器是晶体头而不是普通的AB端口,所以您需要晶体头来转动端口线,如上面的指示所示。
在调试前检查设备的通讯手册:

可以看到一个寄存器同样也是表示2字节的数据,电量用两个寄存器表示也就是4个字节,其他数据应该都只占用一个寄存器。这次的说明书详细一些,还给出了数据转换公式。
存储的特定数据的地址如下:

计算需要使用的modbus命令:
例如,串行调试助理发送命令并接收以下数据:

数据位为"00 00 01 23",十进制数为291,功率消耗为0,基于数据转换公式=DATA/3200.09kWh,测试数据没有误差:

python 文件如下写:
receive.py:
Receive.py与上次的实验不同,主要是因为这个查询有更多的数据,每个数据存储方法都不同,如果电流和电压存储在存储器中,换句话说,返回的数据比特是两个字节,电力和二氧化碳排放被存储在两个记录中,所以返回数据是4字节,因此需要截获的数据点是不同的。此外,与涡轮流量计查询的数据相比,这个实验中所查询的不同值转换公式也不同,如果功率被返回,则数据位被转换为十进制值,单位为W;而有功总电能则是返回的数据转化为十进制后再除以3200,单位为kWh。因此,我准备在收到返回代码时作出判断,因为当返回数据位数为2字节时,返回代码的总长度为7字节;如果返回数据为4字节,编码的总长度为9字节。因此,可以通过接收的块数来确定被截获的数据点的位置。如果编码的总长度为7字节,截取[6:10],总长度为9字节,拿它吧。切断数据 bits 并将其转换为10英寸数据存储.txt,我觉得在操作数据时,写一个壳牌命令来处理这么多浮点操作更困难,因此shell脚本调用指定的 send.after py数据查询1s,根据查询数据类型,将数据发送到相应的发送文件中。 txt文件的数据转换和重写,最后的数据.txt缓存是我需要的最后的数据。
send.py
通过修改strInput发送文件以发送不同的查询命令,结果将存储在 data.txt中,并使用脚本读取。在发送文件中也需要进行数据转换操作,不同的数据转换公式不同,下面是电压voltage与总电能energy的查询文件:
voltage.py:
energy.py:
相对应地,与上次试验的涡轮流量计相结合,对超ledger织物的链编码进行了一些修改,在下面的场景中,一个树果群收集了一套流量计、智能插头和气体计,并将其上传到链上。为了方便区分多组仪器的数据,关键值添加三个ID来表示该仪器的代码。例如,"2022-8-2 001 003"的基数值代表了该仪器集的第三个数据,该仪器集的ID001是在2022年8月2日收集的。
修改后链码如下:
shell脚本:
脚本运行结果:

Org1查询结果:

~~
本文由 在线网速测试 整理编辑,转载请注明出处。