基于Modbus通讯的雨量计的数据采集方法及系统与流程

专利2024-10-05  54


本发明涉及计算机通讯技术领域,具体地说是一种基于modbus通讯的雨量计的数据采集方法及系统。



背景技术:

modbus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成,其系统结构既包括硬件、亦包括软件,它可应用于各种数据采集和过程监控。

一直以来,水文监测在防汛抗旱、河湖治理、水工安全等当面发挥了重要作用,但当前水文测站一体化程度比较弱,传统的一体化检测设备只能局限于某类业务场景,数据不统一,容易造成数据壁垒和孤岛现象。故如何实现感知设备数据读取与采集,完成雨量、河道流速、水位、水深等一体化的感知检测是目前亟待解决的问题。



技术实现要素:

本发明的技术任务是提供一种基于modbus通讯的雨量计的数据采集方法及系统,来解决如何实现感知设备数据读取与采集,完成雨量、河道流速、水位、水深等一体化的感知检测的问题。

本发明的技术任务是按以下方式实现的,一种基于modbus通讯的雨量计的数据采集方法,该方法是linux环境下,安装libmodbus驱动库,工控机插入usb转485模块,并将翻斗式雨量计和雷达流量计的modbusa和modbusb接口与串口转485模块正确连接,编写的底层应用程序调用接口modbus_connect(),建立起翻斗式雨量计和雷达流量计与工控机的连接,通过对翻斗式雨量计和雷达流量计相应功能码的读写,实现翻斗式雨量计和雷达流量计的控制与参数获取,进而实现通过翻斗式雨量计和雷达流量计进行水文监测;其中,水文监测的内容包括参数雨量、水位、流速及水质监测。

作为优选,该方法具体如下:

modbus串口参数设置;

获取翻斗式雨量计设备信息;

获取雷达流量计信息;

释放分配资源,进而通过应用程序实现对物联感知设备的数据采集和设备控制。

更优地,modbus串口参数设置具体如下:

利用接口modbus_new_rtu初试化modbus环境指针;

利用接口modbus_set_slave设置从站id,其中,参数1为modbus_new_rtu初始化的环境指针;参数2为厂商提供的翻斗式雨量计设备地址;

利用接口modbus_connect,进行工控机与翻斗式雨量计和雷达端建立连接,开启串口通信。

更优地,获取翻斗式雨量计设备信息具体如下:

通过查看厂商提供翻斗式雨量计用户手册,0x0000h、0x07d0、0x07d1分别为雨量值、设备地址和设备波特率的寄存器地址值;

在设备开机阶段,获取翻斗式雨量计设备信息,利用接口modbus_read_registers()分别读取地址为0x0000h、0x07d0、0x07d1寄存器的值,即可获取相应的设备信息;

由于读取的雨量值与实际值为10倍关系,因此还需进行除10的倍数处理;

若用户要清除当前雨量值,按提示命令进行操作,底层代码调用接口modbus_write_register,往雨量值地址0x0000h写指定的清除命令0x5a,即可实现雨量值数据清除。

更优地,获取雷达流量计信息具体如下:

利用接口modbus_read_registers()读取雨量数值,并进行倍数处理操作;

不同于接口getraindeviceinfo(),雷达接口放置在主循环中,进行长时间遍历操作。

更优地,释放分配资源具体为:利用modbus_new_rtu初试化的modbus环境指针进行关闭和资源回收,避免造成资源浪费。

一种modbus通讯的雨量计的数据采集系统,该系统包括,

设置单元,用于modbus串口参数设置;

获取单元一,用于获取翻斗式雨量计设备信息;

获取单元二,用于获取雷达流量计信息;

释放单元,用于释放分配资源,进而通过应用程序实现对物联感知设备的数据采集和设备控制。

作为优选,所述设置单元包括,

配置模块,用于将modbus-rtu(485)协议的相关参数配置;

连接模块,用于将工控机与物联感知设备进行连接;其中,物联网感知设备包括翻斗式雨量计和雷达。

更优地,所述配置模块工作过程具体如下:

(1)、线路连接:将物联感知设备的modbusa和modbusb接口与串口转485模块正确连接(a接a,b接b);

(2)、在linux环境下,下载最新libmodbus库,进入到下载目录,进行解压安装;

(3)、运行make和makeinstall,生成include及lib的文件夹,以备主程序调用;生成新的静态库后,需重新配置一下动态引用库,具体如下:使用代编辑工具打开文件ld.so.conf,加入“include/usr/local/lib”;保存退出,并在命令行输入ldconfig,重新读取缓存,即可正确调用新动态库文件;

(4)、针对设备接口条件,创建modbusrtu环境:利用libmodbus标准库函数中的modbus_new_rtu()接口,生成并初始化一个modbus的结构体来在串行线路中使用rtu模式进行通讯;其中,参数1为指定os处理的串行端口的名称,比如linux系统下为/dev/ttys0(串口0)或者/dev/ttyusb0(usb转串口0);参数2为串口波特率,参数3为奇偶校验位,参数4为串口数据位数,参数5为停止位位数;

①、若建立成功,modbus_new_rtu()函数将返回指向modbus_t结构的指针;

②、若建立失败,则返回错误码;

(5)、设置串口模式:由于当前物联感知设备均为485通信协议,所以利用libmodbus标准库函数中的modbus_rtu_set_serial_mode()接口设置串口模式,参数1为串口模式变量;

(6)、设置从站id:每个设备都具有唯一的地址码,所以要控制指定设备,均需设定期望操作设备的id,利用modbus_set_slave()接口即可实现从站id设置,参数1为返回的modbus_t结构指针,参数2为从站id值;具体如下:

每个设备都具有唯一的地址码,所以要控制指定设备,均需设定期望操作设备的id,利用modbus_set_slave()接口即可实现从站id设置;参数1为返回的modbus_t结构指针;参数2为从站id值。本发明的雨量计和雷达流量计设备可以在同一个线路进行连接,前提是要通过modbus_set_slave()接口定义哪一个设备被连接上的(雨量计地址为0,雷达流量计为1,需保证设备具有不同的设备地址码),当程序正常运行后,只需通过接口modbus_set_slave(),交替使能设备即可循环获得设备数据。

更优地,所述连接模块的工作过程具体如下:

(1)、建立连接:完成串口参数、modbus设备指针及modbus设备从地址设置,利用接口modbus_connect()建立连接,参数1为返回的modbus_t结构指针,成功返回0,错误返回错误码-1;

(2)、读取保持寄存器:当用户需要对物联感知设备保持寄存器进行读取操作时,使用接口modbus_read_registers(),便可获取到保持寄存器参数值;其中,参数1为返回的modbus_t结构指针;参数2为要读取的保持寄存器地址值;参数3为要读取的寄存器个数;参数4为读取结果存放位置,注意用户需分配足够的内存以将结果存储在参数4的存放位置;例如要读取当前降雨量值,查看设备手册,雨量值寄存地址为0x1,故利用接口读取该寄存器即可;

(3)、写数据:用户需要对指定寄存器写操作时,若要将物联感知设备的当前物联感知设备清零时,需要调用接口modbus_write_registers(),对参数1寄存器的地址处写入参数2数值即可;

(4)、当结束应用程序时,需要回收创建资源,先利用接口modbus_close()关闭连接,再利用modbus_free()进行libmodbus环境释放。

本发明的基于modbus通讯的雨量计的数据采集方法及系统具有以下优点:本发明通过modbus通信协议,读取物联感知设备数据(水位、雨量、流速、水质监测等参数),完成雨量、河道流速、水位、水深等一体化的感知检测,采用了一种直接调用libmodbus库的方式,实现感知设备数据读取与采集。

附图说明

下面结合附图对本发明进一步说明。

附图1为基于modbus通讯的雨量计的数据采集方法流程框图;

附图2为基于modbus通讯的雨量计的数据采集系统工作过程的流程框图。

具体实施方式

参照说明书附图和具体实施例对本发明的基于modbus通讯的雨量计的数据采集方法及系统作以下详细地说明。

实施例1:

本发明采用山东仁科测控技术有限公司的rs-yl-n01-4的翻斗式雨量计及海川博通信息科技有限公司的hc.flm-1雷达流量计进行水文监测,如参数雨量、水位、流速、水质监测等,而工控机采用的为研华公司的工业网关,运行linux系统。翻斗式雨量计及雷达流量计均采用modbus-rtu(485)通讯协议方式,为了读取感知设备数值,首先在windows上安装485转换器的驱动,如usb-serial340驱动,由于普通pc没有485接口,因此还需单独的usb转485模块,并将感知设备的485-a和485-b接口与模块正确连接,此时打开厂商提供的上位机软件,并设置好相应串口参数,如波特率、数据位、奇偶校验、停止位,并按照给定说明书所提供相应寄存器地址,即可成功读取期望参数值。然而工控机运行linux系统,若想成功读取到感知设备的数据,需要手动编写modbus通信驱动代码,如工控机对感知设备的读写数据操作、事务处理、请求与相应的任务处理函数,这将都会带来繁琐的代码量及bug率的提升,为此本发明采用了一种直接调用libmodbus库的方式,实现感知设备数据读取与采集。

本发明的基于modbus通讯的雨量计的数据采集方法,该方法是linux环境下,安装libmodbus驱动库,工控机插入usb转485模块,并将翻斗式雨量计和雷达流量计的modbusa和modbusb接口与串口转485模块正确连接,编写的底层应用程序调用接口modbus_connect(),建立起翻斗式雨量计和雷达流量计与工控机的连接,通过对翻斗式雨量计和雷达流量计相应功能码的读写,实现翻斗式雨量计和雷达流量计的控制与参数获取,进而实现通过翻斗式雨量计和雷达流量计进行水文监测;其中,水文监测的内容包括参数雨量、水位、流速及水质监测。

如附图1所示,本发明具体如下:

s1、modbus串口参数设置;

s2、获取翻斗式雨量计设备信息;

s3、获取雷达流量计信息;

s4、释放分配资源,进而通过应用程序实现对物联感知设备的数据采集和设备控制。

本实施例中步骤s1中的modbus串口参数设置具体如下:

s101、利用接口modbus_new_rtu初试化modbus环境指针;

s102、利用接口modbus_set_slave设置从站id,其中,参数1为modbus_new_rtu初始化的环境指针;参数2为厂商提供的翻斗式雨量计设备地址;

s103、利用接口modbus_connect,进行工控机与翻斗式雨量计和雷达端建立连接,开启串口通信。

关键代码如下:

本实施例中步骤s2中的获取翻斗式雨量计设备信息具体如下:

s201、通过查看厂商提供翻斗式雨量计用户手册,0x0000h、0x07d0、0x07d1分别为雨量值、设备地址和设备波特率的寄存器地址值;

s202、在设备开机阶段,获取翻斗式雨量计设备信息,利用接口modbus_read_registers()分别读取地址为0x0000h、0x07d0、0x07d1寄存器的值,即可获取相应的设备信息;

s203、由于读取的雨量值与实际值为10倍关系,因此还需进行除10的倍数处理;

若用户要清除当前雨量值,按提示命令进行操作,底层代码调用接口modbus_write_register,往雨量值地址0x0000h写指定的清除命令0x5a,即可实现雨量值数据清除。

关键代码如下:

本实施例中步骤s3中的获取雷达流量计信息具体如下:

s301、利用接口modbus_read_registers()读取雨量数值,并进行倍数处理操作;

s302、不同于接口getraindeviceinfo(),雷达接口放置在主循环中,进行长时间遍历操作。

关键代码如下:

本实施例中步骤s4中的释放分配资源具体为:利用modbus_new_rtu初试化的modbus环境指针进行关闭和资源回收,避免造成资源浪费。

关键代码如下:

modbus_close(mb);

modbus_free(mb)。

实施例2:

本发明的modbus通讯的雨量计的数据采集系统,该系统包括,

设置单元,用于modbus串口参数设置;

获取单元一,用于获取翻斗式雨量计设备信息;

获取单元二,用于获取雷达流量计信息;

释放单元,用于释放分配资源,进而通过应用程序实现对物联感知设备的数据采集和设备控制。

本实施例中的设置单元包括,

配置模块,用于将modbus-rtu(485)协议的相关参数配置;

连接模块,用于将工控机与物联感知设备进行连接;其中,物联网感知设备包括翻斗式雨量计和雷达。

如附图2所示,本实施例中设置单元工作过程具体如下:

(1)、线路连接:将物联感知设备的modbusa和modbusb接口与串口转485模块正确连接(a接a,b接b);

(2)、在linux环境下,下载最新libmodbus库,进入到下载目录,进行解压安装;

(3)、运行make和makeinstall,生成include及lib的文件夹,以备主程序调用;生成新的静态库后,需重新配置一下动态引用库,具体如下:使用代编辑工具打开文件ld.so.conf,加入“include/usr/local/lib”;保存退出,并在命令行输入ldconfig,重新读取缓存,即可正确调用新动态库文件;

(4)、针对设备接口条件,创建modbusrtu环境:利用libmodbus标准库函数中的modbus_new_rtu()接口,生成并初始化一个modbus的结构体来在串行线路中使用rtu模式进行通讯;其中,参数1为指定os处理的串行端口的名称,比如linux系统下为/dev/ttys0(串口0)或者/dev/ttyusb0(usb转串口0);参数2为串口波特率,参数3为奇偶校验位,参数4为串口数据位数,参数5为停止位位数;

①、若建立成功,modbus_new_rtu()函数将返回指向modbus_t结构的指针;

②、若建立失败,则返回错误码;

(5)、设置串口模式:由于当前物联感知设备均为485通信协议,所以利用libmodbus标准库函数中的modbus_rtu_set_serial_mode()接口设置串口模式,参数1为串口模式变量;

(6)、设置从站id:每个设备都具有唯一的地址码,所以要控制指定设备,均需设定期望操作设备的id,利用modbus_set_slave()接口即可实现从站id设置,参数1为返回的modbus_t结构指针,参数2为从站id值;具体如下:

每个设备都具有唯一的地址码,所以要控制指定设备,均需设定期望操作设备的id,利用modbus_set_slave()接口即可实现从站id设置;参数1为返回的modbus_t结构指针;参数2为从站id值。本发明的雨量计和雷达流量计设备可以在同一个线路进行连接,前提是要通过modbus_set_slave()接口定义哪一个设备被连接上的(雨量计地址为0,雷达流量计为1,需保证设备具有不同的设备地址码),当程序正常运行后,只需通过接口modbus_set_slave(),交替使能设备即可循环获得设备数据;

(7)、建立连接:完成串口参数、modbus设备指针及modbus设备从地址设置,利用接口modbus_connect()建立连接,参数1为步骤(4)返回的modbus_t结构指针,成功返回0,错误返回错误码-1;

(8)、读取保持寄存器:当用户需要对物联感知设备保持寄存器进行读取操作时,使用接口modbus_read_registers(),便可获取到保持寄存器参数值;其中,参数1为步骤(4)返回的modbus_t结构指针;参数2为要读取的保持寄存器地址值;参数3为要读取的寄存器个数;参数4为读取结果存放位置,注意用户需分配足够的内存以将结果存储在参数4的存放位置;例如要读取当前降雨量值,查看设备手册,雨量值寄存地址为0x1,故利用接口读取该寄存器即可;

(9)、写数据:用户需要对指定寄存器写操作时,若要将物联感知设备的当前物联感知设备清零时,需要调用接口modbus_write_registers(),对参数1寄存器的地址处写入参数2数值即可;

(10)、当结束应用程序时,需要回收创建资源,先利用接口modbus_close()关闭连接,再利用modbus_free()进行libmodbus环境释放。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。


技术特征:

1.一种基于modbus通讯的雨量计的数据采集方法,其特征在于,该方法是linux环境下,安装libmodbus驱动库,工控机插入usb转485模块,并将翻斗式雨量计和雷达流量计的modbusa和modbusb接口与串口转485模块正确连接,编写的底层应用程序调用接口modbus_connect(),建立起翻斗式雨量计和雷达流量计与工控机的连接,通过对翻斗式雨量计和雷达流量计相应功能码的读写,实现翻斗式雨量计和雷达流量计的控制与参数获取,进而实现通过翻斗式雨量计和雷达流量计进行水文监测;其中,水文监测的内容包括参数雨量、水位、流速及水质监测。

2.根据权利要求1所述的基于modbus通讯的雨量计的数据采集方法,其特征在于,该方法具体如下:

modbus串口参数设置;

获取翻斗式雨量计设备信息;

获取雷达流量计信息;

释放分配资源,进而通过应用程序实现对物联感知设备的数据采集和设备控制。

3.根据权利要求2所述的基于modbus通讯的雨量计的数据采集方法,其特征在于,modbus串口参数设置具体如下:

利用接口modbus_new_rtu初试化modbus环境指针;

利用接口modbus_set_slave设置从站id,其中,参数1为modbus_new_rtu初始化的环境指针;参数2为厂商提供的翻斗式雨量计设备地址;

利用接口modbus_connect,进行工控机与翻斗式雨量计和雷达端建立连接,开启串口通信。

4.根据权利要求2所述的基于modbus通讯的雨量计的数据采集方法,其特征在于,获取翻斗式雨量计设备信息具体如下:

通过查看厂商提供翻斗式雨量计用户手册,0x0000h、0x07d0、0x07d1分别为雨量值、设备地址和设备波特率的寄存器地址值;

在设备开机阶段,获取翻斗式雨量计设备信息,利用接口modbus_read_registers()分别读取地址为0x0000h、0x07d0、0x07d1寄存器的值,即可获取相应的设备信息;

进行除10的倍数处理;

若用户要清除当前雨量值,按提示命令进行操作,底层代码调用接口modbus_write_register,往雨量值地址0x0000h写指定的清除命令0x5a,即可实现雨量值数据清除。

5.根据权利要求2所述的基于modbus通讯的雨量计的数据采集方法,其特征在于,获取雷达流量计信息具体如下:

利用接口modbus_read_registers()读取雨量数值,并进行倍数处理操作;

不同于接口getraindeviceinfo(),雷达接口放置在主循环中,进行长时间遍历操作。

6.根据权利要求2-5中任一所述的基于modbus通讯的雨量计的数据采集方法,其特征在于,释放分配资源具体为:利用modbus_new_rtu初试化的modbus环境指针进行关闭和资源回收,避免造成资源浪费。

7.一种modbus通讯的雨量计的数据采集系统,其特征在于,该系统包括,

设置单元,用于modbus串口参数设置;

获取单元一,用于获取翻斗式雨量计设备信息;

获取单元二,用于获取雷达流量计信息;

释放单元,用于释放分配资源,进而通过应用程序实现对物联感知设备的数据采集和设备控制。

8.根据权利要求7所述的基于modbus通讯的雨量计的数据采集系统,其特征在于,所述设置单元包括,

配置模块,用于将modbus-rtu(485)协议的相关参数配置;

连接模块,用于将工控机与物联感知设备进行连接;其中,物联网感知设备包括翻斗式雨量计和雷达。

9.根据权利要求8所述的基于modbus通讯的雨量计的数据采集方法,其特征在于,所述配置模块工作过程具体如下:

(1)、线路连接:将物联感知设备的modbusa和modbusb接口与串口转485模块正确连接;

(2)、在linux环境下,下载最新libmodbus库,进入到下载目录,进行解压安装;

(3)、运行make和makeinstall,生成include及lib的文件夹,以备主程序调用;生成新的静态库后,需重新配置一下动态引用库,具体如下:使用代编辑工具打开文件ld.so.conf,加入“include/usr/local/lib”;保存退出,并在命令行输入ldconfig,重新读取缓存,即可正确调用新动态库文件;

(4)、针对设备接口条件,创建modbusrtu环境:利用libmodbus标准库函数中的modbus_new_rtu()接口,生成并初始化一个modbus的结构体来在串行线路中使用rtu模式进行通讯;其中,参数1为指定os处理的串行端口的名称;参数2为串口波特率,参数3为奇偶校验位,参数4为串口数据位数,参数5为停止位位数;

①、若建立成功,modbus_new_rtu()函数将返回指向modbus_t结构的指针;

②、若建立失败,则返回错误码;

(5)、设置串口模式:利用libmodbus标准库函数中的modbus_rtu_set_serial_mode()接口设置串口模式,参数1为串口模式变量;

(6)、设置从站id:设定期望操作设备的id,利用modbus_set_slave()接口即可实现从站id设置,参数1为返回的modbus_t结构指针,参数2为从站id值;具体如下:

控制指定设备,均需设定期望操作设备的id,利用modbus_set_slave()接口即可实现从站id设置;参数1为返回的modbus_t结构指针;参数2为从站id值。

10.根据权利要求8或9所述的基于modbus通讯的雨量计的数据采集系统,其特征在于,所述连接模块的工作过程具体如下:

(1)、建立连接:完成串口参数、modbus设备指针及modbus设备从地址设置,利用接口modbus_connect()建立连接,参数1为返回的modbus_t结构指针,成功返回0,错误返回错误码-1;

(2)、读取保持寄存器:当用户需要对物联感知设备保持寄存器进行读取操作时,使用接口modbus_read_registers(),便可获取到保持寄存器参数值;其中,参数1为返回的modbus_t结构指针;参数2为要读取的保持寄存器地址值;参数3为要读取的寄存器个数;参数4为读取结果存放位置;

(3)、写数据:用户需要对指定寄存器写操作时,若要将物联感知设备的当前物联感知设备清零时,需要调用接口modbus_write_registers(),对参数1寄存器的地址处写入参数2数值即可;

(4)、当结束应用程序时,需要回收创建资源,先利用接口modbus_close()关闭连接,再利用modbus_free()进行libmodbus环境释放。

技术总结
本发明公开了一种基于Modbus通讯的雨量计的数据采集方法及系统,属于计算机通讯技术领域,本发明要解决的技术问题为如何实现感知设备数据读取与采集,完成雨量、河道流速、水位、水深等一体化的感知检测,采用的技术方案为:该方法是Linux环境下,安装LibModbus驱动库,工控机插入USB转485模块,并将翻斗式雨量计和雷达流量计的Modbus A和ModbusB接口与串口转485模块正确连接,编写的底层应用程序调用接口modbus_connect(),建立起翻斗式雨量计和雷达流量计与工控机的连接,通过对翻斗式雨量计和雷达流量计相应功能码的读写,实现翻斗式雨量计和雷达流量计的控制与参数获取,进而实现通过翻斗式雨量计和雷达流量计进行水文监测。该系统包括设置单元、获取单元一、获取单元二和释放单元。

技术研发人员:田洪刚
受保护的技术使用者:济南浪潮高新科技投资发展有限公司
技术研发日:2020.12.21
技术公布日:2021.04.06

转载请注明原文地址:https://xbbs.6miu.com/read-21560.html