一种满足时标传递的开关量逻辑运算方法

文档序号:6283375阅读:208来源:国知局
专利名称:一种满足时标传递的开关量逻辑运算方法
技术领域
本发明涉及一种工业控制系统的运算方法,尤其是一种满足时标传递的开关量逻
辑运算方法。
背景技术
现有工业分布式控制系统中,需要对700个左右的开关量进行带时标能的逻辑运 算。这些开关量数据来自不同的分布式部署的I/0控制站,I/O控制站对这些开关量数据 的采集周期为40ms,各1/0站采集到数据后,集中传送至系统服务器实时数据库,因此计算 周期必须小于40ms。 由于需要运算的开关量数据可能分布在不同的I/O站,因此如果将此运算任务部 署在1/0站则涉及到数据的站间引用,而1/0站数据的站间引用为秒级,难以实现。因此需 要将此计算任务部署在系统服务器。 此类开关量逻辑运算目前常见的解决方案有两种 某运算任务A,分离线和在线两部分即离线部分进行逻辑表达式的解析和编译, 在线部分加载编译后的目标算法文件并执行运算。离线部分处理过程如图1所示1、先按 照约定的格式编辑文本方式的逻辑方程源文件;2、离线软件加载此文件并解析,翻译为等 价的中间代码的逻辑方程源文件;3、调用相关平台接口编译此中间代码逻辑方程源代码, 生成目标文件。比如VBA代码就是一种成熟的中间格式。在线部分处理过程如图2所示 1、在线软件加载离线软件编译生成的目标文件;2、向实时数据库读取逻辑方程所包含的所 有开关量值、时标、以及无效位;3、调用相关平台接口函数,执行逻辑算法进行运算;4、将 计算的结果写回数据库,其中,2、3、4为周期处理,同时因为调用中间平台接口执行运算,所 以运算周期比较长。 采用此种方式,虽然可以省去运算任务自己处理编译和执行运算逻辑,但是由于 每次计算都需要向实时数据库读写所有的开关量值,所以当需要计算的开关量点很多的时 候,读写数据库就会耗费大量的时间。根据当前实时数据库的性能只能将此任务的最小运 算周期为500ms,而在实际测试中,读写1000个左右开关量大约各需要耗费200ms,计算需 要耗费100ms。 同样由于是周期500ms向实时数据库读取全部开关量值,而开关量的采集周期为
40ms,所以很容易产生遗漏数据的情况发生,最终导致计算结果不正确。 某运算任务B处理流程图如图3所示1、读数据库获得逻辑运算所需要的开关量
值;2、解析算法逻辑;3、执行计算;4、计算结果写数据库。此四个部分为周期循环执行,每
次做的工作完全一样。此类解决方法为典型的解释执行方式。即对所有逻辑方程解释一
条执行一条,周期反复。此种方法由于每个周期都需要进行读数据库、解析逻辑表达式、执
行运算、写数据库,存在的问题与运算任务A相似,并且由于需要周期解释同一个逻辑表达
式所以更耗时,运算效率比较低。
有鉴于此特提供本发明。

发明内容
本发明要解决的技术问题在于克服现有技术的不足,提供一种满足时标传递的开
关量逻辑运算方法,该满足时标传递要求的开关量运算数据安全、准确、执行计算效率高。 为解决上述技术问题,本发明采用技术方案的基本构思是一种满足时标传递的 开关量逻辑运算方法,其特征在于所述的实现方法为a、由实时数据库向计算任务发送 变化的开关量数据;b、将输送进数据区中变化的开关量数据采用哈希表结构存储;C、在计 算任务启动的同时读取解析源表达式,通过解析将文本格式逻辑方程转换为自定义格式存 储的逻辑表达式;d、于计算任务中直接调用步骤b中存储的开关量数据和步骤c中按自定 义格式存储的逻辑表达式,执行计算;e、将计算任务的结果写入实时数据库。
所述的步骤a为通过通信接口将实时数据库中变化的开关量数据向计算任务发 送,步骤e将计算任务的计算结果通过通信接口写进实时数据库。 所述的步骤c中的文本格式逻辑方程为已有编辑好的源文件,该逻辑方程有两种类 型i纯二元运算的表达式和ii含有函数的二元运算表达式,其解析转换包括先将所描述 的逻辑方程ii中包含的函数,用一个临时变量代替,同时ii生成一个新的逻辑方程,i和ii 表达式为字符串形式;然后对其进行词法分析、语法分析,识别出等号、计算结果、操作数、操 作符以及函数名和函数参数信息,得到中间格式逻辑方程二元逻辑表达式和函数等式;最 后再将中缀的形式转换为等价的后缀形式,生成新的逻辑算法,以表格的方式存储起来。
所述的步骤C中二元逻辑表达式调入步骤d中具体的运算方法为第一,开始;第 二、判断是否扫描完?若是,则计算结束,从栈顶取得计算结果,若否,则进行下一步;第三、 读一个单词;第四、判断是否为操作数?若是,则此单词进栈,然后转到步骤二,若否,则进 行下一步;第五、判断是否为操作符?若否,则语法错误,程序退出,若是,则进行下一步; 第六、取栈顶两个操作数;第七、运算此两个操作数和此操作符组成的二元运算;第八、计 算结果压栈,转到步骤二。
所述的步骤C中函数等式调入步骤d中具体的运算方法为开始;取出函数名;取
出参数;根据函数名调用函数,并传入参数,执行计算;得到计算结果。 采用上述技术方案后,本发明与现有技术相比具有以下有益效果 1 、实时数据库向本运算任务发送变化的开关量数据,此方法解决了计算任务向实
时数据库读全数据导致的大量时间耗费的问题。这是由于实时数据库总是最先感知到数据
的变化(服务器层),所以也不会有数据丢失的问题,并发生变化的数据总是一部分数据,
所以减少了通信量,提高了通信效率; 2、数据区变量的存储采用哈希表,提高运算过程中操作数值的查询效率; 3、逻辑表达式在任务启动时就执行解析,并采用自定义的表格进行存储,在运算
过程中直接从此表格读取逻辑表达式执行运算,提高了运算效率; 4、计算任务将计算结果通过通信接口写进实时数据库,提高了通信效率。 下面结合附图对本发明的具体实施方式
作进一步详细的描述。


图1是现有技术运算任务A离线部分处理过程流程4
图2是现有技术运算任务A在线部分处理过程流程图; 图3是现有技术运算任务B解释运算方式流程图; 图4是本发明运算程序体系结构和数据流程图; 图5是本发明逻辑方程解析转换步骤示意图; 图6是本发明二元逻辑表达式运算步骤示意图; 图7是本发明函数等式运算步骤示意图。
具体实施例方式
如图4至图7所示,公开了本发明一种满足时标传递的开关量逻辑运算方法。如 图4所示,为本发明运算程序体系结构和数据流图,其中,a、由实时数据库向计算任务通过 通信接口发送变化的开关量数据;b、将输送进数据区中变化的开关量数据采用哈希表结构 存储;c、在计算任务启动的同时读取解析源表达式,通过解析将文本格式逻辑方程转换为 自定义格式存储的逻辑表达式;d、于计算任务中直接调用步骤b中存储的开关量数据和步 骤c中按自定义格式存储的逻辑表达式,执行计算;e、将计算任务的结果通过通信接口写 入实时数据库。 实时数据库向本运算任务发送变化的开关量数据,此方法解决了计算任务向实时 数据库读全数据导致的大量时间耗费的问题。这是由于实时数据库总是最先感知到数据的 变化(服务器层),所以也不会有数据丢失的问题,并发生变化的数据总是一部分数据,所 以减少了通信量,提高了通信效率。 数据区中的开关量采用哈希表结构存储,提高了运算过程中变量数据值查询的效 率。 采用任务启动时读取解析源表达式的方法,这样就避免了技术背景B类解释执行 方式,每次计算都需要重新解析表达式,带来的时间耗费,解析后的逻辑算法按自定义的格 式存储。如图5所示,具体实现步骤为 f、假设已有编辑好的逻辑方程源文件,逻辑方程有两种类型i纯二元运算的 表达式和ii含有函数的二元运算表达式,如字符串格式方程i、 A = BlC和ii、 A = B&C|Fun(AA,BB); g、将ii所描述的逻辑方程A = B&C|Fun(AA,BB)中包含的函数Fun (AA,BB),用一 个临时变量Tempi代替,同时生成一个新的逻辑方程ii、A = B&C | Tempi, Tempi = Fun(AA, 啦; h、以上所得的逻辑方程都是字符串的形式,还没有任何逻辑意义,此步骤需要进 行词法分析,语法分析,识别出等号、计算结果、操作数、操作符以及函数名和函数参数等等 信息,生成新的中间格式逻辑方程,即二元逻辑表达式i、 〃 A〃 〃 =〃 〃 B〃 〃 r 〃 C" 和函数等式ii、 〃 A〃 〃 =〃 〃 B〃 〃 &〃 〃 C〃 〃 I" 〃 Tempi" , 〃 Tempi 〃 〃 =〃 〃 Fun" 〃 AA〃 〃 BB"; i、由于计算机处理的特点更适合后缀的形式,所以此步,需要将中 缀的形式转换为等价的后缀形式,如A+B为中缀形式,即操作数在两个操作 符之间,这是人类比较习惯的格式,AB+为后缀形式,计算机更易处理此种方 式,更改的后缀形式为i、 " A" " =" " B" " C" " I"和ii、 " A〃 〃<formula>formula see original document page 6</formula>
最后将i步骤生成的逻辑算法,以表格的方式存储起来,计算时,在读此表执行计算。 计算任务直接调用c中生成的逻辑算法,这样避免了技术背景A类运算方法中由
于采用第三方接口实现运算带来的计算效率低下的问题。 具体实现步骤为 对于c解析后生成的逻辑算法<formula>formula see original document page 6</formula>
要进行区分,采用不同的方式运算,如图6和7所示。 如图6所示,二元逻辑表达式i运算方法为第一,开始;第二、判断是否扫描完? 若是,则计算结束,从栈顶取得计算结果,若否,则进行下一步;第三、读一个单词;第四、判 断是否为操作数?若是,则此单词进栈,然后转到步骤二,若否,则进行下一步;第五、判断 是否为操作符?若否,则语法错误,程序退出,若是,则进行下一步;第六、取栈顶两个操作 数;第七、运算此两个操作数和此操作符组成的二元运算;第八、计算结果压栈,转到步骤 如图7所示,函数等式ii运算方法为开始;取出函数名;取出参数;根据函数名 调用函数,并传入参数,执行计算;得到计算结果。 在d步骤的运行中,假如需要计算A = B | C,由于B和C实际代表的是一个数值,这 个数值就是通过变量名,从数据区查询到的,比如最终实际运算的逻辑可能是O = 0|0。
本发明的运算方法提高了计算效率,将250个逻辑方程包含700个左右的开关量 在40ms内完成计算;解决了开关量采集周期为40ms的情况下,运算不丢数据,运算正确。
权利要求
一种满足时标传递的开关量逻辑运算方法,其特征在于所述的实现方法为a、由实时数据库向计算任务发送变化的开关量数据;b、将输送进数据区中变化的开关量数据采用哈希表结构存储;c、在计算任务启动的同时读取解析源表达式,通过解析将文本格式逻辑方程转换为自定义格式存储的逻辑表达式;d、于计算任务中直接调用步骤b中存储的开关量数据和步骤c中按自定义格式存储的逻辑表达式,执行计算;e、将计算任务的结果写入实时数据库。
2. 根据权利要求1所述的一种满足时标传递的开关量逻辑运算方法,其特征在于所 述的步骤a为通过通信接口将实时数据库中变化的开关量数据向计算任务发送,步骤e将 计算任务的计算结果通过通信接口写进实时数据库。
3. 根据权利要求1所述的一种满足时标传递的开关量逻辑运算方法,其特征在于所 述的步骤C中的文本格式逻辑方程为已有编辑好的源文件,该逻辑方程有两种类型i纯二 元运算的表达式和ii含有函数的二元运算表达式,其解析转换包括先将所描述的逻辑方 程ii中包含的函数,用一个临时变量代替,同时ii生成一个新的逻辑方程,i和ii表达式 为字符串形式;然后对其进行词法分析、语法分析,识别出等号、计算结果、操作数、操作符 以及函数名和函数参数信息,得到中间格式逻辑方程二元逻辑表达式和函数等式;最后 再将中缀的形式转换为等价的后缀形式,生成新的逻辑算法,以表格的方式存储起来。
4. 根据权利要求3所述的一种满足时标传递的开关量逻辑运算方法,其特征在于所 述的步骤C中二元逻辑表达式调入步骤d中具体的运算方法为第一,开始;第二、判断是 否扫描完?若是,则计算结束,从栈顶取得计算结果,若否,则进行下一步;第三、读一个单 词;第四、判断是否为操作数?若是,则此单词进栈,然后转到步骤二,若否,则进行下一步; 第五、判断是否为操作符?若否,则语法错误,程序退出,若是,则进行下一步;第六、取栈顶 两个操作数;第七、运算此两个操作数和此操作符组成的二元运算;第八、计算结果压栈, 转到步骤二。
5. 根据权利要求3所述的一种满足时标传递的开关量逻辑运算方法,其特征在于所 述的步骤C中函数等式调入步骤d中具体的运算方法为开始;取出函数名;取出参数;根 据函数名调用函数,并传入参数,执行计算;得到计算结果。
全文摘要
本发明公开了一种满足时标传递的开关量逻辑运算方法,其特征在于所述的实现方法为a、由实时数据库向计算任务发送变化的开关量数据;b、将输送进数据区中变化的开关量数据采用哈希表结构存储;c、在计算任务启动的同时读取解析源表达式,通过解析将文本格式逻辑方程转换为自定义格式存储的逻辑表达式;d、于计算任务中直接调用步骤b中存储的开关量数据和步骤c中按自定义格式存储的逻辑表达式,执行计算;e、将计算任务的结果写入实时数据库。本发明提高了计算效率,将250个逻辑方程包含700个左右的开关量在40ms内完成计算;解决了开关量采集周期为40ms的情况下,运算不丢数据,运算正确,计算效率高。
文档编号G05B19/02GK101727073SQ200810172530
公开日2010年6月9日 申请日期2008年10月27日 优先权日2008年10月27日
发明者丁长富, 左新, 王进, 白涛, 石桂连 申请人:北京广利核系统工程有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1