3.5 数学运算指令
3.5.1 整数数学运算指令
1.BIN16位加法和减法运算指令(+(P)、-(P))
(1)当设置了两个数据时
(S)+(D)→(D),(S)-(D)→(D)
该指令的表达方式如图3-71所示。
图3-71 16位+(P)/-(P)指令的表达方式
图中,(S)表示加数、减数或者存储加数、减数数据的软元件的起始号(BIN16位)。
(D)表示存储被加数、被减数数据的软元件起始号,(BIN16位)。
+(P)/-(P)指令是将由(S)指定的BIN 16位数据与由(D)指定的BIN 16位数据相加/减,并将该加/减法运算的结果存储在由(D)指令的软元件中;(S)和(D)的范围是-32768~32767(BIN 16位);数据的正负是由它的最高有效位(b15)来判定的(0表示正,1表示负)。
(2)当设置了三个数据时
(S1)+(S2)→(D),(S1)-(S2)→(D)
该指令的表达方式如图3-72所示。
图3-72 16位+(P)/-(P)指令的表达方式
图中,(S1)表示被加数、被减数或者存储被加数、被减数的软元件的起始号(BIN16位)。
(S2)表示加数、减数或者存储加数、减数的软元件的起始号(BIN16位)。
(D)表示存储加法和减法运算结果的软元件的起始号(BIN16位)。
+(P)/-(P)指令是将由(S1)指定的BIN 16位数据与由(S2)指定的BIN 16位数据相加/减,并将该加/减法运算的结果存储在由(D)指令的软元件中。
举例说明:
1)图3-73中,当X5为ON时,下面程序将D3的内容与D0的内容相加,并将结果输出到Y38~Y3F。
图3-73 +(P)指令的应用
2)图3-74中,将定时器T3的设定值与当前值的差输出到Y40~Y53中。
图3-74 -(P)指令的应用
2.BIN16位乘法和除法运算指令(∗(P)、/(P))
该指令的表达方式如图3-75所示。
图3-75 ∗(P)与/(P)指令的表达
图中,(S1)表示被乘数、被除数或者存储被乘数、被除数的软元件的起始号(BIN16位)。
(S2)表示乘数、除数或者存储乘数、除数的软元件的起始号(BIN16位)。
(D)表示存储乘法、除法运算的运算结果的软元件的起始号(BIN32位)。
∗(P)(/(P))指令功能是:将由(S1)指定的BIN 16位数据与由(S2)指定的BIN 16位数据相乘(除),并将结果存储在由(D)指定的软元件中。若(D)是位软元件,则值由低位开始指定。如:K1——低4位(b0~b3);K4——低16位(b0~b15);K8——低32位(b0~b31)。
举例说明:
1)图3-76中,当X5为ON时,用“1234”、“5678”相乘,并将结果存储在D3和D4中。
图3-76 ∗(P)指令的应用
2)图3-77中,当X3为ON时,将X8~XF的数据除以3.14,并将结果值输出到Y30到Y3F。
图3-77 ∗(P)与/(P)指令的应用
3.16位BIN数据的递增和递减运算指令(INC(P)、DEC(P))
该指令的表达方式如图3-78所示。
图3-78 INC(P)与DEC(P)指令的表达
图中,(D)表示执行INC(+1)/DEC(-1)运算的软元件的起始号,(BIN16位)。
INC(P)是“加1”指令,DEC(P)是“减1”指令。
举例说明:
1)图3-79中,当X8为ON时,存储在计数器C0~C20中的当前值以BCD数据的形式输出到Y30~Y3F(在当前值小于9999时)。
图3-79 INC(P)指令的应用
2)图3-80所示为减法计数器程序。
图3-80 DEC(P)指令的应用
3.5.2 移位指令
图3-81 SFT(P)指令的表达
该指令的功能为
1.当使用位软元件时
1)在指定的软元件之前立即将软元件的ON/OFF状态移动到被(D)指定的软元件中去,并且将先前的软元件关闭。例如图3-82所示,若M11已经被SFT指令指定,当SET指令被执行,则它将会移动M10的ON/OFF状态至M11,并且将M10关闭。
2)使用SET指令将要移动的第一个软元件开启。
3)当SFT和SFTP被连续使用时,将从有较大号的软元件处启动程序。
图3-82 SFT(P)指令的应用
2.当使用字软元件的位指定
在指定的软元件之前直接将位的1/0状态移动到被(D)指定的软元件的位中,并且将之前的位设置为0。
例如图3-83所示,若D0.5(D0的位5[b5])已经被SFT指令指定,当这个SFT指令被执行时,将会移动D0的b4的1/0状态至b5,并且将b4设置为0。
图3-83 SFT(P)指令示意图说明
举例说明:
如图3-84所示程序,当X8由OFF变为ON时,将Y57移动到Y5B。
图3-84 SFT(P)指令的应用
图3-84对应的时序图如图3-85所示。
图3-85 图3-84对应的时序图
3.5.3 循环移位指令
1.16位数据的右循环指令(ROR(P)、RCR(P))
该指令的表达方式如图3-86所示。
图3-86 ROR(P)/RCR(P)指令的表达
图中,(D)表示执行循环的软元件的起始号(BIN16位)。
n表示循环次数(0~15)(BIN16位)。
ROR(P)指令功能:
1)将由(D)指定的软元件的16位数据,不包括进位标志,往右循环(旋转)移动n位。进位标志的ON/OFF取决于ROR(P)指令执行前的状态。示意图如图3-87所示。
图3-87 ROR(P)指令示意图
2)当位软元件被在(D)处指定后,数据循环移动指定的位数是n指定位数所得商的余数。例如,当n=15且指定的位数是12位,则15除以12的商为1,余数为3,因此将循环移动3位。
3)将0到15之间的任意值设为n。当指定的n值为16或更大时,则n除以16的余数用于循环。例如,当n=18,18除以16的余数为2,则向右循环移动2位。
RCR(P)指令功能:
将由(D)指定的软元件的16位数据,包括进位标志,往右循环移动n位。进位标志取决于RCR(P)指令执行前的状态,变为ON或OFF。示意图如图3-88所示。
举例说明:
1)图3-89中,当XC为ON时,下面程序将D0的内容,不包括进位标志,向右循环移动3位。
2)图3-90中,当XC为ON时,将D0的内容,包括进位标志,向右循环移动3位。
2.16位数据的左循环指令(ROL(P)、RCL(P))
左循环指令与右循环指令除了循环移动的方向不同以外,其他功能是相同的。由于篇幅问题,本书不再赘述。
除了16位数据循环外,还有32位数据的循环,本书不再赘述,具体见相关手册“指令篇”。
图3-88 RCR(P)指令示意图
图3-89 ROR(P)指令的应用
图3-90 RCR(P)指令的应用
3.5.4 字逻辑运算指令
1.16位和32位数据逻辑与(WAND(P)、DAND(P))
该指令表达方式如图3-91所示。
图3-91 WAND(P)与DAND(P)指令的表达
图中,
(S)表示进行逻辑与运算的源数据或者存储了数据的软元件起始号(16/32位二进制数据);
(D)表示将存储逻辑与运算结果的软元件起始号(16/32位二进制数据)。
WAND(P)指令是对(D)中所指定的软元件的16位数据和(S)中所指定的软元件的16位数据的各个位执行逻辑与运算,并将运算结果存储在(D)所指定的软元件中。当指定了位软元件时,则在运算中位软元件所指定点之后的位将当做“0”处理。
DAND(P)指令是对(D)中所指定的软元件的32位数据和(S)中所指定的软元件的32位数据的各个位执行逻辑与运算,并将运算结果存储在(D)所指定的软元件中。当指定了位软元件时,则在运算中位软元件所指定点之后的位将当做“0”处理。
注意:当设置3个数据与设置2个数据时,方法相同。
举例说明:
1)图3-92中,当XA为ON时,将D10中4位BCD值的十进制上的数字屏蔽为0。
图3-92 WAND(P)指令的应用及说明
2)图3-93中,当XA为ON时,下面程序对X10~X1B中的数据和D33中的数据进行逻辑乘运算,并将结果存储在D40中。
3)图3-94中,当X8变为ON时对D99~D100的数据和X30~X47的24位数据执行逻辑与运算,并将运算结果存储在D99~D100中。
图3-93 WAND(P)指令的应用及说明
图3-94 DAND(P)指令的应用
梯形图模式如图3-94所示,程序处理如图3-95所示:
图3-95 DAND(P)指令的处理
2.16位和32位数据逻辑或(WOR(P)、DOR(P))
该指令的表达方式如图3-96所示。
图3-96 WOR(P)和DOR(P)指令的表示
图中,
(S)表示进行逻辑或运算的源数据或者存储了数据的软元件起始号(16/32位二进制数据);
(D)表示将存储逻辑或运算结果的软元件起始号(16/32位二进制数据)。
WOR(P)指令是对(D)中所指定的软元件的16位数据和(S)中所指定的软元件的16位数据的各个位执行逻辑或运算,并将运算结果存储在(D)所指定的软元件中。当指定了位软元件时,则在运算中位软元件所指定点之后的位将当做“0”处理。
DOR(P)指令是对(D)中所指定的软元件的32位数据和(S)中所指定的软元件的32位数据的各个位执行逻辑或运算,并将运算结果存储在(D)所指定的软元件中。当指定了位软元件时,则在运算中位软元件所指定点之后的位将当做“0”处理。
注意:设置3个数据和设置2个数据时,方法相同。
3.16位和32位数据逻辑异或(WXOR(P)、DXOR(P))
该指令表达方式如图3-97所示。
图3-97 WXOR(P)与DXOR(P)指令的表示
图中,
(S)表示进行逻辑异或运算的源数据或者存储了数据的软元件起始号(16/32位二进制数据);
(D)表示存储逻辑异或运算结果的软元件起始号(16/32位二进制数据)。
WXOR(P)指令是对(D)中所指定的软元件的16位数据和(S)中所指定的软元件的16位数据的各个位执行逻辑异或运算,并将运算结果存储在(D)所指定的软元件中。当指定了位软元件时,则在运算中位软元件所指定点之后的位将当做“0”处理。
DXOR(P)指令对D中所指定的软元件的32位数据和S中所指定的软元件的32位数据的各个位执行逻辑异或运算,并将运算结果存储在D所指定的软元件中。当指定了位软元件时,则在运算中位软元件所指定点之后的位将当做“0”处理。
注意:设置3个数据和设置2个数据时,方法相同。
4.16位和32位数据逻辑异或非(WXNR(P)、DXNR(P))
指令表达方式如图3-98所示。
图3-98 WXNR(P)、DXNR(P)指令的表示
图中,
(S)表示逻辑异或非运算的源数据或者存储了数据的软元件起始号(16/32位二进制数据);
(D)表示将存储逻辑异或非运算结果的软元件起始号(16/32位二进制数据)。
WXNR(P)指令是对(D)中所指定的软元件的16位数据和(S)中所指定的软元件的16位数据的各个位执行逻辑异或非运算,并将运算结果存储在(D)所指定的软元件中。当指定了位软元件时,则在运算中位软元件所指定点之后的位将当做“0”处理。
DXNR(P)指令是对(D)中所指定的软元件的32位数据和(S)中所指定的软元件的32位数据的各个位执行逻辑异或非运算,并将运算结果存储在(D)所指定的软元件中。当指定了位软元件时,则在运算中位软元件所指定点之后的位将当做“0”处理。
注意:设置3个数据和设置2个数据时,方法相同。