专利名称:一种电力智能设备通信规约脚本解析方法
技术领域:
:本发明属于电力系统和厂矿企业自动化通信管理机领域,具体涉及一种电力智能设备通信规约脚本解析方法。
背景技术:
:随着电力系统和厂矿企业自动化水平的不断提高,越来越多的电力智能设备,如直流屏、小电流接地、消弧、消谐系统、光伏逆变器等,需要通过本地通信管理机接入到当地监控系统中。尽管MODBUS、IEC103、IEC61850等标准规约已经被广泛应用,然而,由于各智能设备厂家技术实力不一,使用的通信规约仍然有很多是自定义或者在标准通信规约基础上的扩展,即使有些厂家使用了标准通信规约,各厂家对标准通信规约的理解和实现也都存在不一致性。这样的情况在电力系统和厂矿企业自动化系统项目中普遍存在。通过多年的实践和分析发现大多数电力智能设备的通信规约并不复杂,通信规约的内容也没有太大的差异,有的仅仅是在标准通信协议的基础上进行了微小的改动。然而,尽管这样,为了使这些电力智能设备能够接入到监控系统中,通信管理机仍然需要针对每一个电力智能设备的通信规约编写一个相应的规约解析程序或脚本以实现和它们的互联。现有的通信规约解析方法通常有两种,一种是通过C/C++之类的高级语言在已有通信管理机框架基础上开发规约解析模块,绝大数自动化厂商都采用了这种方式。另一种是利用通信管理机对高级脚本语言的支持,使用VB Script等脚本语言编写脚本,使用这种方法通常是因为使用了第三方的通信软件而没有获得源代码,需要自己通过编写脚本实现电力智能设备的接入。这两种方式没有本质的区别,C/C++之类的高级语言需要编译后执行,执行效率比较高,但是一旦需要移植到新的平台,通信规约解析模块的可移植性就相对较低。VB Script等脚本语言是解释性语言,执行效率相对较低,由于高级脚本语言本身由于平台的限制,其可移植性也很难恭维。无论是上述哪种方法,都需要编写复杂的代码或脚本来解析通信规约。由此,长期以来形成了:一旦出现新的通信规约或者在原有通信规约基础上的扩展,就需要修改或新开发通信规约解析程序,这导致了大量低层次的软件重复开发,可移植性较差,同时频繁的软件升级也给监控系统的稳定性埋下一定的隐患。
发明内容
本发明所要解决的技术问题是:在将一个电力智能设备接入到自动化系统时,避免重复开发通信解析程序。为解决上述技术问题,本发明提供一种电力智能设备通信规约脚本解析方法,其特征在于,包括以下步骤:I)根据规约描述语言的语法,将通信规约文本转换为规约脚本;2)在运行时,通信管理机的规约脚本解析模块按照规约脚本控制和解析通信过程,实现和电力智能设备的数据交换。规约描述语言在语法上接近于通信规约文本的描述形式,这样使得描述一个通信规约变得简单和直观,并且不需要考虑和通信底层环境相关的事项,例如通信管理机如何操作通信介质,如何发送报文,如何接收报文以及操作数据库等。通信规约描述语言和VB Script等传统的高级脚本语言有着本质的区别,规约描述语言直接面向通信规约,在语法和关键字的设计上以通信规约的报文域为基础,而传统的高级脚本语言基于虚拟的机器指令,先将脚本编译成中间代码,再通过虚拟机解释中间代码完成脚本的功能,它为了实现某个功能所编写的脚本和传统的C/C++语言所编写的代码除了因语法和关键字不同外,没有本质区别。所述通信规约描述语言的关键字和语法分别为:A.关键字的定义以报文域和字节为基本单位,根据功能划分,关键分为6类:常数类、校验码类、报文长度类、应用数据类、标记类、逻辑算术类;B.语法接近于通信规约文本的描述形式,并且便于通信管理机解析,将每个报文帧的内容按照通信规约的描述划分为“报文域”,根据每个报文域的作用,它由关键字或常数组成,其所关联的实际内容是报文中的某一个字节或者多个字节,每个报文域之间通过“/”符号隔开,并以“/”结束。每个报文域有相应的属性以进一步对该域进行描述,报文域的属性通过字符“[”和“]”中的脚本描述,属性的属性使用和中的脚本描述,报文域的多个属性之间通过“:”符号分隔。脚本中最左边的常数或关键字先获得解析或者其关联的实际报文内容先发送。在所述步骤I)中,使用规约描述语言描述通信规约,一个通信规约由若干个通信过程组成,每个通信过程由多个通信活动组成,若干个通信活动完整地描述了一个通信规约,使用规约描述语言描述通信规约,包括以下步骤:
11)将一个通信过程划分为“报文标识”、“发送选项”、“发送报文”、“接收选项”、“接收报文”五个规约描述脚本,“报文标识”是一个数值,唯一地标识通信上下文中的一个通信过程;“发送选项”标识发送报文时通信上下文环境,包括:标识发送报文定时发送时间(tmr)、标识发送报文不需要对方回复(nack)、标识发送频率(frq)、标识发送报文后等待接收的超时时间(801:)、标识发送报文不参与轮询(1^01)、标识该报文是初始化报文(init)、标识发送报文是遥控报文(rcso, rcsc,rceo, rcec, rcexe)、标识发送报文是否是遥调报文(rsexe )、是否和其他通信过程具有相同的发送报文(same );“发送报文”描述具体的报文发送内容; “接收选项”标识接收报文时的上下文环境,包括:遥信存放起始地址(yxs)、遥测存放起始地址(yes )、遥脉存放起始地址(yms )、遥测系数(ycxs )、遥脉系数(ymxs )、事件消除方式(cle, else, clrev)、是否只有接收报文(nsnd)、标识遥控选择成功或失败(rcsls,rcslf)、标识遥控执行成功或失败(rces,reef)、标识接收报文后的跳转状态(goto)、标识接收报文有多种解析方式(mre);“接收报文”标识该通信过程应该接收到的报文格式,将实际接收到的报文和“接收报文”脚本进行匹配,如果匹配成功,则按照“接收报文”脚本解析实际接收报文中的应用数据;12)将所要解析的通信规约分解为若干个通信过程,每个通信过程是“一问一答”的通信过程、只有“发送报文”的过程或只有等待“接收报文”的过程;13)根据所述步骤11)和步骤12),将每个通信过程通过“报文标识”、“发送选项”、“发送报文”、“接收选项”、“接收报文”描述,对于只有发送报文的通信过程,在“发送选项”中使用“nack/”关键字,标识该发送报文不需要对方回复,同时“接收报文”中使用“nul/”标识“空”,对于只有接收报文的通信过程,在“接收选项”中使用“nsnd/”关键字标识“没有发送报文”,同时“发送报文”中使用“nul/”关键字标识“空”;14)根据所述步骤13)完成所有通信过程的脚本化,将脚本提交给通信管理机的规约脚本解析模块;所述步骤2)中,对生成的规约脚本使用规约脚本解析模块进行解析,包括以下步骤:21)通信管理机规约脚本解析模块读取所有通信过程的规约脚本,并判别语法是否正确;22)扫描各通信过程的所有脚本配置项,根据语法规则,将规约脚本中的报文域存储为二叉树的根节点,报文域的属性存储为该根节点的叶节点,并根据通信过程中的“报文标识”将这些脚本信息存储到相应的通信过程控制结构中;23)创建“接收报文”脚本项的报文匹配模式,包括:231)在接收报文脚本中找出常数域或者在实际通信之前可以转换为常数的报文域(例如描述设备地址的关键字“addr”),通过常数域快速识别报文头或者结束符以初步判定该报文是否符合规约规定;232)预先识别将要接收到的报文长度,如果规约中没有“长度”域,那么规约规定的接收报文一定是定长的,如果规约中有长度域,根据长度域所表述的长度范围,在实际接收时,判定是否接收到完整的报文;233)如果规约中有校验码域,那么在接收到完整报文后,通过校验码关键字描述的校验算法和校验范围计算校验码,以评估报文在传输过程中是否丢失或受到干扰,以确定是否信任该报文为有效报文;24)找到“发送选项”中标识了“init/”关键字的通信过程,如果找到,把该通信过程设为当前通信过程,否则,缺省情况下,选取第一个通信过程为当前通信过程;25)根据当前通信过程的“发送选项”和“接收选项”的“nack/”、“nsnd/”判定该通信过程是只有发送报文,还是只有接收报文,还是先发送报文,再等待接收报文;26)根据所述步骤25),选择发送报文或者等待接收报文,发送报文时先获取该通信过程控制信息结构,并实时将发送报文的规约脚本转换为实际需要发送报文,并将报文从通信管理机指定的通信端口发送出去;27)判断是否接收到报文,如果没有接收到,判断是否接收超时,如果接收超时,根据“发送选项”选择下一个通信过程;28)如果接收到报文,根据所述步骤23)的报文匹配方法进行匹配,如果匹配成功,再根据“接收报文”脚本项对应用数据的描述提取应用数据,如果匹配不成功,则不解析应用数据,进行报文匹配后,根据“接收选项”选择下一个通信过程作为当前通信过程,如果没有接收到报文,根据“发送选项”选择继续等待接收报文,还是已经接收超时从而选择下一个通信过程作为当前通信过程;
29)重复所述步骤25)至步骤28),完成对通信规约的解析。与现有方法相比较,本发明的有益效果是根据规约描述语言将通信规约脚本化,在运行时,解析模块根据规约脚本解析发送和接收报文,实现和电力智能设备的数据交换,规约脚本的语法和关键字直接面向通信规约,简单直观,具有很强的可移植性,避免了使用高级编译语言或高级脚本语言开发新的通信解析模块,达到大幅减少软件重复开发的目的。
图1为使用规约描述语言描述通信规约和解析的总流程;图2为规约解析模块解析规约脚本的步骤;图3为实际通信规约的规约脚本解析实施示例;图4为图3实施例中一个可能的通信报文;图5为规约脚本的存储结构。
具体实施例方式图1为使用规约描述语言描述通信规约和解析的总流程,在获得通信规约文本后,分析通信规约,将通信规约分解为若干个通信过程,每个通信过程分解为一个或多个通信活动,根据规约描述语法,将每个通信活动转换为规约脚本,并将所有规约脚本提交给规约脚本解析模块,通信管理机的规约解析模块读取所有通信过程的规约脚本,分析语法结构,创建规约脚本的匹配方法,根据规约脚本,控制和分析通信过程,完成和电力智能设备的数据交换,为使本发明的实施方案和优点更加清晰,下面将结合附图实施例作进一步说明。I)通信规约描述语言的语法和关键字通信规约描述语言将报文内容划分为各个“报文域”,在图3的实施示例中10发送报文中“地址”、“功能码”等为报文域,根据这些报文域的作用,它可以由关键字或常数来描述,其所表示的内容是实际报文中的某一个字节或者多个字节,图3实施例中14为10和11的脚本描述,其中“地址”报文域使用“addr”关键字描述,在实际报文中它表示的报文长度是I个字节。每个报文域之间通过“/”符号隔开,并以“/”结束,图3实施例中14规约脚本,报文域之间均通过“/”符号隔开,并以“/”符号结束。每个报文域根据其特点可以有相应的属性对该域进行进一步的描述,报文域的属性通过字符“[”和“]”中的脚本描述。属性的属性使用“(”和“中的脚本描述,报文域的多个属性之间通过“:”符号分隔。脚本的顺序从左至右为报文的发送或接收顺序。图3实施例中14规约脚本中描述CRC校验码的关键字“crcl”和“crch”带有属性“ [O end-2] ”,校验码通常需要给定一个校验的范围,“ [O end_2] ”作为crcl和crch报文域的属性描述了 CRC校验码的校验范围是从报文头(0),至报文倒数第3个字节(“end”关键字描述报文倒数第一个字节)。报文中每个字节的顺序位置可以有两种定位方式,一种是从报文头开始定位,即数值O标识报文的第O个字节,也可以从报文末尾标识,即使用关键字“end”标识报文(不是指实际的报文,而是指规约规定的报文)的最后一个字节。
在通信规约中,通常一帧报文的某些内容是已知的,例如固定的报文头等,而一些内容是未知的,例如报文长度、应用数据和校验码等,未知的内容只有在实际发送或者接收报文时根据参数设置或者实际接收到的报文或者计算才能获得。对于已知的报文内容在通过通信规约描述语言描述时,可以通过常数表示,而未知内容则通过关键字表示。根据电力系统通信规约和应用数据的特征,通信规约描述语言的关键字基本分为6类,分别为:常数类、校验码类、报文长度类、应用数据类、标记类、逻辑算术类。其特征在于包括:A.常数类常数分为两种,一种常数用于描述报文域,例如固定的报文头,而另一种常数用于描述报文域的属性,用于描述报文域的常数直接通过一个十六进制数值表示,把常数也归于关键字,通常是指用于描述报文域的常数,这是由于已知报文内容在进行报文匹配时至关重要。在图3的实施例中14规约脚本“addr/03/00/00/00/02/crcl
/crch [O end-2]/,其中/03/00/等直接通过一个十六进制数描述了已知的报文内容。而“ [O end-2] ”中 作为属性的常数“O”则通过十进制数来描述,这一类常数不属于关键字。常数报文域对报文匹配至关重要,在接收报文时,通过实际报文和常数报文域及校验码的比对,来确定实际接收到的报文是否符合通信规约的规定,以进一步决定是否解析报文所携带的应用数据。B.校验码类校验码通常用于检测报文在传输过程中是否丢失或者受到干扰,特别是基于串行通信的通信规约。和常数报文域一样,校验码是报文匹配的判据之一。校验码类通常带有属性,用于描述校验码的校验范围,图3实施例中14和15规约脚本“crcl [O end-2]/”描述了 CRC校验的校验范围从报文头到报文倒数第3个字节。校验码类定义了常见的校验码,这些关键字可以扩展。
权利要求
1.一种电力智能设备通信规约脚本解析方法,其特征在于,包括以下步骤: 1)根据规约描述语言的语法,将通信规约文本转换为规约脚本; 2)在运行时,通信管理机的规约脚本解析模块按照规约脚本控制和解析通信过程,实现和电力智能设备的数据交换。
2.根据权利要求1所述的电力智能设备通信规约脚本解析方法,其特征在于:所述通信规约描述语言的关键字和语法分别为: A.关键字的定义以报文域和字节为基本单位,根据功能划分,关键分为6类:常数类、校验码类、报文长度类、应用数据类、标记类、逻辑算术类; B.语法接近于通信规约文本的描述形式,并且便于通信管理机解析,将每个报文帧的内容按照通信规约的描述划分为“报文域”,根据每个报文域的作用,它由关键字或常数组成,其所关联的实际内容是报文中的某一个字节或者多个字节,每个报文域之间通过“/”符号隔开,并以“/”结束。
3.根据权利要求2所述的电力智能设备通信规约脚本解析方法,其特征在于:每个报文域有相应的属性以进一步对该域进行描述,报文域的属性通过字符“[”和“]”中的脚本描述,属性的属性使用和中的脚本描述,报文域的多个属性之间通过“:”符号分隔。
4.根据权利要求3所述的电力智能设备通信规约脚本解析方法,其特征在于:脚本中最左边的常数或关键字先获得解析或者其关联的实际报文内容先发送。
5.根据权利要求1所述的电力智能设备通信规约脚本解析方法,其特征在于:在所述步骤I)中,使用规约描述语言描述通信规约,一个通信规约由若干个通信过程组成,每个通信过程由多个通信活动组成,若干个通信活动完整地描述了一个通信规约,使用规约描述语言描述通信规约,包括以下步骤: 11)将一个通信过程划公为“报文标识”、“发送选项”、“发送报文”、“接收选项”、“接收报文”五个规约描述脚本, “报文标识”是一个数值,唯一地标识通信上下文中的一个通信过程; “发送选项”标识发送报文时通信上下文环境,包括:标识发送报文定时发送时间(tmr)、标识发送报文不需要对方回复(nack)、标识发送频率(frq)、标识发送报文后等待接收的超时时间(aot)、标识发送报文不参与轮询(npol)、标识该报文是初始化报文(init)、标识发送报文是遥控报文(rcso, rcsc,rceo, rcec, rcexe)、标识发送报文是否是遥调报文(rsexe )、是否和其他通信过程具有相同的发送报文(same ); “发送报文”描述具体的报文发送内容; “接收选项”标识接收报文时的上下文环境,包括:遥信存放起始地址(yxs)、遥测存放起始地址(yes)、遥脉存放起始地址(yms)、遥测系数(ycxs)、遥脉系数(ymxs)、事件消除方式(cle, else, clrev)、是否只有接收报文(nsnd)、标识遥控选择成功或失败(rcsls,rcslf)、标识遥控执行成功或失败(rces,reef)、标识接收报文后的跳转状态(goto)、标识接收报文有多种解析方式(mre); “接收报文”标识该通信过程应该接收到的报文格式,将实际接收到的报文和“接收报文”脚本进行匹配,如果匹配成功,则按照“接收报文”脚本解析实际接收报文中的应用数据;12)将所要解析的通信规约分解为若干个通信过程,每个通信过程是“一问一答”的通信过程、只有“发送报文”的过程或只有等待“接收报文”的过程; 13)根据所述步骤11)和步骤12),将每个通信过程通过“报文标识”、“发送选项”、“发送报文”、“接收选项”、“接收报文”描述,对于只有发送报文的通信过程,在“发送选项”中使用“nack/”关键字,标识该发送报文不需要对方回复,同时“接收报文”中使用“nul/”标识“空”,对于只有接收报文的通信过程,在“接收选项”中使用“nsnd/”关键字标识“没有发送报文”,同时“发送报文”中使用“nul/”关键字标识“空”; 14)根据所述步骤13)完成所有通信过程的脚本化,将脚本提交给通信管理机的规约脚本解析模块。
6.根据权利要求1-5中任一项所述的电力智能设备通信规约脚本解析方法,其特征在于:所述步骤2)中,对生成的规约脚本使用规约脚本解析模块进行解析,包括以下步骤: 21)通信管理机规约脚本解析模块读取所有通信过程的规约脚本,并判别语法是否正确; 22)扫描各通信过程的所有脚本配置项,根据语法规则,将规约脚本中的报文域存储为二叉树的根节点,报文域的属性存储为该根节点的叶节点,并根据通信过程中的“报文标识”将这些脚本信息存储到相应的通信过程控制结构中; 23)创建“接收报文”脚本项的报文匹配模式,包括: 231)在接收报文脚本中找出常数域或者在实际通信之前可以转换为常数的报文域,通过常数域快速识别报文头或者结束符以初步判定该报文是否符合规约规定; 232)预先识别将要接收到的报文长度,如果规约中没有“长度”域,那么规约规定的接收报文一定是定长的,如果规约中有长度域,根据长度域所表述的长度范围,在实际接收时,判定是否接收到完整的报文; 233)如果规约中有校验码域,那么在接收到完整报文后,通过校验码关键字描述的校验算法和校验范围计算校验码,以评估报文在传输过程中是否丢失或受到干扰,以确定是否信任该报文为有效报文; 24)找到“发送选项”中标识了“init/”关键字的通信过程,如果找到,把该通信过程设为当前通信过程,否则,缺省情况下,选取第一个通信过程为当前通信过程; 25)根据当前通信过程的“发送选项”和“接收选项”的“nack/”、“nsnd/”判定该通信过程是只有发送报文,还是只有接收报文,还是先发送报文,再等待接收报文; 26)根据所述步骤25),选择发送报文或者等待接收报文,发送报文时先获取该通信过程控制信息结构,并实时将发送报文的规约脚本转换为实际需要发送报文,并将报文从通信管理机指定的通信端口发送出去; 27)判断是否接收到报文,如果没有接收到,判断是否接收超时,如果接收超时,根据“发送选项”选择下一个通信过程; 28)如果接收到报文,根据所述步骤23)的报文匹配方法进行匹配,如果匹配成功,再根据“接收报文”脚本项对应用数据的描述提取应用数据,如果匹配不成功,则不解析应用数据,进行报文匹配后,根据“接收选项”选择下一个通信过程作为当前通信过程,如果没有接收到报文,根据“发送选项”选择继续等待接收报文,还是已经接收超时从而选择下一个通信过程作为当前通信过程;29)重复所述步骤2 5)至步骤28),完成对通信规约的解析。
全文摘要
本发明公开了一种电力智能设备通信规约脚本解析方法,定义一种通信规约描述语言,并提供了相应的解析方法,在获得通信规约后,首先将通信规约分解为若干通信过程,通信过程再分解为一个或多个通信活动,将通信活动根据通信规约描述语言转换为规约脚本,规约脚本解析器分析规约脚本,按照脚本控制和解析通信过程,实现和电力智能设备的数据交换,避免通信规约解析模块的重复开发。
文档编号H04L12/70GK103197948SQ201310117240
公开日2013年7月10日 申请日期2013年4月3日 优先权日2013年4月3日
发明者严涛松, 张建周, 柏嵩, 刘双, 李康明, 刘亮亮 申请人:国电南瑞南京控制系统有限公司