一种物联网通信终端操作系统的制作方法

文档序号:16900697发布日期:2019-02-19 17:57阅读:229来源:国知局
一种物联网通信终端操作系统的制作方法
本发明属于通信系统的
技术领域
,特别是涉及一种物联网通信终端操作系统。
背景技术
:物联网终端集现场数据采集与通信于一体,现场数据可通过rs232/rs485/can等总线采集,然后通过网络发送,一般通过uart总线发送at命令的形式或嵌入式tcp/ip协议发送。根据现场数据的特点,物联网设备要设计成多种形式,来满足不同速率的要求,通信方式也要根据数据特点进行选择,低速的可以选用gprs,nbiot等模块,高速的可以选用4g,以太网等方案。因此,物联网设备的特点是可选模块多,终端类型也多种多样。但这样带来一个问题,就是对这些模块的管理麻烦,对于单个物联网终端来说,集成模块并不多,不需要复杂操作系统管理,一个软件程序就能完成所有工作,但可选种类多,业务越来越复杂,随着可选模块的增加,业务量的复杂,软件开发工作量呈几何级数增加,如果没有一个良好的管理软件,新增业务几乎无法进行,以往代码也无法维护。技术实现要素:本发明为解决上述
背景技术
中存在的技术问题,提供一种将物联网终端的操作方式统一,从多个数据源获取的数据能够使用不同的链路发送的网络中,系统根据数据源进行内容调度,还可以根据网络下发的指令对外部设备进行控制的物联网通信终端操作系统。本发明通过以下技术方案来实现:一种物联网通信终端操作系统,包括:应用层、协议层、数据链路层和通信层;所述应用层的输出端与所述协议层的输入端通讯连接;所述协议层的输出端与所述数据链路层的输入端通讯连接;所述数据链路层的输出端与所述通信层的输入端通讯连接;所述应用层用于对现场信号进行采集并传输至物联网终端和协议层;所述协议层对应用层采集到的原始数据进行组装和协议格式的转换,生成号码、校验数据、是否加密和加密方法并传输至物联网终端的服务器;所述数据链路层将接受到的协议层的数据进行调度,并采用优先级调度算法发送至通信层;所述通信层的输入端与所述物联网终端的服务器通讯连接,并在所述通信层设置时刻点,每次定时器到来,通信层都会计数。在进一步的实施例中,所述应用层、协议层、数据链路层和通信层相互之间通过公共接口连接。在进一步的实施例中,所述应用层通过rs232,rs485,can等总线与外部传感器的相应总线接口连接,并与其通信,并将传感器返回的采集数据发送给协议层。在进一步的实施例中,所述协议层由协议层抽象结构体操作,具体包括以下步骤:步骤(1):协议层抽象结构体初始化,选用具体的通信协议。步骤(2):设置协议头,包含终端号码,数据长度,校验值,加密方法及协议开头的特征码;步骤(3):将应用层中接收到的数据进行解析,并根据协议打包成规定的格式;步骤(4):对于服务器下发的数据,根据协议解包后传给相应的应用层处理。在进一步的实施例中,所述数据链路层决定通信层数据的内容,在发送环节,该层把协议层数据进行调度,在通信链路畅通时就直接发送,否则就暂存在终端的缓存里面,待链路通信恢复再发;在接收时,该层会将收到的数据发给协议层。在进一步的实施例中,所述优先级调度算法包括:步骤一:设置n个数据源,所述n个数据源为s1、s2、s3…sn,所述n个数据源的初始优先级设定为a1、a2、a3…an,优化后的数据源优先级为w1、w2、w3…wn;步骤二:设置在时间t时刻的每个数据源si到来的数据量cit,上次未发送完的数据量为rit,以及cit和rit的总和lit;当cit越小时证明此时数据源si发送的数据量较小,实时性要求较高,需要较高的优先级发送;当lit越大说明该数据源积累的数据量较多,要及时清空缓存,也需要提高其发送优先级;步骤三:对于这些数据源数据的处理存在着排队的现象,cpu逐个处理发送每个数据源的数据,在数据源数量较多的情况下就要排队等待,这样就构成了一个排队系统;为了明确这些数据源在不同处理条件下的优先级,使用排队论来处理这种情况;步骤四:在时刻t系统中的数据源个数为n(t),由排队论可知,当1时,n(t)不是遍历,而当ρ<1时,n(t)是遍历,在稳定状态下的平均队长是在得到平均队长后,再分别计算在稳定状态下t时刻平均每个到来队列中的到来字节数nt和累计字节数mt:根据上述推导,提出一个数据源si在t时刻的优先级计算公式:在进一步的实施例中,该系统在使用前做系统初始化,要依次进行通信层初始化、数据链路层初始化、协议层初始化和应用层初始化;初始化完成后进入系统待机的while循环中,低权限的定时任务可以在这里运行,正常状态下等待具体业务到来时激发物联网终端的定时器,定时器中断后,系统转入具体业务运行。本发明的有益效果:分层处理各个功能模块;数据链路层做数据内容的调度和分发,并操作具体通信模块,降低对通信模块的操作难度;协议层对数据进行编解码处理,使其能够传输服务器交互的数据;模块之间的交互通过抽象结构体进行,具体功能只在各个功能模块里实现,对外接的操作通过抽象结构体进行,降低了各个模块之间的耦合度;通信模块可自行设置定时器的周期,适应了不同传输速率的要求。附图说明图1为本发明物联网通信终端操作系统的内部连接图。图2为本发明中的协议层的结构图。图3为本发明中数据调度的流程图.图4为本发明中数据链路层的结构图。图5为本发明的系统初始化的流程图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。一种物联网通信终端操作系统,包括:应用层、协议层、数据链路层和通信层。如图1所示,所述应用层的输出端与所述协议层的输入端通讯连接;所述协议层的输出端与所述数据链路层的输入端通讯连接;所述数据链路层的输出端与所述通信层的输入端通讯连接;所述应用层、协议层、数据链路层和通信层相互之间通过公共接口连接。避免了深度耦合,方便程序员开发。所述应用层用于对现场信号进行采集并传输至物联网终端和协议层。可通过rs232、rs485、can等总线进行数据发送,物联网终端可以读取这些数据,也有终端可以直接采集模拟信号,通过ad转换成数字信号。反过来,终端也可以通过这些总线把指令发送给外部设备。这部分的数据都是原始数据,不会在网上直接传输。在本实施例中,应用层主要处理与外部传感器的数据交互,以大多数传感器提供的rs485总线接口为例,应用层通过485给传感器发命令,返回的数据发送给协议层组装。本层的处理策略可以由用户自行定义,只要把原始数据处理好即可,它只跟协议层进行数据交互,不跟其它层直接联系。所述协议层对应用层采集到的原始数据进行组装和协议格式的转换,生成号码、校验数据、是否加密和加密方法并传输至物联网终端的服务器;以便于服务器的处理这些报文。各行业有多种协议格式,如车载重点的jtt808协议,电动车国标协议,iec61850等电网数据,还有厂家自定义的通信格式。协议层主要完成对实时数据的编码和解码,该层可以由协议层抽象结构体操作,最终由具体的协议实现,其具体结构如图2所示。该协议层抽象结构体protocol_op的内容如表1所示。表1协议层抽象结构体protocol_op的内容以我们参照国标电动车数据标准基础上开发的dmop协议为例,它的报文头为:实现时,该协议需实现protocol_op中的函数,并将其指向协议层抽象结构体,声明如下变量:protocol_opg_pro_dmop_op={.protoname="dmop",.m_recvcharcter="##",.init=dmop_init,.assembuff=dmop_assembuff,.recvfunc=dmoprecvfunc,.recvappfunc=null//本协议不需要对硬件操作,故此函数不用实现};然后将g_pro_dmop_op指向虚拟结构体,其它各层使用该层时,只需要通过虚拟结构体指针操作即可实现dmop协议的数据操作。所述数据链路层将接受到的协议层的数据进行调度,并采用优先级调度算法发送至通信层。所述数据链路层决定通信层数据的内容,在发送环节,该层把协议层数据进行调度,在通信链路畅通时就直接发送,否则就暂存在终端的缓存里面,待链路通信恢复再发;在接收时,该层会将收到的数据发给通信层。本层使用优先级调度算法来决定发送的内容,针对不同数据源的数据进行优先级排序,各个数据源的优先级是动态调整的。在实践中,物联网设备的mcu处理能力都比较弱,不适用较复杂的优先级计算方法,本案中我们提出一种简化的优先级调度算法,既保证了重要数据的发送,也能兼顾mcu的运算能力。所述优先级调度算法包括:步骤一:设置n个数据源,所述n个数据源为s1、s2、s3…sn,所述n个数据源的初始优先级设定为a1、a2、a3…an,优化后的数据源优先级为w1、w2、w3…wn;步骤二:设置在时间t时刻的每个数据源si到来的数据量cit,上次未发送完的数据量为rit,以及cit和rit的总和lit;当cit越小时证明此时数据源si发送的数据量较小,实时性要求较高,需要较高的优先级发送;当lit越大说明该数据源积累的数据量较多,要及时清空缓存,也需要提高其发送优先级;步骤三:对于这些数据源数据的处理存在着排队的现象,cpu逐个处理发送每个数据源的数据,在数据源数量较多的情况下就要排队等待,这样就构成了一个排队系统;为了明确这些数据源在不同处理条件下的优先级,使用排队论来处理这种情况;对于这些数据源数据的处理存在着排队的现象,cpu逐个处理发送每个数据源的数据,在数据源数量较多的情况下就要排队等待,这样就构成了一个排队系统。为了明确这些数据源在不同处理条件下的优先级,我们使用排队论来处理这种情况。m/m/1排队是单个服务员的排队系统,这些数据源数据到来间隔时间服从参数为λ的指数分布,处理时间服从参数为μ的指数分布,且独立同分布;步骤四:在时刻t系统中的数据源个数为n(t),由排队论可知,当1时,n(t)不是遍历,而当ρ<1时,n(t)是遍历,在稳定状态下的平均队长是在得到平均队长后,再分别计算在稳定状态下t时刻平均每个到来队列中的到来字节数nt和累计字节数mt:根据上述推导,提出一个数据源si在t时刻的优先级计算公式:在具体的现场环境中,我们大多数遇到的情况为同时采集rs485设备信息和can总线信息。对于rs485设备信息来说,其大多采用modbus协议,具有短小精悍的特点。而对于can总线信息,虽然每次到来的数据不多,但其实时性要求较高,要将一个时间段的数据全部打包上传,这就会导致到发送节点的时候已经接收到了较多的数据需要发送。考虑到通信的可靠性以及链路的承载能力,设计通信层每5s向服务器上传数据,上传数据的最大长度为800字节。通过串口工具随机截取一段时间内的数据用来计算其优先级并与实际情况做对比。表2数据源数据设m/m/1模型:在数据发送时刻,随机到达的数据源数据到来时间服从的指数分布,处理时间服从的指数分布,计算这些数据源到来时的平均队长可以得到l=9,随后将计算出每个时刻t的平均队长中的到来字节数nt和累计字节数mt,如表3所示表3平均队长中的到来字节数nt和累计字节数mt对于中的ai,在初始情况下设485数据源具有较高优先级a1=1,can数据源的优先级较低a2=2,根据表2和表3计算出通信层每个通信时刻各个数据源具体的优先级,如表4所示。表4数据源优先级ωi时间(t)485数据源优先级ω1can数据源优先级ω250.0794.997101.0270.964150.0601.182200.0790.018251.0272.116300.9600.835对于每一次数据源优先级计算,先计算5s时间段内的平均队长l,然后根据公式分别计算485数据源和can数据数据源此时的优先级π1和π2,比较其大小,较小的拥有较高优先级。经过计算发现,在通信层每一次向服务器上传数据的时候,系统能按照实际情况下的最优的方式选择需要发送的数据源的数据,而不是根据预先定义的优先级来排列选择需要发送的数据源的数据。系统所选择发送的数据源和人工计算出来的情况一致,符合预期。数据的调度在本层实现,与服务器交互的内容包括实时数据,操作指令,缓冲区暂存数据等。数据状态根据内容进行调整。例如,以datastate表示数据状态,具体的值为:取值含义fwdata固件更新rtdata实时数据unsend发送暂存的未发数据hbdata发送心跳包数据调度的流程图如图3所示。对于数据的接收,本层主要建立一个数据接收钩子数组,根据不同数据的特征码,调用钩子函数,比如,设置的钩子数组的单元,具有如下结构:recv_func比如有些协议的开头有”##”标志,系统把协议标志和对应的协议处理函数注册到该数组。当有该协议的数据到来时,该层会通过函数钩子传给协议层处理。本层定义了对通信模块操作的抽象结构体datall_op,通信模块需实现具体函数,然后把这些函数赋给这些指针,就可以运行。其结构如图4所示。本层的抽象结构体datall_op的内容如下:通信模块设置定时器后,模块的定时处理函数会被链接到系统的定时时钟里,处理函数实现对模块的有限状态机,定时发送链路层发来的数据。以中移物联的m6313模块为例,该模块是一个gprs模块,在本系统中实现通信底层的数据收发,根据链路层的datall_op结构体,只要实现这几个函数便可连接到系统中,比如,声明m6313_op的结构体:datall_opm6313_op={.init=m6313_init,.setsend=m6313_setsend,.send=m6313_send,.recv=m6313_recv,.checklos=m6313_checklos,.reboot=m6313_reboot,.close=m6313_close};根据m6313的at命令手册,只要实现了结构体中的这些函数即可。所述通信层的输入端与所述物联网终端的服务器通讯连接,并在所述通信层设置时刻点,每次定时器到来,通信层都会计数。该系统在使用前做系统初始化,要依次进行通信层初始化、数据链路层初始化、协议层初始化和应用层初始化;初始化完成后进入系统待机的while循环中,低权限的定时任务可以在这里运行,正常状态下等待具体业务到来时激发物联网终端的定时器,定时器中断后,系统运行。如图5所示,系统初始化主要初始化mcu的操作,如时钟,定时器中断。通信模块初始化主要根据具体模块的特点,初始化相关缓冲区。链路层初始化做数据区,调度策略,固件更新,续传区域的初始化。协议层初始化做终端号配置,报文头设置等。应用层初始化做数据采集总线的设置,如rs485总线的配置。初始化完成后进入系统待机的while循环中,一些低权限的定时任务可以在这里运行。平时就等待具体业务到来时激发的定时器中断进行操作。定时任务放在定时操作数组里,该数组的单元是时间函数结构体,内容如下:timer_func类型名称用途inttid定时器的idvoid(*time_function)()定时处理函数的入口地址intticks定时执行的周期,基础时钟的倍数在初始化时,各个使用定时任务的模块需将各自的定时处理函数注册到这个数组中,在定时器中断产生后,该中断的处理函数isr会依次调用数组中的处理函数。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1