自动化工程师:经典干货,从浅到深分享西门子S7-1200 PLC编程
CPU 的目的承载操作系统,组织与具体控制任务无关的所有功能 。具体包括:处理暖启动、刷新输入 /输出映像、调用用户程序、检测中断事件、调用中断组织块、检测和处理错误、管理存储器、处理通信任务等等。
它的工作模式
停止( stop ),启动( startup ),运行( running );
启动( startup ):CPU从停止转换到运行时为启动模式。四个要点——清输入,始输出,启OB,排中断。具体为清理输入缓冲区( I 区),初始化输出缓冲区( Q 区),执行启动 OB,排列中断队列,但不处理。 注意,此时启动 OB 读取 I 区时结果为 0,必须读取物理输入。
运行( running ):五个要点 —— 写输出,写输入,行 OB,自诊断,附断信。
具体为 Q 区写输出,输入写 I 区,执行用户程序,执行自诊断,如此循环。循环中任何时候都会处理中断和外来通信。
图 1 CPU的启动( startup)和工作( running)
停止( stop ):四个要点 —— 停程序,禁输出,不刷新,仅通信诊断。
具体为停止执行用户 OB,禁止输出或保持最后输出值,不刷新输入输出过程映像,仅仅处理通信和自诊断。
CPU 的工作方式
扫描式工作:单片机是逐行工作, PLC 是逐行扫描。逐行工作指下一指令的执行始于上一指令的结束,逐行扫描指每循环扫描所有指令并刷新变量。
CPU 的扫描周期:自诊断 —处理通信 —读输入 —执行用户程序 —写输出 。扫描周期是弹性的, 多数情况越小越好,组态时可设置最大值,实际扫描周期超出最大值 CPU报错。
编程基础
编程单位
代码块 ,具体分为以下几类:
表 1 用户程序代码块
组织块 OB(organization block ):由操作系统调用, OB 间不可互相调用。 OB 可调用子函数如 FB/FC 。有程序循环组织块 (扫描循环执行) 、启动组织块 (startup ,启动时执行一次,默认编号 100 )、中断组织块 。
功能 FC(function ):子函数, 一个扫描周期内执行完毕 。
功能块 FB(function block ):子函数,内部含有静态变量,须附加背景数据块 DB,多数情况下需要多个扫描周期内执行完毕。
背景数据块 DB/ 全局数据块 DB(data block ):存储全局静态数据。
编程语言
梯形图( ladder diagram, LAD ):类似继电器电路图,由触点、线圈和方框表示的指令框组成。特别适合于数字量逻辑控制,直观易懂。假想“能流” (powerflow )自上而下,自左而右。
图 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(1bit )、Byte(8bit )、Word(16bit )、Dword(32bit )、USint(8bit )、Sint(8bit )、Uint (16bit )、Int (16bit )、UDint (32bit )、Dint (32bit )、Real(32bit )、LReal(64bit )、Sturct 、数组。
时间和日期 :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#DB11.DBX20.0INT10 (DB11 中从 DBB20.0 开始的 10 个字);
Any 示例: P#M20.0BYTE10 (从 MB20.0 开始的 10 个字节)
Any 示例: (输入 I1.0 )
数据片段访问
按位访问: 变量名称 >".xn 、"<数据块名称 >".<变量名称 >.xn。
按字节访问: 变量名称 >".bn 、"<数据块名称 >".<变量名称 >.bn。
按字访问: 变量名称 >".wn 、"<数据块名称 >".<变量名称 >.wn 。
AT 访问: 以不同于原有变量数据类型的方式访问变量。如利用 arrayofbool 访问 byte 变量。具体步骤:
在待覆盖变量下方选择 AT 变量类型,编辑器随即创建该覆盖;
图 6 AT覆盖( 1)
重命名 AT 变量名称,选择用于覆盖的新的数据类型、结构、数组。
图 7 AT覆盖( 2)
编程准备
安装 STEP7Basic/ProfessionTIAPortal (eg.V13 );
RJ‐ 45接口网线连接 PC和 S7‐ 1200(eg.1214C/DC/DC/DC );
给 S7‐ 1200以及其他模块供电 DC24V 。
一般步骤
新建项目;
组态硬件配置; 特指 硬件组态 ,指在设备和网络编辑器中生成一个与实际系统对应的虚拟系统, PLC 模块的型号、订货号、版本、安装位置、设备通信连接、参数配置都应当与实际硬件系统完全相同。
编写用户程序;
编译和下载至 ;
在线监测设备运行情况,调试修改。
指令
能流
能流流经某个具备 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 后将因能流不通不能扫描而自行保持;
变量赋值顺序
变量被多次赋值时的先后顺序很重要。 因为变量的值总会被最后执行动作更新, 前面的值将被覆盖,例如下图:
程序初衷为当接受响应完成时 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 messagetimeout 是指从接收到第一个字符起的等待时间,该时间超出后将不再接收消息;
responsetimeout 是指从传送结束到接收到第一个字符之间的时间,超出该时间将不再接受消息,视为消息结束。
STEP7 在线监控的刷新频率
STEP7 中的梯形图操作数、能流的监控特征色(蓝绿) 、以及监控表中的布尔变量的刷新频率有限, 可能不能反映真实的实时运行状况, 可借助一个累加器来监视程序的运行状态, 例如下图:
图 10 累加器监控程序
数组下标越界与数据类型
一数组共计 15 个元素, array[0..14] ,执行队列先入先出操作,循环内判断索引是否大于 0:
图 11 数组索引的错误判断
执行结果将为数组下表访问越界。 因为索引的数据类型定义为 USING,即无符号 8 位整数,值域为 0–255 ,当 idxpre 为 0 时,下一循环的 DEC操作导致其变为 255 而非 ‐1,所以,正确的做法是重设索引数据类型为 sint ,或修改判断条件。
西门子1200你用过吗?如何快速编写程序?西门子入门教程!
TIA 软件使用入门
1.1 S7-1200 PLC 简介
S7-1200 PLC (Programmable Logic Controller) 是西门子公司推出的一款PLC,主要面向简单而高精度的自动化任务。
S7-1200设计紧凑、组态灵活且具有功能强大的指令集,这些特点的组合使它成为控制各种应用的完美解决方案。
CPU将微处理器、集成电源、输入电路和输出电路组合到一个设计紧凑的外壳中以形成功能强大的PLC。
CPU根据用户程序逻辑监视输入并更改输出,用户程序可以包含布尔逻辑、计数、定时、复杂数学运算以及与其它智能设备的通信。
S7-1200 PLC在西门子PLC系列产品中的定位
2、整体介绍
登陆界面 任务 – 导向型操作;通过简单直观的操作来实现任务的快速处理
项目界面 项目的分级组织;所有的编辑器,参数和数据都在一个界面中
3、一个简单例子
1新建项目;
2组态设备(PLC,HMI)和网络;
3PLC编程;
4组态面板;
5项目视图;
6下载项目;
7运行调试。
选择“创建新项目”,输入项目名称“test20100510”,单击“创建”按钮则自动进入“入门向导”画面
单击“组态设备”项开始对S7-1200的硬件进行组态,选择“添加新设备”项,右侧显示“添加新设备”画面
重新选择“添加新设备”,单击“SIMATIC HMI”大按钮,在中间的目录树中则显示HMI设备,通过单击每项前的(下三角)图标“HMISIMATIC基本面板6’’Display”,选择对应订货号的屏
单击“网络视图”中呈现绿色的CPU1214C的PROFINET网络接口,按住鼠标左键拖动至呈现绿色的KTP屏的PROFINET网络接口上,则二者的PROFINET网络就连上了,可以在“网络属性对话框”中修改网络名称。
对PLC进行设备组态
在项目视图中,打开项目树下的“DEMOPLC”项,双击“设备配置”项打开“设备视图”
对PLC进行编程
单击左下角的“起始视图”回到向导画面,单击左侧的“PLC编程”项,可以看到选中“显示所有对象”时,右侧显示了当前所选择PLC中的所有块,双击“main”块,打开程序块编辑界面。
此处仅是为了演示项目,在面板画面上组态一个I/O域,当按下按钮I0.6,Q0.3亮时,面板上的I/O域显示“1”,否则显示“0”。
向导画面,单击左侧的“可视化”项开始HMI的组态。在中间侧选择“编辑HMI变量”,双击右侧表格中的“HMI变量”对象,则打开HMI变量组态画面
双击“名称”栏下的“添加新对象”,修改将要添加的HMI变量名称为“指示灯”,在属性对话框的“常规—设置”项下点击“PLC变量”编辑框右侧的“”按钮选择“PLC变量”下的地址Q0.3。
单击左下角的“起始视图”回到向导画面,选择中间侧 “编辑画面”,双击右侧表格中的“画面_1”对象,打开画面编辑界面
拖动右侧“工具箱”下“元素”里的I/O域图标到画面中,在I/O域的属性对话框“常规—过程”项下点击“变量”编辑框右侧的“”按钮添加“HMI变量指示灯”,设置显示格式为“二进制”
下载项目
打开“扩展的下载到设备”对话框,勾选“显示所有可访问设备”,若已将编程计算机和PLC连接好的话,将显示当前网络中所有可访问的设备
下载PLC,HMI程序
运行调试
二 S71200如何上传程序?
1200系列程序如何从设备上传至电脑?
首先你需要一个笔记本和一根网线,将网线连接到电脑和S1200上。
上载操作
1)打开TIA Portal软件,创建新项目,定义项目名称;文件存放路径;作者;注释等信息,图示:
点击“创建”按钮。
2)点击项目视图,图示:
3)双击“添加新设备”,在弹出的“添加新设备”窗口选择“无订货号的cpu”,图示:
点击“确定”按钮。
4)设备视图出现一个无订货号的设备视图,图示:
5)在工具栏选择“在线”下拉菜单“将设备作为新站上传(硬件和软件)。。。,在弹出的”将设备上传至PG/PC“中选择接口类型;PG/PC接口后,点击”开始搜索“按钮,图示:
6)稍后,如果连接正确,系统自动会搜索到接口访问点,点击“从设备上传“按钮,图示:
7)稍后,新设备的上传硬件与软件已经上传成功,图示:
8)之前,我编辑的一个简单程序成功上传,图示,在线监控,图示:
9)点击“保存项目“后完成上传操作,图示:
好了!上传程序完成了,但需要注意的是如果S1200里面的程序加密的话就可能无法上传!这是为了保护开发者的版权。
相关问答
西门子1200plc编程思路框架?
1.西门子1200PLC编程思路框架是需要有一定的时间和经验积累的。2.首先需要明确PLC编程的目的和需求,然后根据具体的控制任务,设计出相应的程序框架。在编程...
西门子1200plc谁主编的书好?
1.?2.根据我的了解,西门子1200plc的书籍主要由西门子公司内部的专业人士或相关领域的专家主编,他们对于该领域的知识和技术有深入的了解和研究,因此这些书...
西门子plc整数转浮点数指令?
位置,然后在下拉列表中选择输入数据类型和输出数据类型。CONVERT指令支持的数据类型包括有整数、双整数。2.浮点数转整数指令S7-1200PLC的浮点数转换指...
plc编程用什么电脑好?
常用编程软件的话,配置参数上不能太差,电脑配置需求参考如下:1.操作系统:windows7(建议使用64位)2.内存:最少2GB(推荐4GB及以上)3.显...常用编程软件的...
西门子1200plc到精通需要多久?
1年左右,PLC学完要多久这个首先看个人有没有基础,有基础学习一年基本可以把一种PLC学会,没有基础可能要更长时间。其次就是要看个人学习能力,学习能力强就快...
在西门子PLC中,如何对热电阻信号进行转换,范围:0-300,当温度低于0度时,如何编程?
如果你用的是RTD模块,不需要转换,读取通道地址的数据,除以10就是温度值。如果用的是电流模块,你就要用温度变送器进行转换,转换为4-20MA的电流信号。分别对...
1200PLCFC能自锁吗?
1200PLCFC是一种可编程逻辑控制器,具有自锁功能。自锁功能是指当程序运行过程中出现异常情况时,控制器可以自动重新启动程序,而不需要手动干预。这种功能可...
pLC编程地址怎么显示红色字?
是指的西门子STEP-7的编程软件吗?如果地址显示红色说明你写的地址不存在。是指的西门子STEP-7的编程软件吗?如果地址显示红色说明你写的地址不存在。
西门子plc不用存储卡可以用吗?
需要看型号。储存卡是程序过长,PLC自身没有足够存储空间时用的。有些型号需要安装,有些型号就不需要。比如:西门子的S7-200系列PLC自身就带有程序和...需要...
请教编程时候PLC扫描周期该怎么理解?
这个问题看书上的解释就是最权威的解释了,如果不太理解就多读几遍!其实,在编程的时候,一般是不会特意去在意这个扫描周期的,当然有的程序的确会超出扫描周...可...