MODBUS数据封装——寄存器

经过一个下午的打磨,小编已经差不多熟悉整个modbus体系的搭建啦,之前那个算是一种,今天再来看看另一种

先来看一个新鲜的东西:

这里用了一种新的方式去获取上位机,也就是主控板发过来的modbus类型的消息,也就是队列,他会把信息存储到msg里面

接着就是去处理主机发过来的modbus消息了

先不管他的这个判断条件,我们来看看他是怎么去处理的

他就是把刚刚接收到的那个队列给传进来

这些就是把接收modbus结构体以及响应modbus结构体给准备好先,然后顺便重新去定义一个指针指向刚刚传进来的队列里面的数据段,当然,接收和响应modbus里面的数据段也是需要去定义一个指针去指向的,方便操作

这个就是把刚刚的队列里面的信息给提取出来,然后赋值给我们准备好的接收modbus数据的结构体,这里还有一个很有意思的地方,那就是去构建错误码,我们来岔开话题去看看

还是比较有意思的,我们回归主题,继续去看看怎么去解析队列里面的数据

可以看到,他传入了队列以及我们刚刚创建好的那个modbus接收的结构体

这里是先把设备id,命令以及寄存器的起始地址给分离出来先

后面这些的话,其实就是去找那个要读取的寄存器的数量了,因为是俩个字节的,但也有特殊的:

最后就是crc了:

那么到这里,接收modbus命令的结构体就已经赋值好了,那么下面,就是去构建应答结构体了,这里面可还是有点学问的

刚刚我们已经构建好了接收modbus数据的结构体,所有我们只需要把接收modbus以及响应modbus的结构体传进去就可以啦

这些就是先把设备id 指令 开始寄存器先赋值好啦,我们来看看modbus的应答数据帧

所以设备id以及功能码是必须的

这些就是分不同的指令去构建不同的应答数据啦,我们一个一个来看

一样是传入那俩个结构体

这里就是先把要读取的寄存器数量给先提取出来

这个就是去循环读取那些寄存器了,最后那个readRegCount就是一次读取的寄存器的数量,这样子就可以判断好需要循环读取多少次

接着就是看要读取的是哪一个寄存器啦

这些寄存器都是我们随意去定义的,是虚拟的

我是感觉这个寄存器没有什么用在里面,因为他的data是已经定好的,我们看另一个

对嘛,这个就是传感器的数值来着,这个意义才比较大

其实是通过串口的中断去接收的,我们来好好看一下这个中断回调函数,其实也很简单,那么到这里,我们这个过程就已经完全完成啦,撒花(doge.)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值