资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
嵌入式系统硬件平台的软件嵌入式系统硬件平台的软件 PLC 实现方法实现方法嵌入式软 PLC 与嵌入式系统共享一个 CPU,PLC 和嵌入式系统之间没有多余的导线 连接,增加了系统的可靠性,易于实现许多高级功能。PLC 中的信息也能通过嵌入式系统 的显示屏显示,通过嵌入式系统的编辑键可方便地对 PLC 进行编辑操作。11 嵌入式软嵌入式软 PLC 的硬件结构的硬件结构外部输入的开关量经过光电隔离后连接到 FPGA 的 IO 口,通过 FPGA 地址译码, FPGA 通过数据地址总线与 CPU 相连。这样 CPU 就可以通过数据地址总线获得和设置输 入量的工作状态,硬件原理框图如图 1 所示。12 嵌入式软 PLC 的软件结构嵌入式软 PLC 程序包括两类:一类是编辑状态,实现 PLC 程序的输入和编译功能; 另一类是面向生产过程的应用程序。系统软件结构由 4 部分组成,分别是编辑模块、编译 模块、执行模块和监控模块。软件 PlC 系统模块间的数据流程如图 2 所示。2 系统关键组成部分的设计与实现21 梯形图编辑器QtEmbedded 是著名的 Qt 库开发商 Trolltech 推出的面向嵌入式系统的 Qt 版本。 Qt/Embedded 具有可移植性强和支持跨平台开发等优点。本系统采用 Qt 编写界面,梯形 图编辑器的界面如图 3 所示。211 梯形图的数据结构设计梯形图编辑具有方便、逻辑直观的特点,梯形图编辑器借助于梯形图的内部数据结构 来实现显示、插入、删除、代码转化等功能。PLC 语言中,各种元素包括单个节点(如常开触点、常闭触点等)和逻辑块(如与逻辑块、 或逻辑块),它们都含有相同的操作,如插入、删除、绘图等。可以把组成梯级的各个逻辑 块看成组成梯级的各个部分,把组成逻辑块的子逻辑块和单个节点看成是组成逻辑块的各 个部分,符合“部分一整体”的层次结构。可以采用面向对象的设计思想,使用 composite 模式递归地创建树状结构。使用组合结构,能够把相同的操作应用在组合和个别的对象上。 大多数情况下,可以忽略对象组合和个别对象之间的差别,简化程序代码,增强了软件的 可维护性。采用 composite 模式的类图1如图 4 所示。图中:LadderElement 是一个抽象类,为组合对象的接口。代表梯形图语言的任何一 个图形元素,它既可以代表元件又可以代表逻辑块,在适当的情况下可以实现所有类共同 的缺省行为,如绘图和代码转换等;LadderCell 为所有元件类(如常开触点、常闭触点、输 出、置位、复位)的基类;LadderBlock 为所有逻辑块(如与逻辑块类、或逻辑块类等)的基 类。图 5 为一个梯级和它对应的数据结构,OrBlock 为或逻辑块类的对象,AndBlock 为与 逻辑块类的对象,Rung 为梯级类的对象。此外,为了能够方便地进行绘图和编辑,引入了一个空元件类。它的作用是梯形图中 的水平连接线,实现方法是继承 LadderCell 类,重新实现成员函数 Draw()来画一条水平 的线段。212 编辑功能的设计与实现将屏幕分割成一定数目的小的区域,并创建含有相同数目的二维数组。当绘制元件时, 将元件、元件所在的逻辑块和元件所在的梯级指针保存到数组中,通过光标在屏幕上的坐 标可以获得二维数组的下标,从而可以获得光标所在的元件、逻辑块和梯级在内存中与之 相对应的对象。梯形图的编辑通过改变其在内存中的数据结构来实现,在数据结构被改变后,重新绘 图。对梯形图的编辑包括:插入元件、插入分支、插入梯级、删除元件和删除梯级等。篇 幅所限只作简要介绍。删除元件:删除 LadderBlock 中的一个元件 LadderCell(A)后,如果 LadderBlock 中 只剩下一个 LadderCell(B)时,LadderCell(B)取代 LadderBlock 的位置,插入到 LadderBlock 的父 LadderBlock 中;如果 LadderBlock 中只剩下一个 LadderBlock(B),则 将 LadderBlock(B)的所有 LadderElement 插入到 LadderBlock 的父 LadderBlock 中。图 5 中的梯级删除元件 X004 后梯形图和其数据结构变为图 6 所示的情况。插入分支:通过光标在屏幕上两次选择分支的起始和结束位置,这两个位置必须属于 同一个 AndBlock(A)。起始和结束位置选择后,将两个位置间的 LadderElement 作为分支 构成一个 AndBlock(B)并计算出 AndBlock(B)所占的列数 n,然后新建一个表示插入分支的 AndBlock(C),AndBlock(C)中插入 n 个空元件。建一个 OrBlock 并将 AndBlock(B)和 AndBlock(C)插入到 OrBlock 中。OrBlock 即表示插入分支后的或逻辑块。OrBlock 取代两 次选中之间的元素在它们的父逻辑块中的位置,然后根据修改后的数据结构画图得到插入 分支后的梯形图。图 7 为在 M001 和 X006 插入分支前后梯形图的变化。22 指令表编译器的设计与实现实现对 PLC 编程语言的高效、可靠的编译,是研制开发嵌入式 PLC 系统的一项关键 性任务。传统的开发方法是用高级语言自行开发专用的 PLC 指令编译器,需要对每个程序 字和程序规则编写识别和相应的处理程序,工作量大、开发周期长,容易产生疏漏,可维 护性很差。为了提高软件的开发效率,保证软件质量,增强软件的可维护性,采用通用编 译工具 Lex&Yacc:开发 PLC 指令编译器。221Lex&Yacc 简介Lex&Yacc 是美国贝尔实验室用 C 语言研制的词法分析程序和语法分析程序的自动生 成工具,是目前使用最广泛的编译软件之一。Lex 是词法分析程序生成器,Yacc是语法分 析程序生成器。它们可以根据用户提供的词法、语法规范文件,自动转化为多种高级语言源代码,如 C 或 C+等。2222 编译器总体结构所谓“遍”,是对源程序或其等价的中间语言程序从头到尾扫描并完成规定任务的过程2。 本系统的编译过程包含三遍,分别进行词法分析、语法分析和代码转换。223 词法分析器设计指令表源程序可以简单地被看成一个多行的字符串。词法分析器从上到下、从左到右 逐个字符地对源程序进行扫描,产生一个个单词符号,把字符串的源程序改造成为单词符 号串的中间程序,用于随后的语法分析。本系统的词法分析器有两种工作状态:一是从头到尾对源程序进行扫描,检查出所有 的词法错误;二是当没有词法错误时,从头到尾对源程序进行扫描,将识别出的单词符号 输入给语法器。224 语法分析器设计(1) PLC 指令表语言的语法描述分析 PLC 指令程序结构,提取隐藏在指令代码中的结构信息,这种信息中往往会有操 作指令被隐含地表达出来。例如:指令 ORORB 与梯形图中的并联结构对应,而 ANDANB 则与梯形图中的串联结构对应。部分 PLC 指令语句的文法用巴科斯范式描述如下按照 yacc 的语法规则,对应于巴科斯范式描述写出 yacc 源程序后,用“yacc-dv plcily”指令转换成语法分析器的 C 语言源程序 yyparse。(2) 将 PLC 指令表转换为二进制代码PLC 指令表源程序的二进制文件格式为:每条指令的二进制编码占 32 位,操作符的 编码与元件编码相加作为目标代码的高 16 位,低 16 位为元件的编号。例如,操作符 LD的编码为 0xFF00,元件 X 的编码为 Ox01,指令 LD X1 的编码为 OxFF010001。指令表编译器的代码转换功能由 yacc 源程序规则的动作部分来实现。当语法分析器 识别出一条完整的指令时,就将其对应的二进制代码保存到文件中。(3) 将 PLC 指令表转换为树形结构Yacc 语法分析程序通过寻找可以匹配目前为止所看到的标记的规则来工作。Yacc 处 理语法分析程序时创建了一组状态,每个状态都反映一个或多个部分地被分析的规则中的 一个可能的位置。当语法分析程序读取标记时,每次它读取一个没完成规则的标记,就把 它压入内部堆栈中并切换到一种反映它刚刚读取的标记的新状态。这个动作称为移进(shift)。 当它发现组成某条规则右侧的全部符号时,它就把右侧符号弹出堆栈,而将左侧符号压入 堆栈中,并且切换到反映堆栈上新符号的新状态。这个动作成为规约(reduction)。当 yacc 规约规则时,它都执行与这条规则有关的用户代码。4利用堆栈的思想实现指令表语言向梯形图树形结构的转换。自定义一个栈 Stack,可 以压入和弹出指向 LadderElement 类型的对象的指针。在进行代码转换时,栈 Stack 动 作与语法分析栈的动作不同。当 yacc 解析到如 LDIDI、ANDANI 等含有元件的指令语 句时,将这些指令中的元件入栈(如上述代码中的 B、C 行),逻辑块的构造在其对应的语 法规则的动作部分实现。23 执行模块的设计与实现231 逻辑运算算法推导下面列一段简单的 PIC 程序来介绍逻辑运算算法的推导过程: LDX1 ORX6 ORIM1 OUT Y5 LDIY5 AND X7 ORM2(ANIX10 ORIM3 OUT M4 END定义 OR、ORI、ORB 的或操作为加法“+”,AND、ANI、ANB 的与操作为乘法“*”,取 反操作为“”。则上述程序清单中的输出 Y5 和 M103 分别等于:Y5=X4+X6+M1M4=(Y5*x7+M2)*X10+M3上式的所有运算符只会连接两个变量或者一个变量和一个表达式。由于扫描过程是顺 序执行的,因此可以为上述计算过程建立计算堆栈。建立递增的堆栈,则计算过程和堆栈 中的数据变化如表 1 所列。232 执行模块的实现本系统的执行模块是由 RTLinux 的实时线程模块来实现的,它运行于内核态。系统开 机立即加载执行模块,并将 PLC 的二进制代码从文件中复制到共享内存中,执行模块解释 共享内存中的 PLC 指令表的二进制代码,按照用户输入的逻辑,完成开关量的控制,工作 流程如图 8 所示。3 小结小结嵌入式软 PLC 最突出的特点是,借助于嵌人式系统的硬件平台用软件的方法实现标准 PLC 的功能,代替专用控制器,结构开放,开发周期短、成本低,具有良好的应用前景。 虽然文中 PLC 指令采用的是日本三菱公司 Fx2N 可编程控制器系列指令,但是只需稍作修 改即可用于其他厂商的产品。目前该嵌入式软 PLC 已成功应用于数控铣床中,完全满足控 制要求。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号