420 likes | 604 Views
第 4 章 FX 系列可编程控制器的功能指令. 教学提示: FX2N 系列 PLC 除了基本逻辑指令、步进指令外,还有 200 多条功能指令(也称为功能指令)。功能指令实际上是许多功能不同的子程序。与基本逻辑指令只能完成一个特定动作不同,功能指令能完成实际控制中的许多不同类型的操作。 一般来说功能指令可以分为以下几类: ( 1 )程序结构 ( 4 )程序流程控制 ( 7 )便利指令 ( 2 )传送与比较 ( 5 )移位与循环移位 ( 8 )外部输入输出处理 ( 3 )算术与逻辑运算 ( 6 )时钟运算 ( 9 )外部设备通讯.
E N D
第4章 FX系列可编程控制器的功能指令 • 教学提示:FX2N系列PLC除了基本逻辑指令、步进指令外,还有200多条功能指令(也称为功能指令)。功能指令实际上是许多功能不同的子程序。与基本逻辑指令只能完成一个特定动作不同,功能指令能完成实际控制中的许多不同类型的操作。 • 一般来说功能指令可以分为以下几类: • (1)程序结构 (4)程序流程控制 (7)便利指令 • (2)传送与比较 (5)移位与循环移位 (8)外部输入输出处理 • (3)算术与逻辑运算 (6)时钟运算 (9)外部设备通讯
本讲学习的要点: • 1.掌握字元件、位组合元件的使用方法。 • 2. 掌握功能指令的基本格式; • 3.学会常用功能指令的编程方法及使用注意事项。 • 本章教学要求: • (1)了解FX2N功能指令的类别、功能定义和书写方式; • (2)掌握应用功能指令的使用条件、表示的方法与步骤及 编程的规则; • (3)能针对一般的工程控制要求应用功能指令编写工程控制程序。
4.1 功能指令概述 • 功能指令和基本逻辑指令的形式不同,基本逻辑指令用助记符或逻辑操作符表示,其梯形图就是继电器触点、线圈的连接图。功能指令用功能号(代码)表示,FX0N系列PLC功能指令的代码为FNC(Function)00~FNC67,FX2系列PLC的功能指令代码为FNC00~FNC99,FX2N系列PLC功能指令的代码为FNC00~FNC250,每条功能指令有其相应的助记符和代码。 • 有关本章中所述的功能指令的代码、操作功能及操作数,参见第4.10节中的功能指令汇总表。
4.1.1 功能指令的基本格式及执行方式 [S.] [D.] n X0 FNC45MEAN K3 D0 D10 1.功能指令的梯形图表示 助记符 操作数 步序 操作码 操作数 0 LD X0 1 MEAN D0 D10 K3 8 。。。。 • 指令表格式
(D.) 代码 n FNC KnX KnY KnM KnS T C D V,Z K,H 助记符 (S.) 2、功能指令的通用表达形式及执行方式 图4.2 功能指令的通用表达形式
操作码与操作数 • 操作码(指令助记符):表示指令的功能 • 操作数:指明参与操作的对象 • 源操作数S:执行指令后收据不变的操作数,两个或 • 两个以上时为[S1.]、[S2.]。 • 目标操作数D:执行指令后收据被刷新的操作数,两 • 个或两个以上时为[D1.]、[D2.]。 • 其它操作数m、n:补充注释的常数,用K(十进制) • 和H(十六进制)表示,两个或 • 两个以上时为m1、m2或n1、n2。
4.1.2 功能指令的操作数及变址操作 1.功能指令的操作数 位软元件:只处理开关(ON/OFF)信息的元件,如X、Y、M、和S; 常数K、H或指针P; 字软元件:处理数据的元件,如T、C和D等。 位软元件的组合: 位软元件组合表示数据:4个位元件一组,代表4位BCD码,也表示1位十进制数; 用KnMi表示,K为十进制,n为十进制位数,也是位元件的组数,M为位元件,i为位元件的首地址,一般用0结尾的元件。
X0 MOV D0 D1 X1 D2 D4 DMOV 2. 数据长度及执行方式 • 数据长度 • 16位:参与运算的数据默认为16位二进制数据 • 32位:32位数据时在操作码前面加D(Double) (D0)→(D1) (D3D2)→(D5D4)
X0 MOV D0 D1 X1 D2 D4 MOVP • 执行方式 • 连续执行方式:每个扫描周期都重复执行一次 • 脉冲执行方式:只在信号OFF→ON时执行一次,在指令后加P(Pulse)。
X0 MOV K8 V X1 K4 Z MOV X2 MOV D0V D10Z 3.变址寄存器V、Z • 变址:改变操作数的地址 • 变址寄存器的作用:存放改变地址的数据 • 实际地址=当前地址+变址数据 • 32位运算时V和Z组合使用,V为高16位,Z为低16位。 V=(8) Z=(4) (D8)→(D14)
4.常用特殊辅助继电器 • 功能指令执行结果的标志 • M8020:零标志 • M8021:借位标志 • M8022:进位标志 • M8029:执行完毕标志 • M8064:参数出错标志 • M8065:语法出错标志 • M8066:电路出错标志 • M8067:运算出错标志
表4.1 程序流程控制指令 FNC 00 CJ FNC 01 CALL S. S. FNC 02 SRET FNC 03 IRET FNC 04 EI 4.2 程序流程控制指令
FNC 08 FOR S. FNC 05 DI FNC 06 FEND FNC 07 WDT FNC 09 NEXT
4.2.1 条件跳转指令CJ 1.指令格式 指令编号及助记符:条件跳转指令FNC00 CJ或CJ(P) • CJ指令的目标元件是指针标号,其范围是P0~P63(允许变址修改) • 该指令程序步为3步,标点步为1步. • 作为执行序列的一部分指令,有CJ,CJP指令,可以缩短运算周期及使用双线圈. 2.指令用法 • 条件跳转指令用于当跳转条件成立时跳过CJ或CJ(P)指令和指针标号之间的程序,从指针标号处连续执行,若条件不成立则继续顺序执行,以减少程序执行扫描时间.
X001 X000 M100 ① M100 M100 P1 M100 FNC 00 CJ P2 ④ ② FNC 00 CJ P1 X013 X002 PLS M 120 FNC 00 CJ D1 D2 D3 X003 X014 M120 Y000 Y000 ⑤ Y000 X004 M101 Y000 X005 Y001 S20 X005 P2 X006 M130 ③ T60 ⑥ X006 K100 Y002 X007 RST T248 X010 T248 K500 X011 RST C10 X012 C10 K100 图4.1 CJ跳转指令的应用
说 明 • 1).CJ指令跳过部分程序,可以缩短程序的运算周期。 • 2).如果积算型定时器和计数器的RST指令在跳转程序之内,即使跳转程序生效,RST指令仍然有效。 • 3).该指令可以连续和脉冲执行方式。 • 4).被跳过去的程序中各元件的状态为: • (1) Y、M、S保持跳转前状态不变。 • (2)普通计数器停止计数并保持当前值,高速计数器C235~C255继续计数。 • (3) 未工作的定时器不动作,已动作的定时器保持当前值。T192~T199跳转时仍然计时。
X020 FNC 00 CJ P2 X027 FNC 00 CJ P2 … … X005 标记P2 M130 X006 Y002 3.跳转程序中软组件的状态 • 在发生跳转时,被跳过的那段程序中的驱动条件已经没有意义了,所以该程序段中的各种继电器和状态器、定时器等将保持跳转发生前的状态不变 . 4.跳转程序中标号的多次引用 • 标号是跳转程序的入口标识地址,在程序中只能出现一次,同一标号不能重复使用 。但是,同一标号可以多次被引用 .
M8000 FNC 00 CJ P5 运行监视 … X022 FNC 00 CJ P6 标记P5 … X023 PLS M0 标记P6 FNC 00 CJ P7 5.无条件跳转指令的构造 • PLC只有条件跳转指令,没有无条件跳转指令 。遇到需要无条件跳转的情况,可以用条件跳转条件来构造无条件跳转指令,最常使用的是使用M8000 (只要PLC处于RUN状态,则M8000总是接通的 .) 无条件跳转指令指令的构造
X000 X000 FNC 00 CJ P63 FNC 00 CJ P63 X001 X001 Y000 Y000 P63 END END (B)正确用法 (a)错误用法 6.CJ指令的跳转目的地是END指令时,指针用P63,但END指令处不标记P63,否则出错,如下图所示。 P63的用法
下图表示了主控指令区和跳转指令控制区之间可能出现的关系下图表示了主控指令区和跳转指令控制区之间可能出现的关系
(1)当主控区内嵌于跳转区时,跳转区被执行后,则主控区才被执行。(1)当主控区内嵌于跳转区时,跳转区被执行后,则主控区才被执行。 • (2)当跳转区内嵌于主控区时,主控区被执行后,则跳转区才被执行。 • (3)从主控区外跳到主控区内时,跳转优先,不论主控触点状态如何,都做ON处理。 • (4)当主控触点为ON时,跳转条件也成立时,可以从主控区内跳到主控区外,这时,主控结束指令MCR不影响跳转。 • (5)跳转指令可以从一个主控区跳到另一个主控区,条件是跳转指令所在主控区被执行且跳转条件成立,这时,同样是跳转优先,跳转指令所在的主控区的MCR指令被忽略,跳入区的主控指令MC也被忽略(即主控触点状态当成ON状态处理)。 • (6)每一个跳转程序段都应该使用专用的P指针。
4.2.2 调用子程序指令 • 子程序调用FNC01 CALL • 操作数:指针P0~P62 、 P64~P127 • 子程序返回FNC02 SRET 无操作数 • 说 明 • 子程序应该在主程序结束之后编程。即:子程序应写在主程序之后,即子程序的标号应写在指令FEND之后,且子程序必须以SRET指令结束。 • CJ指令的指针与CALL的指针不能重复。 • 主程序允许嵌套,嵌套级别最多为5级。 • 每段子程序使用的指针是专用指针,不能再供其他子程序或跳转程序段使用。 • 子程序只能用T192~T199和T246~T249作定时器。
CALL P8 主程序 X001 … FEND X012 Y030 Y021 Y001 P8 子程序 … X011 SRET … • 梯形图 图4.7 CALL指令使用说明
CALL P8 主程序 X001 … FEND X012 P8 子程序① CALL P9 … Y030 Y021 Y001 SRET X011 P9 子程序② … SRET 图4.8 CALL子程序嵌套示例图
EI X0 开中断范围 DI FEND X10 I100 中断子程序1 IRET I101 中断子程序2 IRET 4.2.3 中断指令 • 中断返回 • FNC03 IRET • 开中断 FNC04 EI • 关中断 FNC05 DI • 均无操作数 • 梯形图 X11
表4.3 定时器中断事件 表4.4 计数器中断事件
FNC 04 EI FNC 04 EI M100 X000 M8058 SET FNC 06 FEND X001 M8058 RST M8000 I001 X000 M100 SET Y000 SET Y000 FNC 03 IRET FNC 06 FEND M8000 I890 I100 M100 RST M8000 Y000 RST FNC 03 IRET FNC 03 IRET END END (a)输入中断 (b) 定时器中断
说 明 • 中断请求信号的宽度必须大于200μs • 中断程序以中断事件号作为开始标记,以中断返回指令IRET作为结束标志,每个中断程序都要有IRET语句。 • 中断程序应该放在主程序结束指令FEND之后。主程序中,允许中断的程序段以允许中断指令EI作为开始标志,以禁止中断指令DI作为结束标志。 • 一般情况下,一次中断请求执行一次中断程序。中断程序的执行不受扫描周期的影响。
说 明 • 在执行某个中断子程序时,禁止其它中断请求。 • 中断程序允许嵌套,嵌套级别为2级。 • 中断指针共有15个:输入中断6个,定时器中断3个,计数器中断6个。 • 中断程序用T192~T199和T246~T249作定时器。 • 中断的优先级别: • 多个中断信号不同时产生时,按先后顺序中断。 • 多个中断信号同时产生时,中断指针号小的具有优先权。
CALL P8 主程序 X1 … FEND Y21 Y30 Y1 X12 P8 子程序 … X11 SRET … 4.2.4 主程序结束指令 FNC06 FEND • 无操作数 • 梯形图
说 明 • 与END指令的功能一样,执行到该指令时程序返回到0步。 • 中断服务子程序和子程序应该写在FEND之后,并且用IRET和SRET返回。 • 如果多次使用FEND指令,在最后的FEND和END之间编写子程序或中断子程序
X001 FNC 00 CJ P20 X002 X003 X003 主程序段① FNC 00 CJ P21 X004 FNC 01 CALLP P50 FNC 06 FEND X005 主程序段② P21 Y002 Y001 Y002 FNC 06 FEND X006 主程序段③ P20 FNC 06 FEND X004 P50 子程序 Y003 SET FNC 02 SRET M8000 I000 中断程序 Y003 RST FNC 03 IRET END 图4.9 多个FEND指令的应用
4.2.5 警戒定时器指令 FNC07 WDT • 无操作数 • 警戒定时器是一个专用定时器,其设定值存放在特殊的数据寄存器D8000中,并以ms为计时单位。 • 当PLC一上电,则对警戒定时器进行初始化,将K200(默认设定值为200ms)装入D8000中,每个扫描周期结束时,马上刷新警戒定时器的当前值,使PLC能正常运行。 • 当扫描周期大于200ms时,即超过了警戒定时器的设定值,警戒定时器的逻辑线圈被接通,CPU立即停止执行用户程序,同时切断全部输出,并且报警显示。
M8000 END END 300ms 程序段 150ms 程序段1 FNC 07 WDT 150ms 程序段2 (a) 不能正常执行 (b) 能正常执行 图4.10 WDT指令的使用
如果正常的扫描周期超过警戒时钟的设定值,可以在适当程序步中加入WDT指令,适时刷新警戒时钟,使程序能顺利执行。如果正常的扫描周期超过警戒时钟的设定值,可以在适当程序步中加入WDT指令,适时刷新警戒时钟,使程序能顺利执行。 • 也可以通过MOV指令修改警戒定时器的设定值(D8000的值),最大设定值是32767ms。 • 可以计算出程序扫描周期的最大值作为警戒时钟的设定值。 • 跳转程序的结束标志Pn在相应的CJ指令之前时,可能要使用WDT指令。 • WDT指令可用在FOR-NEXT之间。 • 系统中使用模拟量、定位、通信等模块时,也可能要使用WDT指令。
M8000 K500 D8000 FNC 12 MOV FNC 07 WDT 4.2.6 循环指令 FNC08 FOR • 循环开始 FNC08 FOR • 操作数 • [S]: K,H、KnX、KnY、KnM、KnS、T、C、D、V,Z • 循环结束 FNC09 NEXT 无操作数
说 明 • n为循环次数,其范围为1~32767有效。如果指定为 • -32768~0,则作n=1处理。 • 循环指令最多可以嵌套5级。 • 程序中FOR-NEXT是成对出现的,FOR在前,NEXT在后不可倒置,否则出错。 • 编程时NEXT应该在FEND或END之前,否则出错。 • 利用CJ跳转指令可以跳出FOR、NEXT循环体
M8002 FNC 12 MOV K0 D0 M8002 FNC 12 MOV K500 D0 FNC 08 FOR K255 M8002 FNC 08 FOR K25 FNC 24 INC D0 FNC 08 FOR D1 FNC 09 NEXT (D1)=20 M8002 FNC 25 DEC D0 FNC 09 NEXT (a) 单重循环 FNC 09 NEXT (b) 多重循环
作业: • 1、P238 第1题; • 2、设计一个报警电路。要求启动(X0)之后,灯(Y0)闪烁,亮0.5S,灭0.5S,蜂鸣器(Y1)响。灯闪烁30次之后,灯灭,蜂鸣器停,间歇5S。如此进行三次,自动停止。试用调用子程序方法编写程序。