S7-1200编程指南
- 格式:docx
- 大小:341.12 KB
- 文档页数:7
-1-
S7-1200编程指南
PLC,programmable logic controller,可编程逻辑控制器
工作原理
CPU的目标
承载操作系统,组织与具体控制任务无关的所有功能。具体包括:
处理暖启动
刷新输入/输出映像
调用用户程序
检测中断事件
调用中断组织块
检测和处理错误
管理存储器
处理通信任务
CPU的工作模式
停止(stop),启动(startup),运行(running);
启动(startup):CPU从停止转换到运行时为启动模式。四个要点——清输入,始输出,启OB,排中断。具体为清理输入缓冲区(I区),初始化输出缓冲区(Q区),执行启动OB,排列中断队列,但不处理。注意,此时启动OB读取I区时结果为0,必须读取物理输入。
运行(running):五个要点——写输出,写输入,行OB,自诊断,附断信。
具体为Q区写输出,输入写I区,执行用户程序,执行自诊断,如此循环。循环中任何时候都会处理中断和外来通信。
图 1
CPU的启动(startup)和工作(running)
停止(stop):四个要点——停程序,禁输出,不刷新,仅通信诊断。
具体为停止执行用户OB,禁止输出或保持最后输出值,不刷新输入输出过程映像,仅仅处
-2-
理通信和自诊断。
CPU的工作方式
扫描式工作。
单片机是逐行工作,PLC是逐行扫描。逐行工作指下一指令的执行始于上一指令的结束,逐行扫描指每循环扫描所有指令并刷新变量。
CPU的扫描周期
自诊断—处理通信—读输入—执行用户程序—写输出。扫描周期是弹性的,多数情况越小越好,组态时可设置最大值,实际扫描周期超出最大值CPU报错。
编程基础
编程单位
代码块,具体分为以下几类:
组织块OB
操作系统与用户程序的接口,架构用户程序
功能块FB 附加背景数据块的子程序
功能FC 不附加背景数据块的子程序
背景数据块DB 保存FB的输入、输出变量、静态变量
全局数据块DB 存储用户数据,所有代码块共享
表 1 用户程序代码块
组织块OB(organization block):由操作系统调用,OB间不可互相调用。OB可调用子函数如FB/FC。有程序循环组织块(扫描循环执行)、启动组织块(startup,启动时执行一次,默认编号100)、中断组织块。
功能FC(function):子函数,一个扫描周期内执行完毕。
功能块FB(function block):子函数,内部含有静态变量,须附加背景数据块DB,多数情况下需要多个扫描周期内执行完毕。
背景数据块DB/全局数据块DB(data block):存储全局静态数据。
图 2 模块化编程结构
-3-
编程语言
梯形图(ladder diagram, LAD):类似继电器电路图,由触点、线圈和方框表示的指令框组成。特别适合于数字量逻辑控制,直观易懂。假想“能流”(power flow)自上而下,自左而右。
图 3 梯形图示例
功能块图(function block diagram, FBD):类似于输电的图形逻辑符号,用类似与或非门表示逻辑运算关系。
图 4 功能块图示例
结构化控制语言(structured control language):类似于PASCAL、C语言的简化的高级语言。语言功能强于图形语言,可读性强于指令语言,适于编写算法复杂的程序,不如图形语言直观。
图 5 结构化控制语言示例
数据存储
过程映像输入(I):可按照位、字节、字、双字访问。I0.0,IB0,IW0,ID0。
物理输入(I:P):立即读取输入。
过程映像输出(Q):可按照位、字节、字、双字访问。Q0.0,QB0,QW0,QD0。
物理输出(Q:P):立即写输出。
位存储区(M):全局性的,可保持,用于存储操作的中间状态或其它控制信息,可按照位、字节、字、双字访问。
临时局部存储区(L):块的临时局部数据, CPU运行时自行分配。
数据块(DB):可保持。
数据类型
用于指定数据元素大小以及如何解释数据。
基础数据类型:Bool(1 bit)、Byte(8 bit)、Word(16 bit)、Dword(32 bit)、USint(8 bit)、Sint(8 bit)、Uint(16 bit)、Int(16 bit)、UDint(32 bit)、Dint(32 bit)、Real(32 bit)、LReal(64 bit)、Sturct、数组。
-4-
时间和日期:Time(32位IEC时间,T#1d_2h_15m_30s_45ms)、Date(16位日期值,D#2009-12-31)、TOD(32位日时钟值,TOD#10:20:30.400)、DT(64位日期和时间值,DTL#2008-12-16-20:30:20.250)。
字符和字符串:char(8bit单个字符)、String(256个byte,存储最长254个字符),关于String特别说明如下,第一个字节存储最大字符串长度,第二个字节存储当前字符串长度:
表 2 String数据类型示例
PLC数据类型:可自定义在程序中多次使用的数据结构。
指针数据类型:pointer、any、variant(不占用存储器的任何空间)。
Any示例:P#DB 11.DBX 20.0 INT 10(DB11中从DBB 20.0开始的10个字);
Any示例:P#M 20.0 BYTE 10(从MB20.0开始的10个字节)
Any示例:P#I 1.0 BOOL 1(输入I1.0)
数据片段访问
按位访问:"".xn、""..xn。
按字节访问:"".bn、""..bn。
按字访问:"".wn、""..wn。
AT访问:以不同于原有变量数据类型的方式访问变量。如利用array of bool访问byte变量。具体步骤:
在待覆盖变量下方选择AT变量类型,编辑器随即创建该覆盖;
图 6 AT覆盖(1)
重命名AT变量名称,选择用于覆盖的新的数据类型、结构、数组。
图 7 AT覆盖(2)
编程准备
安装STEP7 Basic/Profession TIA Portal(eg. V13);
RJ-45接口网线连接PC和S7-1200(eg. 1214C/DC/DC/DC);
给S7-1200以及其他模块供电DC 24V。
一般步骤
新建项目;
组态硬件配置;特指硬件组态,指在设备和网络编辑器中生成一个与实际系统对应的虚拟系统,PLC模块的型号、订货号、版本、安装位置、设备通信连接、参数配置都应当与实际硬件系统完全相同。
编写用户程序;
编译和下载至S7-1200 CPU;
-5-
在线监测设备运行情况,调试修改。
指令
能流
能流流经某个具备EN和ENO的指令,并不一定代表该指令功能执行完成,只代表该扫描周期的扫描完成;
算数运算、bool变量操作等单扫描周期指令的ENO输出代表该指令执行完成。
单周期指令和多周期指令
单扫描周期指令将在本扫描周期内执行完毕;单扫描周期指令的循环操作也在本扫描周期内完成;多扫描周期指令的EN或者REQ只使能一个扫描周期,某些指令将不能成功执行;例如大多数的通信指令。
能流与扫描
FB/FC的EN端将为能流提供扫描通道,EN端断路,能流无扫描通路,内部变量将不再刷新,即该函数不再执行;当FB/FC的EN端总是使能,Enable输入断开,块内部仍有能流通路,相应变量会被扫描以致刷新;例见下图:
图 8 能流-内部扫描
图 9 能流-内部不扫描
前者FB12内部的变量总会被扫描,而后者在M3.0或DB_Valve.done为1时,内部变量不会被扫描;相应的,前者done变量将被下一扫描周期置0,而后者done置1后将因能流不通不能扫描而自行保持;
变量赋值顺序
变量被多次赋值时的先后顺序很重要。因为变量的值总会被最后执行动作更新,前面的值将被覆盖;例如下图:
-6-
程序初衷为当接受响应完成时ERR置位,或响应超时ERR置位。上述程序是可以完成正常功能的;但若二者互换,如下图:
接收超时时,ERR不会置位,因为rev_done为0,ERR被复位!
FB与FC的参数
FB块的输入输出形参存储于背景数据块中,在调用该FB时实参可选;
FB块的输入输出参数虽不是静态变量,但亦有保持功能,具体视程序而定;
FC块的输入输出参数是临时内存,必须指定实参才能运行
FC中临时(Temp)变量也不会自动清零
上升沿和下降沿的读取
单个扫描周期中,一个布尔变量的上升/下降沿只能读取一次;因为读取一次之后,其Pre变量已被立即刷新,后续的读取不能成功读到该变量的状态变化。
数组的使用
数组访问越界将导致CPU错误,ERR灯闪烁;
使用数组索引时(例如array[i])一定要初始化,上电时该变量内存为随机分配,不一定为0;
SEND_PTP
EN是使能该命令的能流,REQ触发该命令的执行,上升沿和保持为1都只触发命令执行一次。
REV_PTP
使用自由口通信协议时,必须指定消息的开始和结束条件(Condition),保证正确、及时的发送和接收,否则会因非必要的延时而增大通信负载;RCV_CFG命令用于配置消息开始和结束条件。
Message timeout/Response timeout
message timeout是指从接收到第一个字符起的等待时间,该时间超出后将不再接收消息;response timeout是指从传送结束到接收到第一个字符之间的时间,超出该时间将不再接受消息,视为消息结束。