本发明属于嵌入式系统通讯,具体涉及一种基于多种接口的数据报文通用转发处理方法。
背景技术:
1、在嵌入式控制系统中,控制台通过以太网向指令转发单元发送控制命令和参数,指令转发单元通过不同的数据接口(以太网、串口、can总线、i/o开关量等),将接收到的控制命令和参数发送给终端设备。当指令转发单元端的工作流程发生更改时,通常需要修改指令转发单元端的代码,实现指令转发单元端新的工作流程。
2、修改指令转发单元端代码的做法虽然能使指令转发单元满足新的工作流程要求,但是该方法存在一定弊端。一方面,该方法导致指令转发单元端的程序代码改动量较大。若指令转发单元端的程序架构设计不够合理,当指令转发单元端设备的工作流程更改较大时,不仅导致指令转发单元端修改和维护程序工作量的增加,还会增大程序修改后出错的风险。另一方面,指令转发单元端代码的大量修改可能导致指令转发单元端代码软件架构的变更,不利于指令转发单元端软件代码的高质量重用,降低了软件开发效率和实现可靠性。
技术实现思路
1、(一)要解决的技术问题
2、本发明要解决的是:在嵌入式控制系统中,因指令转发单元端设计和工作流程变更带来的指令转发单元端程序代码改动量大且软件开发效率低下的技术问题。
3、(二)技术方案
4、为了解决上述技术问题,本发明提供了一种基于多种接口的数据报文通用转发处理方法,包括以下步骤:
5、s1:定义xml脚本语言的语法和命令,生成xml脚本语言接口规范;
6、其中,所述xml脚本语言接口规范是为了实现嵌入式控制系统中的指令转发单元的工作流程而设计的基于xml的可扩展标记语言,支持顺序结构、分支判断和循环结构;
7、其中,所述xml脚本语言遵循xml语言的语法规则,并按照指令转发单元自身的工作流程顺次编写;
8、其中,所述xml脚本语言接口规范中的语句是由一个xml元素来表达的,所有语句都必须有返回值,对于返回值没有意义的语句,返回void;该xml脚本语言接口规范中的语句可以嵌套成为组合语句,这样的语句的返回值为其内部最后一条语句的执行结果;每条语句的返回值类型是解释器执行过程中动态决议的,而不在执行前进行静态检查;
9、其中,所述指令转发单元内运行xml脚本文件的解释器,即xml脚本解释器;所述指令转发单元的每一步工作流程由一个block块语句实现,每个block块语句是由多条基本语句组成,xml脚本解释器将顺次解析并执行该block块语句中的每一条语句;block块中每条基本语句的语言元素包括赋值语句元素、数值运算元素、比较语句元素、逻辑运算元素、分支和循环语句元素、数据发送元素、数据接收元素以及自定义数据处理元素;
10、s2:读取xml配置文件的信息,基于xml脚本语言接口规范描述指令转发单元自身的工作流程,并将该工作流程保存在xml脚本文件中;xml配置文件包括xml参数配置文件、xml任务配置文件;
11、其中,嵌入式控制系统中的控制台通过以太网向指令转发单元发送控制命令和参数,指令转发单元通过不同的数据接口,将接收到的控制命令和参数发送给终端设备;终端设备将控制命令的执行结果通过不同的数据接口发送给指令转发单元,指令转发单元再将该执行结果通过以太网发送给控制台;
12、其中,所述指令转发单元自身的工作流程由xml脚本描述实现;指令转发单元自身的工作流程包括:参数和任务初始化、控制台控制命令和参数的接收处理以及与终端设备的通信处理;
13、s3:将完整的xml脚本文件装入xml脚本解释器中,指令转发单元启动对该脚本的解析处理流程。
14、优选地,所述block块语句中的赋值语句元素setvar用于定义并初始化一个任意类型的变量,该语句的返回值为bool类型,表示赋值是否执行成功;
15、所述block块语句中的获取数值元素getvar用于获取任意类型变量的数值;getvar元素返回一个已经定义变量的值,主要用于对已定义变量的引用;如果要引用的变量还没有定义,则返回无效类型;
16、所述block块语句中的数值运算元素calcula用于对定义的变量进行四则运算或者位运算,并将运算的结果存入原变量中;该语句的返回值为bool类型,表示运算是否执行成功;
17、所述block块语句中的比较语句元素testfield用于比较两个变量值或常量值的大小,并返回比较结果;如果比较结果一致返回true,比较结果不一致返回false;
18、所述block块语句中的逻辑运算元素用于对含有一个或多个返回值为布尔类型的子语句进行“逻辑与”或者“逻辑或”操作,并返回操作结果;
19、所述block块语句中的分支和循环语句元素用于实现分支语句和循环语句操作;
20、所述block块语句中的数据发送元素senddata用于实现基于多种通信接口的数据发送,该元素senddata可以定义发送数据的内容、数据报文名称、通信接口类型、发送次数和发送间隔,发送的数据包的内容可以通过field进行描述;senddata包含五个属性:addr表示发送的目的地址,name表示发送数据报文名称,type表示通信接口类型,times表示最多发送的次数,gap表示发送间隔;
21、所述block块语句中的数据接收元素recvdata用于实现接收终端设备发送的数据内容、数据报文名称、通信接口类型和超时时间,并保存接收的报文数据内容;recvdata包含四个属性:addr表示接收的源地址,name表示接收数据报文名称,type表示通信接口类型,timeout表示接收数据超时时间,其中,setarray表示设置数组名称;
22、所述block块语句中的自定义数据处理元素用于根据指令转发单元特殊的功能需求,定义该功能需求的专用函数,实现对该功能需求的特殊处理;自定义数据处理元素的属性值为每个专用函数的形参值;需要根据指令转发单元的不同通信协议,事先定义好基于每种通信协议的接收处理函数。
23、优选地,所述指令转发单元的“参数初始化”由指令转发单元读取相应的xml参数配置文件实现;在xml中定义专用函数readxmlfile作为“文件读取”元素,实现读取指定文件路径、文件类型和文件名称的功能;指令转发单元将参数按照类型分为不同的xml参数配置文件,每个xml参数配置文件中包含参数名称、参数标识、参数数据类型以及参数初始值;在xml中定义专用函数initpara作为“系统初始化”元素,实现指令转发单元的参数初始化。
24、优选地,所述指令转发单元的“任务初始化”由指令转发单元读取相应的xml任务配置文件实现;在xml中定义专用函数readxmlfile作为“文件读取”元素,实现读取指定文件路径、文件类型和文件名称的功能;指令转发单元将需要创建的任务按照类型分为不同的xml任务配置文件,每个xml任务配置文件中包含任务名称、标识、优先级、执行周期、堆栈大小、信号量名称、信号量标识、信号量类型及初始化参数、消息队列名称、消息队列标识、消息队列类型及初始化参数;在xml中定义专用函数createtask作为“创建任务”元素,实现指令转发单元的任务、信号量和消息队列的创建和初始化操作。
25、优选地,所述指令转发单元的“控制台控制命令和参数的接收处理”包括接收控制命令和参数、处理控制命令和参数以及发送控制命令和参数;利用以太网数据接收元素和以太网数据发送元素实现对控制命令和参数的接收和发送,在xml中定义专用函数dealnetdata作为“控制命令和参数处理”元素,根据以太网协议的内容实现对控制命令和参数的处理。
26、优选地,所述指令转发单元的“与终端设备的通信处理”包括接收终端设备数据、向终端设备发送数据以及终端设备数据处理;在xml中定义不同接口类型的数据接收元素,每种接口类型的数据接收元素用专用函数实现,函数参数包括接收的数据内容、数据报文名称、通信接口类型和接收超时时间;在xml中定义不同接口类型的数据发送元素,每种接口类型的数据发送元素用专用函数实现,函数参数包括发送数据的内容、数据报文名称、通信接口类型、发送次数和发送间隔;在xml中定义各自的专用函数作为不同接口类型的终端设备数据处理元素,每种接口类型的报文按照该报文协议进行处理。
27、优选地,xml脚本文件中指令转发单元的工作流程如下:
28、(1)利用xml脚本语言的readxmlfile文件读取元素,从xml配置文件中获取到指令转发单元工作流程的执行周期;
29、(2)利用xml脚本语言的readxmlfile文件读取元素,获取到每个xml参数配置文件中包含的参数名称、参数标识、参数数据类型以及参数初始值,利用xml脚本语言的initpara系统初始化元素完成指令转发单元参数的初始化工作;
30、(3)利用xml脚本语言的readxmlfile文件读取元素,获取到每个xml任务配置文件中包含的任务名称、标识、优先级、执行周期、堆栈大小、信号量名称、信号量标识、信号量类型及初始化参数、消息队列名称、消息队列标识、消息队列类型及初始化参数,利用xml脚本语言的createtask创建任务元素完成指令转发单元中各个任务、信号量和消息队列的初始化创建工作;
31、(4)指令转发单元按照步骤(1)中读取的周期,定时执行工作流程;
32、(5)指令转发单元根据不同的接口类型,创建多个接收任务,在每个接收任务中将接收到的报文数据按照接口类型不同分别存储在相应的全局数据结构中,供xml脚本block块语句中的数据接收元素recvdata使用;
33、(6)由于指令转发单元主要实现报文数据的接收、处理和发送工作,主要使用到的xml语法元素为数据接收元素recvdata、数据发送元素senddata以及自定义数据处理元素,利用xml脚本block块中定义的赋值语句元素、数值运算元素、比较语句元素、逻辑运算元素、分支和循环语句元素、数据发送元素、数据接收元素以及自定义数据处理元素的语法规则,结合指令转发单元自身的工作流程,用xml脚本描述数据接收元素recvdata、数据发送元素senddata以及自定义数据处理元素的执行的条件、参数、执行时序以及执行周期。
34、优选地,步骤s2中,指令转发单元按照如下策略在工作流程中实现报文数据的重发操作和接收超时处理:
35、senddata中的“times”属性表示最多发送的次数,“gap”属性表示发送间隔,当发送次数大于“times”的属性值时,表明指令转发单元向终端设备发送数据失败,将失败结果通过以太网告知控制台;
36、recvdata中的“timeout”属性表示接收超时时间,当接收时间大于“timeout”的属性值时,表明指令转发单元接收终端设备数据失败,将失败结果通过以太网告知控制台。
37、优选地,所述xml脚本解释器的内核实现对block块语句中每种语法元素的解释处理;针对每种语法元素,定义相应的函数分别实现赋值语句功能、数值运算功能、比较语句功能、逻辑运算功能、分支和循环语句功能、数据发送功能、数据接收功能和指令转发单元信息数据的专用处理,函数的参数为对应语法元素的属性;
38、步骤s3中,按照每种语法元素实现的具体功能,逐行对block块语句中的赋值语句元素、数值运算元素、比较语句元素、逻辑运算元素、分支和循环语句元素、数据发送元素、数据接收元素和自定义数据处理元素进行解析;
39、步骤s3中,将完整的xml脚本文件装入xml脚本解释器后,由指令转发单元按照脚本中规定的周期顺次执行xml脚本工作流程。
40、本发明还提供了一种基于所述方法实现的嵌入式系统通讯方法。
41、(三)有益效果
42、本发明与现有技术相比的优点在于:
43、1、该方法在尽可能不改动或者少改动指令转发单元端程序代码的情况下,仅通过改动指令转发单元端脚本文件,实现了指令转发单元端新的工作流程,以适应和满足更改后指令转发单元新的工作流程要求;
44、2、该方法具有程序代码更改量小、软件开发效率和可靠性高,且易实现等特点。