三菱plc功能指令实际上就是功能各异的PLC子程序块。FX2N系列PLC的功能指令有程序流程、传送比较、四则逻辑运算、旋转移位、数据处理、高速处理、方便指令、外部设备处理、浮点数、时钟运算、接点比较等若干类。本节仅介绍三菱FX2N系列PLC常用的功能指令。
一、功能指令形式 1.功能指令格式
功能指令用编号FNC00~FNC246表示,并给出对应的语句名称,每条功能指令都有一个指令表。例如FNC45是一条数据处理平均值功能的指令,助记符为MEAN,使用简易编程器时输入FNC45,而采用智能编程器或计算机编程时也可输入助记符MEAN。图1是一条取平均值功能指令的梯形图。
图1 MEAN示例梯形图
图中MEAN是功能指令的语句名称,也可使用FNC45(但不直观);D0是源操作数的首元件;D4Z是指定计算结果存放的数据寄存器的地址;K3是指定取值的个数为3。显然该功能指令的含义是D4Z =(D0+D1+D2)/3,即将(D0+D1+D2)/3的运算结果赋值给D4Z。
功能指令的指令段通常占1个程序步,16位操作数占2步,32位操作数占4步。
2. 功能指令执行方式
功能指令有连续执行和脉冲执行两种类型。图2中第1支路的MOV是连续执行型指令,即当X001接通时,各运算周期都执行一次,而第2支路的MOV(P)是脉冲执行型型指令,(P)就表示当X000由OFF转换为ON时,仅执行一次指令。
图2 功能指令执行方式示例
3.可处理数据长度
功能指令可处理16位数据,也可处理32位数据,见图3示例梯形图。第1梯级中,当X000接通,则移位MOV功能指令处理的数据为16位,即将D10 的内容传送至D12;而在第2梯级中,(D)MOV功能指令处理的数据为32位,将D21D20(由D21、D20构成的32位数据)的内容传送到 D23D22(由D23、D22组成的32位数据存储单元)。
图3 功能指令处理数据长度示例
二、程序流程指令 1.条件跳转指令
当执行条件跳转指令CJ指令时,跳过CJ指令和指针标号之间的程序,见图4。当X30接通时,跳转到P20处执行该行及以后程序,如果X30不接通,则跳转不执行,程序按原顺序执行。指令可用的有效指针范围为P0~P127。
图4 CJ指令应用示例
执行跳转指令CJ后,对于不被执行的指令,即使输入零件状态发生改变,输出元件的状态也维持不变。
2.子程序调用指令
图5 CALL指令示例 子程序调用CALL指令的操作数为P0~P127,占用3个程序步。需与子程序返回指令SRET(无操作数)配合使用,见图5。
若X0接通,则转到标号P10处去执行子程序。当执行到子程序结束SRET指令时,返回到CALL指令的下一步执行。使用子程序调用与返回指令时应注意转移标号不能重复,也不可与跳转指令的标号重复。子程序调用可以嵌套调用,最多可达5级嵌套。
FEND是主程序结束指令,无操作数,占用1个程序步。表示主程序结束,当执行到FEND时,PLC进行输入/输出处理,监视定时器刷新,完成后返回起始步。
三、比较指令 1.CMP指令
图6 CMP指令示例 比较CMP指令有3个操作数,其中是将2个源操作数相比较,将比较结果送到目标操作数中,见图6示例。当X0接通时,比较K100和C10当前值的大小,分三种情况分别接通M0、M1、M2中一个辅助继电器,另二个辅助继电器则不接通。若X0不接通,则CMP指令也不执行。
2.ZCP指令
区间比较ZCP指令是将1个源数据与2个源源数据相比较,比较结果将影响目标存储器的数据状态。当X0接通时,根据C30与K100、K120之间的比较结果,分别对M3、M4、M5进行赋值。
四、FX2N顺控指令 FX2N系列PLC有900个状态元件可用于顺序功能图中,其中S0~S9为初始状态器,存储顺序功能图中的起始状态数据,S10~S19为回零状态继电器,S20~S899是普通状态器。
FX2N系列PLC顺控指令有步进触头STL指令和步进返回RET指令。其中STL指令用于步进触头的驱动,而RST指令则用于步进程序结束返回。
1. 单序列顺控指令应用
图8是运料小车的顺控功能图。该小车的一个工作周期由5步组成,分别对应S0、S20~S23,其中步S0为初始步。
图9是运料小车单序列顺控梯形图,第1支路中当初始化脉冲M8002的常开触头闭合时,由SET指令将初始步S0置为活动步。第2支路中当SO的STL 触头和X3的常开触头同时接通时,由SET指令将S20置为活动步。进入第3支路后,当Y1闭合,则置Y0输出为ON并保持,若限位开关X1按下,由步 S20转换至步S21的条件满足,由SET指令将S21置为活动步。直至第6支路中当S23被置为活动步,同时行程开关X2按下时,顺控状态将从S23转换到S0,此处须用OUT指令输出SO状态步,以实现了循环操作。在一系列STL指令之后需用RET指令结束步进顺控指令,使其重返左母线。
图8 单序列顺控梯形图 图9 运料小车单序列顺控功能图
梯形图对应的语句指令程序为:
LD M8002
SET S0 //激活状态步S0
//状态步S0的活动过程
STL SO
LD X3
SET S20
//状态步S20的活动过程
STL S20
LDI Y1
OUT Y0
LD X1
SET S21
//状态步S21的活动过程
STL S21
LDI Y0
OUT Y1
LD X2
SET S22
//状态步S22的活动过程
STL S22
LDI Y1
OUT Y0
LD X0
SET S23
//状态步S23的活动过程
STL S23
LDI Y0
OUT Y1
LD X2
OUT S0 //用OUT指令返回初始状态步S0
RET //结束步进顺控指令
END
三菱plc功能指令。包含FX0N、FX1S、FX1N、FX2N、FX3NC 等三菱PLC的功能指令。 类 | FNC NO. | 指令助记符 | 功能说明 | 对应不同型号的PLC | FX0S | FX0N | FX1S | FX1N | FX2NFX2NC | 程序流程 | 00 | CJ | 条件跳转 | √ | √ | √ | √ | √ | 01 | CALL | 子程序调用 | × | × | √ | √ | √ | 02 | SRET | 子程序返回 | × | × | √ | √ | √ | 03 | IRET | 中断返回 | √ | √ | √ | √ | √ | 04 | EI | 开中断 | √ | √ | √ | √ | √ | 05 | DI | 关中断 | √ | √ | √ | √ | √ | 06 | FEND | 主程序结束 | √ | √ | √ | √ | √ | 07 | WDT | 监视定时器刷新 | √ | √ | √ | √ | √ | 08 | FOR | 循环的起点与次数 | √ | √ | √ | √ | √ | 09 | NEXT | 循环的终点 | √ | √ | √ | √ | √ | 传送与比较 | 10 | CMP | 比较 | √ | √ | √ | √ | √ | 11 | ZCP | 区间比较 | √ | √ | √ | √ | √ | 12 | MOV | 传送 | √ | √ | √ | √ | √ | 13 | SMOV | 位传送 | × | × | × | × | √ | 14 | CML | 取反传送 | × | × | × | × | √ | 15 | BMOV | 成批传送 | × | √ | √ | √ | √ | 16 | FMOV | 多点传送 | × | × | × | × | √ | 17 | XCH | 交换 | × | × | × | × | √ | 18 | BCD | 二进制转换成BCD码 | √ | √ | √ | √ | √ | 19 | BIN | BCD码转换成二进制 | √ | √ | √ | √ | √ | 算术与逻辑运算 | 20 | ADD | 二进制加法运算 | √ | √ | √ | √ | √ | 21 | SUB | 二进制减法运算 | √ | √ | √ | √ | √ | 22 | MUL | 二进制乘法运算 | √ | √ | √ | √ | √ | 23 | DIV | 二进制除法运算 | √ | √ | √ | √ | √ | 24 | INC | 二进制加1运算 | √ | √ | √ | √ | √ | 25 | DEC | 二进制减1运算 | √ | √ | √ | √ | √ | 26 | WAND | 字逻辑与 | √ | √ | √ | √ | √ | 27 | WOR | 字逻辑或 | √ | √ | √ | √ | √ | 28 | WXOR | 字逻辑异或 | √ | √ | √ | √ | √ | 29 | NEG | 求二进制补码 | × | × | × | × | √ | 循环与移位 | 30 | ROR | 循环右移 | × | × | × | × | √ | 31 | ROL | 循环左移 | × | × | × | × | √ | 32 | RCR | 带进位右移 | × | × | × | × | √ | 33 | RCL | 带进位左移 | × | × | × | × | √ | 34 | SFTR | 位右移 | √ | √ | √ | √ | √ | 35 | SFTL | 位左移 | √ | √ | √ | √ | √ | 36 | WSFR | 字右移 | × | × | × | × | √ | 37 | WSFL | 字左移 | × | × | × | × | √ | 38 | SFWR | FIFO(先入先出)写入 | × | × | √ | √ | √ | 39 | SFRD | FIFO(先入先出)读出 | × | × | √ | √ | √ | 数据处理 | 40 | ZRST | 区间复位 | √ | √ | √ | √ | √ | 41 | DECO | 解码 | √ | √ | √ | √ | √ | 42 | ENCO | 编码 | √ | √ | √ | √ | √ | 43 | SUM | 统计ON位数 | × | × | × | × | √ | 44 | BON | 查询位某状态 | × | × | × | × | √ | 45 | MEAN | 求平均值 | × | × | × | × | √ | 46 | ANS | 报警器置位 | × | × | × | × | √ | 47 | ANR | 报警器复位 | × | × | × | × | √ | 48 | SQR | 求平方根 | × | × | × | × | √ | 49 | FLT | 整数与浮点数转换 | × | × | × | × | √ | 高速处理 | 50 | REF | 输入输出刷新 | √ | √ | √ | √ | √ | 51 | REFF | 输入滤波时间调整 | × | × | × | × | √ | 52 | MTR | 矩阵输入 | × | × | √ | √ | √ | 53 | HSCS | 比较置位(高速计数用) | × | √ | √ | √ | √ | 54 | HSCR | 比较复位(高速计数用) | × | √ | √ | √ | √ | 55 | HSZ | 区间比较(高速计数用) | × | × | × | × | √ | 56 | SPD | 脉冲密度 | × | × | √ | √ | √ | 57 | PLSY | 指定频率脉冲输出 | √ | √ | √ | √ | √ | 58 | PWM | 脉宽调制输出 | √ | √ | √ | √ | √ | 59 | PLSR | 带加减速脉冲输出 | × | × | √ | √ | √ | 方便指令 | 60 | IST | 状态初始化 | √ | √ | 82 | ASCI | 16进制数转换成ASCI码 | 83 | HEX | ASCI码转换成16进制数 | × | √ | √ | √ | √ | 84 | CCD | 校验 | × | √ | √ | √ | √ | 85 | VRRD | 电位器变量输入 | × | × | √ | √ | √ | 86 | VRSC | 电位器变量区间 | × | × | √ | √ | √ | 87 | - | - | 88 | PID | PID运算 | × | × | √ | √ | √ | 89 | - | - | 浮点数运算 | 110 | ECMP | 二进制浮点数比较 | × | × | × | × | 111 | EZCP | 二进制浮点数区间比较 | × | × | × | × | 118 | EBCD | 二进制浮点数→十进制浮点数 | × | × | × | × | √ | 119 | EBIN | 十进制浮点数→二进制浮点数 | × | × | × | × | √ | 120 | EADD | 二进制浮点数加法 | × | × | × | × | √ | 121 | EUSB | 二进制浮点数减法 | × | × | × | × | √ | 122 | EMUL | 二进制浮点数乘法 | × | × | × | × | √ | 123 | EDIV | 二进制浮点数除法 | × | × | × | × | √ | 127 | ESQR | 二进制浮点数开平方 | × | × | × | × | √ | 129 | INT | 二进制浮点数→二进制整数 | × | × | × | × | √ | 130 | SIN | 二进制浮点数Sin运算 | × | × | × | × | √ | 131 | COS | 二进制浮点数Cos运算 | × | × | × | × | √ | 132 | TAN | 二进制浮点数Tan运算 | × | × | × | × | √ | 147 | SWAP | 高低字节交换 | × | × | × | × | √ | 定位 | 155 | ABS | ABS当前值读取 | × | × | √ | √ | × | 156 | ZRN | 原点回归 | × | × | √ | √ | × | 157 | PLSY | 可变速的脉冲输出 | × | × | √ | √ | × | 158 | DRVI | 相对位置控制 | × | × | √ | √ | × | 159 | DRVA | 绝对位置控制 | × | × | √ | √ | × | 时钟运算 | 160 | TCMP | 时钟数据比较 | × | × | √ | √ | √ | 161 | TZCP | 时钟数据区间比较 | × | × | √ | √ | √ | 162 | TADD | 时钟数据加法 | × | × | √ | √ | √ | 163 | TSUB | 时钟数据减法 | × | × | √ | √ | √ | 166 | TRD | 时钟数据读出 | × | × | √ | √ | √ | 167 | TWR | 时钟数据写入 | × | × | √ | √ | √ | 169 | HOUR | 计时仪 | × | × | √ | √ | 外围设备 | 170 | GRY | 二进制数→格雷码 | × | × | × | × | √ | 171 | GBIN | 格雷码→二进制数 | × | × | × | × | √ | 176 | RD3A | 模拟量模块(FX0N-3A)读出 | × | √ | × | √ | × | 177 | WR3A | 模拟量模块(FX0N-3A)写入 | × | √ | × | √ | × | 触点比较 | 224 | LD= | (S1)= (S2)时起始触点接通 | × | × | √ | √ | √ | 225 | LD> | (S1)> (S2)时起始触点接通 | × | × | √ | √ | √ | 226 | LD< | (S1)< (S2)时起始触点接通 | × | × | √ | √ | √ | 228 | LD<> | (S1)<> (S2)时起始触点接通 | × | × | √ | √ | √ | 229 | LD≦ | (S1)≦ (S2)时起始触点接通 | × | × | √ | √ | √ | 230 | LD≧ | (S1)≧ (S2)时起始触点接通 | × | × | √ | √ | √ | 232 | AND= | (S1)= (S2)时串联触点接通 | × | × | √ | √ | √ | 233 | AND> | (S1)> (S2)时串联触点接通 | × | × | √ | √ | √ | 234 | AND< | (S1)< (S2)时串联触点接通 | × | × | √ | √ | √ | 236 | AND<> | (S1)<> (S2)时串联触点接通 | × | × | √ | √ | √ | 237 | AND≦ | (S1)≦ (S2)时串联触点接通 | × | × | √ | √ | √ | 238 | AND≧ | (S1)≧ (S2)时串联触点接通 | × | × | √ | √ | √ | 240 | OR= | (S1)= (S2)时并联触点接通 | × | × | √ | √ | √ | 241 | OR> | (S1)> (S2)时并联触点接通 | × | × | √ | √ | √ | 242 | OR< | (S1)< (S2)时并联触点接通 | × | × | √ | √ | √ | 244 | OR<> | (S1)<> (S2)时并联触点接通 | × | × | √ | √ | √ | 245 | OR≦ | (S1)≦ (S2)时并联触点接通 | × | × | √ | √ | √ | 246 | OR≧ | (S1)≧ (S2)时并联触点接通 | × | × | √ | √ | √ |
再介绍FX系列三菱PLC功能指令的数据格式。 1.位元件与字元件 象X、Y、M、S等只处理ON/OFF信息的软元件称为位元件;而象T、C、D等处理数值的软元件则称为字元件,一个字元件由16位二进制数组成。 位元件可以通过组合使用,4个位元件为一个单元,通用表示方法是由Kn加起始的软元件号组成,n为单元数。例如K2 M0表示M0~M7组成两个位元件组(K2表示2个单元),它是一个8位数据,M0为最低位。如果将16位数据传送到不足16位的位元件组合(n<4)时,只传送低位数据,多出的高位数据不传送,32位数据传送也一样。在作16位数操作时,参与操作的位元件不足16位时,高位的不足部分均作0处理,这意味着只能处理正数(符号位为0),在作32位数处理时也一样。被组合的元件首位元件可以任意选择,但为避免混乱,建议采用编号以0结尾的元件,如S10,X0,X20等。 2.数据格式 在FX系列PLC内部,数据是以二进制(BIN)补码的形式存储,所有的四则运算都使用二进制数。二进制补码的最高位为符号位,正数的符号位为0,负数的符号位为1。FX系列PLC可实现二进制码与BCD码的相互转换。 为更精确地进行运算,可采用浮点数运算。在FX系列PLC中提供了二进制浮点运算和十进制浮点运算,设有将二进制浮点数与十进制浮点数相互转换的指令。二进制浮点数采用编号连续的一对数据寄存器表示,例D11和D10组成的32位寄存器中,D10的16位加上D11的低7位共23位为浮点数的尾数,而D11中除最高位的前8位是阶位,最高位是尾数的符号位(0为正,1是负)。10进制的浮点数也用一对数据寄存器表示,编号小数据寄存器为尾数段,编号大的为指数段,例如使用数据寄存器(D1,D0)时,表示数为 10进制浮点数=〔尾数D0〕×10〔指数D1〕 其中:D0,D1的最高位是正负符号位。 |