工业组态软件直接地址变量重叠检查的设计与实现

来源 :电子元器件应用 | 被引量 : 0次 | 上传用户:yx2207
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:工业组态软件中(DCS、PLC)涉及到大量的直接地址变量应用,这些变量是由用户定义到指定的地址,正是这种灵活的定义变量方式可能导致变量共用一块内存。这种情况有的属于用户定义,操作内存的值,另一种情况是用户无意中定义的。文中通过研究分析这些直接地址变量在内存分配中的特点,探寻一种算法结构,在允许的时间和空间上查找到重叠的变量。
  关键词:工业组态软件;直接地址变量;DCS;PLC;重叠检查
  Research an implement of checking the directly address
  variables overlap in configuration softeware for industy
  YU Zhi-Wen
  (Beijing HollySys Co.,Ltd, Beijing 100176)
  Abstract: There are many directly address variables and they are mostly used in industrial configuration software.These variables are defined by the user for the specified address,the way which is the flexible definition of variables may result in variables in memory using the same time . This happens to have deliberately or unintentionally.We research and analysis these directly address variables to find an algorithm which can solve our problems with less time and space.
  Keywords: configuration software for industry;directly address variable;DCS;PLC;overlap checking
  工业组态软件,也称组态监控软件系统软件,是指用于数据采集与过程控制的专用软件。组态软件的应用领域很广,可以应用于电力系统、给水系统、石油、化工等领域的数据采集与监视控制以及过程控制等诸多领域。
  目前常用的工业组态软件是DCS(分布式控制系统,Distributed Control System)、PLC(可编程逻辑控制器,Programmable Logic Controller)等。这些组态软件都支持用户在某一内存或者特殊内存区自定义变量,即直接地址变量,直接地址变量和用户没有指定具体地址的变量在内存分配上是有区别的。直接地址变量的定义有可能会导致多个变量占用同一块内存。
  正是由于这种灵活的定义变量方式导致了以上问题的出现。本文将研究这些直接地址变量的特点并且提供一种算法来检查工业组态软件中这些直接地址变量。造成变量重叠的原因有以下两种:第一是用户希望通过这种内存重叠的变量操作达到想要的内存数据或者修改对应的内存数据;第二则是用户在无意中定义的多个直接地址变量操作了同一块内存,导致内存中的数据被修改(此处的修改也许是用户不想发生的)。第二种情况是需要提示给用户,否则由这些变量参与的组态逻辑下装到各控制器中后,周期运行时,会导致组态逻辑运算出错、控制器死循环等一系列危险情况。
  本文对直接地址变量重叠检查的研究已成功应用到了实际的组态软件中(国内著名的自动化企业PLC控制软件)。
  1 分析与设计
  本节将首先通过对直接地址变量在内存中分布特点进行研究与分析,然后设计一种算法,检查某一内存区域的直接地址变量。
  1.1 重叠变量的分析
  在一个组态软件中,会划分出不同的模块,这些直接地址变量会定义到不同的模块中,假定各个模块已经将这些直接地址变量收集,并且按照各个变量的偏移(变量相对于某块内存的位置)放入一个数组中,数组中的成员是列表形式的,这样可以将同一个偏移处的变量连接到一个数组下标中,而同一个数组下标处的变量,我们可根据各个变量的大小,按照升序的方法存入列表。如图1所示就是放入数组的两个直接地址变量。
  见图1可知变量a和b的偏移都为2,a变量大小为1个字节,b变量大小为2字节,按照变量大小升序放入下标为2的地址处。
  (1)直接地址变量的简介
  这里我们简单介绍一下直接地址变量。第一种直接地址变量称为位变量,如a :%MX0.1,类型为 BOOL,第二种直接地址变量称为非位变量,例如 b:%MD4。由于组态软件的不同,直接地址变量定义所在的内存区也可能不同,也有可能是I、Q等内存区。D代表DWORD类型,组态软件中还支持B(BYTE)、W(WORD)等类型。
  接下来我们通过图2的数据结构来表示直接地址变量在某快内存中重叠的现象。首先定义有如下的变量。
  a:%MX0.2,类型为 BOOL,位变量,大小为1位;
  b:%MX0.2,类型为BOOL,位变量,大小为1位。
  c:%MD0,类型为BYTE,非位变量,大小为1字节;
  d:%MD0,类型为 DWORD,非位变量,大小为4字节;
  e:%MW2,类型为 WORD,非位变量,大小为2字节;
  f:%MD4,类型为DWORD,非位变量,大小为4字节。
  上图表明变量a、b、c、d、e、f在M这块内存中存放的数据结构,利用这种数据结构存放变量可以清晰的查找同偏移处的所有变量,而且升序的存放方法为后续的地址重叠查找带来很大的方便。
  (2)内存中直接地址变量分析   由图2可以看出,位变量a、b,大小为1位,非位变量c、d、e、f,大小分别为1字节,4字节,2字节,4字节。那么我们可以看出哪些变量有重叠,哪些变量没有重叠。下面具体分析实例中的这些变量如何重叠,从而为重叠检查做准备。
  变量a、b是位变量,按照之前的数据结构存放方式,位变量存放在数组偏移的最前端,其他的非位变量存放在相同偏移的后端(按照变量大小升序方式),变量a、b、c、d偏移都是相对于M区开始的0偏移的地址,而e是相对偏移为2的地址,f偏移为4。如果多个变量在同一个偏移处,那么这些变量本身是地址重叠的。例如c、d变量是重叠。此处我们要将位变量特殊处理,因为位变量在存放和判断时要根据所处的位来标识。在图2中,位变量 a、b是在偏移0字节中的2位处重叠,而a、b、c、d也是重叠的。在某偏移处既有位变量也有非位变量时,非位变量本身全部重叠,而位变量也同这些非位变量全部重叠。如果位变量处于不同的位,那么位变量本身就不重叠了,但这些位变量和处于此偏移处的非位变量仍然重叠。这里很容易就可以找到同一个偏移处的非位变量,因为他们都处于此偏移处。如果发现多个位变量处于同一位,那么这些处于同一位的位变量本身也重叠,并不和其他位变量重叠,但是和处于此偏移处的其他非位变量重叠。接下来我们再根据图3的实例来解释以上查找重叠变量的方法。
  如上图3所示,变量a、b、c为位变量,其中a,b处于同一位,而c处于其他位,这些变量同非位变量d所处的字节偏移相同,我们根据上面将的重叠分析可以得知a、b、d三个变量在a变量的地址处重叠,而c、d变量在c变量的位置重叠。
  1.2 检查重叠变量的设计
  经过上面对重叠的位变量以及非位变量的分析,我们设计一种算法对处于某一偏移处的所有变量查找是否重叠。此时需要注意,在查找某一偏移处的变量时,关注此偏移前的所有偏移处是否有变量和当前变量重叠。如在图2中,查找偏移为2的地址处的变量时需要关注偏移为0、1时,是否有变量和偏移为2的变量重叠。所以得到结论,在查找变量重叠时,不仅要查找此变量所处的偏移的重叠变量,还要查找此变量之前的所有变量是否和此变量重叠。如果我们在查找某个变量时同时在查找这个变量之前的其他所有变量,那么在变量个数增加、数组下标个数增加(在不同的组态软件中,这些支持直接地址变量的内存都达到几K字节左右的空间)时,显然再去查找这些变量在空间和时间上的花费将是巨大的。所以我们需要在此想法的基础上做改进,避免在变量个数增加的情况下,反复查找已经查找过的变量并进行地址比对。
  前面研究了重叠地址变量的特点,那么为了避免对相同变量的反复查找比较,我们需要将之前的算法改进。当我们在逐个查找这些变量的时候,希望只向前查找,而不用返回从头查找已经查过的变量是否和当前变量重叠。因此我们需要借助一个链表,要将与当前查的变量重叠的其他变量全部查找出来,放入一个链表,这里只需要放入某一偏移处第一个变量就可以,因为此偏移处的其他变量必然已经和当前变量重叠。当查到后续的变量时,我们可以检查之前的链表,利用链表查找只是简单的常数级,时间和空间复杂度很小。每次查找当前变量和其他变量重叠时,需将当前变量偏移后到当前变量大小结束这段内存中的所有变量进行检查。如果重叠则加入链表中,这样可以保证在查找到后续的变量时,只需检查是否被加入过链表就可以判断此变量是否重叠,而不用重头检查后续变量之前所有变量。我们用图4解释上面的算法核心。
  第一步:检查偏移为0时,我们将a、b加入重叠列表,此时表明重叠地址为0。
  第二步:检查a变量发现a变量范围内没有其他的变量,之后检查b变量。
  第三步:此时我们发现c变量和b变量重叠,将c、b加入列表,发现此时重叠地址为2。
  第四步:同时在检查b的时候发现b的范围内有d变量和b重叠,将d、b加入列表,发现此时重叠的地址为3。
  第五步:之后检查偏移为2的变量,只有c,查找链表,发现c已经加入到链表中。无需考虑2偏移处的变量。
  第六步:接下来检查c变量范围内的其他偏移处的变量,此时有d变量在其范围内,所以应将d、c加入列表,但是查找链表发现d变量已经加入过链表,所以查找到d加入的位置,将c加入之前d加入过的位置,表明d、b、c变量重叠。
  以上为算法核心,在查找的过程中我们要注意位变量,查找重叠时,某一个偏移处存在位变量,那么我们要对各个位查找,避免将位变量的重叠检查漏掉。
  2 总结
  工业组态软件中,尤其是PLC控制软件,会有大量的直接地址变量应用。有效的直接地址变量重叠检查会避免一些不必要问题的发生。我们将这些直接地址变量按照各自在内存中的偏移,以一定的结构排序,应用本文介绍的方法可以快速查找到重叠的变量。本文所述的研究成果已成功应用于国内著名自动化企业(和利时)新一代的PLC_AT组态软件。图5为和利时公司PLC_AT组态软件应用本文研究成果的实例。
  参考文献
  [1] 龚运新. 工业组态软件实用技术[M]. 北京: 清华大学出版社,2005.
  [2] 王常力. 分布式控制系统(DCS)设计与应用实例[M].北京: 电子工业出版社,2010.
  [3] 覃贵礼. 组态软件控制技术[M]. 第3版. 北京: 北京理工大学出版社,2007.
  [4] Chotai A,YOUNG P.C.,Behzadi M.A.,Self-adaptive design of a nonlinear temperature control system.IEE Proceedings of Control Theory and Applications,2002,1(138):41-49.
  [5] Yamamoto T.,Shah S.L.,Design and experimental evaluation of a multivariable self-tuning PID controller.IEE Proceedings of Control Theory and Applications,2004,5(151):645-652.
  [6] Haritsa J.R.,Ramamritham K.,Real-Time Databases in the New Millenium.[J].Real-Time Systems,2008.
  [7 ] 王永华. 现代电气控制及PLC应用技术 [M]. 北京: 北京航天航空大学出版社,2008.
  [8] 廖常初. S7-300/400 PLC应用技术 [M]. 第2版.北京: 机械工业出版社,2008.
  作者简介
  于志文(1984-),男。山西省朔州市,硕士研究生。主要研究方向为自动化控制技术。
其他文献
介绍了食用菌干燥方式,分析了温室专用热风炉在食用茵干燥过程中的技术要求、特点及应用前景。
1病例资料患者,女性,69岁,7年前无明显诱因运动后出现反复胸闷,每次持续约2~3 min,休息后可缓解。无胸痛,无濒死感,无大汗淋漓、心悸、呼吸困难。患者3年前于当地医院行冠状
焉耆县是巴州的粮食生产大县,实施粮食高产机械化示范基地建设,对提高全县粮食生产科技含量,增加种粮农户的经济收益,具有积极的推动作用。焉耆县结合粮食种植实际,在全县建立多个