PLC
直播中

王晾其

7年用户 1001经验值
私信 关注

怎样去设计一个梯形图可视化编辑与PLC程序自动生成系统

怎样去设计一个梯形图可视化编辑与PLC程序自动生成系统?
如何去实现PLC梯形图自动生成语句的算法?

回帖(1)

金鼎

2021-9-24 14:30:28
  引言
  可编程控制器PLC是一种专门为工业自动控制而开发的通用自动控制装置。它具有可靠性高、编程简单、使用方便、功能完善、通用性好等特点,并具有在线修改功能,给控制系统带来了很好的柔性。它可以灵活地以不同的组态来适应不同控制对象、控制规模和控制功能的要求,是实现“机电一体化”较理想的控制设备。
  PLC的主要使用对象是广大工程技术人员。为了适应他们的传统习惯,通常不采用微机的编程语言,而采用面向控制过程、面向问题的“自然语言”编程。这些编程语言有梯形图、语句表、控制系统流程图、逻辑方程式或布尔代数式等,其中梯形图以其形象、直观、简单易用、与电气控制原理图相呼应、易于掌握等特点而成为PLC的主要编程语言。但是,梯形图不能被PLC所识别,无法在PLC中直接运行,把梯形图通
  过人工编译的方式转换为语句表又较为复杂,这就限制了它的进一步发展和应用。如果能利用先进的计算机技术实现可视化、规范化的梯形图设计以及PLC指令序列的自动生成,无疑将极大地提高开发效率。我们在充分分析梯形图设计规则和语句表编程规则的基础上,设计了一个梯形图可视化编辑与PLC程序自动生成系统。该系统将梯形图的绘制、识别以及编译过程转移到计算机上,并自动生成PLC可以识别的指令序列。
  1 梯形图与语句表
  1.1 梯形图
  梯形图起源于继电器逻辑和执行线路,它用不同的图符来表示不同的指令,用串、并联等概念组织图符的顺序位置来表述逻辑。梯形图的设计必须遵循以下规则:
  ①触点应画在水平线上,不能画在垂直分支上,且应遵循自左至右、自上而下的绘制原则;
  ②不包含触点的分支应放在垂直方向,不可放在水平位置以便于识别触点的组合和对输出线圈的控制路径;
  ③在有几个串联回路相并联时应将触点最多的那个串联回路放在梯形图的最上面,而在有几个并联回路相串联时应将触点最多的并联回路放在梯形图的最左面;
  ④不能将触点画在线圈的右边,而只能画在线圈的左边。
  1.2 语句表
  语句表是若干指令的集合,类似于汇编语言程序,易于PLC识别。每条指令由指令字符串和操作数构成。指令字符串是指令的助记符。操作数是该指令所作用的继电器号、通道号、定时/计数器设定值或某些常数。语句表编程有键入方便、编程灵活的优点,但不如梯形图形象、直观。
  2 系统设计
  2.1 系统的窗体设计
  整个系统由6个主要窗体构成。
  ① 主窗体:显示系统主菜单、工具栏,绘制梯形图所需的基本图符按钮。
  ② 绘图窗体:用于梯形图的绘制。为了使所绘制的梯形图更加整洁、美观,我们将系统的用户编辑区分隔成若干正方形编辑格,用点标识。具体绘图时,系统还将根据所绘图符的特点调节所占区域的大小。
  ③ 代码生成窗体:显示由所绘梯形图编译生成的PLC指令代码。
  ④ 参数输入窗体:为绘制的每个图符设置参数。
  ⑤ 出错信息窗体:报告梯形图编译成PLC指令时的出错信息。
  ⑥ 图符信息查看窗口:查看与每个图符对应的指令及其参数。
  2.2 梯形图图符函数库和PLC指令索引表的建立本系统是基于OmronCMP1A可编程控制器开发的,该型号的可编程控制器共有88条指令(基本指令15条,功能指令73条),其中多数指令有图符与其对应。为节省存贮空间,我们为每个图符的绘制定义了相应的自定义函数,形成一个梯形图图符函数库。
  为便于编辑及编译功能的实现,我们以基本指令优先,并考虑指令的使用频度建立了一张PLC指令索引表。索引表包含以下信息:
  2.3 系统的主要数据结构
  通过对梯形图及其设计规则的分析,我们发现,用梯形图编制程序的过程实质上是一个用梯形图图符来表示操作指令、用图符的串并联及位置顺序来表示操作指令之间逻辑关系的过程。由此,一个梯形图可以看作是一个由梯形图图符和连接符组合而成的有向图,其中的梯形图图符可抽象为有向图的顶点,连接符可抽象为有向图的弧。为了在程序设计中更合理地描述梯形图,以便于下一步PLC指令的自动生成,我们综合考虑了提高程序执行效率、节省存储空间、便于操作等因素,而采用十字链表数据结构来存储梯形图。
  2.3.1 有向图
  图是一种数据结构,它的形式化定义为GraphE(V,R)
  其中:
  VE{x|x∈dataobject}
  RE{VR}
  VRE{《x,y》|P(x,y)%(x,y∈V)}
  图中的数据元素通常称作顶点(vertex),V是顶点的有穷非空集合;VR是两个顶点之间关系的集合。若《x,y》∈VR,则《x,y》表示从x到y的一条弧(arc),且称x为弧尾(tail),称y为弧头(head),此时的图称为有向图(diagraph)。在有向图中,以顶点V为头的弧的数目称为顶点V的入度(indegree),记为ID(V);以顶点V为尾的弧的数目称为顶点V的出度(outdegree),记为OD(V)。
  2.3.2 主要数据结构
  ① 图符(顶点)结构:保存梯形图中各个图符的基本信息。
  type //图符(顶点)结构
  nodeptrE%node;
  nodeEpackedrecord
  inst:string; //与该图符对应的指令
  x,y:integer; //图符所在区域的左上角坐标
  index:integer; //图符的索引号,它是图符的唯一标识
  par1,par2,par3:string;//3个参数(梯形图的图符最多含3个操作数)
  indegree:integer; //入度
  outdegree:integer; //出度
  firstin:arclink; //指向以该顶点(图符)为弧头的第一个弧结点
  firstout:arclink; //指向以该顶点(图符)为弧尾的第一个弧结点
  LeftIn:integer; //左汇合数,初值为0
  RightOut:integer; //右分支数,初值为0
  end;
  ② 连接符(弧)结构:描述图符间的串并联关系。
  type //连接符(弧)结构
  arclinkE%arctype;
  arctypeEpackedrecord
  tailvex:nodeptr; //指向弧尾顶点(图符)在图中的位置
  headvex:nodeptr; //指向弧头顶点(图符)在图中的位置
  hlink:arclink; //指向弧头相同的下一条弧
  tlink:arclink; //指向弧尾相同的下一条弧
  end;
  2.4 系统编辑功能的实现
  PLC梯形图的设计过程实质上是有向图的生成过程,也是对应的十字链表的建立过程。在设计中,我们注意到母线上的有效引出点实际上可看成有向图中的一个顶点,其入度(ID)为0,出度(OD)为1。为了与其它顶点相区别,令其对应结点的索引号(index)为0。
  为便于下一步的PLC指令生成,我们规定:
  ① 每个图符结点创建时都按其特点初始化其入度和出度,如END、ILC、JME等指令的ID(V)E0,OD(V)E0;OUT及部分功能指令的ID(V)E1,OD(V)E0。
  ② 在梯形图设计过程中,若某一图符增加一个左汇合,则相应地其入度增1;若某一图符减少一个左汇合,则相应地其入度减1;若某一图符增加一个右分支,则相应地其出度增1;若某一图符减少一个右分支,则相应地其出度减1。
  ③ 若某一图符顶点的出度大于等于2,则在其后引入一个虚顶点(以便今后进行并联及分支处理),并令其索引号(index)为-1。
  2.5 梯形图到语句表的转换
  为了实现梯形图到语句表的自动转换,在设计中必须正确处理多路并联和有多个输出分支这两个核心问题。为此,在设计前我们对大量电气系统的梯形图进行了分析,并注意到如下事实:在多种并联的情况下,母线上的有效引出点可等效为同一点;若梯形图中存在多路并联的情况,则其对应的有向图中必存在入度(ID)大于1的顶点;若梯形图中存在有输出分支或并联分支(且分支点均不在母线上),则其对应的有向
  图中必存在出度(OD)大于1的顶点。
  梯形图到语句表的转换算法顺序如下:
  ① 根据自左至右、自上而下的原则扫描梯形图,并检验各图符参数的正确性和串并联关系的合法性;
  ② 从左至右、从上到下扫描梯形图,寻找入度为零的顶点;
  ③ 若当前顶点的出度为零,则转⑧执行;若当前顶点的出度不为零,则将其出度减1、RightOut标志加1、当前顶点的直接后继顶点的入度减1、LeftIn标志加1;
  ④ 若当前顶点为多分支点,且并联点队列为空,图符队列非空,则图符队列中的所有元素出列,按规则生成代码,并删除处理过的图符顶点及以其为弧尾的弧结点;
  ⑤ 若当前顶点为虚顶点则进并联点队列及图符队列,若当前顶点为母线上的点则进并联点队列,若当前顶点为图符顶点,则进图符队列;
  ⑥ 若当前顶点的直接后继顶点的LeftIn标志值大于等于2,则并联点队列和图符队列中的所有元素出列,按规则生成相应代码,并删除处理过的图符顶点及以其为弧尾的弧结点。对于虚顶点,若其出度为零,则删除它及所有以其为弧尾的弧结点,否则,令虚顶点的RightOut标志减1;
  ⑦ 若当前顶点的直接后继顶点的入度为-1,且对应图符的指令助记符为END则图符队列和并联点队列中的所有元素出列,按规则生成相应代码,并删除所有的顶点及弧结点,程序结束,否则,当前顶点进入图符队列,转②继续执行;⑧ 若当前顶点的出度为零则判断其RightOut标志是否大于零,若是则转②,否则,当前顶点进入图符队列,转②继续执行。
  3 实验结果
  系统设计完成后对其进行测试,图1和图2分别为复杂的串并联关系和多个输出情况下的PLC梯形图及自动生成的代码。实验表明,本系统能正确处理串并联关系及有多个输出等复杂的梯形图,自动生成的代码准确无误。
  4 结束语
  可编程控制器应用程序的编写是可编程控制器应用中的核心任务。我们设计的系统,可根据用户设计的电气结构直接绘制PLC梯形图并自动生成语句表,实现软件设计的自动化,这将大大推动PLC在电气、轻工、机械工程中的应用。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分