一种基于时间自动机的PLC程序设计方法与流程

文档序号:15694634发布日期:2018-10-19 18:50阅读:277来源:国知局

本发明属于可编程控制器软件技术领域,更具体地,涉及一种基于时间自动机的plc(programmablelogiccontroller,可编程逻辑控制器)程序设计方法。



背景技术:

plc是一种以微处理器为核心,在计算机技术、电气自动化控制技术和网络通信技术基础上,开发出来的功能丰富、高度智能化的工业控制装置。iec61131标准弥补了传统plc控制系统开放性差、兼容性差、可维护性差以及可复用性差等弱点,在工业控制领域得到了广泛的应用。尽管iec61131标准编程语言定义了梯形图(ld,ladderlogicprogramminglanguage)、功能块图(fbd,functionblockdiagram)和顺序功能图(sfc,sequentialfunctionchart)三种图形化编程语言使得程序指令形象直观,但程序指令间的逻辑关系抽象,特别是近年来工业控制系统结构的复杂度不断增长,控制系统的状态数目巨大,会导致plc程序设计工作量繁琐并且开发周期和成本难以控制等。此外,在plc程序调试过程中,编程软件只能检测语法、语义相关的错误,程序逻辑错误(如不安全序列、不可达序列、竞态和死锁等)需要设计人员按照程序逐条检查,严重影响开发周期,而且随着系统状态数量的增加,不能保证检查出全部逻辑错误。



技术实现要素:

针对现有技术的缺陷和改进需求,本发明提供了一种基于时间自动机的plc程序设计方法,旨在解决复杂工业控制系统的plc程序设计过程中,由于状态数目巨大而导致的编程工作量繁琐、应用程序逻辑错误难以检查的问题。

为实现上述目的,本发明提供了一种基于时间自动机的plc程序设计方法,包括如下步骤:

(1)根据工控系统的应用需求将其划分为多个子系统,并为每一个子系统构建一个时间自动机模型;

(2)将所构建的每一个时间自动机模型实例化生成相应的进程,然后对所生成的进程进行仿真和验证,以避免出现程序逻辑错误;

(3)将每一个时间自动机转换成其对应的顺序功能图(sfc)语言功能块,得到多个sfc功能块以及包含所述多个sfc功能块的plc工程;

(4)将时间自动机的全局变量声明转换成plc工程的全局变量,将时间自动机局部变量声明转换成对应的sfc功能块的本地变量,并将时间自动机的参数转换成对应的sfc功能块的输入变量,从而完成时间自动机变量声明的转换;

(5)将时间自动机的状态转换成对应的sfc功能块的步,将时间自动机转移边上的约束条件转换成对应的sfc功能块的转移条件,并将时间自动机转移边上的变量重置和更新转换成对应的sfc功能块的动作块,从而完成时间自动机状态和转移边的转换;

(6)将时间自动机之间的同步通道转换成对应的sfc功能块之间的同步机制,从而完成时间自动机同步的转换;

(7)将时间自动机的实例化进程转换成plc主程序实例化调用各个对应的sfc功能块,从而完成时间自动机系统声明的转换。

进一步地,步骤(1)中,为每一个子系统构建一个时间自动机模型,包括如下步骤:

(11)确定每个子系统的时间自动机可能存在的状态,确定初始状态以及各个状态的类型;状态的类型包括:普通状态、紧迫状态和约束状态;普通状态允许时间停留;紧迫状态不允许发生时间流逝;约束状态不允许时间流逝,并要求立刻发生所在状态的转移,同时要求除了约束状态外,其他状态都不发生转移;

(12)分析各个状态之间的逻辑关系,确定状态的转移边以及边上面的约束条件,以及需要执行的变量重置和更新;其中,变量重置和更新指时钟变量的重置,和数值变量数值的更新以及函数的调用;

(13)分析各个子系统之间的行为协同性,确定时间自动机之间需要同步的转移边,添加同步通道;其中,同步通道由通道信号发送方(“!”)和通道信号接收方(“?”)组成,通道信号发送方满足约束条件的情况下,若有通道信号接收方响应,则两个转移同步执行,若无通道信号接收方响应,则不能发生状态转移,直到接收方响应为止。

进一步地,步骤(2)中,对时间自动机模型所生成的进程进行仿真和验证,是指利用仿真器对系统的时间自动机模型进行仿真,初步判断系统模型的正确性,并在验证器中利用bnf语法对系统模型进行形式化规范验证,验证系统应用逻辑的正确性,避免出现不可达、不安全、逻辑冲突、死锁等程序逻辑错误。

进一步地,步骤(4)中,若所要转换的变量声明为时钟变量,则在plc工程中调用ton定时器功能块,并将输出et作为转换结果;若所要转换的变量声明为有输入参数且不使用外部变量声明的函数,则将其转换为plc工程中st语言编程的函数;若所要转换的变量声明为有输入参数且使用外部变量声明的函数,则将其转换为plc工程中st语言编程的功能块;若所要转换的变量声明为无输入参数的函数,则将其转换为对应的sfc功能块的动作;若所要转换的变量声明为同步通道变量,则转入所述步骤(6)。

进一步地,步骤(5)中,若所要转换的状态为紧急状态或者约束状态,则将对应的sfc功能块中的步的步消逝时间设为0。

更进一步地,步骤(5)中,若时间自动机中有多条转移边汇集到一个状态,即时间自动机中存在多个子序列汇合的情况,针对这种情况,多条转移边上的变量重置和更新不能直接翻译为sfc功能块后级步连接的动作块,因此,在对应sfc功能块中的各个转移条件后均插入一个辅助步和一个布尔值恒为1的转移条件。

更进一步地,步骤(5)中,将时间自动机转移边上的变量重置和更新转换成对应的sfc功能块的动作块,具体指将时间自动机转移边上的时钟变量重置表达式、数值变量赋值表达式以及函数一起转换成sfc功能块对应转移边后级步连接的动作块,然后将时钟变量重置表达式转换为动作块调用ton定时器功能块并复位。

更进一步地,步骤(5)中,若时间自动机中存在状态演变流程循环的情况,即整体流程从初始状态开始演变,最终回到初始状态实现周期循环,以及流程内部某状态经过几个转移后回到原状态的内部循环;由于sfc中有向连线不能交叉或往上,针对这种情况,在对应的sfc功能块中使用跳转符号指定后级步。

进一步地,步骤(6)中,将时间自动机之间的同步通道转换成对应的sfc功能块之间的同步机制,具体包括如下操作:

在plc工程中创建通道信号发送功能块chan_p和通道信号接收功能模块chan_v,并声明布尔型的条件变量pok和vok,其中,条件变量pok为真表示通道信号发送功能块chan_p的操作原语执行完成,条件变量vok为真表示通道信号接收功能模块chan_v的操作原语执行完成;若时间自动机中两个状态之间的转移边上存在通道信号发送方,则在对应的sfc中的两个步之间的转移条件后面插入一个信号发送步和一个布尔值为pok的转移条件,并在信号发送步所连接的动作块中调用通道信号发送功能块chan_p;若时间自动机中两个状态之间的转移边上存在通道信号接收方,则在对应sfc功能块中的前级步所连接的动作块中调用通道信号接收功能模块chan_v,并将对应的转移条件合取布尔值vok。

进一步地,步骤(7)中,plc主程序实例化调用各个sfc功能块时各sfc功能块的执行顺序与系统所设置的时间自动机的实例化进程之间的优先级顺序一致。

总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:

(1)本发明所提供的基于时间自动机的plc程序设计方法,在构建每一个子系统的时间自动机模型并对时间自动机模型的实例化进程进行仿真和验证后,设计了详细、完整的由时间自动机模型到plc程序的转换规则,包括时间自动机变量声明的转换、状态和转移边的转换、同步的转换以及系统声明的转换,使得所设计的plc程序符合iec61131-3标准,因而能够实现复杂工业控制系统形式化模型到一个完整plc程序的转换。

(2)本发明所提供的基于时间自动机的plc程序设计方法,利用时间自动机对每一个子系统建模,以自动机图形方式描述复杂系统的控制算法,具有良好的结构,程序指令逻辑关系形象直观,与传统的plc程序设计方法相比,能过简化编程工作,缩短项目开发周期。

(3)本发明所提供的基于时间自动机的plc程序设计方法,利用时间自动机为每一个子系统建模后,会对时间自动机模型的实例化进程进行仿真和验证,从而对系统的应用逻辑进行形式化验证,解决了传统plc编程只能检测语法错误,不能检查程序逻辑错误的问题,保证系统模型的应用逻辑的正确性,避免程序中出现不可达序列、不安全序列、逻辑冲突、死锁等,与传统的plc编程方法相比具有更高的正确性和可靠度。

附图说明

图1为本发明实施例提供的基于时间自动机的plc程序设计方法流程图;

图2为本发明实施例提供的火车子系统的时间自动机模型;

图3为本发明实施例提供的大桥子系统的时间自动机模型;

图4为本发明实施例提供的铁路控制系统时间自动机模型的仿真;(a)为第一个火车子系统的时间自动机模型的仿真;(b)为第二个火车子系统的时间自动机模型的仿真;(c)为第三个火车子系统的时间自动机模型的仿真;(d)为大桥子系统的时间自动机模型的仿真;

图5为本发明实施例提供的铁路控制系统性质验证列表;

图6为本发明实施例提供的铁路控制系统性质验证结果;

图7为本发明实施例提供的火车子系统时间自动机模型转换成的sfc功能块示意图;

图8为本发明实施例提供的大桥子系统时间自动机模型转换成的sfc功能块示意图;

图9为本发明实施例提供的铁路控制系统plc程序实例化调用sfc功能块的示意图;(a)-(c)为plc程序实例化调用sfc功能块“train”的示意图;(d)为plc程序实例化调用sfc功能块“bridge”的示意图;

图10为本发明实施例提供的同步信号执行流程;(a)为通道信号发送功能块的操作原语执行流程;(b)为通道信号接收功能块的操作原语执行流程;

图11为本发明实施例提供的同步信号转换率流程;(a)为同步信号发送方的转换;(b)为同步信号接收方的转换。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

在对本发明的技术方案进行详细描述之前,首先对应用本发明设计其plc程序的铁路控制系统进行简单介绍。该铁路控制系统控制着三辆火车对一座大桥的使用权,大桥是一个关键的共享资源,任意时刻只能通过一辆火车。火车不能立刻停止或启动,停止和启动过程需要时间,因此火车靠近大桥时发送一个靠近信号给大桥。靠近信号发送完成后的10秒钟之内,如果收到大桥的停止信号,说明大桥正在被其他火车占用,该火车在接近大桥之前安全停下来,直到上一辆火车离开大桥后,大桥发出启动信号,火车重新启动,启动时间为7秒钟,然后穿过大桥,发出离开信号,穿过大桥的时间为3秒钟。靠近信号发送完成后的10秒钟之内,如果没有收到大桥的停止信号,说明大桥没有被占用,该火车无需停止,直接穿过大桥,发出离开信号。下面以该铁路控制系统的plc程序的设计为例,结合说明书附图,对本发明所提供的基于时间自动机的plc程序设计方法进行详细描述。

本发明所提供的基于时间自动的plc程序设计方法,如图1所示,包括如下步骤:

(1)根据工控系统的应用需求将其划分为多个子系统,并为每一个子系统构建一个时间自动机模型;

该铁路控制系统分为火车和大桥两个部分,即火车子系统和大桥子系统,分别创建时间自动机“train”和“bridge”;

分别为上述两个子系统构建一个时间自动机模型,包括如下步骤:

(11)确定各个子系统时间自动机的状态;

时间自动机“train”包括train_safe,train_appr,train_stop,train_start,train_cross,总共5个状态,如图2所示;train_safe是初始状态,表示火车还没有靠近大桥;train_appr表示火车已经靠近大桥,并且已经给大桥发送了靠近信号;train_stop表示火车在收到停止信号后,停了下来;train_start表示火车在收到启动信号后,重新启动;train_cross表示火车正在穿过大桥;

时间自动机“bridge”包括bridge_free,bridge_occ,bridge_add,bridge_stop,bridge_remove,bridge_go,总共6个状态,如图3所示;bridge_free是初始状态,表示大桥没有被占用;bridge_occ表示火车正在穿过大桥;大桥处在bridge_occ状态,如果这时有其他火车靠近,大桥会在bridge_add状态记录其id,并加入队列中,然后在bridge_stop状态发出停止信号,状态bridge_add和状态bridge_stop不允许时间流逝;bridge_remove表示火车穿过大桥后,将该火车的id从队列里移除,该状态不允许时间流逝;bridge_go表示大桥发出启动信号,该状态不允许时间流逝;

(12)添加转移边、约束条件、变量重置和更新;

在时间自动机“train”内,train_safe转移到train_appr;train_appr可以转移到train_stop,也可以转移到train_cross,由约束条件决定;train_stop转移到train_start;train_start转移到train_cross;train_cross转移到train_safe,如图2所示;其中’x=0’表示时钟变量x重置;

在时间自动机“bridge”内,bridge_free可以转移到bridge_occ,也可以转移到bridge_go,由约束条件决定;bridge_occ可以转移到bridge_add,也可以转移到bridge_remove;bridge_add转移到bridge_stop;bridge_stop转移到bridge_occ;bridge_remove转移到bridge_free;bridge_go转移到bridge_occ,如图3所示;其中‘enqueue(ee)’、’dequeue()’、’tail()’、’front()’都表示函数的调用;

第四步,添加同步通道;

图2所示时间自动机“train”内,train_safe转移到train_appr,火车发出靠近信号’appr!’,图3所示时间自动机“bridge”内,bridge_free转移到bridge_occ和bridge_occ转移到bridge_add,两条转移边上大桥可以接收靠近信号‘appr?’;时间自动机“train”内,train_cross转移到train_safe,火车发出离开信号’leave!’,时间自动机“bridge”内,bridge_occ转移到bridge_remove,大桥接收离开信号‘leave?’;时间自动机“bridge”内,bridge_stop转移到bridge_occ,大桥发出停止信号’stop!’,时间自动机“train”内,train_appr转移到train_stop,火车接收停止信号’stop?’;时间自动机“bridge”内,bridge_go转移到bridge_occ,大桥发出启动信号’go!’,时间自动机“train”内,train_stop转移到train_start,火车接收启动信号’go?’;

(2)将所构建的每一个时间自动机模型实例化生成相应的进程,然后对所生成的进程进行仿真和验证,以避免出现程序逻辑错误;

具体包括如下操作:在软件仿真器中,对铁路控制系统的时间自动机模型进行仿真,初步判断系统模型的正确性,如图4所示,”train_1”正在穿过大桥,“train_3”处在停止状态,“train_2”在靠近大桥后,“bridge”发出停止信号,“train_2”收到停止信号。

在验证器中利用bnf语法对系统模型进行形式化规范验证,系统性质列表如图5所示,其中,a[]notdeadlock,安全性验证,表示系统不会发生死锁;e&lt;&gt;train_1.train_cross==1,可达性验证,表示”train_1”火车正在穿过大桥;e&lt;&gt;train_2.train_cross==1,可达性验证,表示”train_2”火车正在穿过大桥;e&lt;&gt;train_3.train_cross==1,可达性验证,表示”train_3”火车正在穿过大桥;a[]train_1.train_cross+train_2.train_cross+train_3.train_cross&lt;=1,安全性验证,表示”train_1”、”train_2”、”train_3”三辆火车在任何时刻只能允许一辆火车穿过大桥,即不允许两辆火车或者三辆火车同时穿过大桥;e<>train_1.train_cross&&train_2.train_stop,可达性验证,表示存在”train_1”正在穿过大桥,”train_2”处于停止状态的情况;

对应的验证结果如图6所示;

(3)将每一个时间自动机转换成其对应的顺序功能图(sfc)语言功能块,得到多个sfc功能块以及包含所述多个sfc功能块的plc工程;

对于时间自动机“train”,创建sfc功能块“train”,如图7所示;对于时间自动机“bridge”,创建sfc功能块“bridge”,如图8所示;

(4)将时间自动机的全局变量声明转换成plc工程的全局变量,将时间自动机局部变量声明转换成对应的sfc功能块的本地变量,并将时间自动机的参数转换成对应的sfc功能块的输入变量,从而完成时间自动机变量声明的转换;

系统模型的全局声明转换成plc工程的全局变量,时间自动机“train”的局部声明转换成sfc功能块“train”的本地变量,时间自动机“bridge”没有局部声明,时间自动机“train”的参数’id’转换成sfc功能块“train”的输入变量’id’,时间自动机“bridge”没有参数。时间自动机“train”的时钟变量’x’,在sfc功能块“train”中声明变量’x’的类型调用ton定时器功能块,用’x.et’代替时钟变量‘x’;

时间自动机中定义的函数,有输入参数且使用外部变量声明的函数翻译为plc工程中st语言编程的功能块,本实施例中定义的函数’enqueue’

翻译为plc工程中st功能块’enqueue’;无输入参数的函数翻译为sfc功能块的动作,函数’dequeue’、’front’、’tail’翻译为st动作’dequeue’、’front’、’tail’;

(5)将时间自动机的状态转换成对应的sfc功能块的步,将时间自动机转移边上的约束条件转换成对应的sfc功能块的转移条件,并将时间自动机转移边上的变量重置和更新转换成对应的sfc功能块的动作块,从而完成时间自动机状态和转移边的转换;

对于时间自动机“train”的状态train_safe、train_appr、train_stop、train_start、train_cross,在sfc功能块“train”中创建5个对应的步train_safe、train_appr、train_stop、train_start、train_cross,初始状态train_safe对应初始步train_safe,如图7所示;对于时间自动机“bridge”的状态bridge_free、bridge_occ、bridge_add、bridge_stop、bridge_remove、bridge_go,在sfc功能块“bridge”中创建6个对应的步bridge_free、bridge_occ、bridge_add、bridge_stop、bridge_remove、bridge_go,初始状态bridge_free对应初始步bridge_free,如图8所示;

时间自动机“train”转移边上面的约束条件转换成对应sfc功能块“train”内部的转移条件,如图7所示;时间自动机“bridge”转移边上面的约束条件转换成对应sfc功能块“bridge”内部的转移条件,如图8所示;图3时间自动机“bridge”的状态bridge_add、bridge_stop、bridge_remove、bridge_go都是约束状态,不允许时间流逝,sfc功能块“bridge”中,步bridge_add、bridge_stop、bridge_remove、bridge_go的步消逝时间为0,分别在步后面的转移条件里合取“bridge_add.t&gt;t#0s”、“bridge_stop.t&gt;t#0s”、“bridge_remove.t&gt;t#0s”、“bridge_go.t&gt;t#0s”,如图8所示;

图2时间自动机“train”状态train_appr和状态train_start汇合到状态train_cross,在sfc功能块“train”中对应转移条件后面插入辅助步train_step0,转移条件为布尔值1,辅助步train_step1,转移条件为布尔值1,如图7所示;图3时间自动机“bridge”状态bridge_go和状态bridge_free汇合到状态bridge_occ,在sfc功能块“bridge”中对应转移条件后面插入辅助步bridge_step0,转移条件为布尔值1,辅助步bridge_step1,转移条件为布尔值1,如图8所示;

时间自动机转移边上面的时钟变量重置表达式、数值变量赋值表达式以及函数翻译成sfc功能块对应转移边后级步连接的动作块;图2中时钟变量重置表达式‘x=0’翻译为动作块‘x(in:=0);x(in:=1)’,如图7所示;

时间自动机“train”中存在状态演变流程循环,即图2中状态train_cross转移到初始状态train_safe,sfc中有向连线不能交叉或往上,在sfc功能块“train”中对应转移边使用跳转符号指定后级步train_safe,如图7所示;图3时间自动机“bridge”中存在状态bridge_remove转移到初始状态bridge_free,在sfc功能块“bridge”中对应转移边使用跳转符号指定后级步bridge_free,如图8所示;图3时间自动机“bridge”中存在内部循环,状态bridge_stop转移到状态bridge_occ,在sfc功能块“bridge”中对应转移边使用跳转符号指定后级步bridge_occ,如图8所示;

(6)将时间自动机之间的同步通道转换成对应的sfc功能块之间的同步机制,从而完成时间自动机同步的转换;

在plc工程中创建通道信号发送功能块chan_p表示“!”,通道信号接收功能块chan_v表示“?”,声明全局变量gc和gm以及条件变量pok和vok,chan_p操作原语和chan_v操作原语的流程分别如图10(a)和图10(b)所示;其中,全局变量gc表示通道被引用,全局变量gm表示接收响应,条件变量pok为真表示通道信号发送功能块chan_p的操作原语执行完成,条件变量vok为真表示通道信号接收功能模块chan_v的操作原语执行完成;若时间自动机中两个状态之间的转移边上存在通道信号发送方,则在对应的sfc中的两个步之间的转移条件后面插入一个信号发送步和一个布尔值为pok的转移条件,并在信号发送步所连接的动作块中调用通道信号发送功能块chan_p,如图11(a)所示;若时间自动机中两个状态之间的转移边上存在通道信号接收方,则在对应sfc功能块中的前级步所连接的动作块中调用通道信号接收功能模块chan_v,并将对应的转移条件合取布尔值vok,如图11(b)所示;

图2时间自动机“train”内存在同步发送信号’appr!’和’leave!’,在sfc功能块“train”中对应转移条件后面分别插入信号发送步send_appr和转移appr_p.pok,信号发送步send_leave和转移条件leave_p.pok,步send_appr连接的动作块中appr_p实例化调用功能块chan_p,步send_leave连接的动作块中leave_p实例化调用功能块chan_p,如图7所示;图2时间自动机“train”内存在同步接收信号’stop?’和’go?’,在sfc功能块“train”中对应转移条件前级步train_appr连接的动作块中stop_v实例化调用功能块chan_v,转移条件合取stop_v.vok,前级步train_stop连接的动作中go_v实例化调用功能块chan_v,转移条件合取go_v.vok,如图7所示;

图3时间自动机“bridge”中存在同步发送信号’stop!’和’go!’,在sfc功能块“bridge”中对应转移条件后面分别插入信号发送步send_stop和转移stop_p.pok,信号发送步send_go和转移条件go_p.pok,步send_stop连接的动作块中stop_p实例化调用功能块chan_p,步send_go连接的动作块中go_p实例化调用功能块chan_p,如图8所示;图3时间自动机“bridge”中存在同步接收信号’appr?’和’leave?’,在sfc功能块“bridge”中对应转移条件前级步bridge_free连接的动作块中appr_v实例化调用功能块chan_v,转移条件合取appr_v.vok,前级步bridge_occ连接的动作中appr_v实例化调用功能块chan_v,leave_v实例化调用功能块chan_v,转移条件分别合取appr_v.vok和leave_v.vok,如图8所示;

(7)将时间自动机的实例化进程转换成plc主程序实例化调用各个对应的sfc功能块,从而完成时间自动机系统声明的转换;

铁路控制系统实例化,”train_1=train(1);train_2=train(2);train_3=train(3);bridge_0=bridge();systemtrain_1,train_2,train_3,bridge_0;”;plc主程序中,功能块train_1、train_2、train_3实例化调用sfc功能块“train”,功能块bridge_0实例化调用sfc功能块“bridge”,如图9所示;

系统的时间自动机模型用符号“&lt;”设置进程之间的优先级,在plc工程中对应地设置功能块执行顺序优先级。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1