“ 先进制造技术 ”课程
该软件主要有以下几方面的功能:
(1)梯形图的编辑:能够实现梯形图元素的输入、编辑(复制、粘贴和剪切)、存储和显示,如输入元素,输出元素。
(2)指令表的编辑:能够实现语句和指令的输入、编辑、存储和显示。 (3)梯形图向指令表的转换。
(4)语法检查功能:主要是对程序的语法错误进行检查。对于梯形图而言,主要是检查梯形图的符号输入是否符合编程规则。对于指令表,则主要检查是否有指令和元素名称输入错误。
(5)编译并解释PLC程序:扫描PLC程序,分析程序的逻辑关系,根据各个元素的预设状态,得出最终逻辑结果。
(6)程序仿真:采用图形表达方式,对程序逻辑进行模拟。
3.2 PLC语言编辑模块
该语言编辑模块由梯形图编辑模块和指令表编辑模块两部分组成。 1.梯形图编辑模块
组成梯形图的元素分为输入元素、输出元素、定时器、计数器、功能元素和连接元素。根据需要这里只选取输入元素、输出元素、功能元素和连接元素。其他元素可以在今后进行扩充完善。
(1)数据结构的设计
整个梯形图编辑模块采用行存储结构,每行为一个链结,整个梯形图用双向链表的数据结构来表示。梯形图是由若干行组成,每行又由若干个元素组成,梯形图的每一行也可以用双向链表来表示。选用双向链表的主要原因有两个:
①梯形图的编辑过程是动态的,选用链表便于表达。
在编辑过程中,梯形图的行数、每行的元素个数、类别都是未知的,整个编辑过程是一种动态存储过程。链表的存储结构便于表达这种动态存储过程。
②针对梯形图的结构特点,选用链表易于操作。
链表的操作是由指针来完成的,对于梯形图编辑过程中的复制、剪切、粘贴、删除、查找等功能都可以由指针操作方便地完成。
根据梯形图的特点,设计三个类:梯形图元素类(CSoftPLCEIe类)、梯形图类(CSoftPLC类)和梯形图文档类(CSoftPLCDoc类)。类的主要代码如下:
class CSoftPLCEle:public CObjcct //梯形图元素类
{
public:
CSoftPLCEIe(int nRow,int nCol,
int nIDbitmap,CString sLabcl); //构造函数
void DrawBitmap(CDC* pDC); //绘制函数
??
8
“ 先进制造技术 ”课程
protected: int m_nIDbitmap; //梯形图位图ID CString strLabcl;//梯形图的标号 int m_nRwv; //元素所在行 int m_ nCol; //元素所在列
??
};
class SoftPLC:public CObject //梯形图类 {
public: CSoftPLC(int nRowNum); //构造函数 CTypcdPtrList
CSoftPLCEIe*pNewSoftPLCEIe);//插入函数
CSoftPLCEIe* FindSoftPLCEIe(int nCol);//查找函数
?? protected:
CSoftPLC();//默认构造函数
int m_nRowNum; //行号 ??
};
class CSoftPLCDoc:public CDocumcnt//梯形图文档类
{
protected:
CSoftPLCDoc();//默认构造函数 int m_nRowNum; //梯形图行数
?? public:
CTypedPtrList
CSoftPLC* NewSoftPLC(int nRow);//生成一个新的行 void RemovePreSoftPLC(int nRow);//删除行函数 void InsertSoftPLC ( int nRow,
CSoftPLC*pNewSoftPLC ) ; //插入行函数
??
};
9
“ 先进制造技术 ”课程
(2)梯形图编辑模块的实现
根据梯形图编辑的特点,选用支持屏幕滚动和多窗口操作的CScrollView类作为梯形图编辑器视窗的基类。为了编辑方便和界面整洁,将视分成一定间隔的行和列以形成大小相等排列整齐的方形输入区。通过对梯形图符号的分析,将其归纳为几种符号的基本图库,在屏幕上方做一个工具栏供用户选择。每一种梯形图元素图的大小与方形输入区的大小相等。编辑梯形图程序时,可以用鼠标直接选用工具栏中所需图素,将其放入视图中的某个位置。
图7 软PLC梯形图编辑界面
2.指令表编辑模块
在设计指令表编辑模块时,选用微软基本类库中的CEditView类作为基类。CEditView是一个具有文字编辑功能的类,它所使用的窗口是Windows的标准控件之一Edit,其SerializeRaw成员函数可以把Edit控件中的数据写到文件中。另一方面,由于该类是从CView类派生而来,支持多窗口操作并有文件预览功能。因此,指令表文件可以非常方便地在编辑视窗中进行编辑。
10
“ 先进制造技术 ”课程
图8 软PLC指令表编辑界面
3.3 PLC语言编译技术
PLC编译模块由梯形图语法检查模块、梯形图程序逻辑检查模块和指令表程序语法检查模块组成。梯形图程序语法检查模块检查用户PLC图形程序有无指令标记重复、指令地址越界等语法错误;梯形图程序逻辑检查模块检查PLC图形程序有无逻辑错误,如指令位置不正确、梯级中缺少输出指令等;语言程序语法检查模块检查用户语句程序有无拼写、指令格式、指令地址越界等语法错误。
梯形图编译时以梯级为单位,梯级是相互影响的行组成的最小单元。编译时采用深度优先的扫描方法,按照从上到下从左到右的顺序进行,即在扫描过程中,遇到并联结点就转入下一行进行扫描,行与行之间的切换由指针的变换来实现,原先位置的指针被预先存储起来,待并联模块扫描完后,再从原来的位置开始往下扫描。梯级和扫描顺序见图。
11

