欧姆龙PLC指令集讲义.pptx
2.2.指令集2.1 2.1 指令格式、数据区域及其标志指令格式、数据区域及其标志指令格式:助记符(功能代码)操作数1 操作数2 操作数3 操作数4助记符:表示指令的功能,表明执行该指令能够实现的操作。助记符通常是一些简洁易记的字母或符号。功能代码(指令码):):功能代码是指令的代码,用2位十进制数表示。操作数:操作数指定或提供指令执行的数据。有些指令不带操作数,有的指令带1个操作数,有的则带2个、3个或4个操作数。第1页/共95页2.2.指令集数据区域及其标志数据区域及其标志一般情况下,指令的操作数就是指令的数据区域,因此,IR区域、SR区域、HR区域、AR区域、LR区域、TC区域及DM区域中的字可以是操作数的字,字的位可以是操作数的位,简称操作数位。但是在指定的数据区域内,并非所有的地址都允许用于操作数。通常用继电器区域的缩写及字、位的地址作为指令的操作数,但I/O继电器没有缩写符。为避免与常数混淆,当用常数作为指令的操作数时,应在常数前面加上“#”号。有些指令执行后会影响标志位,有些指令执行后不影响标志位。SR区域包括标志位和控制位,用来监视PLC操作,存取时钟脉冲及显示错误信息。受指令执行影响的标志位如下表第2页/共95页2.2.指令集缩 写名 称位ER指令执行出错标志25503CY进位标志25504GR大于标志25505EQ等于标志25506LE小于标志25507N负标志25402OF上溢标志25404UF下溢标志25405受指令执行影响的标志位(SR(SR区标志位)第3页/共95页2.2.指令集2.2 梯形图指令、LD NOT、AND、AND NOT、OR、OR NOT 指令梯形图符号助 记 符名 称指 令 功 能操作数区域LD装载常开触点与左侧母线相连接的指令IR,SR,AR,HR,TC,LR,TRLD NOT装载非常闭触点与左侧母线相连接的指令IR,SR,AR,HR,TC,LRAND与常开触点与其他编程元件串连的指令IR,SR,AR,HR,TC,LRAND NOT与非常闭触点与其他编程元件串连的指令IR,SR,AR,HR,TC,LROR或常开触点与其他编程元件并连的指令IR,SR,AR,HR,TC,LROR NOT或非常闭触点与其他编程元件并连的指令IR,SR,AR,HR,TC,LR第4页/共95页2.2.指令集第5页/共95页2.2.指令集逻辑块与(AND LD)和逻辑块或(OR LD)指令 对于复杂的控制系统,使用大量的编程元件,这些编程元件所在的行相并联构成逻辑块,逻辑块之间还存在串联关系。在这种情况下,不能简单地使用OR或者AND来处理,而需要使用AND LD和OR LD指令才能将梯形图转化为助记符程序。其原因是OR和AND指令用于执行条件与一位状态逻辑间接,而OR LD和AND LD指令能够逻辑地连接两个执行条件,即当前执行条件与上一个还未使用的执行条件。第6页/共95页2.2.指令集2.3 位(bit)控制指令输出(OUT)指令和输出非(OUT NOT)指令梯形图符号助 记 符名 称指 令 功 能操作数区域OUT输出当执行条件为ON时,OUT指令使指定位输出为ONIR,SR,AR,HR,TC,LR,TROUT NOT输出非当执行条件为OFF时,OUT指令使指定位输出为ONIR,SR,AR,HR,TC,LR第7页/共95页2.2.指令集上升沿微分指令和下降沿微分指令DIFU和DIFD 第8页/共95页2.2.指令集第9页/共95页2.2.指令集置位和复位指令SET和RESET第10页/共95页2.2.指令集置位和复位指令SET和RESET第11页/共95页2.2.指令集保持指令 KEEP第12页/共95页2.2.指令集第13页/共95页2.2.指令集应用KEEPKEEP指令的梯形图第14页/共95页2.2.指令集2.4 联锁和联锁解除指令 IL 和 ILC第15页/共95页2.2.指令集第16页/共95页2.2.指令集指 令处 理OUT和OUT NOT指定位变为OFFSET和RESET位状态保持TIM和TIMH复位TTIMPV保持CNT,CNTRPC保持KEEP位状态保持DIFU和DIFD不执行其他指令不执行IL和ILC之间的程序处理表第17页/共95页2.2.指令集2.5 跳转和跳转终了指令 JMP和JME第18页/共95页2.2.指令集2.6结束指令结束指令 ENDEND2.7 空操作指令 NOP此指令无任何功能。(NOP(000)不做任何操作)第19页/共95页2.2.指令集2.8 定时器和计数器指令定时器指令 TIM,以0.1s为单位第20页/共95页2.2.指令集第21页/共95页2.2.指令集高速定时器指令 TIMH计量单位为0.01s,使用方法和TIM指令相同。如果扫描周期大于10ms,必须使用TC000-TC015 编号才能保持计时准确。第22页/共95页2.2.指令集累加定时器指令 TTIM第23页/共95页2.2.指令集计数器指令 CNT复位输入有优先权,如果复位输入和计数输入同时ON,计数器会复位。(PV会复位到SV,完成标志也会变OFF)。第24页/共95页2.2.指令集即使电源中断,计数器PV 仍然保持,如果希望从SV 开始计数,而不是从保持的PV 恢复计数,增加第一次循环标志(A20011)作为计数器的复位输入。第25页/共95页2.2.指令集可逆计数器指令 CNTR第26页/共95页2.2.指令集在增量时,PV 从SV 增加返回到0 时,完成标志变ON,一旦完成标志变为ON,PV 从0 增加到1 时,完成标志又变回OFF。在减量时,PV 从0 减小到SV 时,完成标志变ON,PV 从SV 减小到SV-1 时,完成标志又变回OFF。第27页/共95页2.2.指令集第28页/共95页2.2.指令集2.9 数据移位指令移位寄存器指令 SFT当移位输入的执行条件由OFF 变为ON 时,St E 的所有数据左移一位(从最右边到最左边),并且把数据输入的ON/OFF 状态放在最右边位。第29页/共95页2.2.指令集可逆移位寄存器指令 SFTR产生一个可向右也可向左移动数据的移位寄存器。第30页/共95页2.2.指令集算术左移指令 ASL,算术右移指令 ASRWd 的内容左移一位。Wd 的内容向右移1 位。第31页/共95页2.2.指令集循环左移指令 ROL,循环右移指令 ROR循环左移指令:所有Wd 的位包括进位标志(CY)向左移1 位。循环右移指令:所有Wd 的位,包括进位标志(CY),向右移动1 位。第32页/共95页2.2.指令集数(4bits)左移SLD,数(4bits)右移SRDSLD(074)把S 和E 之间的数据向左移一个数字(4 位)为单位移动。“0”被放置到最右边的数字(S 的位3 位0),最左位数字(E 的位15 位12)内容丢失。SRD(075)把St 和E 之间的数据向右移动一个数字(4 位),“0”被放到最左的数字(E 的位15 12),并且最右的数字(St 的位3 0)内容丢失。第33页/共95页2.2.指令集字移位:字移位:WSFT(016)WSFT(016)指令以字为单位按St 到E 方向移动数据,源字S 的数据放在St中,E 中的内容将丢失。第34页/共95页2.2.指令集异步移位寄存器指令:异步移位寄存器指令:ASFT(017)第35页/共95页2.2.指令集第36页/共95页2.2.指令集2.10 数据传送指令传送指令:传送指令:MOV(021)传送数据的一个字到指定字中。在下面例子中,当CIO 000000为ON时,CIO 0100 的内容被拷贝到D00100中。第37页/共95页2.2.指令集取反传送指令:传送指令:MVN(022)MVN(022)指令对S 中的位进行取反,并把结果传送到D 中。S 中的内容保持不变。第38页/共95页2.2.指令集块设置:块设置:BSET(071)把同一个字拷贝到一个连续字的范围中。第39页/共95页2.2.指令集块传送:块传送:XFER(070)传送指定数目的连续字。XFER(070)指令把从S 开始的N 个字(S S (N1)拷贝给从D 开始的N个字(D D (N1)。第40页/共95页2.2.指令集数据交换:数据交换:XCHG(073)交换两个指定字的内容。第41页/共95页2.2.指令集单字节数据分配指令:单字节数据分配指令:DIST(080)把源字传送到由基地址加偏移量计算得出的目标字中。第42页/共95页2.2.指令集数据调用指令:数据调用指令:COLL(081)把源字(由基址加偏移量计算得出)传送到目标字中。第43页/共95页2.2.指令集位传送指令:位传送指令:MOVB(082)传送指定位。第44页/共95页2.2.指令集传送数字指令:传送数字指令:MOVD(083)传送一个或多个指定的数字。(每个数字由4 位组成)。第45页/共95页2.2.指令集第46页/共95页2.2.指令集多位传送指令:多位传送指令:XFRB(062)传送指定数目的连续位。第47页/共95页2.2.指令集第48页/共95页2.2.指令集2.11 2.11 数据比较指令多字比较指令:多字比较指令:MCMP(019)16 个连续字与另外16 个连续字相比较,并使结果字中相应于两字内容不相等的位变ON。R 的每一位包含了在16 字设置中两个字比较的结果,R 中的位n(n 00 15)包含了字S1 n 和S2 n 的比较结果。第49页/共95页2.2.指令集第50页/共95页2.2.指令集比较:比较:CMP(020)比较两个无符号二进制值(常数和/或指定字的内容),并输出结果到辅助区的算术标志中。第51页/共95页2.2.指令集当执行CMP(020)指令,其结果反映在算术标志中。用与控制CMP(020)指令相同的输入条件分支来控制所希望的输出或右侧指令,如下图所示。在这种情况下,当S1 S2,等于标志和输出A 将变ON。不要在CMP(020)指令和算术标志控制指令之间编写其它指令,因为其它指令可能会改变算术标志的状态。在这种情况下,指令B 的结果可能会改变指令CMP(020)的结果。第52页/共95页2.2.指令集双字比较指令:双字比较指令:CMPL(060)比较两个双字无符号二进制值(常数和/或指定字的内容),并输出结果到辅助区的算术标志中。块比较指令:BCMP(068)比较源数据和16 个范围(由16 个下限和16 个上限定义),当源数据在范围内时,结果字中的相应位变ON。第53页/共95页2.2.指令集第54页/共95页2.2.指令集2.12 2.12 数据转换指令数据转换指令到二进制数:到二进制数:BIN(023)BIN(023)把S 中的BCD 码转换成二进制数,并把结果字写进R。BCD 码到二进制数转换的例子第55页/共95页2.2.指令集双字双字BCD 码到双字二进制:码到双字二进制:BINL(058)8 个数字的BCD 数到8 个数字的十六进制(32 位二进制)数的转换。8 个数字的BCD 码转换到二进制数的例子。第56页/共95页2.2.指令集二进制数到二进制数到BCD 码:码:BCD(024)把S 中的二进制数转换成BCD 数,并把结果写进R。BCD 码到二进制数转换的例子。第57页/共95页2.2.指令集双字二进制数到双字双字二进制数到双字BCD 码:码:BCDL(059)把S 和S+1 中的8 个数字的十六进制(32 进制)数转换为8 个数字的BCD 码,并把结果写到R 和R+1。在下例中当CIO 000000 为ON 时,CIO 0011 和CIO 0010 中的十六进制数转换成BCD 码,并存储在D00100 和D00101 中。第58页/共95页2.2.指令集2.13 BCD2.13 BCD码运算指令码运算指令不带进位的不带进位的BCD 加:加:+B(404)4 个数字(单字)有符号十六进制数和/或常数相除。在下面例子中,当CIO 000000 置ON 时,D00100 和D00110 将作为4 个BCD数字相加,并且结果送到D00120。第59页/共95页2.2.指令集不带进位的双字不带进位的双字BCD 加:加:+BL(405)8 个数字(单字)BCD 数据和/或常数相加。带进位的带进位的BCD 加:加:+BC(406)4 个数字(单字)BCD 码数据和/或常数及进位标志相加。第60页/共95页2.2.指令集带进位的双字带进位的双字BCD 加:加:+BCL(407)8 个数字(双字)BCD 数据和/或常数及进位标志(CY)相加。不带进位的不带进位的BCD 减:减:-B(414)4 位(单字)BCD 和/或常数相减。第61页/共95页2.2.指令集不带进位的双字不带进位的双字BCD 减:减:-BL(415)8 位(双字)BCD 数和/或常数相减。带进位的带进位的BCD 减:减:-BC(416)4 位(单字)BCD 数与/或常数及进位标志(CY)相减。第62页/共95页2.2.指令集带进位的双字带进位的双字BCD 减:减:-BCL(417)8 个数字(双字)BCD 数据和/或常数及进位标志(CY)相减。BCD 乘法:乘法:*B(424)4 个数字(单字)BCD 数据和/或常数相乘。把Md 和Mr 中的BCD 内容相乘,并把结果输出给R。第63页/共95页2.2.指令集BCD 除:除:/B(434)4 个数字(单字)BCD 码和/或常数相除。将Dd 的BCD 内容除以Dr 的内容,并输出商到R,余数到R+1。双字双字BCD 乘:乘:*BL(425)8 个数字(双字)BCD 数据和/或常数相乘。把Md 和Md+1 与Mr 和Mr+1 中的BCD 数相乘,并把结果送给R,R+1,R+2 和R+3。第64页/共95页2.2.指令集双字双字BCD 除:除:/BL(435)8 个数字(双字)BCD 码和/或常数相除。把Dd 和Dd+1 中的BCD 码除以Dr 和Dr+1 中的数,并把商输出给R和R+1,余数输出给R+2 和R+3。第65页/共95页2.2.指令集2.14 2.14 二进制运算指令二进制运算指令不带进位的有符号二进制加:不带进位的有符号二进制加:+(400)4 个数字(单字)十六进制数据和/或常数相加。不带进位的有符号双字二进制加:不带进位的有符号双字二进制加:+L(401)8 个数字(双字)十六进制数据和/或常数相加。把Au 和Au+1,Ad 和Ad+1 中的二进制值相加,并且把结果送给R。第66页/共95页2.2.指令集带进位的有符号二进制加:带进位的有符号二进制加:+C(402)4 个数字(单字)十六进制数据和/或常数相加。把Au,Ad 和CY 中的二进制数相加,并且把结果送给R。带进位的有符号双字二进制加:带进位的有符号双字二进制加:+CL(403)把Au 和Au+1,Ad 和Ad+1 及CY 中的二进制数相加,并且把结果送给R。第67页/共95页2.2.指令集不带进位的有符号二进制减:不带进位的有符号二进制减:-(410)4 个数字(单字)十六进制数据和/或常数相减。从Mi 中减去Su 中的二进制数,并且把结果送给R。结果为负时,将2的补码送给R。不带进位的有符号双字二进制减:不带进位的有符号双字二进制减:-L(411)8 个数字(双字)十六进制数据和/或常数相减,把Mi和Mi+1中减去Su和Su+1中的二进制数并且把结果送给R,R+1。当结果为负数时,结果作为2 的补码送给R 和R+1。第68页/共95页2.2.指令集带进位的有符号二进制减:带进位的有符号二进制减:-C(412)4 个数字(单字)十六进制数据和/或常数及进位标志(CY)相减。从Mi 中减去Su 中的二进制数和CY,并且把结果送给R。结果为负时,将2 的补码送给R。带进位的有符号双字二进制减:带进位的有符号双字二进制减:-CL(413)8 个数字(双字)十六进制数据和/或常数相减及进位标志(CY)。把Mi 和Mi+1 中减去Su 和Su+1 中的二进制数及CY,并且把结果送给R,R+1。当结果为负数时,结果作为2 的补码送给R 和R+1。第69页/共95页2.2.指令集有符号二进制乘:有符号二进制乘:*(420)4 位有符号十六进制数和/或常数的乘法。把Md 和Mr 中有符号二进制数相乘,并把结果输出给R,R+1。有符号双字二进制乘:有符号双字二进制乘:*L(421)8 个数字有符号十六进制数和/或常数的相乘。把Md 和Md+1 与Mr 和Mr+1 中的符号二进制数相乘,并把结果输出到R,R+1,R+2 和R+3。第70页/共95页2.2.指令集无符号二进制乘:无符号二进制乘:*U(422)4 个数字无符号十六进制数和/或常数的相乘。把Md 和Mr 中的二进制数相乘并把结果输出到R,R+1。无符号双字二进制乘:无符号双字二进制乘:*UL(423)把8 个数字无符号十六进制数和/或常数相乘。把Md 和Md+1 与Mr 和Mr+1 种的无符号二进制数相乘并把结果送给R,R+1,R+2 和R+3。第71页/共95页2.2.指令集有符号二进制除:有符号二进制除:/(430)4 个数字(单字)有符号十六进制数和/或常数相除。把Dd 中的有符号二进制数(16 位)除以Dr 中的数,并把结果输出到R,R+1。商放在R 中,余数放在R+1 中。有符号双字二进制除:有符号双字二进制除:/L(431)8 个数字(双字)有符号十六进制数和/或常数相除。把Dd 和Dd+1 中的有符号二进制数除以Dr 和Dr+1 中的数,并把结果输出到R,R+1,R+2 和R+3,商输出给R 和R+1,余数输出给R+2 和R+3。第72页/共95页2.2.指令集无符号二进制除无符号二进制除:/U(432)4 个数字(单字)无符号十六进制数和/或常数相除。把Dd中无符号二进制数除以Dr 中的数,并把商送到R,余数送到R+1。无符号双字二进制除:无符号双字二进制除:/UL(433)8 个数字(双字)无符号十六进制和/或常数相除。把Dd 和Dd+1 中的无符号二进制数除以Dr 和Dr+1 中的数,并把商送到R,R+1,余数送到R+2 和R+3。第73页/共95页2.2.指令集2.15 2.15 逻辑指令逻辑指令求反指令求反指令 COM(29)把Wd 中所有置ON 的位置为OFF,所有置OFF 的位置为ON。在下例中,当CIO 000000 为ON,则D00100 的每个位的状态将取反。第74页/共95页2.2.指令集逻辑与:逻辑与:ANDW(034)将一个字的数据和/或常数相应位进行逻辑与。逻辑或:逻辑或:ORW(035)将一个字的数据和/或常数的相应位进行逻辑或。第75页/共95页2.2.指令集异或指令:异或指令:XORW(036)将一个字的数据和/或常数相应位进行逻辑异或。当I1和I2的相应位的内容不同时,1将输出到R的相应位,当相同时,0将输出到R 中的相应位。(作为比较器用)异或非指令:异或非指令:XNRW(037)将一个字的数据和/或常数的相应位进行逻辑异或非。当I1和I2的相应位的内容不同时,0将输出到R的相应位,当它们同时,1将输出到R 的相应位。第76页/共95页2.2.指令集2.16 2.16 子程序指令子程序指令子程序调用:子程序调用:SBS(091)调用指定编号的子程序并执行该程序。子程序入口:子程序入口:SBN(092)用指定子程序编号来指示子程序的开始。与RET(093)一起使用,定义一个子程序的范围。子程序返回:子程序返回:RET(093)表示一个子程序的结束。与SBN(092)一起使用定义一个子程序区第77页/共95页2.2.指令集第78页/共95页2.2.指令集子程序可被嵌套到16 层。嵌套是在一个子程序内有另一个子程序被调用,如下图所示,子程序被嵌套到2 层。第79页/共95页2.2.指令集宏指令:宏指令:MCRO(099)调用指定子程序号的子程序,并用S S+3 中的输入参数和D D+3 中的输出参数执行程序。宏指令允许单个子程序来取代数个子程序,这数个子程序需具有相同的结构,但操作数不同.当指令执行条件为ON时,该指令将S S+3 的内容复制到A600 A603(宏区输入),并执行指定子程序。当子程序执行完成时,A604 A607(宏区输出)被复制到D D+3,且程序将继续执行MCRO(099)后的下一个指令。第80页/共95页2.2.指令集第81页/共95页2.2.指令集2.17 2.17 中断控制指令中断控制指令第82页/共95页2.2.指令集中断屏蔽指令:中断屏蔽指令:MSKS(690)当PC 进入运行(RUN)方式时,I/O 中断任务和定时中断任务均被屏蔽(禁止)。MSKS(690)可用于对I/O 中断屏蔽或取消屏蔽和为定时中断设定时间间隔。第83页/共95页2.2.指令集读中断屏蔽:读中断屏蔽:MSKR(692)读取MSKS(690)中设定的当前中断处理设置。第84页/共95页2.2.指令集第85页/共95页2.2.指令集清除中断指令:清除中断指令:CLI(691)清除或保持I/O 中断的中断输入记录,或者设定定时中断的首次定时中断的时间。第86页/共95页2.2.指令集禁止中断:禁止中断:DI(693)禁止除电源OFF 中断以外的中断任务执行。第87页/共95页2.2.指令集允许中断:允许中断:EI(694)使DI(693)禁止的所有中断任务允许执行。第88页/共95页2.2.指令集2.182.18步指令步指令用于在一个大型程序的程序段之间设立断点,这样这些程序段可以按单元执行,并在完成后复位。第89页/共95页步定义和步开始指令:STEP(008)/SNXT(009)SNXT(009)放在STEP(008)指令之前,并由置指定控制位为ON 来控制步程序的执行。如果就在SNXT(009)前存在另一个步,它也能将该处理的控制位置OFF。STEP(008)置于每个过程之前并紧随SNXT(009)指令之后,它定义了每个过程的开始,并为其制定控制位。STEP(008)也可放在最后一个SNXT(009)之后的步程序区结尾,以表示步程序区结束,STEP(008)出现在步程序结尾处时,不带控制位。在定义一个步程序的开始,定义控制位如下:在定义步的结尾时不指定控制位。2.2.指令集第90页/共95页2.2.指令集第91页/共95页2.2.指令集顺序控制第92页/共95页2.2.指令集分支控制第93页/共95页2.2.指令集并行控制第94页/共95页感谢您的观看。第95页/共95页