首页 > 基础教程 > 西门子S7-200 SMART完全教程 > 文章内容

西门子S7-200 SMART教程第三课 PLC寻址系统与数据类型详解

时间: 2025-12-11 20:03浏览量:2次
西门子S7-200 SMART教程第三课
第三课


深入理解S7-200 SMART的存储器结构与数据访问方式

预计学习时间:80分钟
难度级别:基础
关键词:寻址 存储器 数据类型 变量
学习目标:通过本课学习,你将完全掌握S7-200 SMART的存储器结构、各种寻址方式、数据类型的使用方法,并能够正确规划和使用变量存储区。

一、S7-200 SMART存储器结构

S7-200 SMART PLC的存储器被划分为多个区域,每个区域有特定的功能和地址范围。理解这些存储区是正确编程的基础。

I区 输入映像寄存器
地址范围:I0.0 - I31.7
点数:256点(32字节)

功能:存储所有数字量输入点的状态。PLC在每个扫描周期开始时读取所有输入点的状态并存储到I区。

Q区 输出映像寄存器
地址范围:Q0.0 - Q31.7
点数:256点(32字节)

功能:存储所有数字量输出点的状态。程序执行结果写入Q区,扫描周期结束时输出到实际输出点。

M区 中间继电器
地址范围:M0.0 - M31.7
点数:256点(32字节)

功能:程序内部使用的辅助继电器,不直接对应物理输入输出,用于程序逻辑控制。

V区 变量存储器
地址范围:VB0 - VB8191
大小:8KB(8192字节)

功能:用户自定义变量存储区,可存储各种类型的数据,是编程中最常用的存储区。

SM区 特殊存储器
地址范围:SM0.0 - SM179.7
大小:180字节

功能:存储PLC状态信息和系统标志位,如SM0.0始终为1,SM0.5为1Hz脉冲。

T区 定时器
地址范围:T0 - T255
数量:256个

功能:定时器存储区,每个定时器占用3个字(6字节),存储当前值和状态位。

C区 计数器
地址范围:C0 - C255
数量:256个

功能:计数器存储区,每个计数器占用3个字(6字节),存储当前值和状态位。

AI区 模拟量输入
地址范围:AIW0 - AIW62
点数:32点(16字)

功能:存储模拟量输入值,每个模拟量输入占用1个字(2字节),数值范围0-32000。

AQ区 模拟量输出
地址范围:AQW0 - AQW62
点数:32点(16字)

功能:存储模拟量输出值,每个模拟量输出占用1个字(2字节),数值范围0-32000。

1.1 存储器特性对比

存储区 掉电保持 读写特性 最大范围 扩展性
I区 输入 不保持 只读 I0.0 - I31.7 不可扩展
Q区 输出 不保持 可读写 Q0.0 - Q31.7 不可扩展
M区 中间 部分保持 可读写 M0.0 - M31.7 不可扩展
V区 变量 可设置 可读写 VB0 - VB8191 不可扩展
T区 定时器 TONR保持 可读写 T0 - T255 不可扩展
C区 计数器 可设置 可读写 C0 - C255 不可扩展

二、寻址方式详解

2.1 位寻址(Bit Addressing)

位寻址是最基本的寻址方式,直接访问一个二进制位(0或1)。

// 位寻址格式:存储区标识符 + 字节地址.位地址 I0.0 // 输入字节0的第0位 Q0.1 // 输出字节0的第1位 M0.2 // 中间继电器字节0的第2位 V100.3 // 变量字节100的第3位 // 位寻址范围:0.0 - 31.7 // 字节地址:0-31 // 位地址:0-7

2.2 字节寻址(Byte Addressing)

字节寻址以字节(8位)为单位访问数据。

// 字节寻址格式:存储区标识符 + B + 字节地址 IB0 // 输入字节0(包含I0.0-I0.7) QB0 // 输出字节0(包含Q0.0-Q0.7) MB0 // 中间继电器字节0 VB100 // 变量字节100 // 字节寻址范围: // IB0 - IB31 (32个输入字节) // QB0 - QB31 (32个输出字节) // MB0 - MB31 (32个中间字节) // VB0 - VB8191 (8192个变量字节)

2.3 字寻址(Word Addressing)

字寻址以字(16位,2字节)为单位访问数据。

// 字寻址格式:存储区标识符 + W + 字地址 IW0 // 输入字0(包含IB0-IB1) QW0 // 输出字0(包含QB0-QB1) MW0 // 中间继电器字0 VW100 // 变量字100(包含VB100-VB101) // 重要规则:字地址必须是偶数 // 正确:VW0, VW2, VW4, VW6, ... // 错误:VW1, VW3, VW5, VW7, ... // 字寻址的字节对应关系: // VW100 包含 VB100(高字节)和 VB101(低字节) // 在PLC中,高字节在前,低字节在后

2.4 双字寻址(Double Word Addressing)

双字寻址以双字(32位,4字节)为单位访问数据。

// 双字寻址格式:存储区标识符 + D + 双字地址 ID0 // 输入双字0(包含IB0-IB3) QD0 // 输出双字0(包含QB0-QB3) MD0 // 中间继电器双字0 VD100 // 变量双字100(包含VB100-VB103) // 重要规则:双字地址必须是4的倍数 // 正确:VD0, VD4, VD8, VD12, ... // 错误:VD1, VD2, VD3, VD5, ... // 双字寻址的字节对应关系: // VD100 包含 VB100(最高字节)到 VB103(最低字节) // 存储顺序:VB100 | VB101 | VB102 | VB103

2.5 寻址方式对比表

寻址方式 标识符 数据长度 地址规则 示例 包含的字节
位寻址 X.Y 1位 字节.位(0.0-31.7) I0.0, Q0.1 单个位
字节寻址 XB 8位 字节地址(0-8191) IB0, VB100 1个字节
字寻址 XW 16位 偶数地址(0,2,4...) IW0, VW100 2个连续字节
双字寻址 XD 32位 4的倍数(0,4,8...) ID0, VD100 4个连续字节
重要注意事项: 1. 字地址必须是偶数(0,2,4,6,...) 2. 双字地址必须是4的倍数(0,4,8,12,...) 3. 地址重叠会导致数据错误 4. 不要使用重复的地址

三、数据类型详解

3.1 布尔型 BOOL

长度:1位
取值范围:0或1
存储区:I, Q, M, V, SM

用于表示开关量状态,如按钮、指示灯、继电器等。

示例: I0.0 // 启动按钮 Q0.0 // 电机运行 M0.0 // 运行标志 V100.0 // 故障标志

3.2 字节型 BYTE

长度:8位(1字节)
取值范围:0-255(无符号)
存储区:I, Q, M, V, SM

用于存储8位二进制数据,如BCD码、ASCII码等。

示例: VB0 // 存储设备状态字节 MB0 // 中间状态字节 QB0 // 输出状态字节

3.3 整数型 INT

长度:16位(2字节)
取值范围:-32768 到 +32767
存储区:V, M, SM, AI, AQ

用于存储有符号整数,如计数器值、位置值等。

示例: VW0 // 生产数量 MW0 // 温度设定值 AIW0 // 模拟量输入值

3.4 无符号整数型 WORD

长度:16位(2字节)
取值范围:0-65535
存储区:V, M, SM, AI, AQ

用于存储无符号整数,如定时器当前值、编码器值等。

示例: VW2 // 定时器当前值 AIW2 // 压力传感器值 AQW0 // 模拟量输出值

3.5 双整数型 DINT

长度:32位(4字节)
取值范围:-2147483648 到 +2147483647
存储区:V, M, SM

用于存储大范围有符号整数,如累计产量、距离值等。

示例: VD0 // 累计产量 MD0 // 位置设定值 VD4 // 运行时间累计

3.6 实数型 REAL

长度:32位(4字节)
取值范围:±1.175495e-38 到 ±3.402823e+38
存储区:V, M, SM

用于存储浮点数,如温度、压力、流量等工程值。

示例: VD8 // 温度值 25.5 VD12 // 压力值 0.85 VD16 // 流量值 12.34

3.7 字符串型 STRING

长度:最大254字符
格式:头部+字符串
存储区:V, M

用于存储文本信息,如产品名称、操作提示等。

示例: VB20 // 字符串起始地址 格式:最大长度 | 实际长度 | 字符数据 例如:"ABC"存储为:03 03 41 42 43

3.8 数据类型转换关系

转换类型 源类型 目标类型 转换方法 注意事项
字节到字 BYTE WORD MOVB VB0, VW0 需注意字节顺序
字到双字 WORD DWORD MOVW VW0, VD0 自动填充高16位为0
整数到实数 INT REAL ITD VW0, VD0
DTR VD0, VD4
需先转双整数
实数到整数 REAL INT ROUND VD0, VD4
DTI VD4, VW8
需先四舍五入

四、特殊存储器SM区详解

SM区是系统特殊存储器,包含PLC状态信息和系统标志位,这些位是只读的,由PLC系统自动更新。

SM地址 名称 功能描述 状态
SM0.0 Always ON 始终为1(TRUE) 始终接通
SM0.1 First Scan 第一次扫描时为1,之后为0 初始化脉冲
SM0.2 Retentive Lost 保持数据丢失时为1 数据丢失标志
SM0.3 Run After Power Up 上电进入RUN时为1 上电运行标志
SM0.4 1 Minute Pulse 1分钟时钟脉冲(30秒ON/30秒OFF) 1分钟周期
SM0.5 1 Second Pulse 1秒钟时钟脉冲(0.5秒ON/0.5秒OFF) 1秒钟周期
SM0.6 Scan Clock 扫描时钟脉冲(本次扫描ON,下次扫描OFF) 扫描周期交替
SM0.7 Mode Switch 模式开关位置(0=TERM,1=RUN) 模式指示
SM1.0 Zero Flag 运算结果为0时置1 零标志位
SM1.1 Overflow Flag 运算结果溢出时置1 溢出标志
SM1.2 Negative Flag 运算结果为负时置1 负数标志
// 特殊存储器的典型应用 网络1:利用SM0.5实现指示灯闪烁 LD SM0.5 // 1Hz脉冲 = Q0.0 // 指示灯闪烁 网络2:利用SM0.1进行初始化 LD SM0.1 // 第一次扫描 MOVW 0, VW0 // 清零计数器 MOVW 100, VW2 // 设定初始值 网络3:利用SM1.0判断运算结果 LD I0.0 // 启动运算 MOVW VW10, VW12 -I 50, VW12 // VW12 = VW10 - 50 A SM1.0 // 如果结果为0 = Q0.1 // 结果为零指示灯亮

五、V区地址规划与使用

5.1 V区地址规划原则

1 分区管理

将V区按照功能进行分区,避免地址冲突。

// V区地址规划示例 // 系统标志区:VB0 - VB99 VB0 - VB19 // 系统状态标志 VB20 - VB39 // 错误代码存储 VB40 - VB59 // 操作模式标志 VB60 - VB99 // 系统保留 // 过程变量区:VB100 - VB499 VB100 - VB199 // 模拟量处理 VB200 - VB299 // 数字量状态 VB300 - VB399 // 控制参数 VB400 - VB499 // 临时变量 // 配方数据区:VB500 - VB999 VB500 - VB699 // 配方1参数 VB700 - VB899 // 配方2参数 VB900 - VB999 // 当前配方 // 通信数据区:VB1000 - VB1499 VB1000 - VB1199 // Modbus通信 VB1200 - VB1399 // 以太网通信 VB1400 - VB1499 // 自由口通信 // 用户数据区:VB1500 - VB8191 // 根据实际需要分配
2 数据类型对齐

按照数据类型的要求正确分配地址。

数据类型 地址要求 示例 说明
BOOL 任意 V100.0 - V100.7 可按位使用
BYTE 任意 VB200, VB201 无特殊要求
WORD 偶数地址 VW300, VW302 必须是偶数
DWORD/REAL 4的倍数 VD400, VD404 必须是4的倍数

5.2 变量命名规范

// 变量命名建议使用匈牙利命名法 // 前缀表示数据类型 b - BOOL (位变量) by - BYTE (字节变量) w - WORD (字变量) i - INT (整数) dw - DWORD (双字) r - REAL (实数) s - STRING (字符串) // 中间表示功能 Sta - 状态 Cmd - 命令 Set - 设定值 Act - 实际值 Alm - 报警 Cnt - 计数 // 示例: bRunSta // 运行状态 bFaultAlm // 故障报警 wProdCnt // 产量计数 iTempSet // 温度设定值 rPressAct // 压力实际值 sProdName // 产品名称

六、综合实例:温度控制系统地址规划

项目要求

设计一个温度控制系统的地址规划,系统包含以下功能:

  • 2路温度采集(AIW0, AIW2)
  • 1路加热控制(Q0.0)
  • 1路冷却控制(Q0.1)
  • 温度设定、显示、报警功能
  • 运行时间、故障次数记录

地址规划方案

地址 变量名 数据类型 功能描述 初始值
I0.0 bStartBtn BOOL 启动按钮 0
I0.1 bStopBtn BOOL 停止按钮 0
Q0.0 bHeatOut BOOL 加热输出 0
Q0.1 bCoolOut BOOL 冷却输出 0
AIW0 wTemp1Raw WORD 温度1原始值 0
AIW2 wTemp2Raw WORD 温度2原始值 0
VW100 iTemp1Set INT 温度1设定值 250
VW102 iTemp2Set INT 温度2设定值 200
VW104 iTemp1Act INT 温度1实际值 0
VW106 iTemp2Act INT 温度2实际值 0
VD200 rTemp1Real REAL 温度1工程值 0.0
VD204 rTemp2Real REAL 温度2工程值 0.0
VW300 wRunTime WORD 运行时间(分钟) 0
VW302 wFaultCnt WORD 故障次数 0
VB400 bySysSta BYTE 系统状态字节 0
VB400.0 bAutoMode BOOL 自动模式 1
VB400.1 bManuMode BOOL 手动模式 0
VB400.2 bAlarmSta BOOL 报警状态 0

编程示例

// 网络1:温度值转换(模拟量转工程值) // AIW0范围0-32000对应温度0-100.0℃ LD SM0.0 MOVW AIW0, VW104 // 读取温度1原始值 ITD VW104, VD210 // 整数转双整数 DTR VD210, VD214 // 双整数转实数 /R 320.0, VD214 // 转换为工程值 MOVR VD214, VD200 // 存储到温度1工程值 // 网络2:运行时间累计 LD bRunSta // 运行状态 TON T37, 6000 // 10分钟定时器(6000 * 100ms) LD T37 EU // 上升沿检测 INCW VW300 // 运行时间加1 // 网络3:温度报警判断 LDR> VD200, 105.0 // 温度1大于105℃ O bFaultAlm // 或已有报警 = bFaultAlm // 置位故障报警 LD bFaultAlm EU // 报警上升沿 INCW VW302 // 故障次数加1

七、常见问题与解答

问题描述 可能原因 解决方案
程序编译时报"地址无效" 地址超出范围或格式错误 检查地址是否在有效范围内,格式是否正确
数据读写错误 地址重叠或数据类型不匹配 检查地址是否重复,数据类型是否正确
实数运算结果异常 地址未按4字节对齐 确保实数变量地址是4的倍数
V区数据丢失 未设置掉电保持或电池故障 在系统块中设置V区保持范围,检查电池
特殊存储器不工作 SM地址使用错误 查阅手册确认SM地址和功能

八、课后作业

基础题

  1. 列出S7-200 SMART的8个主要存储区及其地址范围。
  2. 说明位寻址、字节寻址、字寻址、双字寻址的区别和规则。
  3. 写出5个常用特殊存储器位(SM位)的地址和功能。

编程题

为以下控制系统规划地址并编写部分程序:

  • 3个启动按钮(I0.0, I0.1, I0.2)
  • 2个电机输出(Q0.0, Q0.1)
  • 1个模拟量输入(AIW0)测量压力
  • 需要记录电机运行时间和启动次数
  • 需要有自动/手动模式切换

思考题

如果一个项目需要存储100个产品的生产数据,每个产品包含:产品编号(4字节)、生产时间(4字节)、质量数据(4字节),应如何规划V区地址?如何避免地址冲突?

下载资料前请先绑定手机号码
对不起,请登录后再发表评论!

触屏端
扫一扫手机也能发信息
明扬工控商城-工控网-工控自动化真品,一站式专业服务!