本发明涉及一种数据收发技术领域,尤其涉及一种基于linux平台的实时收发方法、设备及存储介质。
背景技术:
目前,随着电力电子行业的发展,产品功能越来越复杂,基于linux操作系统平台应用越来越广泛,产品硬件不断更新换代,产品的应用功能移植活动越来越频繁。
linux为非实时系统,linux自带的rs485驱动提供的收发控制采用简单的延时流控算法,在数据采集领域中要实现modbusrtu协议通信,存在延时时间过长或者不实时,导致从机设备不能分割modbusrtu协议数据包,导致数据丢失。
现在的解决方案都是基于修改rst485驱动来实现modbusrtu协议分包通过中断的方式通知应用程序处理;
但是,现有的方案存在以下缺陷:
(1)修改驱动来实现modbusrtu协议通信,这与硬件平台、内核驱动平台耦合在一起,要根据不同的硬件,不同的系统版本适配修改,导致大量的移植工作和维护工作;
(2)linux系统内核驱动层,是系统平台的安全和稳定的基石,要修改串口驱动实现应用业务功能,会引入安全生和稳定性风险;
(3)装置所处的modbusrtu监视控制系统中,存在大量非法包,消耗装置平台的资源和处理能力,延缓了对正常包的响应速度。
技术实现要素:
为了克服现有技术的不足,本发明的目的之一在于提供基于linux平台的实时收发方法,其能解决现有技术工作量大、需要修改驱动的技术问题。
本发明的目的之二在于提供一种电子设备,其能解决现有技术工作量大、需要修改驱动的技术问题。
本发明的目的之三在于提供一种计算机可读存储介质,其能解决现有技术工作量大、需要修改驱动的技术问题。
本发明的目的之一采用如下技术方案实现:
基于linux平台的实时收发方法,包括以下步骤:
设置步骤:将当前线程设置为实时接收数据状态,将所述实时接收数据状态设置为最高优先级;
检测步骤:检测串口设备是否采集到数据,若是,则执行判断步骤,否则判断是否在预设等待时长内采集到所述数据,若是,则执行判断步骤,否则重新检测串口设备;
判断步骤:判断采集到的所述数据的帧长度是否满足预设字节,若是,则执行匹配步骤,否则,持续采集所述数据的剩余字节部分;
匹配步骤:将所述数据的帧格式中的每一个组成分别与缓存中对应的信息进行匹配,当所述每一个组成均与缓存中对应的信息一致时,则接收所述数据,否则,丢弃所述数据并清空缓存。
进一步地,在判断步骤中,判断到所述数据的帧长度满足预设字节时,进一步判断采集数据的时间是否超出预设超时时间,若是,则丢弃所述数据并清空缓存,否则执行匹配步骤。
进一步地,所述超时时间=(3.5*11000/baud)*1000。
进一步地,检测步骤中的所述预设等待时长为1秒。
进一步地,判断步骤中的所述预设字节为8字节。
本发明的目的之二采用如下技术方案实现:
一种电子设备,包括存储器、处理器以及存储在存储器中并可在处理器上执行的计算机程序,所述计算机程序被处理器执行时实现以下步骤:
设置步骤:将当前线程设置为实时接收数据状态,将所述实时接收数据状态设置为最高优先级;
检测步骤:检测串口设备是否采集到数据,若是,则执行判断步骤,否则判断是否在预设等待时长内采集到所述数据,若是,则执行判断步骤,否则重新检测串口设备;
判断步骤:判断采集到的所述数据的帧长度是否满足预设字节,若是,则执行匹配步骤,否则,持续采集所述数据的剩余字节部分;
匹配步骤:将所述数据的帧格式中的每一个组成分别与缓存中对应的信息进行匹配,当所述每一个组成均与缓存中对应的信息一致时,则接收所述数据,否则,丢弃所述数据并清空缓存。
进一步地,在判断步骤中,判断到所述数据的帧长度满足预设字节时,进一步判断采集数据的时间是否超出预设超时时间,若是,则丢弃所述数据并清空缓存,否则执行匹配步骤。
进一步地,所述超时时间=(3.5*11000/baud)*1000。
进一步地,检测步骤中的所述预设等待时长为1秒,判断步骤中的所述预设字节为8字节。
本发明的目的之三采用如下技术方案实现:
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行上述任意一项所述的实时收发方法。
相比现有技术,本发明的有益效果在于:.
本发明解决linux自带的rs485自带驱动流控式交互不实时,不能及时分割modbus协议包的缺陷,在用户态实现modbus协议的功能模块化设计,摆脱对硬件串口rs485驱动的依赖;实现跨硬件平台的快速移植诉求,且能减少移植工作量,又能解决修改驱动而引入的风险。
附图说明
图1为本发明的基于linux平台的实时收发方法的流程图。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述,需要说明的是,在不相冲突的前提下,以下描述的各实施例之间或各技术特征之间可以任意组合形成新的实施例。
实施例一
本发明提供了基于linux平台的实时收发方法,涉及采用linux操作系统实现的电表产品,通过串口rs485数据采集和传输的设备。
modbusrtu协议规范是为工业领域通信协议的业界标准(defacto),并且现在是工业电子设备之间常用的连接方式。modbus比其他通信协议使用的更广泛的主要原因有:公开发表并且无版权要求、易于部署和维护;modbusrtu在数据采集与监视控制系统(scada)中,modbus通常用来连接监控计算机和远程终端控制系统(rtu)。
如图1所示,本发明基于linux平台的实时收发方法包括如下步骤:
s1:将当前线程设置为实时接收数据状态,将所述实时接收数据状态设置为最高优先级;
linux平台数据从串口设备进入,通过串口驱动层,上传到应用modbus协议层处理数据分包和收发包数据。本发明提升处理接收数据功能线程的实时性和优级;设置接收数据线程为实时级调度;设定的调度优先级为最高级stproiority.sched_priority=99。
s2:检测串口设备是否采集到数据,若是,则执行s3,否则判断是否在预设等待时长内采集到所述数据,若是,则执行s3,否则重新检测串口设备;
预设等待时长优选为1秒。定时1ms监控驱动层的串口设备数据,检测到数据即直接取出转存到内部数据缓存,检测不到数据,挂起等待,直到1s超时退出进入下一轮监控串口设备循环。
s3:判断采集到的所述数据的帧长度是否满足预设字节,若是,则执行s4,否则,持续采集所述数据的剩余字节部分;
modbus协议定义的完整数据帧长度最短的为8个字节,因此modbusrtu协议规范要求数据帧格式如图1:为“地址”+“功能码”+“数据区”+“crc校验码”;crc算法规范里已有定义。
s4:将所述数据的帧格式中的每一个组成分别与缓存中对应的信息进行匹配,当所述每一个组成均与缓存中对应的信息一致时,则接收所述数据,否则,丢弃所述数据并清空缓存。
满足了内部数据缓存长度满足8个字节的情况下,进行crc(计算出来的crc是否与缓存中的crc信息匹配)、地址(缓存中的地址信息是否与装置的地址匹配)、功能码(缓存中的功能码信息是否与装置所支持的功能码相匹配)的合法性校验;其中一项不满足要求即清空数据缓存数据,并开始新一轮数据采集。接收数据直到超时退出循环,完成整个modbusrtu数据帧的分割,并继续下一步业务数据的处理。
在s3中,判断到所述数据的帧长度满足预设字节时,进一步判断采集数据的时间是否超出预设超时时间,若是,则丢弃所述数据并清空缓存,否则执行s4。
modbusrtu协议规范要求发送两帧数据之间要有1.5~3.5字符间隔;超时时间t=(3.5*11000/baud)*1000,计算出3.5个字节,在不同的波特率baud下的超时时间。
实施例二
实施例二公开了一种电子设备,包括存储器、处理器以及存储在存储器中并可在处理器上执行的计算机程序,计算机程序被处理器执行时实现以下步骤:
设置步骤:将当前线程设置为实时接收数据状态,将所述实时接收数据状态设置为最高优先级;检测步骤:检测串口设备是否采集到数据,若是,则执行判断步骤,否则判断是否在预设等待时长内采集到所述数据,若是,则执行判断步骤,否则重新检测串口设备;判断步骤:判断采集到的所述数据的帧长度是否满足预设字节,若是,则执行匹配步骤,否则,持续采集所述数据的剩余字节部分;匹配步骤:将所述数据的帧格式中的每一个组成分别与缓存中对应的信息进行匹配,当所述每一个组成均与缓存中对应的信息一致时,则接收所述数据,否则,丢弃所述数据并清空缓存。
同样的,在判断步骤中,判断到所述数据的帧长度满足预设字节时,进一步判断采集数据的时间是否超出预设超时时间,若是,则丢弃所述数据并清空缓存,否则执行匹配步骤。超时时间=(3.5*11000/baud)*1000。预设等待时长为1秒,判断步骤中的所述预设字节为8字节。
实施例三
实施例三公开了一种可读的计算机存储介质,该存储介质用于存储程序,并且该程序被处理器执行时,实现实施例一的实时收发方法。
上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。