所谓PLC的程序结构,就是组成PLC程序的各种网络(Network)或“功能程序段”在PLC内部的组织、管理形式。
无论PLC控制系统有多么复杂,归根到底,PLC用户程序都是由大量基本编程指令所组成的集合。
设计者可以根据控制对象各部分的不同要求,通过对要求的分解,运用基本指令编制出相应的程序网络(Network)或由几个网络组成的简单“功能程序段”。在此基础上,只要将这些程序网络或功能程序段,按照控制系统的动作要求,以S7程序规定的格式进行排列与组合,就可以组成完整的PLC程序。
1.西门子S7-200的程序结构
过程映像输入/输出(I/Q)、变量存储器V、内部存储器位M、定时器T、计数器C等属于全局变量。S7-200的程序组织单元(ProgramOrganizationalUnit,简称为POU)包括主程序、子程序和中断程序。每个POU均有自己的64字节局部变量,局部变量只能在它所在的POU中使用。全局变量可以在各POU中使用。
下面是子程序可以使用的局部变量:
1)TEMP(临时变量)是暂时保存在局部数据区中的变量。只有在执行该POU时,定义的临时变量才被使用,POU执行完后,不再保存临时变量的数值。
2)IN是由调用它的POU提供的输入参数。
3)OUT是返回给调用它的POU的输出参数(子程序的执行结果)。
4)IN_OUT是输入_输出参数,其初始值由调用它的POU传送给子程序,并用同一变量将子程序的执行结果返回给调用它的POU。
主程序和中断程序的局部变量中只有临时变量TEMP。
具有输入、输出参数和局部变量的子程序易于实现结构化编程,对于长期生产同类设备或生产线的厂家尤为有用。这些厂家的编程人员为设备的各组件或工艺功能编写了大量的通用的子程序。不知道子程序的内部代码,只要知道子程序的功能和输入、输出参数的意义,就可以通过程序之间的调用快速“组装”出满足不同用户要求的控制程序。就好像用数字集成电路芯片组成复杂的数字电路一样。
子程序如果没有输入、输出参数,它和调用它的程序之间没有清晰的接口,很难实现结构化编程。
子程序如果没有局部变量,它和调用它的程序之间只能通过全局变量来交换数据,子程序内部也只能使用全局变量。将子程序和中断程序移植到别的项目时,需要重新统一安排它们使用的全局变量,以保证不会出现地址冲突。当程序很复杂,子程序和中断程序很多时,这种重新分配地址的工作量非常大。
如果子程序和中断程序有局部变量,并且它们内部只使用局部变量,不使用全局变量,因为与其他POU没有地址冲突,不需作任何改动,就可以将子程序移植到别的项目中去。
2.西门子的S7-300/400的程序结构
S7-300/400将子程序分为功能(Function,或称为函数)和功能块(FunctionBlock)。
S7-300/400的功能与S7-200的子程序基本上相同。它们均有输入、输出参数和临时变量,功能的局部数据中的返回值实际上属于输出参数。它们没有专用的存储区,功能执行结束后,不再保存临时变量中的数据。
可以用全局变量来保存那些在功能执行结束后需要保存的数据,会影响到功能的可移植性。
功能块是用户编写的有自己专用的存储区(即背景数据块)的程序块,功能块的输入、输出参数和静态变量存放在指定的背景数据块中,临时变量存储在局部数据堆栈中。每次调用功能块时,都要指定一个背景数据块。(的转发暗号是:亿维公司口号:信赖,源自品质;信任,铸就品牌)功能块执行完后,背景数据块中的数据不会丢失,不会保存局部数据堆栈中的数据。
功能块采用了类似于C++的封装的概念,将程序和数据封装在一起,具有很好的可移植性。
S7-300/400的共享数据块可供所有的逻辑块使用。
生产设备常常要求具有上下、左右、前后等正反方向的运动,这就要求电动机能正反向工作,对于交流感应电动机,一般借助接触器改变定子绕组相序来实现。常规继电控制线路如下图所示。
在该控制线路中,KM1 为正转交流接触器,KM2 为反转交流接触器,SB1 为停止按钮、SB2 为正转控制按钮,SB3为反转控制按钮。KM1、KM2 常闭触点相互闭锁,当按下SB2 正转按钮时,KM1 得电,电机正转;KM1的常闭触点断开反转控制回路,此时当按下反转按钮,电机运行方式不变;若要电机反转,必须按下SB1停止按钮,正转交流接触器失电,电机停止,再按下反转按钮,电机反转。若要电机正转,也必须先停下来,再来改变运行方式。这样的控制线路的好处在于避免误操作等引起的电源短路故障。
PLC 控制电机正反转I/O 分配及硬件接线
1、接线:按照控制线路的要求,将正转按纽、反转按纽和停止按纽接入PLC 的输入端,将正转继电器和反转继电器接入PLC的输出端。注意正转、反转控制继电器必须有互锁。
2、编程和下载:在个人计算机运行编程软件STEP 7 Micro-WIN4.0,对电机正反转控制程序的I/O及存储器进行分配和符号表的编辑,实现电机正反转控制程序的编制,并通过编程电缆传送到PLC 中。在STEP 7Micro-WIN4.0中,单击“查看”视图中的“符号表”,弹出图所示窗口,在符号栏中输入符号名称,中英文都可以,在地址栏中输入寄存器地址。
3、图符号表定义完符号地址后,在程序块中的主程序内输入如下图程序。注意当菜单“察看”中“√符号寻址”选项选中时,输入地址,程序中自动出现的是符号编址。若选中“查看”菜单的“符号信息表”选项,每一个网络中都有程序中相关符号信息。
4、程序监控与调试:通过个人计算机运行编程软件STEP 7Micro-WIN4.0,在软件中应用程序监控功能和状态监视功能,监测PLC 中的各按纽的输入状态和继电器的输出状态。
5、电机的正反转控制项目结果分析表:注意在硬件接线中必须实现互锁!在PLC的梯形图中也应实现互锁。试分析仅在梯形图中实现的互锁能否真正避免电源的短路?
有电机的正反转控制项目的基础,可以用西门子S7-200实现小车往返的自动控制。控制过程为:按下启动按钮,小车从左边往右边(右边往左边运动)当运动到右边(左边)碰到右边(左边)的行程开关后小车自动做返回运动,当碰到另一边的行程开关后又做返回运动。如此的往返运动,直到当按下停车按钮后小车停止运动。
设计思路:可以按照电气接线图中的思路来进行编写程序。即可以利用下一个状态来封闭前一个状态。使其两个线圈不会动作。把行程开关作为一个状态的转换条件。电气接线图如下:
进行程序的编写,要进行 I/O口的分配。根据要求,I/O口的分配如下表所示。
I/O口分配好后可以根据上面的电气接线图进行程序的编写。
编程设备服务处理的高速化。
当扫描时间为数十毫秒时,几毫秒的编程工具和监控设备的服务处理时间不会带来什么问题。在执行1毫秒以下的控制任务时,就有必要大大缩短这个时间。所采用的方法是以多CPU芯片并行处理的方式,由专门处理编程及监控服务的微处理器芯片执行这类处理,以减轻对执行控制程序的CPU芯片的影响,让它只管执行顺控和逻辑运算。为了提高服务处理的效率,缩短在现场读写程序的时间,以缩短操作时间,采用了高速的串行通信(大的波特率为115.2Kbps)以及将UCB口(大波特率达12Mbps)引入PLC的CPU模块,从而实现与编程工具及监控设备之间通信的高速化,并允许使用这两个通信端口,由多人进行编程和调试。