1、 本章节描述标准库指令中的各种指令本章节描述标准库指令中的各种指令5.2 5.2 标准库指令标准库指令指令块如图所示:指令块如图所示:减计数器指令减计数器指令CTDCTD输入:输入:CDCD: 布尔型(布尔型(BOOLBOOL);该输入端的上升沿触发);该输入端的上升沿触发CVCV的递减计数。的递减计数。LOADLOAD:布尔型(:布尔型(BOOLBOOL);当其为上升沿触发时,);当其为上升沿触发时,CVCV被置为上限值被置为上限值PVPV。PVPV: 字型(字型(WORDWORD);上限值,也就是);上限值,也就是CVCV开始递减时的初始值。开始递减时的初始值。输出:输出:Q Q: 布尔型
2、(布尔型(BOOLBOOL);一旦);一旦CVCV达到达到0 0时,其值为时,其值为TRUETRUE。CVCV:字型(:字型(WORDWORD);不断减);不断减1 1的值,从的值,从PVPV开始直至其达到开始直至其达到0 0。 当当LOADLOAD为为TRUETRUE时,计数变量时,计数变量CVCV被初始化为上限值被初始化为上限值PVPV。当。当CDCD端有一个从端有一个从FALSEFALSE变为变为TRUETRUE的上升沿时,若的上升沿时,若CVCV大于大于0 0时,它时,它将减将减1 1(也就是说,它不会输出小于(也就是说,它不会输出小于0 0的值)。当的值)。当CVCV等于等于0 0时
3、,时,Q Q返回返回TRUETRUE。程序例:程序例:分析:程序执行时,将分析:程序执行时,将PV_WORDPV_WORD设为设为3 3,当,当X2X2由由FALSEFALSE变为变为TRUETRUE上升沿上升沿 触发触发时,时,CV_WORDCV_WORD也变为也变为3 3。此时。此时 输入端输入端X1X1执行执行FALSEFALSE变为变为TRUETRUE,上升沿触发,则,上升沿触发,则 CV_WORDCV_WORD自动减计数自动减计数1 1;当;当X1X1第第3 3次由次由FALSEFALSE变变 TRUETRUE上升沿触发时,上升沿触发时,CV_WORDCV_WORD递减到递减到0 0
4、时,此时时,此时Q Q 输出为输出为1 1。加计数指令加计数指令CTUCTU指令块如下图所指令块如下图所示:示:输入:输入:CUCU:布尔型(:布尔型(BOOLBOOL);该输入端的上升沿触发);该输入端的上升沿触发CVCV的递增计数。的递增计数。RESETRESET:布尔型(:布尔型(BOOLBOOL);当其为);当其为TRUETRUE时,时,CVCV被复位为被复位为0 0。PVPV:字型(:字型(WORDWORD););CVCV计数的上限。计数的上限。输出:输出:Q Q:布尔型(:布尔型(BOOLBOOL);一旦);一旦CVCV达到其上限达到其上限PVPV时,其值为时,其值为TRUETRU
5、E。CVCV:字型(:字型(WORDWORD);不断加);不断加1 1的值,直至其达到的值,直至其达到PVPV。 当当RESETRESET为为TRUETRUE时,计数变量时,计数变量CVCV被初始化为被初始化为0 0。当。当CUCU端有端有一个从一个从FALSEFALSE变为变为TRUETRUE的上升沿时,的上升沿时,CVCV将加将加1 1。当。当CVCV大于或等大于或等于上限于上限PVPV时,时,Q Q返回返回TRUETRUE。程序例:程序例:分析:程序执行时,将分析:程序执行时,将PV_WORDPV_WORD设为设为3 3,此时,此时CV_WORDCV_WORD是是0 0。 此时输入端此时
6、输入端X1X1执行执行FALSEFALSE变为变为TRUETRUE上升沿触发,则上升沿触发,则 CV_WORDCV_WORD自动加计数自动加计数1 1;当;当X1X1第第3 3次由次由FALSEFALSE变变TRUETRUE上上 升沿触发时,升沿触发时,CV_WORDCV_WORD递增到递增到3 3时,此时时,此时Q Q输出为输出为1 1。 此时如将此时如将RESETRESET端端X2X2执行执行FALSEFALSE变为变为TRUETRUE上升沿触发,上升沿触发, 则指令重新复位数变量则指令重新复位数变量CVCV被初始化为被初始化为0 0。 计数功能块计数功能块CTUCTU:运行结果运行结果:
7、加减双向计数指令加减双向计数指令CTUDCTUD指令块如下图所示:指令块如下图所示:输入:输入:CUCU:布尔型(:布尔型(BOOLBOOL);当);当CUCU端有上升沿时,触发端有上升沿时,触发CVCV的递增计数。的递增计数。CDCD:布尔型(:布尔型(BOOLBOOL);当);当CDCD端有上升沿时,触发端有上升沿时,触发CVCV的递减计数。的递减计数。RESETRESET:布尔型(:布尔型(BOOLBOOL)当其为)当其为TRUETRUE时,时,CVCV被复位为被复位为0 0。LOADLOAD:布尔型(:布尔型(BOOLBOOL);当其为);当其为TRUETRUE时,时,CVCV被置为被
8、置为PVPV。PVPV:字型(:字型(WORDWORD););CVCV递增时的上限值,或递增时的上限值,或CVCV开始递减时的初开始递减时的初 始值始值。输出:输出:QUQU:布尔型(:布尔型(BOOLBOOL);一旦);一旦CVCV达到达到PVPV时,其值为时,其值为TRUETRUEQDQD:布尔型(:布尔型(BOOLBOOL);一);一 旦旦CVCV达到达到0 0时,时, 其值为其值为TRUETRUECVCV:字型:字型 (WORDWORD);不断减);不断减1 1的值,从的值,从PVPV开始直至其达到开始直至其达到0 0程序例:程序例:分析:当分析:当RESETRESET为为TRUETR
9、UE时,计数变量时,计数变量CVCV被初始化为被初始化为0 0。当。当LOAD LOAD 为为TRUETRUE时,计数变量时,计数变量CVCV被初始化为上限值被初始化为上限值PVPV。当。当CUCU端端 有一个从有一个从FALSEFALSE变为变为TRUETRUE的上升沿时,的上升沿时,CVCV将加将加1 1。当。当CDCD 端有一个从端有一个从FALSEFALSE变为变为TRUETRUE的上升沿时,若的上升沿时,若CVCV不会降不会降 到到0 0以下时,它将减以下时,它将减1 1。当。当CVCV大于或等于上限大于或等于上限PVPV时,时,QU QU 返回返回TRUETRUE。当。当CVCV等
10、于等于0 0时,时,QDQD返回返回TRUETRUE。延时断开指令延时断开指令TOFTOF 定时器功能块,完成关延时的功能。当定时器定时器功能块,完成关延时的功能。当定时器的输入端由的输入端由TRUETRUE变为变为FALSEFALSE时(下降沿),等过了时(下降沿),等过了一段时间后,定时器的输出端才变为一段时间后,定时器的输出端才变为FALSEFALSE。指令块。指令块如下图所示:如下图所示:输入:输入:ININ:布尔型(:布尔型(BOOLBOOL);该输入端的下降沿触发);该输入端的下降沿触发ETET端端 的计时。的计时。PTPT:时间型(:时间型(TIMETIME););ETET计时时
11、间的上限值(延时计时时间的上限值(延时 时间)。时间)。输出:输出:Q Q:布尔型(:布尔型(BOOLBOOL);一旦);一旦ETET端计时达到上限值端计时达到上限值PTPT时,时, 输出一个下降沿(延时时间过去了)。输出一个下降沿(延时时间过去了)。ETET:时间型(:时间型(TIMETIME);时间的当前状态。);时间的当前状态。程序例:程序例:分析:当分析:当ININ为为TRUETRUE时时,Q,Q为为TRUETRUE,ETET为为0 0。一旦。一旦ININ变为变为FALSEFALSE,定,定 时器的输出端时器的输出端ETET以精确到毫秒级别开始计时,直到它等以精确到毫秒级别开始计时,直
12、到它等 于于PTPT,随后它会维持不变。当,随后它会维持不变。当ININ变为变为FALSEFALSE且且ETET等于等于PT PT 时,时,Q Q为为FALSEFALSE。否则它为。否则它为TRUETRUE。在本例中,。在本例中,PTPT设为设为3s3s, 当当X1X1由由TRUETRUE变为变为FALSEFALSE下降沿触发时,定时器输出端下降沿触发时,定时器输出端ET ET 开始计时,定时到达开始计时,定时到达3s3s后输出后输出Q Q由由TRUETRUE变为变为FALSEFALSE。延时导通指令延时导通指令TONTON 定时器功能块,完成开延时的功能。当定时器定时器功能块,完成开延时的功
13、能。当定时器的输入端变为的输入端变为TRUETRUE时,等过了一段时间后,定时器时,等过了一段时间后,定时器的输出端才变为的输出端才变为TRUETRUE。指令块如下图所示:。指令块如下图所示:输入:输入:ININ:布尔型(:布尔型(BOOLBOOL);该输入端的上升沿触发);该输入端的上升沿触发ETET端端 的计时。的计时。PTPT:时间型(:时间型(TIMETIME););ETET计时时间的上限值(延时计时时间的上限值(延时 时间)。时间)。输出:输出:Q Q:布尔型(:布尔型(BOOLBOOL);一旦);一旦ETET端计时达到上限值端计时达到上限值PTPT时,时, 输出一个上升沿(延时时间
14、过去了)。输出一个上升沿(延时时间过去了)。ETET:时间型(:时间型(TIMETIME);时间的当前状态。);时间的当前状态。程序例:程序例:分析分析: :当当ININ为为FALSEFALSE时时,Q,Q为为FALSEFALSE,ETET为为0 0。一旦。一旦ININ变变 为为TRUETRUE,定时器的输出端,定时器的输出端ETET以精确到毫秒级别以精确到毫秒级别 开始计时,直到它等于开始计时,直到它等于PTPT,随后它会维持不变。,随后它会维持不变。 当当ININ变为变为TRUETRUE且且ETET等于等于PTPT时,时,Q Q为为TRUETRUE。否则。否则 它为它为FALSEFALSE
15、。在本例中。在本例中, PT, PT设为设为3s3s,当,当X1X1由由 FALSEFALSE变为变为TRUETRUE上升沿触发时,定时器输出端上升沿触发时,定时器输出端 ETET开始计时,定时到达开始计时,定时到达3s3s后输出后输出Q Q由由FALSEFALSE变为变为 TRUETRUE。(1)(1)通电延时通电延时TONTON:相应的时序图:相应的时序图:利用通电延时利用通电延时TONTON设计一个通电后延时设计一个通电后延时3S3S的梯形图的梯形图t=880mst=880ms时的运行状态时的运行状态:t=3st=3s时的运行状态:时的运行状态:参考程序及运行结果:参考程序及运行结果:(
16、2)(2)断电延时断电延时TOFTOF:相应的时序图相应的时序图:t=0st=0s时的运行结果时的运行结果:t=1s100mst=1s100ms时的运行结果:时的运行结果:t=3st=3s时的运行结果:时的运行结果:例:例:利用断电延时利用断电延时TOFTOF设计一个断电后延时设计一个断电后延时3S3S的梯形图的梯形图PLC 每隔2 秒钟读取一次i) 定时器及计数器组合用法单个定时器用法秒脉冲+计数器上述的三种方式都可以实现上述的三种方式都可以实现2s 的定时功能,但是从编程的简便性和容许的误的定时功能,但是从编程的简便性和容许的误差角度来说,第二种方式可能更简单,产生的时间误差更小。在编程的
17、过程中,差角度来说,第二种方式可能更简单,产生的时间误差更小。在编程的过程中,考虑到考虑到PLC 扫描周期的影响,应尽可能的简化程序的编写,以减小扫描周期扫描周期的影响,应尽可能的简化程序的编写,以减小扫描周期可能产生的误差。可能产生的误差。触发定时器指令触发定时器指令TPTP 触发定时器功能块。定时器的输出值不断增加,触发定时器功能块。定时器的输出值不断增加,直至其达到限值。在计时期间,直至其达到限值。在计时期间,“脉冲脉冲”变量为变量为TRUETRUE,其他时候为,其他时候为FALSEFALSE。指令块如下图所示:。指令块如下图所示:输入:输入:ININ:布尔型(:布尔型(BOOLBOOL
18、);该输入端的上升沿触发);该输入端的上升沿触发ETET端端的计时的计时PTPT:时间型(:时间型(TIMETIME);计时时间的上限值);计时时间的上限值输出:输出:Q Q:布尔型(:布尔型(BOOLBOOL);当);当ETET端在计时的时候,其值端在计时的时候,其值为为TRUETRUEETET:时间型(:时间型(TIMETIME);时间的当前状态);时间的当前状态程序例:程序例:分析:当分析:当ININ为为FALSEFALSE时时,Q,Q为为FALSEFALSE,ETET为为0 0。一旦。一旦ININ变为变为TRUETRUE, 定时器的输出端定时器的输出端ETET以毫秒精度开始计时,直到它
19、等于以毫秒精度开始计时,直到它等于 PTPT,随后它会维持不变。当,随后它会维持不变。当ININ变为变为TRUETRUE且且ETET小于或等小于或等 于于PTPT时,时,Q Q为为TRUETRUE。否则它为。否则它为FALSEFALSE。在由。在由PTPT值指定的值指定的 时间到达时,时间到达时,Q Q返回了一个信号。在本例中,返回了一个信号。在本例中,PTPT设为设为3 3 时,时,X1X1为为FALSEFALSE,Q1Q1为为FALSEFALSE,当,当X1X1为为TRUETRUE,Q Q输出变为输出变为 TRUETRUE,同时,同时ETET开始计数,当开始计数,当ET=3SET=3S时,
20、时,Q Q输出变回为输出变回为 FALSE.FALSE.脉冲指令脉冲指令BLINKBLINK 功能块功能块BLINKBLINK产生脉冲信号。输入由产生脉冲信号。输入由BOOLBOOL类型类型ENABLEENABLE,以及以及TIMETIME类型类型TIMELOWTIMELOW和和TIMEHIGHTIMEHIGH组成。输出组成。输出OUTOUT是是BOOLBOOL类型。类型。指令块如下图所示:指令块如下图所示: 如果如果ENABLEENABLE为为TRUETRUE,在时间周期,在时间周期TIMEHIGHTIMEHIGH,BLINKBLINK设置设置输出为输出为TRUETRUE;然后在时间周期;然
21、后在时间周期TIMELOWTIMELOW,设置输出为,设置输出为FALSEFALSE。程序例:程序例:分析:在本例中,当分析:在本例中,当ENABLE X1ENABLE X1是是TRUETRUE时,时,BLINKBLINK开始工作,开始工作, 输出低电平输出低电平2s2s高电平高电平1s1s的脉冲,如下图。的脉冲,如下图。功能块功能块BLINKBLINK的应用的应用振荡电路:振荡电路:振荡电路的作用是产生交流电振荡来作为信号源。一般把大小和方向都随周期发生变化的电流叫振荡电流,能产生振荡电流的电路叫做振荡电路,那么如何使用PLC程序编制振荡电路呢?施耐德标准程序库中提供了这样的功能块来产生方波
22、脉冲,即BLINK功能块。功能块介绍:功能块介绍: (1)功能块BLINK产生脉冲信号。输入由BOOL类型ENABLE,以及TIME类型TIMELOW和TIMEHIGH组成。输出OUT是BOOL类型。(2)如果ENABLE为TRUE,在时间周期TIMEHIGH,BLINK设置输出为TRUE.然后在时间周期TIMELOW,设置输出为FALSE,程序和时序图如图所示。图中的程序实现了图中的程序实现了10s10s为真、为真、10s10s为假的方波为假的方波时序图时序图:参考程序:参考程序:下降沿触发指令下降沿触发指令F_TRIGF_TRIG该功能块检测一个下降沿。指令块如下图所示:该功能块检测一个下
23、降沿。指令块如下图所示:输入:输入:CLKCLK:布尔型(:布尔型(BOOLBOOL);被检测其下降沿的布尔型);被检测其下降沿的布尔型输入信号输入信号输出:输出:Q Q:布尔型(:布尔型(BOOLBOOL);当);当CLKCLK上检测到一个下降沿时,上检测到一个下降沿时, 其值为其值为TRUE; TRUE; 只要输入变量只要输入变量CLKCLK为为TRUETRUE,输出,输出Q Q都都保持为保持为FALSEFALSE。一旦。一旦CLKCLK为为FALSEFALSE,Q Q会先返回会先返回TRUETRUE,然后被置为然后被置为FALSEFALSE。这意味着每次调用这个功能块。这意味着每次调用这
24、个功能块时,时, Q Q会返回会返回FALSEFALSE直到直到CLKCLK在上升沿后有一个下在上升沿后有一个下降沿。降沿。程序例:程序例:分析:在本例中,当分析:在本例中,当X1X1输入一个由输入一个由TRUETRUE变为变为FALSE FALSE 的下降沿,则的下降沿,则F_TRIGF_TRIG的输出的输出Q Q也输出一个由也输出一个由FALSEFALSE变为变为TRUETRUE的上升沿,然后再变为的上升沿,然后再变为FALSEFALSE。上升沿触发指令上升沿触发指令R_TRIGR_TRIG 该功能块检测一个上升沿。指令块如下图所示:该功能块检测一个上升沿。指令块如下图所示:输入:输入:C
25、LKCLK:布尔型(:布尔型(BOOLBOOL);被检测上升沿的布尔型输);被检测上升沿的布尔型输入信号入信号输出:输出:Q Q:布尔型(:布尔型(BOOLBOOL);当);当CLKCLK上检测到一个上升沿时,上检测到一个上升沿时,其值为其值为TRUETRUE只要输入变量只要输入变量CLKCLK为为FALSEFALSE,输出,输出Q Q保持保持为为FALSEFALSE。一旦。一旦CLKCLK为为TRUETRUE,Q Q会先返回会先返回TRUETRUE,然后,然后被置为被置为FALSEFALSE。这意味着每次调用这个功能块时,。这意味着每次调用这个功能块时,Q Q会返回会返回FALSEFALSE
26、直到直到CLKCLK在下降沿后有一个上升沿。在下降沿后有一个上升沿。程序例:程序例:分析:在本例中,当分析:在本例中,当X1X1输入一个由输入一个由FALSEFALSE变为变为TRUE TRUE 的上升沿,则的上升沿,则R_TRIGR_TRIG的输出的输出Q Q也输出一个由也输出一个由 FALSEFALSE变为变为TRUETRUE的上升沿,然后再变为的上升沿,然后再变为FALSEFALSE。单按钮控制输出灯的程序单按钮控制输出灯的程序功能块R-TRIG的应用:程序:程序:时序图:时序图:功能介绍:功能介绍:(1)在程序中使用上升沿指令后,当输入点button的状态由OFF转为ON,仅在驱动输入
27、ON后1个扫描周期内,内部软元件M3才动作。(2)在输入点button上,第一个脉冲信号到来时,M3产生一个扫描周期的单脉冲,使M3的常开触点闭合一个扫描周期。(3)第一个按钮脉冲到来一个扫描周期后,M3断开,输出线圈lamp接通,第二个支路使输出线圈lamp保持接通。(4)当第二个脉冲到来时,M3再产生一个扫描周期的单脉冲,使得输出线圈lamp的状态由接通变为断开。(5)通过分析可知,通过一个输入点的上升沿的次数可控制输出lamp的接通和断开。(6)由以上分析可知,这个程序同时也是一个二分频电路。如果将分频的脉冲信号加button上,则lamp的输出频率刚好是button输入频率的12.加运
28、算指令加运算指令ADDADD 变量相加。允许的变量类型:变量相加。允许的变量类型: BYTEBYTE、WORDWORD、DWORDDWORD、SINTSINT、USINTUSINT、INTINT、UINTUINT、DINTDINT、UDINTUDINT、REALREAL和和LREALLREAL。指令块如下图所示:。指令块如下图所示:程序例:程序例:分析:在本例中,当分析:在本例中,当X1X1为为TRUETRUE时,时,ADDADD执行把操作执行把操作 数数X3X3和和 X4X4相加的运算,并把结果输出到相加的运算,并把结果输出到X5X5 中,如中,如X3=3X3=3;X4=7X4=7;则;则X
29、5=10X5=10。减运算指令减运算指令SUBSUB 从某个变量中减去一个变量。允许的变量类型:从某个变量中减去一个变量。允许的变量类型:BYTEBYTE、WORDWORD、DWORDDWORD、SINTSINT、USINTUSINT、INTINT、UINTUINT、DINTDINT、UDINTUDINT、REALREAL和和LREALLREAL。指令如下图所示:。指令如下图所示:程序例:程序例:分析分析: :在本例中在本例中, , 当当X1X1为为TRUETRUE时,时,SUBSUB执行把操作数执行把操作数 X3X3减去减去 X4X4的运算,并把结果输出到的运算,并把结果输出到X5X5中,如
30、中,如 X3=3X3=3;X4=7X4=7;则;则 X5=-4X5=-4。 变量相乘。允许的变量类型:变量相乘。允许的变量类型:BYTEBYTE、WORDWORD、DWORDDWORD、SINTSINT、USINTUSINT、INTINT、UINTUINT、DINTDINT、UDINTUDINT、REALREAL和和LREALLREAL。指令如下图所示:。指令如下图所示:乘运算指令乘运算指令MULMUL程序例:程序例:分析:在本例中分析:在本例中, , 当当X1X1为为TRUETRUE时,时,MULMUL执行把操作执行把操作 数数X3X3乘以乘以X4X4的运算,并把结果输出到的运算,并把结果输
31、出到X5X5中,中, 如如X3=3X3=3;X4=7X4=7;则;则X5=21X5=21。除运算指令除运算指令DIVDIV 用一个变量除另一个变量。允许的变量类型:用一个变量除另一个变量。允许的变量类型:BYTEBYTE、WORDWORD、DWORDDWORD、SINTSINT、USINTUSINT、INTINT、UINTUINT、DINTDINT、UDINTUDINT、REALREAL和和LREALLREAL。指令如下图所示:。指令如下图所示:程序例:程序例:分析:在本例中分析:在本例中, , 当当X1X1为为TRUETRUE时,时,DIVDIV执行把执行把操操 作数作数X3X3除除X4X4
32、的运算,并把结果输出到的运算,并把结果输出到X5X5 中,如中,如X3=10X3=10;X4=5X4=5;则;则X5=2X5=2。截尾取整指令截尾取整指令TRUNCTRUNC 把实数类型(把实数类型(REALREAL)转换成)转换成DINTDINT类型。取被类型。取被转换值的整数部分。指令如下图所示:转换值的整数部分。指令如下图所示:程序例:程序例:分析:在本例中分析:在本例中, , 当当X1X1为为TRUETRUE时,时,TRUNCTRUNC执行把执行把操操 作数作数X7X7截尾取整的运算,即当截尾取整的运算,即当X7=9.89X7=9.89时,时, 取其整数部分,并把结果输出到取其整数部分
33、,并把结果输出到X8X8,即,即 X8=9X8=9。取余指令取余指令MODMOD 一个变量与另一个变量相除取余。允许的变量一个变量与另一个变量相除取余。允许的变量类型:类型:BYTEBYTE、WORDWORD、DWORDDWORD、SINTSINT、USINTUSINT、INTINT、UINTUINT、DINTDINT、UDINTUDINT。结果为除法运算的余数,是。结果为除法运算的余数,是一个整数。指令如下图所示:一个整数。指令如下图所示:程序例:程序例:分析:在本例中,当分析:在本例中,当X1X1为为TRUETRUE时,时,MODMOD指令执行指令执行 把把X3X3除以除以X4X4,并把余
34、数输出到,并把余数输出到X5X5中;即中;即 当当X3=10X3=10,X4=6X4=6时,余数时,余数X5=4X5=4。比较等于指令比较等于指令EQEQ指令如下图所示:指令如下图所示: 当两个操作数相等时,返回值为当两个操作数相等时,返回值为TRUETRUE。操作数。操作数可以为可以为BOOLBOOL、BYTEBYTE、WORDWORD、DWORDDWORD、SINTSINT、USINTUSINT、INTINT、UINTUINT、DINTDINT、UDINTUDINT、REALREAL、LREALLREAL、TIMETIME、DATEDATE、TIME_OF_DAYTIME_OF_DAY、D
35、ATE_AND_TIMEDATE_AND_TIME和和STRINGSTRING类型。类型。程序例:程序例:分析:在本例中,当分析:在本例中,当X1X1为为TRUETRUE时,时,EQEQ指令执行,比指令执行,比 较较X3X3和和X4X4的值,如的值,如X3=X4X3=X4,则输出比较结果,则输出比较结果 X2X2为为TRUETRUE;否则,;否则,X2X2为为FALSEFALSE。所以,当。所以,当 X3=X4=6X3=X4=6时,比较结果时,比较结果X2=TRUEX2=TRUE。比较比较 大于等于指令大于等于指令GEGE大于或等于。指令如下图:大于或等于。指令如下图: 当第一个操作数大于或者
36、等于第二个操作数当第一个操作数大于或者等于第二个操作数时,返回值为时,返回值为TRUETRUE。操作数可以为。操作数可以为BOOLBOOL、BYTEBYTE、WORDWORD、DWORDDWORD、SINTSINT、USINTUSINT、INTINT、UINTUINT、DINTDINT、UDINTUDINT、REALREAL、LREALLREAL、TIMETIME、DATEDATE、TIME_OF_DAYTIME_OF_DAY、DATE_AND_TIMEDATE_AND_TIME和和STRINGSTRING类型。类型。程序例:程序例:分析:在本例中,当分析:在本例中,当X1X1为为TRUETR
37、UE时,时,GEGE指令执行,指令执行, 比较比较X3X3和和X4X4的值,如的值,如X3X3大于等于大于等于X4X4,则输,则输 出比较结果出比较结果X2X2为为TRUETRUE;否则,;否则,X2X2为为FALSEFALSE。 所以,当所以,当X3=5X3=5;X4=6X4=6时,比较结果时,比较结果X2=FALSEX2=FALSE。比较比较 大于指令大于指令GTGT大于。指令如下图:大于。指令如下图: 当第一个操作数比第二个大时,返回值为当第一个操作数比第二个大时,返回值为TRUETRUE。操作数可以为操作数可以为BOOLBOOL、BYTEBYTE、WORDWORD、DWORDDWORD
38、、SINTSINT、USINTUSINT、INTINT、UINTUINT、DINTDINT、UDINTUDINT、REALREAL、LREALLREAL、TIMETIME、DATEDATE、IME_OF_DAYIME_OF_DAY、DATE_AND_TIMEDATE_AND_TIME和和STRINGSTRING类型。类型。程序例:程序例:分析:在本例中,当分析:在本例中,当X1X1为为TRUETRUE时,时,GTGT指令执行,比指令执行,比 较较X3X3和和X4X4的值,如的值,如X3X3大于大于X4X4,则输出比较结,则输出比较结 果果X2X2为为TRUETRUE;否则,;否则,X2X2为为
39、FALSEFALSE。所以,当。所以,当 X3=8,X4=6X3=8,X4=6时,比较结果时,比较结果X2=TRUEX2=TRUE。比较比较 小于等于指令等于指令LELE小于等于。指令如下图所示:小于等于。指令如下图所示: 第一个操作数小于或者等于第二个操作数时,第一个操作数小于或者等于第二个操作数时,返回值为返回值为TRUETRUE。操作数可以为。操作数可以为BOOLBOOL、BYTEBYTE、WORDWORD、DWORDDWORD、SINTSINT、USINTUSINT、INTINT、UINTUINT、DINTDINT、UDINTUDINT、REALREAL、LREALLREAL、TIME
40、TIME、DATEDATE、TIME_OF_DAYTIME_OF_DAY、DATA_AND_TIMEDATA_AND_TIME和和STRINGSTRING类型。类型。程序例:程序例:分析:在本例中,当分析:在本例中,当X1X1为为TRUETRUE时,时,LELE指令执行,指令执行, 比较比较X3X3和和X4X4的值,如的值,如X3X3小于或者等于小于或者等于X4X4, 则输出比较结果则输出比较结果X2X2为为TRUETRUE,否则,否则,X2X2为为 FALSEFALSE。所以,当。所以,当X3=8X3=8,X4=9X4=9时,比较结时,比较结 果果X2=TRUEX2=TRUE。比较比较 小于
41、指令小于指令LTLT小于。指令如下图所示:小于。指令如下图所示: 当第一个操作数比第二个小时,返回值为当第一个操作数比第二个小时,返回值为TRUETRUE。操作数可以为。操作数可以为BOOLBOOL、BYTEBYTE、WORDWORD、DWORDDWORD、SINTSINT、USINTUSINT、INTINT、UINTUINT、DINTDINT、UDINTUDINT、REALREAL、LREALLREAL、TIMETIME、DATEDATE、TIME_OF_DAYTIME_OF_DAY、DATA_AND_TIMEDATA_AND_TIME和和STRINGSTRING类型。类型。程序例:程序例:
42、分析:在本例中,当分析:在本例中,当X1X1为为TRUETRUE时,时,LELE指令执行,比指令执行,比 较较X3X3和和X4X4的值,如的值,如X3X3小于小于X4X4,则输出比较结,则输出比较结 果果X2X2为为TRUETRUE,否则,否则,X2X2为为FALSEFALSE。所以,当。所以,当 X3=8X3=8,X4=9X4=9时,比较结果时,比较结果X2=TRUEX2=TRUE。比较比较 不等于指令不等于指令NENE不等于。指令如下图所示:不等于。指令如下图所示: 当两个操作数不相等时,返回值为当两个操作数不相等时,返回值为TRUETRUE。操作。操作数可以为数可以为BOOLBOOL、B
43、YTEBYTE、WORDWORD、DWORDDWORD、SINTSINT、USINTUSINT、INTINT、UINTUINT、DINTDINT、UDINTUDINT、REALREAL、LREALLREAL、TIMETIME、DATEDATE、TIME_OF_DAYTIME_OF_DAY、DATA_AND_TIMEDATA_AND_TIME和和STRINGSTRING类型。类型。程序例:程序例:分析:在本例中,当分析:在本例中,当X1X1为为TRUETRUE时,时,LELE指令执行,指令执行, 比较比较X3X3和和X4X4的值,如的值,如X3X3不等于不等于X4X4,则输出,则输出 比较结果比
44、较结果X2X2为为TRUETRUE,否则,否则,X2X2为为FALSEFALSE。所。所 以,当以,当X3=8X3=8,X4=9X4=9时,比较结果时,比较结果X2=TRUEX2=TRUE。循环左移指令循环左移指令ROLROL将操作数按位循环左移。指令如下图所示:将操作数按位循环左移。指令如下图所示: ROL (in, n) ROL (in, n)。允许的数据类型:。允许的数据类型:BYTEBYTE、WORDWORD、DWORDDWORD。inin会左移二进制位会左移二进制位n n次,同时左次,同时左边移出的位重新补充到右边。边移出的位重新补充到右边。程序例:程序例:分析:在本例中,分析:在本
45、例中,inbyteinbyte和和outbyteoutbyte分别设为分别设为bytebyte数数 据类型,据类型,inbyte=10#69inbyte=10#69,n=2n=2。当。当X1X1为为 TRUETRUE 时,时,ROLROL执行循环左移位,此时执行循环左移位,此时, , inbyte=10#69=2#01000101 inbyte=10#69=2#01000101,循环左移,循环左移2 2位后,位后, outbyte=2#00010101=10#21outbyte=2#00010101=10#21循环右移指令循环右移指令RORROR将操作数按位循环右移。指令如下图所示:将操作数按
46、位循环右移。指令如下图所示: ROR (in, n) ROR (in, n)。允许的数据类型:。允许的数据类型:BYTEBYTE、WORDWORD、DWORDDWORD。inin会左移二进制位会左移二进制位n n次,同时右边次,同时右边移出的位重新补充到左边。移出的位重新补充到左边。程序例:程序例:分析:在本例中,分析:在本例中,inbyteinbyte和和outbyteoutbyte分别设为分别设为bytebyte数数 据类型,据类型,inbyte=10#69inbyte=10#69,n=2n=2。当。当X1X1为为TRUETRUE时,时, RORROR执行循环右移位,此时执行循环右移位,此
47、时, , inbyte=10#69=2#01000101 inbyte=10#69=2#01000101,循环右移,循环右移2 2位后,位后, outbyte=2#01010001=10#81outbyte=2#01010001=10#81。左移指令左移指令SHLSHL将操作数按位左移。指令如下图所示:将操作数按位左移。指令如下图所示: SHL (in, n) SHL (in, n)。inin:需要左移的操作数。:需要左移的操作数。n n:操作数左移的位数。如果操作数左移的位数。如果n n超出了数据本身的位超出了数据本身的位数,数,BYTEBYTE、WORDWORD和和DWORDDWORD类型
48、的操作数将会补类型的操作数将会补0 0,而有符号类型的操作数(例如而有符号类型的操作数(例如INTINT)将会进行算)将会进行算数移位。也就是说会将这些数的最高位的值补在数移位。也就是说会将这些数的最高位的值补在空出的二进制位上。空出的二进制位上。程序例:程序例:分析:在本例中,分析:在本例中,inbyteinbyte和和outbyteoutbyte分别设为分别设为byte byte 数据类型,数据类型,inbyte=10#69inbyte=10#69,n=2n=2。当。当X1X1为为 TRUETRUE时,时,ROLROL执行左移位,此时,执行左移位,此时, inbyte=10#69=2#01
49、000101inbyte=10#69=2#01000101, 左移左移2 2位后,位后,outbyte=2#00010100=10#20outbyte=2#00010100=10#20。右移指令右移指令SHRSHR将操作数按位右移。指令如下图所示:将操作数按位右移。指令如下图所示: SHR (in, n) SHR (in, n)。in: in: 需要右移的操作数。需要右移的操作数。n: n: 操作数右移的位数。如果操作数右移的位数。如果n n超出了数据本身的位超出了数据本身的位数,数,BYTEBYTE、WORDWORD和和DWORDDWORD类型的操作数将会补类型的操作数将会补0 0,而有符号
50、类型的操作数(例如而有符号类型的操作数(例如INTINT)将会进行算)将会进行算数移位。也就是说会将这些数的最高位的值补在数移位。也就是说会将这些数的最高位的值补在空出的二进制位上。空出的二进制位上。程序例:程序例:分析:在本例中,分析:在本例中,inbyteinbyte和和outbyteoutbyte分别设为分别设为bytebyte数数 据类型,据类型,inbyte=10#69inbyte=10#69,n=2n=2。当。当X1X1为为TRUETRUE时,时, RORROR执行右移位,此时执行右移位,此时 inbyte=10#69=2#01000101inbyte=10#69=2#010001