
逻辑运算指令如表4-21所示。
表4-21 逻辑运算指令
| 名称 | 指令格式 (语句表) | 功能 | 操作数 |
| 字节逻辑运算指令 | ANDB IN1,OUT | 将字节IN1和OUT按位作逻辑与运算,OUT输出结果 | IN1,IN2,OUT:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD IN1和IN2还可以是常数 |
| ORB IN1,OUT | 将字节IN1和OUT按位作逻辑或运算,OUT输出结果 | ||
| XORB IN1,OUT | 将字节IN1和OUT按位作逻辑异或运算,OUT输出结果 | ||
| INVB OUT | 将字节OUT按位取反,OUT输出结果 | ||
| 字逻辑运算指令 | ANDW IN1,OUT | 将字IN1和OUT按位作逻辑与运算,OUT输出结果 | IN1,IN2,OUT:VW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LD IN1和IN2还可以是AIW和常数 |
| ORW IN1,OUT | 将字IN1和OUT按位作逻辑或运算,OUT输出结果 | ||
| XORW IN1,OUT | 将字IN1和OUT按位作逻辑异或运算,OUT输出结果 | ||
| INVW OUT | 将字OUT按位取反,OUT输出结果 | ||
| 双字逻辑运算指令 | ANDD IN1,OUT | 将双字IN1和OUT按位作逻辑与运算,OUT输出结果 | IN1,IN2,OUT:VD,ID,QD,MD,SD,SMD,LD,AC,*VD,*AC,*LD IN1和IN2还可以是HC和常数 |
| ORD IN1,OUT | 将双字IN1和OUT按位作逻辑或运算,OUT输出结果 | ||
| XORD IN1,OUT | 将双字IN1和OUT按位作逻辑异或运算,OUT输出结果 | ||
| INVD OUT | 将双字OUT按位取反,OUT输出结果 |
| 名称 | 指令格式 (语句表) | 功能 | 操作数 | |
| 单一传送指令 | MOVB IN,OUT | 将IN的内容拷贝到OUT中 IN和OUT的数据类型应相同,可分别为字,字节,双字,实数 | IN,OUT:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD IN还可以是常数 | |
| MOVW IN,OUT | IN,OUT:VW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LD IN还可以是AIW和常数 OUT还可以是AQW | |||
| MOVD IN,OUT | IN,OUT:VD,ID,QD,MD,SD,SMD,LD,AC,*VD,*AC,*LD IN还可以是HC,常数,&VB,&IB,&QB,&MB,&T,&C | |||
| MOVR IN,OUT | IN,OUT:VD,ID,QD,MD,SD,SMD,LD,AC,*VD,*AC,*LD IN还可以是常数 | |||
| BIR IN,OUT | 立即读取输入IN的值,将结果输出到OUT | IN:IB OUT:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD | ||
| BIW IN,OUT | 立即将IN单元的值写到OUT所指的物理输出区 | IN:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD和常数 OUT:QB | ||
| 块传送指令 | BMB IN,OUT,N | 将从IN开始的连续N个字节数据拷贝到从OUT开始的数据块 N的有效范围是1~255 | IN,OUT:VB,IB,QB,MB,SB,SMB,LB,*VD,*AC,*LD N:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD和常数 | |
| BMW IN,OUT,N | 将从IN开始的连续N个字数据拷贝到从OUT开始的数据块 N的有效范围是1~255 | IN,OUT:VW,IW,QW,MW,SW,SMW,LW,T,C,*VD,*AC,*LD IN还可以是AIW OUT还可以是AQW N:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD和常数 | ||
| BMD IN,OUT,N | 将从IN开始的连续N个双字数据拷贝到从OUT开始的数据块 N的有效范围是1~255 | IN,OUT:VD,ID,QD,MD,SD,SMD,LD, *VD,*AC,*LD N:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD和常数 |
移位与循环移位指令如表4-23所示。
表4-23 移位与循环移位指令
| 名称 | 指令格式 (语句表) | 功能 | 操作数 |
| 字节移位指令 | SRB OUT,N | 将字节OUT右移N位,最左边的位依次用0填充 | IN,OUT,N:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD IN和N还可以是常数 |
| SLB OUT,N | 将字节OUT左移N位,最右边的位依次用0填充 | ||
| RRB OUT,N | 将字节OUT循环右移N位,从最右边移出的位送到OUT的最左位 | ||
| RLB OUT,N | 将字节OUT循环左移N位,从最左边移出的位送到OUT的最右位 | ||
| 字移位指令 | SRW OUT,N | 将字OUT右移N位,最左边的位依次用0填充 | IN,OUT:VW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LD IN还可以是AIW和常数 N:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD,常数 |
| SLW OUT,N | 将字OUT左移N位,最右边的位依次用0填充 | ||
| RRW OUT,N | 将字OUT循环右移N位,从最右边移出的位送到OUT的最左位 | ||
| RLW OUT,N | 将字OUT循环左移N位,从最左边移出的位送到OUT的最右位 | ||
| 双字移位指令 | SRD OUT,N | 将双字OUT右移N位,最左边的位依次用0填充 | IN,OUT:VD,ID,QD,MD,SD,SMD,LD,AC,*VD,*AC,*LD IN还可以是HC和常数 N:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD,常数 |
| SLD OUT,N | 将双字OUT左移N位,最右边的位依次用0填充 | ||
| RRD OUT,N | 将双字OUT循环右移N位,从最右边移出的位送到OUT的最左位 | ||
| RLD OUT,N | 将双字OUT循环左移N位,从最左边移出的位送到OUT的最右位 | ||
| 位移位寄存器指令 | SHRB DATA,S_BIT,N | 将DATA的值(位型)移入移位寄存器;S_BIT指定移位寄存器的最低位,N指定移位寄存器的长度(正向移位=N,反向移位=-N) | DATA,S_BIT:I,Q,M,SM,T,C,V,S,L N:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD,常数 |
交换和填充指令如表4-24所示。
表4-24 交换和填充指令
| 名称 | 指令格式 (语句表) | 功能 | 操作数 |
| 换字节指令 | SWAP IN | 将输入字IN的高位字节与低位字节的内容交换,结果放回IN中 | IN:VW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LD |
| 填充指令 | FILL IN,OUT,N | 用输入字IN填充从OUT开始的N个字存储单元 N的范围为1~255 | IN,OUT:VW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LD IN还可以是AIW和常数 OUT还可以是AQW N:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD,常数 |
表操作指令如表4-25所示。
表4-25 表操作指令
| 名称 | 指令格式 (语句表) | 功能 | 操作数 |
| 表存数指令 | ATT DATA,TABLE | 将一个字型数据DATA添加到表TABLE的末尾。EC值加1 | DATA,TABLE:VW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LD DATA还可以是AIW,AC和常数 |
| 表取数指令 | FIFO TABLE,DATA | 将表TABLE的第一个字型数据删除,并将它送到DATA指定的单元。表中其余的数据项都向前移动一个位置,同时实际填表数EC值减1 | DATA,TABLE:VW,IW,QW,MW,SW,SMW,LW,T,C, *VD,*AC,*LD DATA还可以是AQW和AC |
| LIFO TABLE,DATA | 将表TABLE的最后一个字型数据删除,并将它送到DATA指定的单元。剩余数据位置保持不变,同时实际填表数EC值减1 | ||
| 表查找指令 | FND= TBL,PTN,INDEX FND<> TBL,PTN,INDEX FND< TBL,PTN,INDEX FND> TBL,PTN,INDEX | 搜索表TBL,从INDEX指定的数据项开始,用给定值PTN检索出符合条件(=,<>,<,>)的数据项 如果找到一个符合条件的数据项,则INDEX指明该数据项在表中的位置。如果一个也找不到,则INDEX的值等于数据表的长度。为了搜索下一个符合的值,在再次使用该指令之前,必须先将INDEX加1 | TBL:VW,IW,QW,MW,SMW,LW,T,C, *VD,*AC,*LD PTN,INDEX:VW,IW,QW,MW,SW,SMW,LW,T,C,AC, *VD,*AC,*LD PTN还可以是AIW和AC |
数据转换指令如表4-26所示。
表4-26 数据转换指令
| 名称 | 指令格式 (语句表) | 功能 | 操作数 |
| 数据类型转换指令 | BTI IN,OUT | 将字节输入数据IN转换成整数类型,结果送到OUT,无符号扩展 | IN:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD,常数 OUT:VW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LD |
| ITB IN,OUT | 将整数输入数据IN转换成一个字节,结果送到OUT。输入数据超出字节范围(0~255)则产生溢出 | IN:VW,IW,QW,MW,SW,SMW,LW,T,C,AIW,AC,*VD,*AC,*LD,常数 OUT:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD | |
| DTI IN,OUT | 将双整数输入数据IN转换成整数,结果送到OUT。 | IN:VD,ID,QD,MD,SD,SMD,LD,HC,AC,*VD,*AC,*LD,常数 OUT:VW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LD | |
| ITD IN,OUT | 将整数输入数据IN转换成双整数(符号进行扩展),结果送到OUT | IN:VW,IW,QW,MW,SW,SMW,LW,T,C,AIW,AC,*VD,*AC,*LD,常数 OUT:VD,ID,QD,MD,SD,SMD,LD,AC,*VD,*AC,*LD | |
| ROUND IN,OUT | 将实数输入数据IN转换成双整数,小数部分四舍五入,结果送到OUT | IN,OUT:VD,ID,QD,MD,SD,SMD,LD,AC,*VD,*AC,*LD IN还可以是常数 在ROUND指令中IN还可以是HC | |
| TRUNC IN,OUT | 将实数输入数据IN转换成双整数,小数部分直接舍去,结果送到OUT | ||
| DTR IN,OUT | 将双整数输入数据IN转换成实数,结果送到OUT | IN,OUT:VD,ID,QD,MD,SD,SMD,LD,AC,*VD,*AC,*LD IN还可以是HC和常数 | |
| BCDI OUT | 将BCD码输入数据IN转换成整数,结果送到OUT。IN的范围为0~9999 | IN,OUT:VW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LD IN还可以是AIW和常数 AC和常数 | |
| IBCD OUT | 将整数输入数据IN转换成BCD码,结果送到OUT。IN的范围为0~9999 | ||
| 编码译码指令 | ENCO IN,OUT | 将字节输入数据IN的最低有效位(值为1的位)的位号输出到OUT指定的字节单元的低4位 | IN:VW,IW,QW,MW,SW,SMW,LW,T,C,AIW,AC,*VD,*AC,*LD,常数 OUT:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD |
| DECO IN,OUT | 根据字节输入数据IN的低4位所表示的位号将OUT所指定的字单元的相应位置1,其它位置0 | IN:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD,常数 IN:VW,IW,QW,MW,SW,SMW,LW,T,C,AQW,AC,*VD,*AC,*LD | |
| 段码指令 | SEG IN,OUT | 根据字节输入数据IN的低4位有效数字产生相应的七段码,结果输出到OUT,OUT的最高位恒为0 | IN,OUT:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD IN还可以是常数 |
| 字符串转换指令 | ATH IN,OUT,LEN | 把从IN开始的长度为LEN的ASCⅡ码字符串转换成16进制数,并存放在以OUT为首地址的存储区中。合法的ASCⅡ码字符的16进制值在30H~39H,41H~46H之间,字符串的最大长度为255个字符 | IN,OUT,LEN:VB,IB,QB,MB,SB,SMB,LB,*VD,*AC,*LD LEN还可以是AC和常数 |
特殊指令如表4-27所示。PLC中一些实现特殊功能的硬件需要通过特殊指令来使用,可实现特定的复杂的控制目的,同时程序的编制非常简单。
表4-27 特殊指令
| 名称 | 指令格式 (语句表) | 功能 | 操作数 |
| 中断指令 | ATCH INT,EVNT | 把一个中断事件(EVNT)和一个中断程序联系起来,并允许该中断事件 | INT:常数 EVNT:常数(CPU221/222:0~12,19~23,27~33;CPU224:0~23,27~33;CPU226:0~33) |
| DTCH EVNT | 截断一个中断事件和所有中断程序的联系,并禁止该中断事件 | ||
| ENI | 全局地允许所有被连接的中断事件 | 无 | |
| DISI | 全局地关闭所有被连接的中断事件 | ||
| CRETI | 根据逻辑操作的条件从中断程序中返回 | ||
| RETI | 位于中断程序结束,是必选部分,程序编译时软件自动在程序结尾加入该指令 | ||
| 通信指令 | NETR TBL,PORT | 初始化通讯操作,通过指令端口(PORT)从远程设备上接收数据并形成表(TBL)。可以从远程站点读最多16个字节的信息 | TBL:VB,MB,*VD,*AC,*LD PORT:常数 |
| NETW TBL,PORT | 初始化通讯操作,通过指定端口(PORT)向远程设备写表(TBL)中的数据,可以向远程站点写最多16个字节的信息 | ||
| XMT TBL,PORT | 用于自由端口模式。指定激活发送数据缓冲区(TBL)中的数据,数据缓冲区的第一个数据指明了要发送的字节数,PORT指定用于发送的端口 | TBL:VB,IB,QB,MB,SB,SMB,*VD,*AC,*LD PORT:常数(CPU221/222/224为0;CPU226为0或1) | |
| RCV TBL,PORT | 激活初始化或结束接收信息的服务。通过指定端口(PORT)接收的信息存储于数据缓冲区(TBL),数据缓冲区的第一个数据指明了接收的字节数 | ||
| GPA ADDR,PORT | 读取PORT指定的CPU口的站地址,将数值放入ADDR指定的地址中 | ADDR:VB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD 在SPA指令中ADDR还可以是常数 PORT:常数 | |
| SPA ADDR,PORT | 将CPU口的站地址(PORT)设置为ADDR指定的数值 | ||
| 时钟指令 | TODR T | 读当前时间和日期并把它装入一个8字节的缓冲区(起始地址为T) | T:VB,IB,QB,MB,SB,SMB,LB,*VD,*AC,*LD |
| TODW T | 将包含当前时间和日期的一个8字节的缓冲区(起始地址是T)装入时钟 | ||
| 高速计数器指令 | HDEF HSC,MODE | 为指定的高速计数器分配一种工作模式。每个高速计数器使用之前必须使用HDEF指令,且只能使用一次 | HSC:常数(0~5) MODE:常数(0~11) |
| HSC N | 根据高速计数器特殊存储器位的状态,按照HDEF指令指定的工作模式,设置和控制高速计数器。N指定了高速计数器号 | N:常数(0~5) | |
| 高速脉冲输出指令 | PLS Q | 检测用户程序设置的特殊存储器位,激活由控制位定义的脉冲操作,从Q0.0或Q0.1输出高速脉冲 可用于激活高速脉冲串输出(PTO)或宽度可调脉冲输出(PWM) | Q:常数(0或1) |
| PID回路指令 | PID TBL,LOOP | 运用回路表中的输入和组态信息,进行PID运算。要执行该指令,逻辑堆栈顶(TOS)必须为ON状态。TBL指定回路表的起始地址,LOOP指定控制回路号 回路表包含9个用来控制和监视PID运算的参数:过程变量当前值(PV n ),过程变量前值(PV n-1 ),给定值(SP n ),输出值(M n ),增益(Kc),采样时间(Ts),积分时间(Ti),微分时间(Td)和积分项前值(MX) 为使PID计算是以所要求的采样时间进行,应在定时中断执行中断服务程序或在由定时器控制的主程序中完成,其中定时时间必须填入回路表中,以作为PID指令的一个输入参数 |
