双向链表结构存放在内存的堆中,所占用的内存空间在程序运行期间可以动态地变化。用两个全局指针变量LAD*listhead和LAD*lisitail分别指向双向链表的链头和链尾,用全局性指针变量LAD*info来指向正在编辑的链结一般情况下,一个完整的梯形图不可能在一个屏幕内全部显示出来,而只能以屏幕为单位一屏一屏地显示(本系统一屏幕显示10行),因此用fistlin来记录屏幕当前显示的梯形图起始行,用rellin表示光标块所在行在当前屏幕卜的位置,如果rellin >10或rellin < 1,则把当前屏幕的内容更换整个梯形图通过LAD的前项指针*prior和后项指针*nex。按照行号顺序链结在一起。这样,对梯形图的各种操作,如修改、删除、插人等就转化为对双向链表的相应操作,例如删除梯形图的某行,实际卜就是把内存中的梯形图双向链表的链结删除掉,并且这西操作均可用结构体指针的运算来实现。由于双向链表的每个链结都具有向前和向后的指针,既可向前查找,也能向后访间,因此各类操作十分灵活方便。
4 梯形图的编译
编辑好的梯形图,根据其双向链表中的图素代号和信号代码,可形成各种逻辑关系。利用编译程序、把这种逻辑关系编译成C程序困,以便嵌入到同样用C语言编制的数控程序或仿形数字化程序中,完成机床的顺序控制。在梯形图编译时按照梯形图的梯级顺序进行,编译过程中要进行语法检查,主要是检查所编译的梯形图足否钶台规定的格式,如果梯形目不符合格式要求,则会给出错误信启,同时,在编译过程中还要枝验梯形嘲中的信号代码与信号定义模块PLC。H中所定义的信号是否~致,如果不一致,则提示该信号代码未定义。用户通过查看编译过程中所给出的错误信息,进行相应的修改,直到没有错误为止。梯形图编译程序的流程图如图3所示。
5 结束语
该编程软件简化了采用常规方法时要根据系统不同的硬件配置从底层进行设计的繁琐步骤,缩短了设计周期,提高丁工作效率。从其在“数控仿形铣床”研制过程中的使用情况来看,取得了令人满意的效果,为系统的设计、安装和调试带来了极大的便利。