返回
三菱FX5U PLC系统教程 第六课:数据处理指令


第一部分:数据基础概念

1.1 数据类型

FX5U支持的数据类型:

  1. 位数据: X、Y、M、S等(1位)

  2. 字数据: D、T、C等(16位)

  3. 双字数据: 一对连续的D寄存器(32位)

  4. 常数: K(十进制)、H(十六进制)

数据长度:

1.2 数据存储方式

数据寄存器D:

位与字的对应:

第二部分:数据传送指令

2.1 基本传送指令

MOV指令(16位传送):

text
指令格式:[MOV S D]  功能:将源数据S传送到目标地址D    示例:     X0  |---||--------[MOV K100 D0]---  功能:X0接通时,将十进制100传送到D0

DMOV指令(32位传送):

text
指令格式:[DMOV S D]  功能:将32位源数据传送到D寄存器对    示例:     X0  |---||-------[DMOV K100000 D0]---  功能:将100000传送到D1、D0组成的32位寄存器

2.2 其他传送指令

BMOV指令(块传送):

text
指令格式:[BMOV S D n]  功能:将连续n个数据从S传送到D    示例:     X0  |---||------[BMOV D0 D10 K5]---  功能:将D0-D4的5个数据传送到D10-D14

FMOV指令(多点传送):

text
指令格式:[FMOV S D n]  功能:将同一个数据S传送到连续的n个地址    示例:     X0  |---||------[FMOV K0 D20 K10]---  功能:将0传送到D20-D29共10个寄存器

第三部分:比较指令应用

3.1 单值比较指令

CMP指令(比较):

text
指令格式:[CMP S1 S2 D]  功能:比较S1和S2,结果存放到D开始的3个位中    结果:  D = 1(S1 > S2)  D+1 = 1(S1 = S2)  D+2 = 1(S1 < S2)    示例:     X0  |---||------[CMP D0 K100 M0]---     M0    Y0  |---||---( )---     M1    Y1  |---||---( )---     M2    Y2  |---||---( )---  功能:D0>100时Y0亮,等于100时Y1亮,小于100时Y2亮

3.2 区间比较指令

ZCP指令(区间比较):

text
指令格式:[ZCP S1 S2 S D]  功能:比较S是否在S1-S2区间,结果存放到D开始的3个位    结果:  D = 1(S < S1)  D+1 = 1(S1 ≤ S ≤ S2)  D+2 = 1(S > S2)    示例:     X0  |---||-----[ZCP K0 K100 D10 M10]---  功能:判断D10的值在哪个区间

第四部分:算术运算指令

4.1 四则运算指令

加法指令:

text
ADD(16位加法):[ADD S1 S2 D]  DADD(32位加法):[DADD S1 S2 D]    示例:     X0  |---||------[ADD D0 D2 D4]---  功能:D0 + D2 → D4       X1  |---||------[DADD D10 D20 D30]---  功能:32位加法:(D11,D10) + (D21,D20) → (D31,D30)

减法指令:

text
SUB(16位减法):[SUB S1 S2 D]  DSUB(32位减法):[DSUB S1 S2 D]    示例:     X0  |---||------[SUB D10 K50 D20]---  功能:D10 - 50 → D20

乘法指令:

text
MUL(16位乘法):[MUL S1 S2 D]  DMUL(32位乘法):[DMUL S1 S2 D]    示例:     X0  |---||------[MUL D0 K10 D2]---  功能:D0 × 10 → D2(结果32位存D3,D2)

除法指令:

text
DIV(16位除法):[DIV S1 S2 D]  DDIV(32位除法):[DDIV S1 S2 D]    示例:     X0  |---||------[DIV D10 K2 D20]---  功能:D10 ÷ 2 → D20(商)... D21(余数)

4.2 加1减1指令

INC指令(加1):

text
指令格式:[INC D]  功能:D的内容加1    示例:     X0  |---||--------[INC D0]---  功能:每次X0接通,D0加1

DEC指令(减1):

text
指令格式:[DEC D]  功能:D的内容减1    示例:     X0  |---||--------[DEC D0]---  功能:每次X0接通,D0减1

第五部分:数据处理综合应用

5.1 数据采集与处理

温度数据处理系统:

text
网络1:温度采集(假设温度值在D100)     M8000  |---||------[MOV K0 D0]---(清零累加值)                 [MOV K0 D1]---(清零计数)                 [MOV K1000 D2]---(采样次数)    网络2:定时采样     M8013(1秒脉冲)      C0 K10  |---||-------------------[CNT]---     C0  |---||------[ADD D0 D100 D0]---(累加温度值)                 [INC D1]---(计数加1)    网络3:计算平均值     C0    D10  |---||---[DIV D0 D1 D10]---(平均温度)                 [MOV K0 D0]---(清零累加)                 [MOV K0 D1]---(清零计数)                 [RST C0]---(复位计数器)    网络4:温度比较     M8000  |---||------[CMP D10 K300 D20]---     D20(高温)    Y0  |---||---( )---     D21(正常)    Y1  |---||---( )---     D22(低温)    Y2  |---||---( )---

5.2 数据转换应用

BCD码与二进制转换:

text
BCD指令(二进制转BCD):[BCD S D]  BIN指令(BCD转二进制):[BIN S D]    示例1:显示用数据转换     X0  |---||------[BCD D100 K4Y0]---  功能:将D100的二进制值转换为BCD码输出到Y0-Y17    示例2:输入数据处理     X1  |---||------[BIN K4X0 D200]---  功能:将X0-X17的BCD码输入转换为二进制存D200

第六部分:数据移位指令

6.1 位移位指令

SFTL指令(左移位):

text
指令格式:[SFTL D n1 n2]  功能:将D开始的n1个位左移n2位    示例:     X0  |---||------[SFTL M0 K16 K1]---  功能:将M0-M15左移1位,最高位移出,最低位补0

SFTR指令(右移位):

text
指令格式:[SFTR D n1 n2]  功能:将D开始的n1个位右移n2位    示例:     X0  |---||------[SFTR M0 K16 K1]---  功能:将M0-M15右移1位,最低位移出,最高位补0

6.2 字移位指令

WSFL指令(字左移位):

text
指令格式:[WSFL D n1 n2]  功能:将D开始的n1个字左移n2字    示例:     X0  |---||------[WSFL D0 K10 K1]---  功能:将D0-D9左移1字,D0移出,D9补0

第七部分:实践任务

任务1:数据采集系统

设计一个压力监测系统:
要求:

  1. 压力传感器数值在D100(0-1000对应0-10MPa)

  2. 每10秒采集一次数据(M8014)

  3. 存储最近10次数据到D200-D209

  4. 计算平均值存D110

  5. 计算最大值存D111,最小值存D112

  6. 压力超过8MPa报警(Y0)

  7. 压力低于1MPa报警(Y1)

任务2:自动配料系统

设计一个三种物料配料系统:
要求:

  1. D0设定总重量(g)

  2. D1设定物料A比例(%),D2设定物料B比例(%),D3设定物料C比例(%)

  3. 计算各物料重量:

    • D10 = D0 × D1 ÷ 100(物料A重量)

    • D11 = D0 × D2 ÷ 100(物料B重量)

    • D12 = D0 × D3 ÷ 100(物料C重量)

  4. 实际重量传感器值在D100

  5. 配料误差超过5%报警(Y2)

  6. 配料完成信号(Y3)

任务3:数据通信处理

设计一个串口数据接收处理系统:
要求:

  1. 接收到的原始数据在D500-D509

  2. 数据校验:求D500-D508的和,存D600

  3. 校验码在D509,比较D600与D509

  4. 校验正确,将数据转存到D300-D308(Y4亮)

  5. 校验错误,报警(Y5亮),数据丢弃

  6. 错误计数存D700,超过10次停机(Y6亮)

第八部分:常见问题解答

问题1:数据处理时出现溢出怎么办?

解决方法:

  1. 使用32位指令处理大数

  2. 检查数据范围是否合理

  3. 使用浮点运算指令(DEADD等)

  4. 添加数据范围限制程序

示例:数据范围限制程序

text
   M8000  |---||------[CMP D100 K0 M0]---     M2(小于0)   [MOV K0 D100]---     M8000  |---||------[CMP D100 K1000 M10]---     M10(大于1000)[MOV K1000 D100]---

问题2:数据传送指令执行多次怎么办?

解决方案:

  1. 使用上升沿触发

  2. 使用自锁电路控制单次执行

  3. 使用标志位控制

示例:上升沿触发传送

text
   X0    M0  |---||---( )---     X0    M0    [MOV K100 D0]---  |---||----|/|---

问题3:如何实现数据断电保持?

方法:

  1. 使用断电保持型数据寄存器(D200以后可设置)

  2. 使用文件寄存器

  3. 使用存储器盒

  4. 程序中将数据备份到EEPROM

第九部分:学习检测

选择题(每题10分)

  1. MOV K100 D0指令的功能是什么?
    A) 将D0传送到K100
    B) 将100传送到D0
    C) 将D0与100比较
    D) 将D0加100

  2. CMP指令的结果占用多少个位?
    A) 1个
    B) 2个
    C) 3个
    D) 4个

  3. ADD D0 D2 D4执行后,D4的值是多少?
    A) D0 + D2
    B) D0 - D2
    C) D0 × D2
    D) D0 ÷ D2

判断题(每题10分)

  1. DMOV指令用于32位数据传送。( )

  2. INC指令每次执行,D寄存器的值加1。( )

  3. ZCP指令用于单值比较。( )

编程题(40分)

设计一个学生成绩统计系统:

要求:

  1. 输入5个学生成绩到D0-D4(0-100分)

  2. 计算平均分存D10

  3. 计算最高分存D11,最低分存D12

  4. 统计各分数段人数:

    • 优秀(≥90):D20

    • 良好(≥80):D21

    • 中等(≥70):D22

    • 及格(≥60):D23

    • 不及格(<60):D24

  5. X0按钮按下开始统计

  6. 统计完成Y0亮

答案部分

选择题答案:

  1. B 2. C 3. A

判断题答案:

  1. 对 2. 对 3. 错

编程题参考程序:

text
网络1:初始化     X0          [MOV K0 D10]---(清平均分)                    [MOV K0 D11]---(清最高分)                    [MOV K100 D12]---(最低分初值100)                    [FMOV K0 D20 K5]---(清统计结果)    网络2:计算总分和最高最低分     X0    M0  |---||---(S)---     M0          [ADD D10 D0 D10]---(累加成绩)                    [CMP D0 D11 M30]---     M30         [MOV D0 D11]---(更新最高分)                    [CMP D0 D12 M40]---     M42         [MOV D0 D12]---(更新最低分)    网络3:统计分数段(以D0为例,其他类似)     M0          [CMP D0 K90 M50]---     M51(等于90)[INC D20]---     M50(大于90)[INC D20]---     M0          [ZCP K80 K89 D0 M60]---     M61(在80-89)[INC D21]---     (其他分数段类似...)    网络4:计算平均分     X1(完成)   [DIV D10 K5 D10]---(计算平均分)                    [RST M0]---(复位标志)    网络5:完成指示     X1    Y0  |---||---( )---

第十部分:课后作业

作业1:数据处理练习

设计以下系统:

  1. 批量数据清零程序(D100-D199)

  2. 数据查找程序(在D200-D299中查找指定值)

  3. 数据排序程序(对D300-D309从小到大排序)

作业2:实际应用设计

设计一个仓库管理系统:

  1. 入库数量存D100,出库数量存D101

  2. 当前库存存D102(自动计算)

  3. 库存上限D103,下限D104

  4. 库存报警:超上限Y0,低于下限Y1

  5. 月累计入库D105,出库D106

  6. 月报表数据清零按钮X0

作业3:复杂数据处理

设计一个模拟量数据处理系统:

  1. 模拟量输入值在D200(0-4000对应0-10V)

  2. 转换为工程值0-100.0%(D201,带1位小数)

  3. 数字滤波:取最近5次平均值

  4. 量程标定功能:

    • 零点标定:X1按下,当前值作为零点存D210

    • 满度标定:X2按下,当前值作为满度存D211

  5. 标定公式:工程值 = (当前值 - 零点) × 100 ÷ (满度 - 零点)

作业4:故障分析

分析以下程序问题:

text
网络1:     X0  |---||------[MOV D0 D1]---                 [ADD D1 K10 D1]---                 [MOV D1 D0]---    网络2:     X1  |---||------[CMP D0 K100 M0]---     M0    Y0  |---||---( )---

学习总结

本课重点回顾:

  1. 数据传送指令的应用

  2. 比较指令的使用技巧

  3. 算术运算指令的编程

  4. 数据处理综合应用

关键技能掌握:

  1. 能够进行各种数据运算

  2. 能够设计数据采集处理系统

  3. 能够实现数据比较和判断

  4. 能够解决实际数据处理问题

常见错误避免:

  1. 数据长度不匹配

  2. 忘记数据清零初始化

  3. 数据溢出处理不当

  4. 比较指令结果使用错误

下节课预告

第七课:移位与循环指令

学习建议

  1. 多做数据处理实验

  2. 从简单计算到复杂系统

  3. 注意数据范围和精度

  4. 重视实际应用案例分析

请认真完成本课的所有实践任务,准备好后可以开始第七课的学习。

祝您学习顺利!

下载资料前请先绑定手机号码