第 4 章 fx 系列可编程控制器的功能指令
DESCRIPTION
第 4 章 FX 系列可编程控制器的功能指令. 教学提示: FX2N 系列 PLC 除了基本逻辑指令、步进指令外,还有 200 多条功能指令(也称为功能指令)。功能指令实际上是许多功能不同的子程序。与基本逻辑指令只能完成一个特定动作不同,功能指令能完成实际控制中的许多不同类型的操作。 一般来说功能指令可以分为以下几类: ( 1 )程序结构 ( 4 )程序流程控制 ( 7 )便利指令 ( 2 )传送与比较 ( 5 )移位与循环移位 ( 8 )外部输入输出处理 ( 3 )算术与逻辑运算 ( 6 )时钟运算 ( 9 )外部设备通讯. - PowerPoint PPT PresentationTRANSCRIPT
第 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 节中的功能指令汇总表。
1. 功能指令的梯形图表示
X0FNC45MEAN D0 D10 K3
[D.][S.] n)10(
3
)2()1()0(D
DDD
指令表格式 步序 操作码 操作数 0 LD X0 1 MEAN D0 D10 K3 8 。。。。
4.1.1 功能指令的基本格式及执行方式
助记符
操作数
2 、功能指令的通用表达形式及执行方式
V,ZV,ZV,ZV,ZDDDDCCCCTTTTKnSKnSKnSKnSKnMKnMKnMKnMKnYKnYKnYKnYKnXKnXKnXKnXFNFNCCFNFNCC
代码代码代码代码
助记符助记符助记符助记符
(S.(S.))(S.(S.))
(D.(D.))(D.(D.))
K,HK,HK,HK,Hnnnn
图 4.2 功能指令的通用表达形式
操作码与操作数操作码(指令助记符):表示指令的功能操作数:指明参与操作的对象
源操作数 S:执行指令后收据不变的操作数,两个或
两个以上时为 [S1.] 、 [S2.] 。目标操作数 D:执行指令后收据被刷新的操作数,两
个或两个以上时为 [D1.] 、 [D2.] 。其它操作数 m、 n:补充注释的常数,用 K(十进制)
和 H(十六进制)表示,两个或 两个以上时为 m1、 m2 或 n1 、 n2 。
位软元件:只处理开关( ON/OFF )信息的元件,如 X、 Y、 M、和 S;
常数 K、 H或指针 P;字软元件:处理数据的元件,如 T、 C和 D等。位软元件的组合:位软元件组合表示数据: 4个位元件一组,代表 4位 BCD 码,
也表示 1位十进制数;用 KnMi表示, K为十进制, n 为十进制位数,也是位元件的组数,
M 为位元件, i 为位元件的首地址,一般用 0结尾的元件。
4.1.2 4.1.2 功能指令的操作数及变址操作功能指令的操作数及变址操作
1.1. 功能指令的操作数功能指令的操作数
数据长度16 位:参与运算的数据默认为 16位二进制数据32 位: 32 位数据时在操作码前面加 D( Double )
2. 2. 数据长度及执行方式数据长度及执行方式
X0
MOV D0 D1
X1
DMOV D2 D4
(D0)→(D1)
(D3D2)→(D5D4)
执行方式连续执行方式:每个扫描周期都重复执行一次脉冲执行方式:只在信号 OFF→ON 时执行一次,在指令后加 P( Pulse )。
X0
MOV D0 D1
X1
MOVP D2 D4
变址:改变操作数的地址变址寄存器的作用:存放改变地址的数据实际地址 = 当前地址 +变址数据 32 位运算时 V和 Z组合使用, V为高 16 位, Z为低 1
6 位。X0
MOV K8 V
X1MOV K4 Z
MOV D0V D10ZX2
V=(8)
Z=(4)
(D8)→(D14)
3.3. 变址寄存器变址寄存器 VV、、 ZZ
4.4. 常用特殊辅助继电器常用特殊辅助继电器
功能指令执行结果的标志M8020 :零标志M8021 :借位标志M8022 :进位标志M8029 :执行完毕标志M8064 :参数出错标志M8065 :语法出错标志M8066 :电路出错标志M8067 :运算出错标志
名称 梯形图 操作数 D指令
P指令
功能说明
FNC00 CJ
P0~P127 √ 条件跳转
FNC 01 CALL
P0~P62
P64~P127
√ 调用子程序
FNC 02 SRET
子程序返回
FNC 03 IRET
中断返回
FNC 04 EI
中断允许
4.2 程序流程控制指令表 4.1 程序流程控制指令
FNC 00CJ S.
FNC 01CALL S.
FNC 02SRET
FNC 03IRET
FNC 04EI
名称 梯形图 操作数 D指令
P指令
功能说明
FNC 05 DI
中断禁止
FNC 06 FEND
主程序结束
FNC 07 WDT
√ 监视定时器刷新
FNC 08 FOR
K 、 H 、 KnX 、KnY 、 KnM 、 KnS 、 T 、 C 、 D 、V 、 Z
循环开始
FNC 09 NEXT
循环结束
FNC 05DI
FNC 06FEND
FNC 07WDT
FNC 09NEXT
FNC 08FOR S.
4.2.1 条件跳转指令 CJ
1 .指令格式指令编号及助记符:条件跳转指令 FNC00 CJ或 CJ
( P)CJ指令的目标元件是指针标号,其范围是 P0~P63 (允许变址修改) 该指令程序步为 3步,标点步为 1步 . 作为执行序列的一部分指令,有 CJ, CJP 指令,可以缩短运算周期及使用双线圈 .
2 .指令用法条件跳转指令用于当跳转条件成立时跳过 CJ或 CJ( P)指令和指针标号之间的程序,从指针标号处连续执行,若条件不成立则继续顺序执行,以减少程序执行扫描时间 .
图 4.1 CJ 跳转指令的应用
X001X000M100
FNC 00CJ
P1
FNC 00CJ
D1 D2 D3
Y000
M101
S20
T60
RST T248
T248
RST C10
C10
K500
M100①
②
③
M100
X002
X003
X004
X005
X006
X007
X010
X011
X012
K100
K100
FNC 00CJ
P2
PLS M 120
④
⑤
M100
X013
P1
X014M120Y000
Y000
Y001
M130
Y002
X005
X006
Y000
⑥P2
说 明1) .CJ指令跳过部分程序,可以缩短程序的运算周期。2) .如果积算型定时器和计数器的 RST 指令在跳转程序之内,即使跳转程序生效, RST 指令仍然有效。
3) .该指令可以连续和脉冲执行方式。4) .被跳过去的程序中各元件的状态为 : (1) Y 、 M、 S保持跳转前状态不变。 (2) 普通计数器停止计数并保持当前值,高速计数器 C235~C255 继续计数。
(3) 未工作的定时器不动作,已动作的定时器保持当前值。 T192 ~ T199跳转时仍然计时。
3 .跳转程序中软组件的状态在发生跳转时,被跳过的那段程序中的驱动条件已经没有意义了,所以该程序段中的各种继电器和状态器、定时器等将保持跳转发生前的状态不变 .
4 .跳转程序中标号的多次引用标号是跳转程序的入口标识地址,在程序中只能出现一次,同一标号不能重复使用 。但是,同一标号可以多次被引用 .
FNC 00CJ
P2X020
X027
M130
Y002
X005
X006
标记 P2
FNC 00CJ
P2…
…
5 .无条件跳转指令的构造
无条件跳转指令指令的构造
PLC 只有条件跳转指令,没有无条件跳转指令 。遇到需要无条件跳转的情况,可以用条件跳转条件来构造无条件跳转指令,最常使用的是使用 M8000 (只要 PLC 处于 RUN状态,则 M8000总是接通的 .)
FNC 00CJ
P5M8000
X022标记 P5 FNC 00
CJP6
…
运行监视
…
X023PLS M0
FNC 00CJ
P7
标记 P6
P63 的用法
6.CJ指令的跳转目的地是 END 指令时,指针用 P63 ,但 END 指令处不标记 P63 ,否则出错,如下图所示。
FNC 00CJ
P63X000
X001
ENDP63
Y000
( a)错误用法
FNC 00CJ
P63X000
X001
END
Y000
( B)正确用法
下图表示了主控指令区和跳转指令控制区之间可能出现的关系
( 1 )当主控区内嵌于跳转区时,跳转区被执行后,则主控区才被执行。
( 2 )当跳转区内嵌于主控区时,主控区被执行后,则跳转区才被执行。
( 3 )从主控区外跳到主控区内时,跳转优先,不论主控触点状态如何,都做 ON 处理。
( 4 )当主控触点为 ON 时,跳转条件也成立时,可以从主控区内跳到主控区外,这时,主控结束指令 MCR 不影响跳转。
( 5 )跳转指令可以从一个主控区跳到另一个主控区,条件是跳转指令所在主控区被执行且跳转条件成立,这时,同样是跳转优先,跳转指令所在的主控区的 MCR 指令被忽略,跳入区的主控指令 MC 也被忽略(即主控触点状态当成 ON状态处理)。
( 6 )每一个跳转程序段都应该使用专用的 P 指针。
子程序调用 FNC01 CALL 操作数:指针 P0~ P62 、 P64 ~ P127 子程序返回 FNC02 SRET 无操作数说 明
子程序应该在主程序结束之后编程。即:子程序应写在主程序之后,即子程序的标号应写在指令 FEND之后,且子程序必须以 SRET 指令结束。
CJ指令的指针与 CALL 的指针不能重复。主程序允许嵌套,嵌套级别最多为 5级。每段子程序使用的指针是专用指针,不能再供其他子程序或跳转程序段使用。
子程序只能用 T192 ~ T199 和 T246 ~ T249 作定时器。
4.2.2 调用子程序指令
梯形图
X001X001
FENDFEND
SRETSRET
P8
CALCALLL
P8P8
Y001Y001
X012X012
Y021Y021
X011X011Y030Y030
……
…
主程序
子程序
图 4.7 CALL 指令使用说明
X001X001
FENDFEND
SRETSRET
P8
CALCALLL
P8P8
Y001Y001
X012X012
Y021Y021
X011X011Y030Y030
……
主程序
子程序
①CALCALLL
P9P9
P9
SRETSRET
子程序
②…
图 4.8 CALL 子程序嵌套示例图
4.2.3 4.2.3 中断指令中断指令
中断返回 FNC03 IRET 开中断 FNC04 EI 关中断 FNC05 DI均无操作数梯形图
开中断范围
X0
I100
X10FEND
IRET
EI
DI
IRET
I101
中断子程序 2
中断子程序 1
X11
输入端子事件编号
有效性控制 SM上升沿中断 下降沿中断
X000 I001 I000 M8050
X001 I101 I100 M8051
X002 I201 I200 M8052
X003 I301 I300 M8053
X004 I401 I400 M8054
X005 I501 I500 M8055
表 4.2 输入中断事件
事件编号 有效性控制 SM
I6口口 M8050
I7口口 M8051
I8口口 M8052
口口内填 10~99 的整数,表示定时中断的时间间隔,单位为毫秒 .
表 4.3 定时器中断事件 事件编号 有效性控制 SM
I010
M8059
I020
I030
I040
I050
I060
表 4.4 计数器中断事件
M100M100
FNC 04FNC 04EIEI
Y000Y000
M100M100SETSETM800M80000
FNC 06FNC 06FEND FEND
I001 I001
FNC 03FNC 03IRET IRET
END END
M100M100RSTRSTM800M80000
FNC 03FNC 03IRETIRET
I100 I100
( a)输入中断
X000X000
FNC 04FNC 04EIEI
Y000Y000SETSET
I890 I890
END END
M805M80588
RSTRSTX001X001
M805M80588
SETSET
FNC 06FNC 06FEND FEND
X000X000
Y000Y000RSTRSTM800M80000
FNC 03FNC 03IRETIRET
( b) 定时器中断
说 明中断请求信号的宽度必须大于 200μs中断程序以中断事件号作为开始标记,以中断返回指令 IRET 作为结束标志,每个中断程序都要有 IRET语句。
中断程序应该放在主程序结束指令 FEND之后。主程序中,允许中断的程序段以允许中断指令 EI作为开始标志,以禁止中断指令 DI作为结束标志。
一般情况下,一次中断请求执行一次中断程序。中断程序的执行不受扫描周期的影响。
说 明在执行某个中断子程序时,禁止其它中断请求。中断程序允许嵌套,嵌套级别为 2级。中断指针共有 15个:输入中断 6 个,定时器中断 3个,计数器中断 6 个。
中断程序用 T192 ~ T199 和 T246 ~ T249 作定时器。中断的优先级别 :多个中断信号不同时产生时,按先后顺序中断。多个中断信号同时产生时,中断指针号小的具有优先权。
无操作数梯形图
X1X1
FENDFEND
SRETSRET
P8
CALCALLL
P8P8
Y1Y1
X12X12
Y21Y21
X11X11Y30Y30
……
…
主程序
子程序
4.2.4 4.2.4 主程序结束指令 主程序结束指令 FNC06 FENDFNC06 FEND
说 明
与 END 指令的功能一样,执行到该指令时程序返回
到 0 步。
中断服务子程序和子程序应该写在 FEND之后,并且
用 IRET 和 SRET返回。
如果多次使用 FEND 指令,在最后的 FEND 和 END之
间编写子程序或中断子程序
X002X002
P21
FNC 00FNC 00CJCJ P20P20
Y001Y001
主程序段
①
子程序
P20
P21P21FNC 00FNC 00CJCJ
X001X001
X003X003X003X003
P50P50FNC 01FNC 01CALLPCALLP
FNC 06 FNC 06 FENDFEND
X005X005
Y002Y002
FNC 06 FNC 06 FENDFEND
X006X006
Y002Y002
FNC 06 FNC 06 FENDFEND
主程序段
②
主程序段
③
X004X004
Y003Y003SETSETX004X004
FNC 02 FNC 02 SRETSRET
P50
M800M80000
无操作数警戒定时器是一个专用定时器,其设定值存放在特殊
的数据寄存器 D8000 中,并以 ms为计时单位。当 PLC 一上电,则对警戒定时器进行初始化,将 K200
(默认设定值为 200ms)装入 D8000 中,每个扫描周期结束时,马上刷新警戒定时器的当前值,使 PLC 能正常运行。
当扫描周期大于 200ms时,即超过了警戒定时器的设定值,警戒定时器的逻辑线圈被接通, CPU 立即停止执行用户程序,同时切断全部输出,并且报警显示。
4.2.5 4.2.5 警戒定时器指令 警戒定时器指令 FNC07 WDTFNC07 WDT
300ms程序段
END
150ms程序段 1
END
FNC 07WDT
M800M80000
150ms程序段 2
图 4.10 WDT 指令的使用
( a) 不能正常执行( b) 能正常执行
如果正常的扫描周期超过警戒时钟的设定值,可以在适当程序步中加入 WDT 指令,适时刷新警戒时钟,使程序能顺利执行。
也可以通过 MOV指令修改警戒定时器的设定值( D8000 的值),最大设定值是 32767ms。
可以计算出程序扫描周期的最大值作为警戒时钟的设定值。跳转程序的结束标志 Pn 在相应的 CJ指令之前时,可能要使
用 WDT 指令。 WDT 指令可用在 FOR-NEXT之间。系统中使用模拟量、定位、通信等模块时,也可能要使用 W
DT 指令。
FNC 12MOV
M800M80000 K500 D8000
FNC 07WDT
4.2.6 4.2.6 循环指令 循环指令 FNC08 FORFNC08 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 循环体
FNC 08FOR
K255
M8002FNC 12MOV
K0 D0
M8002FNC 24
INCD0
FNC 09NEXT
( a) 单重循环
FNC 08FOR
K25
M8002FNC 12MOV
K500 D0
M8002FNC 25
DECD0
FNC 09NEXT
FNC 08FOR
D1
(D1)=20
FNC 09NEXT
( b) 多重循环
作业:
1 、 P238 第 1题 ;
2 、设计一个报警电路。要求启动( X0 )之后,灯( Y0 )闪烁,亮 0.5S ,灭 0.5S ,蜂鸣器( Y1 )响。灯闪烁 30次之后,灯灭,蜂鸣器停,间歇 5S 。如此进行三次,自动停止。试用调用子程序方法编写程序。