有一个新来的学徒诉我:“最近在操作中,对PLC程序像单片机程序一样画了流程图,但是当系统存在模拟量控制环节时,所画的流程图又难以说明问题,很难画出与实际程序执行意义一样的总的程序流程图。考虑到PLC程序和单片机程序是不同的,单片机是逐行执行,而PLC则不同。”
单片机与PLC的程序设计有很大的区别,单片机的全部程序都是用户设计的,PLC程序包括系统程序(西门子称为操作系统)和用户程序。操作系统用来组织与具体的控制任务无关的所有的CPU功能。操作系统的任务包括处理启动过程,刷新输入/输出过程映像,调用用户程序,检测中断事件和调用中断组织块,检测和处理错误,管理存储器,以及处理通信任务等。PLC的很多功能,例如扫描工作方式、定时器功能和中断处理,是操作系统完成的。在画流程图时,应考虑这个问题。
PLC的开关量控制系统的程序用顺序功能图来描述比较简洁。用流程图来描述PLC的用户程序原则上也是可以的,但是应区分哪些功能是操作系统完成的,哪些是用户程序实现的。
例如有人问是否需要用跳转指令来等待某个信号上升沿的出现,这是一种单片机编程的思维。PLC的扫描工作方式在每一扫描周期开始时读取全部的开关量输入,根据前后两个扫描周期同一输入点状态的变化来判断是否有上升沿出现。所以不需要用往回跳的跳转指令来等待某个输入信号的出现。如果用这种方法来查询信号的状态变化,PLC不能干别的事情,因为它的全部精力都用在查询上了!而这种查询是在一个扫描周期内进行的,将使扫描周期变得很长,很容易造成监控定时器(看门狗)超时的错误。
在PLC的用户程序中,只需要用一条检测上升沿的指令就可以捕捉到脉冲信号的上升沿。如果要求快速响应,可以采用中断方式,在脉冲信号的上升沿由系统程序调用用户编写的中断程序。