关
三菱FX5U PLC,移位指令的区别与识记 移位指令是PLC编程中比较常用的指令,指令有很多种,作用也各不相同,难以记忆。现总结一些方法,供初学者参(大神请飘过~): 一,移位指令有循环与不循环之分,循环的指令有下图所列指令: 这些指令有前面加D的,是32位数据用的循环指令,前面不加D的,是16位数据用的循环指令;后面加P的是脉冲执行型指令。 L(left)是左移,R(right)是右移。 RO(rotate旋转)是不带进位标志的右或左移位,b(n-1)/b(16或32-n)位移到b15或31/b0和进位(SM700\SM8022)。 RC(rotate旋转 carry进位)是带进位标志的右或左移位,b(n-1)/b(16或32-n)位移到进位(SM700\SM8022)。 这里你是不是会感到很奇怪没有ROL和ROR,这两个指令? 因为这两个指令不能做为单独的功能块使用,而需要用赋值语句,所以没有这两个部件,ST语言、FBD/LD语言不支持ROL/ROR。 n的位数取:输入值/数据长度的余数,不能为负数。 二,不循环的移位指令有下图所列: 这看起来很多是不?其实他们都带有两个英文“SF”。 SF(T)(shfit)移位的意思。 L(left)是左移,R(right)是右移,P(pulse)加脉冲,B (bit)位,D(double)双或多字,W(word)字,RD(read)读,WR(write)写。 一些移位指令的ST语言写法如下: MOV(SM402,K1,D1); RCR(1,K2,D1); RORP(LDP(1,X0),K1,D1); MOV(SM402,K1,D10); IF LDP(1,X0) THEN D10 :=ROR(D10/*输入*/,K1/*位数指定*/); /*将输入值右旋n位后输出*/ END_IF; /*带使能的将输入值右旋n位后输出*/ D12:=ROR_E(LDP(1,X0)/*使能*/,M10/*输出状态*/,D10/*输入*/,K2/*位数*/); SFT(1,M10); /*将(d)中指定的软元件的一个软元件的ON/OFF状态移位到(d)中指定的软元件中。 (d)中指定的软元件的前一个软元件将变为OFF。*/ BSFL(1,K2,M20); /*将(d)中指定的软元件开始(n)点的数据向左移位1位。*/ DSFL(1,K1,D100); /*将(d)中指定的软元件开始(n)点的数据向左移位1字。*/ SFL(1,K3,K2Y0); /*将(d)中指定的软元件的16位或指定范围数据左移(n)位。*/ SFTL(1,X10,K15,K3,M30); /*将(d)中指定的软元件开始(n1)位的数据向左移位(n2)位。*/ WSFR(1,D200,K10,K2,D300); /*将(d)中指定的软元件开始(n1)字的数据向右移位(n2)字。*/ SFWR(1,D1000,K4,D301); /*从(d)+1开始,将(s)的内容依次写入(n)-1点,(d)的存储数据数+1。*/ SFRD(1,D301,K4,D1000); /*将通过SFWR指令依次写入的(s)+1传送(读取)到(d)后,从(s)+1将(n)-1点各向上移位1字。(s)的存储的数据数-1。*/ 其实,最好的记忆是多练习,不需要死记硬背。 |
|