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是指从传送结束到接收到第一个字符之间的时间,超出该时间将不再接受消息,视为消息结束。