实现lua解析内网数据方法及系统技术方案

技术编号:14120315 阅读:329 留言:0更新日期:2016-12-08 12:46
实现lua解析内网数据方法及系统,包括:数据解析的步骤,数据解析模块与lua交互的步骤。数据解析的步骤为:首先数据通过CAN收发器产生中断,收发CAN数据模块接受数据;数据打包成消息通过消息队列发送到数据解析模块;数据解析模块剥离数据,获取数据帧头和数据体;根据数据帧头判断数据属于哪类数据;将数据体与关键位进行与运算,判断前后数据是否有变化,如果没有变化不进行解析;如果有变化,并且是模拟量,判断是否到采集周期;到了采集周期,将数据传递给lua解析模块,调用与之对应lua脚本进行解析;本发明专利技术保证了嵌入式系统实时,高效的处理性能。

【技术实现步骤摘要】

本专利技术属于解析内网数据
,具体说是一种基于非MMU内核的嵌入式系统实现lua解析内网数据方法及系统
技术介绍
随着车联网产品的不断发展,单单通过OBD来实现车辆的诊断及数据采集已经不能满足市场需要及业务的扩展,鉴于OBD总线的特性,由于车辆在熄火状态下OBD总线处于休眠状态,以及OBD采集数据为周期性查询,效率偏低的特点,对于数据采集和车辆控制不得不采用内网CAN来实现。由于车联网产品面向不同车主,不同系列车,如奥迪,奔驰,宝马,大众,通用,丰田等,以及相同系列车款式不同,如奥迪2012款,奥迪2013款等,再由于同款车型配置又不同,如奥迪2012款天窗自动版,奥迪2012款手动舒适版等,这些不同的差异会引发相同数据,如车速,发动机转速等的解析规则不同,随着市场不断扩大及新的车型款式不断的更新,迫切需要一种方法来应对不同车型相同数据不同解析规则带来的开发压力。通过总结部分车型同一种数据的计算规则,发现基本毫无规律,并且复杂数据的运算规则不能用过一个或几个算式简单累积就能得出计算结果,有相互依赖的,有分支判断的,有的需循环计算才能得出,采用单纯C语言开发,几乎每个数据就得写一个小规模的计算函数来实现,这样就带来了很大的工作量。
技术实现思路
针对现有技术存在上述缺点和不足,本专利技术提供了一种基于非MMU内核的嵌入式系统实现lua解析内网数据方法及系统,保证嵌入式系统实时,高效的处理性能。为实现上述目的,本专利技术提供了一种实现lua解析内网数据方法,包括:数据解析的步骤,数据解析模块与lua交互的步骤。具体的,数据解析的步骤为:步骤1:首先数据通过CAN收发器产生中断,收发CAN数据模块接受数据;步骤2:数据打包成消息通过消息队列发送到数据解析模块;步骤3:数据解析模块剥离数据,获取数据帧头和数据体;步骤4:根据数据帧头判断数据属于哪类数据;步骤5:将数据体与关键位进行与运算,判断前后数据是否有变化,如果没有变化不进行解析;步骤6:如果有变化,并且是模拟量,判断是否到采集周期;步骤7:到了采集周期,将数据传递给lua解析模块,调用与之对应lua脚本进行解析;步骤8:将解析出的数据存储到数据中心模块。具体的,数据解析模块与lua交互的步骤,包括:S1.创建lua句柄;S2.将lua脚本传递给lua解释器,检查合法性,如果合法则进行步骤S3;S3.通知lua解释器,构建全局共享数据表结构;S4.CAN收发器中断之后,接收CAN数据模块将接收的数据传递给lua解释器;S5.把数据对应的lua脚本传递给lua解释器;S6.lua解析器调用lua脚本解析,并将结果传递给数据解析模块。具体的,如果步骤S2中lua脚本不合法,则将该lua脚本输出,并再也不传输至lua解释器中。具体的,S6中解析车窗状态调用lua脚本解析方法为:首先编写一段解析车窗状态数据的lua脚本;再者调用lua提供的函数luaL_dofile来执行上述lua脚本,有两个过程:一是luaL_loadfile函数将lua文件加载进来然后进行词法语法语义分析,得到一个closure放入栈中,二是接着调用lua_pcall函数来执行栈顶的closure。更具体的,第一过程具体为:在luaL_loadfile函数中加载lua文件的是lua_load函数,在lua_load函数中调用了luaD_protectedparser函数来进行解析,在luaD_protectedparser函数中又调用了f_parser函数,f_parser函数进行选择,如f_parser函数跑到luaY_parser函数中去,在luaY_parser调用luaX_next进行分析,则这个函数首先读取脚本的第一个token;最后在luaX_next函数中调用了llex函数,llex函数是真正切出token(符记)的例程,在读取了第一个token后luaX_next函数返回,相关的词法信息保存在了lexstate状态中,接着luaY_parser函数调用chunk函数来递归的生成一个chunk块,在chunk函数中循环读取下一个token并根据token的类型一层一层的递归的生成chunks,将chunks根据层次组合成tree,位于root的是最外层chunk;在分析完lua脚本后会返回到f_parser函数,在f_parser函数中接着调用luaF_newLclosure函数来将分析结果包裹成一个closure然后push到lua栈中。更具体的,第二过程具体为:当第一个过程完成后lua栈顶存放着一个closure,luaL_dofile中调用lua_pcall让其来调用这个closure,在lua_pcall中调用f_call函数,f_call中又接着调用了luaD_call函数,传入了被调用的closure和参数个数,最后在luaD_call函数中调用了luaV_execute函数来执行closure中的opcode;更具体的,luaV_execute是lua虚拟机执行opcode的函数,为一个无限循环,利用switch来根据不同的opcode进行不同的过程。本专利技术还提供了一种实现lua解析内网数据方系统,具体包括:CAN收发器,使数据产生中断;接收CAN数据模块,接收产生中断后的数据;数据解析模块,剥离数据获取数据帧头和数据体;数据中心模块,存储解析出的数据;lua解释器,构建全局共享数据表结构。进一步的,数据解析模块,包括lua解析模块,调用与数据对应的lua进行解析。本专利技术由于采用以上技术方案,能够取得如下的技术效果:在低成品硬件方案下,采用非MMU的系统内核,以C语言为主开发的嵌入式系统,依然能灵活处理短小、多变、并带有一定复杂性的小任务并保证嵌入式系统实时,高效的处理性能;鉴于解析数据需要灵活,高效,又易于扩展开发,采用LUA与C语言相互调用,把LUA灵活易扩展和C语言高效有机结合在一起,实现内网数据有效解析。附图说明本专利技术共有附图2幅:图1为数据解析流程图,图2为数据解析模块与lua交互流程图。具体实施方式下面通过实施例,并结合附图,对本专利技术的技术方案作进一步的具体说明。实施例1一种实现lua解析内网数据方法,包括:数据解析的步骤,数据解析模块与lua交互的步骤。数据解析的步骤为:步骤1:首先数据通过CAN收发器产生中断,收发CAN数据模块接受数据;步骤2:数据打包成消息通过消息队列发送到数据解析模块;步骤3:数据解析模块剥离数据,获取数据帧头和数据体;如下所示2个标准帧0x03c2,0x00000000000000040x0525,0x0000000000ff00000x03c2和0x0525是帧头,一个是远光灯,一个是方向盘状态;步骤4:根据数据帧头判断数据属于哪类数据;如车窗控制、车锁控制、后备箱控制、喇叭控制、转向灯控制;步骤5:将数据体与关键位进行与运算,判断前后数据是否有变化,如果没有变化不进行解析;步骤6:如果有变化,并且是模拟量,判断是否到采集周期;步骤7:到了采集周期,将数据传递给lua解析模块,调用与之对应lua脚本进行解析;步骤8:将解析出的数据存储到数据中心模块。具体的,数据解析模块与lua交互的步骤,包括:S1.创建lua句柄本文档来自技高网...
实现lua解析内网数据方法及系统

【技术保护点】
实现lua解析内网数据方法,其特征在于,包括:数据解析的步骤,数据解析模块与lua交互的步骤。

【技术特征摘要】
1.实现lua解析内网数据方法,其特征在于,包括:数据解析的步骤,数据解析模块与lua交互的步骤。2.根据权利要求1所述实现lua解析内网数据方法,其特征在于,数据解析的步骤为:步骤1:首先数据通过CAN收发器产生中断,收发CAN数据模块接受数据;步骤2:将数据打包成消息通过消息队列发送到数据解析模块;步骤3:数据解析模块剥离数据,获取数据帧头和数据体;步骤4:根据数据帧头判断数据属于哪类数据;步骤5:将数据体与关键位进行与运算,判断前后数据是否有变化,如果没有变化不进行解析;步骤6:如果有变化,并且是模拟量,判断是否到采集周期;步骤7:到了采集周期,将数据传递给lua解析模块,调用与之对应lua脚本进行解析;步骤8:将解析出的数据存储到数据中心模块。3.根据权利要求1所述实现lua解析内网数据方法,其特征在于,数据解析模块与lua交互的步骤,包括:S1.创建lua句柄;S2.将lua脚本传递给lua解释器,检查合法性,如果合法则进行步骤S3;S3.通知lua解释器,构建全局共享数据表结构;S4.CAN收发器中断之后,接收CAN数据模块将接收的数据传递给lua解释器;S5.把数据对应的lua脚本传递给lua解释器;S6.lua解析器调用lua脚本解析,并将结果传递给数据解析模块。4.根据权利要求3所述实现lua解析内网数据方法,其特征在于,如果步骤S2中lua脚本不合法,则将该lua脚本输出,并再也不传输至lua解释器中。5.根据权利要求3所述实现lua解析内网数据方法,其特征在于,S6中解析车窗状态调用lua脚本解析方法为:首先编写一段解析车窗状态数据的lua脚本;再者调用lua提供的函数luaL_dofile来执行上述lua脚本,有两个过程:一是luaL_loadfile函数将lua文件加载进来然后进行词法语法语义分析,得到一个closure放入栈中,二是接着调用lua_pcall函数来执行栈顶的closure。6.根据权利要求5所述实现lua解析内网数据方法,其特征在于,第一过程具体为:在luaL_loadfile函数中加载lua文件的是lua_load函数,在lua_load函数中调用luaD_protectedparser函数来进行解析,在lua...

【专利技术属性】
技术研发人员:田雨农孙伟
申请(专利权)人:大连楼兰科技股份有限公司
类型:发明
国别省市:辽宁;21

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1