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

西门子S7-200 SMART教程第七课:数据处理指令深度解析

时间: 2025-12-21 18:57浏览量:3次
西门子S7-200 SMART教程第七课:数据处理指令深度解析
第七课


掌握数据操作精髓,实现高级数据处理功能

一、数据处理指令概述

数据处理指令是PLC编程中用于数据操作的核心指令集,包括数据传送、比较、数学运算、逻辑运算、移位循环和数据类型转换等。这些指令是实现复杂控制算法、数据处理和通信的基础。

学习目标
  • 掌握6大类数据处理指令的工作原理
  • 熟练使用数据传送和比较指令
  • 掌握四则运算和数学函数指令
  • 理解逻辑运算和移位指令的应用
  • 掌握数据类型转换的方法
  • 能够设计复杂的数据处理系统
数据输入
传感器、通信等
数据处理
传送、运算、比较
数据输出
控制、显示、存储

二、数据传送指令

2.1 传送指令家族

传送指令用于在不同存储区之间复制数据,是数据处理的基础。

指令名称 梯形图符号 语句表指令 数据长度 功能描述
字节传送 MOV_B MOVB 8位(1字节) 传送字节数据
字传送 MOV_W MOVW 16位(2字节) 传送字数据
双字传送 MOV_DW MOVD 32位(4字节) 传送双字数据
实数传送 MOV_R MOVR 32位(4字节) 传送实数数据

2.2 传送指令编程实例

实例1:数据初始化与备份
梯形图程序
Network 1 // 系统初始化
SM0.1 VB100
--| |---+---(MOV_B)--
| EN ENO
| IN OUT
| -- --
+----0-----VB100
Network 2 // 备份重要数据
I0.0 VW200
--| |---+---(MOV_W)--
| EN ENO
| IN OUT
| -- --
+---VW100--VW200
Network 3 // 实数参数设置
I0.1 VD300
--| |---+---(MOV_R)--
| EN ENO
| IN OUT
| -- --
+---25.5---VD300
语句表程序
// 网络1
LD SM0.1 // 首次扫描
MOVB 0, VB100 // 初始化状态字节
// 网络2
LD I0.0 // 备份按钮
MOVW VW100, VW200 // 备份重要数据
// 网络3
LD I0.1 // 参数设置
MOVR 25.5, VD300 // 设置温度参数

应用场景说明:

  • 系统初始化:利用SM0.1在PLC启动时清零状态标志
  • 数据备份:将运行参数备份到安全区域,防止误修改
  • 参数设置:设置工艺参数如温度、压力、速度等
  • 数据交换:在不同存储区之间交换数据
  • 2.3 块传送指令

    块传送指令用于批量传送数据,提高数据移动效率。

    指令名称 梯形图符号 语句表指令 参数说明 功能描述
    字节块传送 BLKMOV_B BMB IN, OUT, N 传送N个字节
    字块传送 BLKMOV_W BMW IN, OUT, N 传送N个字
    双字块传送 BLKMOV_D BMD IN, OUT, N 传送N个双字
    实例2:配方数据传输

    控制要求:从配方存储区批量传输10个参数到当前配方区。

    梯形图程序
    Network 1 // 加载配方1
    I0.0 VB500
    --| |---+---(BLKMOV_B)--
    | EN ENO
    | IN OUT
    | N -
    +---VB100--VB200
    | 10
    // 从VB100-VB109传送到VB200-VB209
    语句表程序
    LD I0.0 // 加载配方1
    BMB VB100, VB200, 10 // 传送10个字节

    数据传输示意图:

    配方存储区
    VB100-VB109
    传送10字节
    N=10
    当前配方区
    VB200-VB209

    三、比较指令

    3.1 比较指令类型

    比较指令用于比较两个数值的大小关系,根据比较结果控制程序流程。

    比较类型 梯形图符号 语句表指令 数据类型 功能描述
    等于 == LD==, A==, O== B, W, D, R IN1 = IN2
    不等于 <> LD<>, A<>, O<> B, W, D, R IN1 ≠ IN2
    大于 > LD>, A>, O> B, W, D, R IN1 > IN2
    大于等于 >= LD>=, A>=, O>= B, W, D, R IN1 ≥ IN2
    小于 < LD<, A<, O< B, W, D, R IN1 < IN2
    小于等于 <= LD<=, A<=, O<= B, W, D, R IN1 ≤ IN2

    3.2 比较指令编程实例

    实例3:温度控制与报警

    控制要求:监测温度,在正常范围内控制加热,超出范围报警。

    梯形图程序
    Network 1 // 温度读取
    SM0.0 AIW0
    --| |---+---(MOV_W)--
    | EN ENO
    | IN OUT
    | -- --
    +---AIW0---VW100
    Network 2 // 温度过低加热
    VW100 VW102 Q0.0
    --|<|----| |-----( )--
    // 当前温度 < 设定下限,启动加热
    Network 3 // 温度过高停止加热
    VW100 VW104 Q0.0
    --|>|----|/|-----( )--
    // 当前温度 > 设定上限,停止加热
    Network 4 // 超温报警
    VW100 VW106 Q0.1
    --|>|----| |-----( )--
    // 当前温度 > 报警上限,报警输出
    数据说明
    VW100: 当前温度值 (0-100℃,对应0-1000)
    VW102: 温度下限设定 (如200,对应20℃)
    VW104: 温度上限设定 (如800,对应80℃)
    VW106: 报警上限设定 (如900,对应90℃)

    温度控制逻辑:

    温度范围 比较结果 Q0.0加热 Q0.1报警 控制策略
    VW100 < 200 低于下限 1 0 启动加热
    200 ≤ VW100 ≤ 800 正常范围 0 0 停止加热
    800 < VW100 ≤ 900 高于上限 0 0 停止加热
    VW100 > 900 超温报警 0 1 报警输出
    实例4:多条件联合比较

    控制要求:多个条件同时满足时才执行操作。

    梯形图程序
    Network 1 // 多条件联合控制
    VD100 VD104 VD108 VD112 Q0.0
    --|>=|---|<=|---|>=|---|<=|---( )--
    // VD100 ≥ 下限 且 ≤ 上限 且 VD108 ≥ 下限 且 ≤ 上限
    等效的逻辑表达式
    如果 (VD100 ≥ VD104) 且 (VD100 ≤ VD108) 且
    (VD112 ≥ VD116) 且 (VD112 ≤ VD120)
    则 Q0.0 = 1
    否则 Q0.0 = 0

    四、数学运算指令

    4.1 四则运算指令

    四则运算指令实现基本的算术运算。

    运算类型 梯形图符号 语句表指令 数据类型 计算公式
    加法 ADD_I +I 整数 OUT = IN1 + IN2
    减法 SUB_I -I 整数 OUT = IN1 - IN2
    乘法 MUL_I *I 整数 OUT = IN1 × IN2
    除法 DIV_I /I 整数 OUT = IN1 ÷ IN2
    实数加法 ADD_R +R 实数 OUT = IN1 + IN2
    实数乘法 MUL_R *R 实数 OUT = IN1 × IN2

    4.2 数学运算编程实例

    实例5:流量累计计算

    控制要求:根据流量计脉冲计算累计流量。

    梯形图程序
    Network 1 // 读取瞬时流量
    SM0.0 AIW2
    --| |---+---(MOV_W)--
    | EN ENO
    | IN OUT
    | -- --
    +---AIW2---VW100
    Network 2 // 转换为工程值(L/min)
    SM0.0 VW100
    --| |---+---(MUL)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VW100--0.1---VD200
    Network 3 // 1分钟流量累计
    SM0.5 VD204
    --| |---+---(ADD_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD200--VD204--VD204
    Network 4 // 小时流量统计
    T37 VD208
    --| |---+---(ADD_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD204--VD208--VD208
    // T37为60分钟定时器,每小时触发一次

    计算公式:

    瞬时流量 = AIW2 × 0.1 (L/min)
    分钟累计 = Σ(瞬时流量) (L)
    小时累计 = Σ(分钟累计) (L)

    4.3 数学函数指令

    数学函数指令实现高级数学运算。

    函数类型 梯形图符号 语句表指令 功能描述 数据范围
    平方根 SQRT SQRT 计算平方根 IN ≥ 0
    自然对数 LN LN 计算自然对数 IN > 0
    自然指数 EXP EXP 计算e的IN次方 任意实数
    正弦 SIN SIN 计算正弦值 弧度制
    余弦 COS COS 计算余弦值 弧度制
    正切 TAN TAN 计算正切值 弧度制
    实例6:工程计算 - 管道流量计算

    控制要求:根据差压计算管道流量(流量与差压的平方根成正比)。

    梯形图程序
    Network 1 // 读取差压
    SM0.0 AIW4
    --| |---+---(MOV_W)--
    | EN ENO
    | IN OUT
    | -- --
    +---AIW4---VD300
    Network 2 // 转换为实数
    SM0.0 VD300
    --| |---+---(DTR)--
    | EN ENO
    | IN OUT
    | -- --
    +---VD300--VD304
    Network 3 // 计算平方根
    SM0.0 VD304
    --| |---+---(SQRT)--
    | EN ENO
    | IN OUT
    | -- --
    +---VD304--VD308
    Network 4 // 乘以系数得到流量
    SM0.0 VD308
    --| |---+---(MUL_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD308--0.85--VD312
    计算公式
    流量 = K × √ΔP
    其中:K = 0.85 (流量系数)
    ΔP = 差压值 (Pa)

    五、逻辑运算指令

    5.1 逻辑运算指令类型

    逻辑运算指令对二进制数据进行位逻辑操作。

    运算类型 梯形图符号 语句表指令 数据长度 真值表
    与运算 WAND AND B, W, D 1&1=1, 其他=0
    或运算 WOR OR B, W, D 0|0=0, 其他=1
    异或运算 WXOR XOR B, W, D 相同=0, 不同=1
    取反运算 INV INV B, W, D 0→1, 1→0

    5.2 逻辑运算编程实例

    实例7:状态位组合控制

    控制要求:多个设备状态组合控制,实现复杂的联锁逻辑。

    梯形图程序
    Network 1 // 组合状态字
    I0.0 VB10
    --| |---+---(MOV_B)--
    | EN ENO
    | IN OUT
    | -- --
    +----0-----VB10
    Network 2 // 设置状态位
    I0.1 VB10.0
    --| |--------( )-- // 设备1运行
    I0.2 VB10.1
    --| |--------( )-- // 设备2运行
    I0.3 VB10.2
    --| |--------( )-- // 设备3运行
    I0.4 VB10.3
    --| |--------( )-- // 故障状态
    Network 3 // 允许启动条件
    SM0.0 VB10
    --| |---+---(WAND)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VB10--16#07--VB20
    Network 4 // 判断条件
    VB20 16#07 Q0.0
    --|==|----|/|----( )--
    // 设备1、2、3都运行且无故障时允许启动

    状态位说明:

    状态字节VB10位定义
    7
    6
    5
    4
    3
    2
    1
    0
    备用
    备用
    备用
    备用
    故障
    设备3
    设备2
    设备1

    逻辑运算分析:

    VB20 = VB10 AND 16#07
    16#07 = 00000111B
    结果:只保留低3位(设备运行状态)
    条件:VB20 = 16#07 (00000111B)
    含义:设备1、2、3都运行,且第3位(故障位)为0

    六、移位与循环指令

    6.1 移位指令类型

    移位指令用于对数据进行位移动操作。

    移位类型 梯形图符号 语句表指令 数据长度 移位方向
    左移位 SHL SL B, W, D 向左移动
    右移位 SHR SR B, W, D 向右移动
    循环左移 ROL RL B, W, D 循环左移
    循环右移 ROR RR B, W, D 循环右移

    6.2 移位指令编程实例

    实例8:流水灯控制

    控制要求:8个流水灯依次点亮,实现跑马灯效果。

    梯形图程序
    Network 1 // 初始化
    SM0.1 QB0
    --| |---+---(MOV_B)--
    | EN ENO
    | IN OUT
    | -- --
    +---16#01--QB0
    Network 2 // 1秒定时
    SM0.0 T37
    --| |---+---(TON)--
    | EN ENO
    | IN PT
    | -- --
    +---SM0.0--10---T37
    Network 3 // 左循环移位
    T37 QB0
    --| |---+---(ROL_B)--
    | EN ENO
    | IN OUT
    | N -
    +---QB0---QB0
    | 1

    移位过程演示:

  • 初始化:QB0 = 00000001B (只有Q0.0亮)
  • 1秒后左移1位:QB0 = 00000010B (Q0.1亮)
  • 再1秒后左移1位:QB0 = 00000100B (Q0.2亮)
  • ...依次左移,实现跑马灯效果
  • 到Q0.7后,由于是循环移位,回到Q0.0
  • 位模式变化:

    QB0变化过程(二进制)
    0
    0
    0
    0
    0
    0
    0
    1
    0
    0
    0
    0
    0
    0
    1
    0
    0
    0
    0
    0
    0
    1
    0
    0

    七、数据类型转换指令

    7.1 转换指令类型

    转换指令用于不同数据类型之间的转换。

    转换类型 梯形图符号 语句表指令 输入类型 输出类型
    字节到整数 B_I BTI 字节 整数
    整数到字节 I_B ITB 整数 字节
    整数到双整数 I_DI ITD 整数 双整数
    双整数到整数 DI_I DTI 双整数 整数
    双整数到实数 DI_R DTR 双整数 实数
    实数到双整数 R_DI ROUND 实数 双整数(四舍五入)
    实数到双整数 TRUNC TRUNC 实数 双整数(截断)

    7.2 转换指令编程实例

    实例9:模拟量处理与显示

    控制要求:读取模拟量输入,转换为工程值显示。

    梯形图程序
    Network 1 // 读取模拟量原始值
    SM0.0 AIW0
    --| |---+---(MOV_W)--
    | EN ENO
    | IN OUT
    | -- --
    +---AIW0---VW100
    Network 2 // 整数转双整数
    SM0.0 VW100
    --| |---+---(I_DI)--
    | EN ENO
    | IN OUT
    | -- --
    +---VW100--VD104
    Network 3 // 双整数转实数
    SM0.0 VD104
    --| |---+---(DI_R)--
    | EN ENO
    | IN OUT
    | -- --
    +---VD104--VD108
    Network 4 // 转换为工程值
    SM0.0 VD108
    --| |---+---(DIV_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD108--320.0--VD112
    转换公式
    温度值 = (AIW0 ÷ 32000) × 100 ℃
    其中:AIW0范围 0-32000
    温度范围 0-100℃

    数据类型转换链:

    AIW0 (WORD) → VW100 (INT) → VD104 (DINT) → VD108 (REAL) → VD112 (REAL)
    原始值 → 整数 → 双整数 → 实数 → 工程值

    八、综合应用案例

    8.1 案例一:智能配料系统

    控制要求:
    1. 系统有3种原料A、B、C,按配方比例混合
    2. 配方参数:A:VW100, B:VW102, C:VW104 (单位:kg)
    3. 每种原料有独立的称重传感器(AIW0, AIW2, AIW4)
    4. 实时计算已投料重量和剩余重量
    5. 投料完成后自动搅拌,搅拌时间可设置
    6. 记录每次生产的配方、实际用量、生产时间

    数据处理流程:

  • 数据采集:读取3路模拟量,转换为重量值
  • 配方比较:比较实际重量与配方设定值
  • 数学运算:计算剩余重量、总重量、比例等
  • 数据转换:重量单位转换,数据格式转换
  • 数据存储:存储生产数据到指定区域
  • 逻辑控制:根据比较结果控制阀门动作
  • 关键计算:

    原料A实际重量 = (AIW0 ÷ 32000) × 量程
    剩余重量 = 配方设定 - 实际重量
    投料比例 = 实际重量 ÷ 配方设定 × 100%
    总重量 = 原料A + 原料B + 原料C

    8.2 案例二:数据采集与处理系统

    系统功能:
    1. 采集8路模拟量信号(温度、压力、流量等)
    2. 对每路信号进行滤波处理(移动平均)
    3. 计算每个参数的最大值、最小值、平均值
    4. 越限报警,记录报警次数和时间
    5. 定时存储数据到历史记录区
    6. 计算运行效率、能耗等统计指标

    数据处理算法:

    移动平均滤波算法
    // 数据结构:VD100-VD199 存储最近10次采样值
    // 每次采样时:
    1. 将新值存入当前指针位置
    2. 指针向后移动一位
    3. 如果指针超过数组末尾,回到开头
    4. 计算数组中所有值的平均值
    5. 输出平均值作为滤波结果

    统计计算:

    平均值 = (Σ采样值) ÷ 采样次数
    最大值 = MAX(采样值1, 采样值2, ..., 采样值n)
    最小值 = MIN(采样值1, 采样值2, ..., 采样值n)
    标准偏差 = √[Σ(采样值-平均值)² ÷ (n-1)]
    课后练习

    练习1:数据采集与报警系统


    西门子S7-200 SMART教程第七课补充:数据处理程序实例

    九、智能配料系统完整程序

    9.1 系统I/O分配

    信号类型 地址 功能描述
    数字量输入 I0.0 启动按钮
    数字量输入 I0.1 停止按钮
    数字量输入 I0.2 急停按钮
    数字量输出 Q0.0 原料A进料阀
    数字量输出 Q0.1 原料B进料阀
    数字量输出 Q0.2 原料C进料阀
    数字量输出 Q0.3 搅拌电机
    数字量输出 Q0.4 出料阀
    模拟量输入 AIW0 原料A重量传感器
    模拟量输入 AIW2 原料B重量传感器
    模拟量输入 AIW4 原料C重量传感器

    9.2 配方参数存储区

    参数名称 地址 数据类型 单位 说明
    原料A配方值 VW100 INT kg 0-100kg
    原料B配方值 VW102 INT kg 0-100kg
    原料C配方值 VW104 INT kg 0-100kg
    搅拌时间 VW106 INT 10-600秒
    原料A实际值 VD200 REAL kg 实时重量
    原料B实际值 VD204 REAL kg 实时重量
    原料C实际值 VD208 REAL kg 实时重量

    9.3 完整梯形图程序

    网络1 系统启停控制
    I0.0 I0.1 I0.2 M0.0
    --| |----|/|----|/|-----(S)--
    N:1
    I0.1 M0.0
    --| |--------(R)--
    N:1
    // M0.0:系统运行标志
    网络2 原料A重量采集与转换
    SM0.0 AIW0
    --| |---+---(MOV_W)--
    | EN ENO
    | IN OUT
    | -- --
    +---AIW0---VW10
    // 读取模拟量原始值
    SM0.0 VW10
    --| |---+---(I_DI)--
    | EN ENO
    | IN OUT
    | -- --
    +---VW10---VD14
    // 整数转双整数
    SM0.0 VD14
    --| |---+---(DI_R)--
    | EN ENO
    | IN OUT
    | -- --
    +---VD14---VD20
    // 双整数转实数
    SM0.0 VD20
    --| |---+---(DIV_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD20--100.0--VD200
    // 转换为工程值(kg)
    网络3 原料B重量采集与转换
    SM0.0 AIW2
    --| |---+---(MOV_W)--
    | EN ENO
    | IN OUT
    | -- --
    +---AIW2---VW30
    SM0.0 VW30
    --| |---+---(I_DI)--
    | EN ENO
    | IN OUT
    | -- --
    +---VW30---VD34
    SM0.0 VD34
    --| |---+---(DI_R)--
    | EN ENO
    | IN OUT
    | -- --
    +---VD34---VD40
    SM0.0 VD40
    --| |---+---(DIV_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD40--100.0--VD204
    网络4 原料C重量采集与转换
    SM0.0 AIW4
    --| |---+---(MOV_W)--
    | EN ENO
    | IN OUT
    | -- --
    +---AIW4---VW50
    SM0.0 VW50
    --| |---+---(I_DI)--
    | EN ENO
    | IN OUT
    | -- --
    +---VW50---VD54
    SM0.0 VD54
    --| |---+---(DI_R)--
    | EN ENO
    | IN OUT
    | -- --
    +---VD54---VD60
    SM0.0 VD60
    --| |---+---(DIV_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD60--100.0--VD208
    网络5 原料A投料控制
    M0.0 VD200 VW100 Q0.0
    --| |----|<|----| |-----( )--
    VD200 VW100 VW110
    --|>=|----| |----(MOV_W)--
    IN OUT
    -- --
    1-----VW110
    // VW110:原料A完成标志
    网络6 原料B投料控制
    M0.0 VW110 VD204 VW102 Q0.1
    --| |----| |----|<|----| |-----( )--
    VD204 VW102 VW112
    --|>=|----| |----(MOV_W)--
    IN OUT
    -- --
    1-----VW112
    // VW112:原料B完成标志
    网络7 原料C投料控制
    M0.0 VW112 VD208 VW104 Q0.2
    --| |----| |----|<|----| |-----( )--
    VD208 VW104 VW114
    --|>=|----| |----(MOV_W)--
    IN OUT
    -- --
    1-----VW114
    // VW114:原料C完成标志
    网络8 搅拌控制
    VW114 Q0.3
    --| |----+----( )--
    | | T37
    +----+---(TON)--
    IN PT
    -- --
    VW106 x 10
    // T37:搅拌定时器,VW106单位为秒,需转换为100ms
    网络9 出料控制
    T37 Q0.4
    --| |----+----(S)--
    | | N:1
    | | T38
    +----+---(TON)--
    IN PT
    -- --
    50
    T38 Q0.4
    --| |--------(R)--
    N:1
    // T38:出料定时5秒
    网络10 数据计算 - 剩余重量
    SM0.0 VW100
    --| |---+---(SUB_I)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VW100--VD200--VW120
    // 原料A剩余重量 = 配方值 - 实际值
    SM0.0 VW102
    --| |---+---(SUB_I)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VW102--VD204--VW122
    SM0.0 VW104
    --| |---+---(SUB_I)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VW104--VD208--VW124
    网络11 数据计算 - 总重量和比例
    SM0.0 VD200
    --| |---+---(ADD_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD200--VD204--VD300
    // 临时和 = 原料A + 原料B
    SM0.0 VD300
    --| |---+---(ADD_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD300--VD208--VD304
    // 总重量 = 原料A + 原料B + 原料C
    SM0.0 VD200
    --| |---+---(DIV_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD200--VW100--VD308
    // 原料A比例 = 实际值 ÷ 配方值
    网络12 生产数据记录
    T38 VB400
    --| |---+---(MOV_B)--
    | EN ENO
    | IN OUT
    | -- --
    +---VB400+1--VB400
    // 生产批次计数
    T38 VD404
    --| |---+---(MOV_R)--
    | EN ENO
    | IN OUT
    | -- --
    +---VD200--VD404
    // 记录原料A实际用量
    T38 VD408
    --| |---+---(MOV_R)--
    | EN ENO
    | IN OUT
    | -- --
    +---VD204--VD408
    // 记录原料B实际用量
    网络13 报警处理
    VD200 VW130 Q0.5
    --|>|----| |-----( )--
    // 原料A超重报警
    T37 VW140
    --| |---+---(ADD_I)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VW140--1--VW140
    // 搅拌超时计数

    9.4 程序功能说明

  • 网络1:系统启停控制,使用置位复位指令
  • 网络2-4:模拟量采集与转换,将原始值转换为工程值
  • 网络5-7:顺序投料控制,前一种原料完成才开始下一种
  • 网络8:搅拌控制,时间可设定
  • 网络9:出料控制,自动出料5秒
  • 网络10-11:数据计算,包括剩余重量、总重量、比例等
  • 网络12:生产数据记录,记录每次生产的关键数据
  • 网络13:报警处理,超重和超时报警
  • 十、数据采集与处理系统完整程序

    10.1 系统参数定义

    参数区域 地址范围 功能描述
    采样数据区 VD100-VD179 存储最近10次采样值(8路×10次)
    滤波结果区 VD200-VD207 存储8路信号的滤波结果
    统计数据区 VD300-VD307 存储最大值
    统计数据区 VD400-VD407 存储最小值
    统计数据区 VD500-VD507 存储平均值
    报警记录区 VD600-VD607 存储报警次数

    10.2 完整梯形图程序

    网络1 系统初始化
    SM0.1 VB0
    --| |---+---(FILL_N)--
    | EN ENO
    | IN OUT
    | N -
    +----0----VB0
    | 200
    // 初始化数据区为0
    SM0.1 VW10
    --| |---+---(MOV_W)--
    | EN ENO
    | IN OUT
    | -- --
    +----0----VW10
    // 初始化采样指针
    网络2 采样定时
    SM0.0 T50
    --| |---+---(TON)--
    | EN ENO
    | IN PT
    | -- --
    +---SM0.0--100--T50
    // 100ms采样周期
    网络3 通道1数据采集
    T50 AIW0
    --| |---+---(MOV_W)--
    | EN ENO
    | IN OUT
    | -- --
    +---AIW0---VW20
    T50 VW20
    --| |---+---(I_DI)--
    | EN ENO
    | IN OUT
    | -- --
    +---VW20---VD24
    T50 VD24
    --| |---+---(DI_R)--
    | EN ENO
    | IN OUT
    | -- --
    +---VD24---VD30
    T50 VD30
    --| |---+---(DIV_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD30--320.0--VD100[VW10]
    // 存储到循环缓冲区,VW10为指针
    网络4 通道1移动平均滤波
    T50 VD200
    --| |---+---(MOV_R)--
    | EN ENO
    | IN OUT
    | -- --
    +----0.0---VD200
    // 清零累加和
    T50 VW40
    --| |---+---(FOR)--
    | EN ENO
    | INDX INIT FINAL
    | -- -- --
    +---VW40--0---9
    T50 VD200
    --| |---+---(ADD_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD200--VD100[VW40]--VD200
    NEXT
    T50 VD200
    --| |---+---(DIV_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD200--10.0--VD500
    // 平均值 = 总和 ÷ 10
    网络5 通道1最大值最小值计算
    T50 VD100[0]
    --| |---+---(MOV_R)--
    | EN ENO
    | IN OUT
    | -- --
    +---VD100[0]--VD300
    // 初始化最大值为第一个采样值
    T50 VD100[0]
    --| |---+---(MOV_R)--
    | EN ENO
    | IN OUT
    | -- --
    +---VD100[0]--VD400
    // 初始化最小值为第一个采样值
    T50 VW50
    --| |---+---(FOR)--
    | EN ENO
    | INDX INIT FINAL
    | -- -- --
    +---VW50--1---9
    T50 VD100[VW50] VD300 VD300
    --| |----|>|----(MOV_R)--
    IN OUT
    -- --
    VD100[VW50]--VD300
    T50 VD100[VW50] VD400 VD400
    --| |----|<|----(MOV_R)--
    IN OUT
    -- --
    VD100[VW50]--VD400
    NEXT
    网络6 通道1越限报警处理
    VD500 VD600 Q0.0
    --|>|----| |-----( )--
    // 超上限报警
    VD500 VD610 Q0.1
    --|<|----| |-----( )--
    // 超下限报警
    VD500 VD600 VD620
    --|>|----| |----(INC_W)--
    IN OUT
    -- --
    VD620--VD620
    // 超上限报警计数
    网络7 定时数据存储
    T51 VD700
    --| |---+---(MOV_R)--
    | EN ENO
    | IN OUT
    | -- --
    +---VD500--VD700[VW60]
    // 存储平均值到历史记录
    T51 VW60
    --| |---+---(INC_W)--
    | EN ENO
    | IN OUT
    | -- --
    +---VW60--VW60
    VW60 1000 VW60
    --|>=|----(MOV_W)--
    IN OUT
    -- --
    0-----VW60
    // 循环存储,最多1000条记录
    网络8 运行效率计算
    T52 VD800
    --| |---+---(MUL_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD500--VD810--VD820
    // 瞬时功率 = 流量 × 压差
    T52 VD830
    --| |---+---(ADD_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD820--VD830--VD830
    // 累计能耗
    T52 VD840
    --| |---+---(DIV_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD820--VD850--VD860
    // 运行效率 = 实际功率 ÷ 额定功率
    网络9 通道1标准偏差计算
    T53 VD900
    --| |---+---(MOV_R)--
    | EN ENO
    | IN OUT
    | -- --
    +----0.0---VD900
    // 清零方差和
    T53 VW70
    --| |---+---(FOR)--
    | EN ENO
    | INDX INIT FINAL
    | -- -- --
    +---VW70--0---9
    T53 VD910
    --| |---+---(SUB_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD100[VW70]--VD500--VD910
    T53 VD910
    --| |---+---(MUL_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD910--VD910--VD920
    T53 VD900
    --| |---+---(ADD_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD900--VD920--VD900
    NEXT
    T53 VD900
    --| |---+---(DIV_R)--
    | EN ENO
    | IN1 IN2 OUT
    | -- -- --
    +---VD900--9.0--VD930
    T53 VD930
    --| |---+---(SQRT)--
    | EN ENO
    | IN OUT
    | -- --
    +---VD930--VD940
    // 标准偏差 = √(方差和 ÷ (n-1))

    10.3 程序功能说明

  • 网络1:系统初始化,清零数据区
  • 网络2:设置采样定时器,100ms采样周期
  • 网络3:通道1数据采集与转换,存储到循环缓冲区
  • 网络4:移动平均滤波,计算10次采样的平均值
  • 网络5:最大值最小值计算,遍历10次采样值
  • 网络6:越限报警处理,超上下限报警并计数
  • 网络7:定时数据存储,循环存储历史数据
  • 网络8:运行效率计算,功率和效率计算
  • 网络9:标准偏差计算,数据稳定性分析
  • 10.4 注意事项

    编程注意事项
    1. 循环缓冲区需要正确管理指针,防止溢出
    2. 浮点数运算要注意精度问题,避免累积误差
    3. FOR循环嵌套不宜过深,避免扫描周期过长
    4. 报警处理要有防抖动机制,避免误报警
    5. 数据存储要考虑掉电保持,重要数据要备份
    6. 多通道处理时,可以复用相同的处理逻辑
    下载资料前请先绑定手机号码
    对不起,请登录后再发表评论!

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