嵌入式系统硬件平台的软件PLC实现方法
时间:04-12
来源:作者:南京航空航天大学 张少坤 游有鹏 王荣
点击:
1 嵌入式软PLC的总体结构
嵌入式软PLC与嵌入式系统共享一个CPU,PLC和嵌入式系统之间没有多余的导线连接,增加了系统的可靠性,易于实现许多高级功能。PLC中的信息也能通过嵌入式系统的显示屏显示,通过嵌入式系统的编辑键可方便地对PLC进行编辑操作。
1.1 嵌入式软PLC的硬件结构
外部输入的开关量经过光电隔离后连接到FPGA的I/O口,通过FPGA地址译码,FPGA通过数据地址总线与CPU相连。这样CPU就可以通过数据地址总线获得和设置输入量的工作状态,硬件原理框图如图1所示。
1.2 嵌入式软PLC的软件结构
嵌入式软PLC程序包括两类:一类是编辑状态,实现PLC程序的输入和编译功能;另一类是面向生产过程的应用程序。系统软件结构由4部分组成,分别是编辑模块、编译模块、执行模块和监控模块。软件PLC系统模块间的数据流程如图2所示。
2 系统关键组成部分的设计与实现
2.1 梯形图编辑器
Qt/Embedded是著名的Qt库开发商Trolltech推出的面向嵌入式系统的Qt版本。Qt/Embedded具有可移植性强和支持跨平台开发等优点。本系统采用Qt编写界面,梯形图编辑器的界面如图3所示。
2.1.1 梯形图的数据结构设计
梯形图编辑具有方便、逻辑直观的特点,梯形图编辑器借助于梯形图的内部数据结构来实现显示、插入、删除、代码转化等功能。
PLC语言中,各种元素包括单个节点(如常开触点、常闭触点等)和逻辑块(如与逻辑块、或逻辑块),它们都含有相同的操作,如插入、删除、绘图等。可以把组成梯级的各个逻辑块看成组成梯级的各个部分,把组成逻辑块的子逻辑块和单个节点看成是组成逻辑块的各个部分,符合"部分一整体"的层次结构。可以采用面向对象的设计思想,使用composite模式递归地创建树状结构。使用组合结构,能够把相同的操作应用在组合和个别的对象上。大多数情况下,可以忽略对象组合和个别对象之间的差别,简化程序代码,增强了软件的可维护性。采用composite模式的类图如图4所示。
图中:LadderElement是一个抽象类,为组合对象的接口。代表梯形图语言的任何一个图形元素,它既可以代表元件又可以代表逻辑块,在适当的情况下可以实现所有类共同的缺省行为,如绘图和代码转换等;LadderCell为所有元件类(如常开触点、常闭触点、输出、置位、复位)的基类;LadderBlock为所有逻辑块(如与逻辑块类、或逻辑块类等)的基类。
图5为一个梯级和它对应的数据结构,OrBlock为或逻辑块类的对象,AndBloek为与逻辑块类的对象,Rung为梯级类的对象。 此外,为了能够方便地进行绘图和编辑,引入了一个空元件类。它的作用是梯形图中的水平连接线,实现方法是继承LadderCell类,重新实现成员函数Draw()来画一条水平的线段。
2.1.2 编辑功能的设计与实现
定义结构体:
梯形图的编辑通过改变其在内存中的数据结构来实现,在数据结构被改变后,重新绘图。对梯形图的编辑包括:插入元件、插入分支、插入梯级、删除元件和删除梯级等。篇幅所限只作简要介绍。
删除元件:删除LadderBlock中的一个元件Ladder一Cell(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)插入到0rBlock中。OrBlock即表示插入分支后的或逻辑块。OrBlock取代两次选中之间的元素在它们的父逻辑块中的位置,然后根据修改后的数据结构画图得到插入分支后的梯形图。图7为在M001和X006插入分支前后梯形图的变化。
2.2 指令表编译器的设计与实现
实现对PLC编程语言的高效、可靠的编译,是研制开发嵌入式PLC系统的一项关键性任务。传统的开发方法是用高级语言自行开发专用的PLC指令编译器,需要对每个程序字和程序规则编写识别和相应的处理程序,工作量大、开发周期长,容易产生疏漏,可维护性很差。为了提高软件的开发效率,保证软件质量,增强软件的可维护性,采用通用编译工具Lex8LYacc开发PLC指令编译器。
嵌入式软PLC与嵌入式系统共享一个CPU,PLC和嵌入式系统之间没有多余的导线连接,增加了系统的可靠性,易于实现许多高级功能。PLC中的信息也能通过嵌入式系统的显示屏显示,通过嵌入式系统的编辑键可方便地对PLC进行编辑操作。
1.1 嵌入式软PLC的硬件结构
外部输入的开关量经过光电隔离后连接到FPGA的I/O口,通过FPGA地址译码,FPGA通过数据地址总线与CPU相连。这样CPU就可以通过数据地址总线获得和设置输入量的工作状态,硬件原理框图如图1所示。
1.2 嵌入式软PLC的软件结构
嵌入式软PLC程序包括两类:一类是编辑状态,实现PLC程序的输入和编译功能;另一类是面向生产过程的应用程序。系统软件结构由4部分组成,分别是编辑模块、编译模块、执行模块和监控模块。软件PLC系统模块间的数据流程如图2所示。
2 系统关键组成部分的设计与实现
2.1 梯形图编辑器
Qt/Embedded是著名的Qt库开发商Trolltech推出的面向嵌入式系统的Qt版本。Qt/Embedded具有可移植性强和支持跨平台开发等优点。本系统采用Qt编写界面,梯形图编辑器的界面如图3所示。
2.1.1 梯形图的数据结构设计
梯形图编辑具有方便、逻辑直观的特点,梯形图编辑器借助于梯形图的内部数据结构来实现显示、插入、删除、代码转化等功能。
PLC语言中,各种元素包括单个节点(如常开触点、常闭触点等)和逻辑块(如与逻辑块、或逻辑块),它们都含有相同的操作,如插入、删除、绘图等。可以把组成梯级的各个逻辑块看成组成梯级的各个部分,把组成逻辑块的子逻辑块和单个节点看成是组成逻辑块的各个部分,符合"部分一整体"的层次结构。可以采用面向对象的设计思想,使用composite模式递归地创建树状结构。使用组合结构,能够把相同的操作应用在组合和个别的对象上。大多数情况下,可以忽略对象组合和个别对象之间的差别,简化程序代码,增强了软件的可维护性。采用composite模式的类图如图4所示。
图中:LadderElement是一个抽象类,为组合对象的接口。代表梯形图语言的任何一个图形元素,它既可以代表元件又可以代表逻辑块,在适当的情况下可以实现所有类共同的缺省行为,如绘图和代码转换等;LadderCell为所有元件类(如常开触点、常闭触点、输出、置位、复位)的基类;LadderBlock为所有逻辑块(如与逻辑块类、或逻辑块类等)的基类。
图5为一个梯级和它对应的数据结构,OrBlock为或逻辑块类的对象,AndBloek为与逻辑块类的对象,Rung为梯级类的对象。 此外,为了能够方便地进行绘图和编辑,引入了一个空元件类。它的作用是梯形图中的水平连接线,实现方法是继承LadderCell类,重新实现成员函数Draw()来画一条水平的线段。
2.1.2 编辑功能的设计与实现
定义结构体:
梯形图的编辑通过改变其在内存中的数据结构来实现,在数据结构被改变后,重新绘图。对梯形图的编辑包括:插入元件、插入分支、插入梯级、删除元件和删除梯级等。篇幅所限只作简要介绍。
删除元件:删除LadderBlock中的一个元件Ladder一Cell(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)插入到0rBlock中。OrBlock即表示插入分支后的或逻辑块。OrBlock取代两次选中之间的元素在它们的父逻辑块中的位置,然后根据修改后的数据结构画图得到插入分支后的梯形图。图7为在M001和X006插入分支前后梯形图的变化。
2.2 指令表编译器的设计与实现
实现对PLC编程语言的高效、可靠的编译,是研制开发嵌入式PLC系统的一项关键性任务。传统的开发方法是用高级语言自行开发专用的PLC指令编译器,需要对每个程序字和程序规则编写识别和相应的处理程序,工作量大、开发周期长,容易产生疏漏,可维护性很差。为了提高软件的开发效率,保证软件质量,增强软件的可维护性,采用通用编译工具Lex8LYacc开发PLC指令编译器。
- 基于DSP的宽带雷达多片流水分段脉压处理平台设计(08-02)
- 基于MCU+DSP的运动控制硬件平台设计(10-01)
- 基于DSP/CPLD的嵌入式仪表硬件平台(06-05)
- ARM硬件平台上基于UCOS移植Lwip网络协议栈(11-20)
- 智能终端软硬件平台设计(06-14)
- 基于G4平台的嵌入式VxWorks系统在雷达信号处理中的应用(04-06)