S7-200 SMART 编程基础详解:从语言、数据结构到寻址方式
在工业自动化控制领域,PLC 编程是实现设备精准控制的核心环节。S7-200 SMART 作为西门子推出的主流小型 PLC,其编程体系基于 IEC 61131-3 标准,涵盖了丰富的编程语言、数据类型和寻址方式。本文将系统梳理 S7-200 SMART 的编程基础,帮助初学者快速掌握核心概念。
一、PLC 编程语言与程序结构
IEC 61131-3 标准定义了 5 种编程语言,为 PLC 编程提供了标准化的语法规范。这 5 种语言分别是顺序功能图、梯形图、功能块图、指令表(西门子称为语句表)和结构文本,它们各有特点,适用于不同的应用场景。
梯形图(LAD)是应用最广泛的编程语言,其图形化的表达方式与传统继电器控制电路相似,易于理解和上手。梯形图程序被划分为若干个程序段,每个程序段对应一块独立电路,"能流" 从左向右流动,触点接通时能流流过线圈,实现逻辑控制。对于复杂的数字量控制程序,梯形图的逻辑关系一目了然,是初学者的首选。
语句表(STL)则由一系列指令组成,类似于汇编语言,输入快捷高效,适合有丰富编程经验的开发者。
功能块图(FBD)采用类似数字逻辑电路的图形符号,国内应用较少;结构文本是高级编程语言,适合复杂算法的实现;顺序功能图专门用于编制顺序控制程序。
在编程软件中,梯形图、功能块图和语句表可以相互转换,开发者可根据实际需求灵活选用。
S7-200 SMART 的程序结构采用模块化设计,包括主程序、子程序和中断程序三部分。主程序 OB1 是程序的主体,每次扫描都必须执行,每个项目有且仅有一个主程序。子程序仅在被调用时执行,合理使用子程序可以简化代码结构,减少扫描时间。中断程序用于处理突发的中断事件,当中断事件发生时,由 PLC 的操作系统自动调用,确保实时性要求高的任务得到及时处理。
值得注意的是,S7-200 SMART 与 S7-200 的指令系统基本兼容,熟悉 S7-200 的用户可以快速过渡到 S7-200 SMART 的编程环境。
二、数据类型与数制
PLC 处理的信息以数据形式存在,了解数据类型和数制是编程的基础。S7-200 SMART 支持多种数据类型,包括位(BOOL)、字节(Byte)、字(Word)、双字(Double Word)、整数(INT)、双整数(DINT)、浮点数(REAL)、ASCII 码和字符串(STRING)等。
位(BOOL)是最基本的数据单位,只能取 0 或 1 两种状态,对应开关量的断开和接通。字节由 8 位组成,例如 IB3 由 I3.0 至 I3.7 这 8 位构成。相邻的两个字节组成一个字,相邻的两个字或 4 个字节组成一个双字。字节、字和双字均为无符号数,用十六进制表示。
下图 I3.2中的I表示输入,3是字节地址,2是字节中的位地址(0 ~ 7)
字节 一个字节(Byte)由8个位数据组成,IB3由I3.0~I3.7这8位组成。
字和双字 相邻的两个字节组成一个字(Word),相邻的两个字或4个字节组成一个双字(Double Word)。
用VB100的地址编号作为VW100和VD100的地址编号。 组成字和双字的编号最小的字节VB100为VW100和VD100的最高位字节。 字节、字和双字都是无符号数,它们的数值用16#表示。
16 位整数(INT)和 32 位双整数(DINT)是有符号数,最高位为符号位(0 表示正数,1 表示负数),采用二进制补码形式存储。32 位浮点数(REAL)用于表示小数,遵循 IEEE 标准,由符号位、指数部分和尾数部分组成,在编程软件中直接以小数形式输入。
下图为浮点数结构
ASCII 码字符用单引号表示,如 'AB12';字符串用双引号表示,如 "LINE2",其存储格式为第一个字节表示长度(0-254),后续字节依次存放字符。下图为字符串格式:
在数制方面,PLC 常用二进制、十六进制和 BCD 码。二进制是机器内部的数据表示形式,1 位二进制表示开关量状态,多位二进制表示数值,从右往左第 n 位(最低位为第 0 位)的权值为 2ⁿ。十六进制用于简化二进制的书写,4 位二进制对应 1 位十六进制数(0-9,A-F),例如二进制数 2#1010111001110101 可表示为 16#AE75。
BCD 码是二进制编码的十进制数,用 4 位二进制表示 1 位十进制数(0-9),适用于 PLC 的输入输出环节,如拨码开关的设置值通常以 BCD 码形式读取。
有符号数的表示采用二进制补码,正数的补码是其本身,负数的补码由对应正数的补码逐位取反后加 1 得到。例如,十进制数 1158 的二进制补码为 2#0000010010000110,-1158 的补码则为 2#1111101101111010。
三、CPU 的存储区
S7-200 SMART 的 CPU 存储区按功能分为多个区域,每个区域有特定的用途和访问规则。
过程映像输入寄存器(I)和输出寄存器(Q)是 CPU 与外部设备交换信息的接口。外部输入电路接通时,对应的过程映像输入寄存器为 ON(1 状态);梯形图中输出线圈 "通电" 时,输出模块对应的硬件继电器触点闭合,驱动外部负载。
变量存储器(V)用于存放程序执行的中间结果和数据,位存储器(M)类似于中间继电器,提供 32 个字节的存储空间。定时器(T)和计数器(C)的当前值为 16 位有符号整数,其触点状态由对应的位表示。高速计数器(HC)用于累计高速事件,当前值为 32 位有符号整数。
累加器(AC0-AC3)是 32 位的临时存储单元,可按字节、字或双字访问,常用于参数传递和中间结果暂存。特殊存储器(SM)是 CPU 与用户程序交换信息的通道,例如 SM0.0 始终为 ON,SM0.1 仅在第一个扫描周期为 ON,SM0.4 和 SM0.5 提供 1 分钟和 1 秒的时钟脉冲,SM1.0-1.2 分别为零标志、溢出标志和负数标志。
局部存储器(L)为每个程序组织单元(POU)提供 64 字节的私有空间,仅在创建它的 POU 中有效。模拟量输入(AI)和输出(AQ)寄存器用于处理模拟信号,AI 地址从偶数字节开始且只读,AQ 地址同样从偶数字节开始但不能读取。顺序控制继电器(S)用于顺序控制编程,提供 32 字节的存储空间。
I、Q、V、M、S、SM 和 L 存储区支持按位、字节、字或双字访问,为编程提供了灵活的数据操作方式。
四、寻址方式
寻址方式是指 CPU 寻找操作数地址的方法,S7-200 SMART 支持直接寻址和间接寻址两种方式。
直接寻址明确指定存储器的区域、长度和位置,例如 VB200 表示变量存储器 V 区中字节地址为 200 的存储单元,操作简单直观,适合访问固定地址的操作数。
间接寻址通过地址指针访问操作数,指针中存放的是目标操作数的地址。只能用 V、L 存储区或累加器作为指针,可访问 I、Q、V、M、S、AI、AQ、SM 以及 T、C 的当前值,但不能访问单个位地址、高速计数器(HC)、局部存储器(L)和累加器本身。
例如,指令 "MOVD &VB200, AC1" 将 VB200 的地址传送到 AC1,AC1 成为指向 VB200 的指针;指令 "MOVW *AC1, AC0" 则将 AC1 所指的 VW200 中的数据传送到 AC0。访问相邻存储单元时,指针值需按数据长度递增:字节加 1,字加 2,双字加 4。
间接寻址的灵活性在处理数组或表格数据时尤为突出。例如,将每小时的功率给定值存放在 VW100-VW146 中,根据实时时钟的小时值,通过间接寻址可快速读取对应时刻的给定值,无需编写大量的条件判断语句。
LD SM0.0
MOVD &VB100, VD10 //表的起始地址送VD10
+D VD20, VD10 //起始地址加偏移量
+D VD20, VD10
MOVW *VD10, VW30 //读取表中当前的有功功率给定值
一个字由两个字节组成,地址相邻的两个字的地址增量为2(两个字节),所以用了两条加法指令。在上午8时,VD20的值为8,执行两次加法指令后VD10中为VW116的地址。
掌握寻址方式是编写高效程序的关键,合理运用间接寻址可以简化代码,提高程序的通用性和可维护性。
以上内容涵盖了 S7-200 SMART 编程的基础知识,包括编程语言、程序结构、数据类型、存储区和寻址方式。扎实掌握这些概念,将为后续的指令学习和程序设计奠定坚实的基础。在实际编程中,应根据控制需求选择合适的编程语言和数据类型,灵活运用寻址方式优化程序结构,提高控制系统的性能和可靠性。这篇博客涵盖了 S7-200 SMART 编程基础的核心内容。