先看一下示例代码,如下图所示:
与实验1相比,似乎代码难度增加不少,这是初学PLC编程者的正常反应,理清学习思路,掌握正确的学习方法,逐步解决疑问是PLC编程入门的正确途径,本实验需要掌握的知识点较多,旨在使初学者踏进PLC编程的大门,知识点均来源于西门子官方的系统手册《SIMATIC s7-200_SMART系统手册》,该手册是最基本的参考手册,当阅读学习该手册碰到疑难问题时才需要借助其他的参考书、视频讲解等学习资料。
理解PLC的运行机制
CPU 反复执行一系列任务,这种任务循环执行称为扫描周期。用户程序的执行与否取决于CPU 是处于 STOP 模式还是 RUN 模式,在 RUN 模式下,执行程序;在 STOP 模式下,不执行程序。CPU 连续执行程序中的控制逻辑和读写数据,基本操作非常简单:
● CPU 读取输入状态;
● 存储在 CPU 中的程序使用这些输入评估控制逻辑;
● 程序运行时,CPU 更新数据;
● CPU 将数据写入输出。
2.1全面认识一下STEP 7-Micro/WIN SMART 用户界面(注:出现的页码是对应官方手册中的页码)
① 快速访问工具栏 (页 114) ② 项目树 (页 114) ③ 导航栏 (页 114) ④ 菜单 (页 114) ⑤ 程序编辑器 (页 114) ⑥ 符号信息表 (页 121) ⑦ 符号表 (页 121) ⑧ 状态栏 (页 114) ⑨ 输出窗口 (页 114) ⑩ 状态图表 (页 721) ⑪ 变量表 (页 125) ⑫ 数据块 (页 118) ⑬ 交叉引用 (页 715)
2.2PLC硬件组态(通过系统块提供 S7-200 SMART CPU、信号板和扩展模块的组态,也即根据实际点位种类、数量需求构建PLC的硬件系统)
使用以下方法之一查看和编辑系统块以设置 CPU 选项:
● 单击导航栏上的“系统块”(System Block) 按钮(导航栏第3个按钮)。
● 在“视图”(View) 菜单功能区的“窗口”(Windows) 区域内,从“组件”(Component) 下拉列 表中选择“系统块”(System Block)。
● 选择“系统块”(System Block) 节点,然后按 Enter 键,或双击项目树中的“系统块”(System Block) 节点。 STEP 7-Micro/WIN SMART 打开系统块,并显示适用于 CPU 类型的组态选项。
上图中选择了ST40CPU模块,信号插槽选择了AQ01信号板(1模拟量输出通道,数据对应起始地址AQW12),扩展插槽EM0配置AE40模块(4模拟量输入通道,数据对应起始地址AIW16)。
2.3访问数据
CPU 将信息存储在不同存储单元,每个位置均具有唯一的地址。可以显式标识要访问的 存储器地址。这样程序将直接访问该信息。要访问存储区中的位,必须指定地址,该地址 包括存储器标识符、字节地址和位号(也称为“字节.位”寻址)。
在此示例中,存储区和字节地址(“M3”)代表 M 存储器的第 3 个字节,用句点(“.”)与位地址(位 4)分开。要按字节、字或双字访问存储器中的数据,必须采用类似于指定位地址的方法指定地址。使用“字节地址”格式可按字节、字或双字访问多数存储区(V、I、Q、M、S、L 和 SM)中的数据。这包括区域标识符、数据大小标识和字节、字或双字值的起始字节地址,如下图所示。
2.4数据存储区类别(理解和掌握数据存储区的类型是PLC编程的敲门砖)
SMART 200有多种数据存储区,每种数据存储区的地址格式、数据类型、最大长度等各有不同,详见下表:
2.5熟悉PLC程序指令
指令部分建议去阅读手册,一开始可以不求甚解,先看看常用指令,用到时仔细阅读相关内容,每一类指令可先学1-2个即可。图形化的梯形图编程还是比较容易学习的,这是一个基础,需要花时间学习掌握,实验中对涉及到的指令会有简单讲解。
第一程序段代码解读
常开点使用符号SM0.0,对应地址即SM0.0,这是PLC系统本身提供的特殊存储器:
S7-200 SMART CPU 提供包含系统数据的特殊存储器。SMW 表示指示特殊存储器字的前缀。SMB 表示指示特殊存储器字节的前缀。将各个位寻址为 SM<字节号>.<位号>,STEP 7-Micro/WIN SMART 中的系统符号表显示特殊存储器。
以SMB0为例:特殊存储器字节 0 (SM0.0 - SM0.7) 包含八个位,在各扫描周期结束时 S7-200 SMART CPU 会更新这些位。其他特殊存储器的详细说明请参考手册附录D。
SM0.0在程序中经常使用,意味着每次扫描时该位总是TRUE,总要执行该行语句。
MOV_W则是众多传送指令中的一个,这类指令包括字节传送MOV_B、字传送MOV_W、双字传送MOV_DW和实数传送MOV_R指令,当使能EN为TRUE时,将数据值从源(常数或存储单元)IN 传送到新存储单元 OUT,而不会更改源存储单元中存储的值。
解读:每次扫描,将模拟量扩展板对应AIW16的采集值传送至变量VW0(数据格式为16位整型)。
第二程序段代码解读
上述程序段第一行中:I_DI是整数到双精度整数的转换,DI_R则是双精度整数到实数的转换。二者均是“转换”类指令,在PLC做各种运算时必须保证数据类型符合指令的要求,所以会频繁使用转换指令;
上述程序段第二行中:MUL_R是浮点数相乘,即tempR×10.0⇒tempR;DIV_R则是浮点数除,即tempR÷27648.0⇒VD4,这两条指令实际上是完成了模拟量采集值的一次标度变换。
解读:每次扫描,将模拟量扩展板对应AIW16的采集值转换为对应电压信号(0-10V)的电压值
VD4=(VW0×10.0)/27648.0,而VW0是上一程序段的模拟量测量值(AD转换器的值对应0~27648),经过转换后VD4则是实际测量的电压值。
第三程序段代码解读
解读:每次扫描,将模拟量扩展板对应AIW16的采集值转换为对应电流信号(0-20mA)的电流值
第四程序段代码解读
解读:每次扫描,将VW8的数据传送至AQW12(即信号板模拟量输出通道)
注意:思考一下上述传送指令的问题?试着将源代码更改为VW0,编译输出后再观察实验结果。