施耐德PLC标准指令库.ppt
本章节描述标准库指令中的各种指令,5.2 标准库指令,指令块如图所示:,减计数器指令CTD,输入:CD:布尔型(BOOL);该输入端的上升沿触发CV的递减计数。LOAD:布尔型(BOOL);当其为上升沿触发时,CV被置为上限值PV。PV:字型(WORD);上限值,也就是CV开始递减时的初始值。,输出:Q:布尔型(BOOL);一旦CV达到0时,其值为TRUE。CV:字型(WORD);不断减1的值,从PV开始直至其达到0。当LOAD为TRUE时,计数变量CV被初始化为上限值PV。当CD端有一个从FALSE变为TRUE的上升沿时,若CV大于0时,它将减1(也就是说,它不会输出小于0的值)。当CV等于0时,Q返回TRUE。,程序例:,分析:程序执行时,将PV_WORD设为3,当X2由FALSE变为TRUE上升沿 触发时,CV_WORD也变为3。此时 输入端X1执行FALSE变为TRUE,上升沿触发,则 CV_WORD自动减计数1;当X1第3次由FALSE变 TRUE上升沿触发时,CV_WORD递减到0时,此时Q 输出为1。,加计数指令CTU,指令块如下图所示:,输入:CU:布尔型(BOOL);该输入端的上升沿触发CV的递增计数。RESET:布尔型(BOOL);当其为TRUE时,CV被复位为0。PV:字型(WORD);CV计数的上限。输出:Q:布尔型(BOOL);一旦CV达到其上限PV时,其值为TRUE。CV:字型(WORD);不断加1的值,直至其达到PV。当RESET为TRUE时,计数变量CV被初始化为0。当CU端有一个从FALSE变为TRUE的上升沿时,CV将加1。当CV大于或等于上限PV时,Q返回TRUE。,程序例:,分析:程序执行时,将PV_WORD设为3,此时CV_WORD是0。此时输入端X1执行FALSE变为TRUE上升沿触发,则 CV_WORD自动加计数1;当X1第3次由FALSE变TRUE上 升沿触发时,CV_WORD递增到3时,此时Q输出为1。此时如将RESET端X2执行FALSE变为TRUE上升沿触发,则指令重新复位数变量CV被初始化为0。,计数功能块CTU:,运行结果:,加减双向计数指令CTUD,指令块如下图所示:,输入:CU:布尔型(BOOL);当CU端有上升沿时,触发CV的递增计数。CD:布尔型(BOOL);当CD端有上升沿时,触发CV的递减计数。RESET:布尔型(BOOL)当其为TRUE时,CV被复位为0。LOAD:布尔型(BOOL);当其为TRUE时,CV被置为PV。PV:字型(WORD);CV递增时的上限值,或CV开始递减时的初 始值。,输出:QU:布尔型(BOOL);一旦CV达到PV时,其值为TRUEQD:布尔型(BOOL);一 旦CV达到0时,其值为TRUECV:字型(WORD);不断减1的值,从PV开始直至其达到0,程序例:,分析:当RESET为TRUE时,计数变量CV被初始化为0。当LOAD 为TRUE时,计数变量CV被初始化为上限值PV。当CU端 有一个从FALSE变为TRUE的上升沿时,CV将加1。当CD 端有一个从FALSE变为TRUE的上升沿时,若CV不会降 到0以下时,它将减1。当CV大于或等于上限PV时,QU 返回TRUE。当CV等于0时,QD返回TRUE。,延时断开指令TOF,定时器功能块,完成关延时的功能。当定时器的输入端由TRUE变为FALSE时(下降沿),等过了一段时间后,定时器的输出端才变为FALSE。指令块如下图所示:,输入:IN:布尔型(BOOL);该输入端的下降沿触发ET端 的计时。PT:时间型(TIME);ET计时时间的上限值(延时 时间)。输出:Q:布尔型(BOOL);一旦ET端计时达到上限值PT时,输出一个下降沿(延时时间过去了)。ET:时间型(TIME);时间的当前状态。,程序例:,分析:当IN为TRUE时,Q为TRUE,ET为0。一旦IN变为FALSE,定 时器的输出端ET以精确到毫秒级别开始计时,直到它等 于PT,随后它会维持不变。当IN变为FALSE且ET等于PT 时,Q为FALSE。否则它为TRUE。在本例中,PT设为3s,当X1由TRUE变为FALSE下降沿触发时,定时器输出端ET 开始计时,定时到达3s后输出Q由TRUE变为FALSE。,延时导通指令TON,定时器功能块,完成开延时的功能。当定时器的输入端变为TRUE时,等过了一段时间后,定时器的输出端才变为TRUE。指令块如下图所示:,输入:IN:布尔型(BOOL);该输入端的上升沿触发ET端 的计时。PT:时间型(TIME);ET计时时间的上限值(延时 时间)。输出:Q:布尔型(BOOL);一旦ET端计时达到上限值PT时,输出一个上升沿(延时时间过去了)。ET:时间型(TIME);时间的当前状态。,程序例:,分析:当IN为FALSE时,Q为FALSE,ET为0。一旦IN变 为TRUE,定时器的输出端ET以精确到毫秒级别 开始计时,直到它等于PT,随后它会维持不变。当IN变为TRUE且ET等于PT时,Q为TRUE。否则 它为FALSE。在本例中,PT设为3s,当X1由 FALSE变为TRUE上升沿触发时,定时器输出端 ET开始计时,定时到达3s后输出Q由FALSE变为 TRUE。,(1)通电延时TON:,相应的时序图:,利用通电延时TON设计一个通电后延时3S的梯形图,t=880ms时的运行状态:,t=3s时的运行状态:,参考程序及运行结果:,(2)断电延时TOF:,相应的时序图:,t=0s时的运行结果:,t=1s100ms时的运行结果:,t=3s时的运行结果:,例:利用断电延时TOF设计一个断电后延时3S的梯形图,PLC 每隔2 秒钟读取一次,i)定时器及计数器组合用法,单个定时器用法,秒脉冲+计数器,上述的三种方式都可以实现2s 的定时功能,但是从编程的简便性和容许的误差角度来说,第二种方式可能更简单,产生的时间误差更小。在编程的过程中,考虑到PLC 扫描周期的影响,应尽可能的简化程序的编写,以减小扫描周期可能产生的误差。,触发定时器指令TP,触发定时器功能块。定时器的输出值不断增加,直至其达到限值。在计时期间,“脉冲”变量为TRUE,其他时候为FALSE。指令块如下图所示:,输入:IN:布尔型(BOOL);该输入端的上升沿触发ET端的计时PT:时间型(TIME);计时时间的上限值输出:Q:布尔型(BOOL);当ET端在计时的时候,其值为TRUEET:时间型(TIME);时间的当前状态,程序例:,分析:当IN为FALSE时,Q为FALSE,ET为0。一旦IN变为TRUE,定时器的输出端ET以毫秒精度开始计时,直到它等于 PT,随后它会维持不变。当IN变为TRUE且ET小于或等 于PT时,Q为TRUE。否则它为FALSE。在由PT值指定的 时间到达时,Q返回了一个信号。在本例中,PT设为3 时,X1为FALSE,Q1为FALSE,当X1为TRUE,Q输出变为 TRUE,同时ET开始计数,当ET=3S时,Q输出变回为 FALSE.,脉冲指令BLINK,功能块BLINK产生脉冲信号。输入由BOOL类型ENABLE,以及TIME类型TIMELOW和TIMEHIGH组成。输出OUT是BOOL类型。指令块如下图所示:,如果ENABLE为TRUE,在时间周期TIMEHIGH,BLINK设置输出为TRUE;然后在时间周期TIMELOW,设置输出为FALSE。,程序例:,分析:在本例中,当ENABLE X1是TRUE时,BLINK开始工作,输出低电平2s高电平1s的脉冲,如下图。,功能块BLINK的应用,振荡电路:振荡电路的作用是产生交流电振荡来作为信号源。一般把大小和方向都随周期发生变化的电流叫振荡电流,能产生振荡电流的电路叫做振荡电路,那么如何使用PLC程序编制振荡电路呢?施耐德标准程序库中提供了这样的功能块来产生方波脉冲,即BLINK功能块。,功能块介绍:(1)功能块BLINK产生脉冲信号。输入由BOOL类型ENABLE,以及TIME类型TIMELOW和TIMEHIGH组成。输出OUT是BOOL类型。,(2)如果ENABLE为TRUE,在时间周期TIMEHIGH,BLINK设置输出为TRUE.然后在时间周期TIMELOW,设置输出为FALSE,程序和时序图如图所示。,图中的程序实现了10s为真、10s为假的方波,时序图:,参考程序:,下降沿触发指令F_TRIG,该功能块检测一个下降沿。指令块如下图所示:,输入:CLK:布尔型(BOOL);被检测其下降沿的布尔型输入信号输出:Q:布尔型(BOOL);当CLK上检测到一个下降沿时,其值为TRUE;只要输入变量CLK为TRUE,输出Q都保持为FALSE。一旦CLK为FALSE,Q会先返回TRUE,然后被置为FALSE。这意味着每次调用这个功能块时,Q会返回FALSE直到CLK在上升沿后有一个下降沿。,程序例:,分析:在本例中,当X1输入一个由TRUE变为FALSE 的下降沿,则F_TRIG的输出Q也输出一个由FALSE变为TRUE的上升沿,然后再变为FALSE。,上升沿触发指令R_TRIG,该功能块检测一个上升沿。指令块如下图所示:,输入:CLK:布尔型(BOOL);被检测上升沿的布尔型输入信号输出:Q:布尔型(BOOL);当CLK上检测到一个上升沿时,其值为TRUE只要输入变量CLK为FALSE,输出Q保持为FALSE。一旦CLK为TRUE,Q会先返回TRUE,然后被置为FALSE。这意味着每次调用这个功能块时,Q会返回FALSE直到CLK在下降沿后有一个上升沿。,程序例:,分析:在本例中,当X1输入一个由FALSE变为TRUE 的上升沿,则R_TRIG的输出Q也输出一个由 FALSE变为TRUE的上升沿,然后再变为FALSE。,单按钮控制输出灯的程序,功能块R-TRIG的应用:,程序:,时序图:,功能介绍:,(1)在程序中使用上升沿指令后,当输入点button的状态由OFF转为ON,仅在驱动输入ON后1个扫描周期内,内部软元件M3才动作。,(2)在输入点button上,第一个脉冲信号到来时,M3产生一个扫描周期的单脉冲,使M3的常开触点闭合一个扫描周期。(3)第一个按钮脉冲到来一个扫描周期后,M3断开,输出线圈lamp接通,第二个支路使输出线圈lamp保持接通。,(4)当第二个脉冲到来时,M3再产生一个扫描周期的单脉冲,使得输出线圈lamp的状态由接通变为断开。(5)通过分析可知,通过一个输入点的上升沿的次数可控制输出lamp的接通和断开。(6)由以上分析可知,这个程序同时也是一个二分频电路。如果将分频的脉冲信号加button上,则lamp的输出频率刚好是button输入频率的12.,加运算指令ADD,变量相加。允许的变量类型:BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL和LREAL。指令块如下图所示:,程序例:,分析:在本例中,当X1为TRUE时,ADD执行把操作 数X3和 X4相加的运算,并把结果输出到X5 中,如X3=3;X4=7;则X5=10。,减运算指令SUB,从某个变量中减去一个变量。允许的变量类型:BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL和LREAL。指令如下图所示:,程序例:,分析:在本例中,当X1为TRUE时,SUB执行把操作数 X3减去 X4的运算,并把结果输出到X5中,如 X3=3;X4=7;则 X5=-4。,变量相乘。允许的变量类型:BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL和LREAL。指令如下图所示:,乘运算指令MUL,程序例:,分析:在本例中,当X1为TRUE时,MUL执行把操作 数X3乘以X4的运算,并把结果输出到X5中,如X3=3;X4=7;则X5=21。,除运算指令DIV,用一个变量除另一个变量。允许的变量类型:BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL和LREAL。指令如下图所示:,程序例:,分析:在本例中,当X1为TRUE时,DIV执行把操 作数X3除X4的运算,并把结果输出到X5 中,如X3=10;X4=5;则X5=2。,截尾取整指令TRUNC,把实数类型(REAL)转换成DINT类型。取被转换值的整数部分。指令如下图所示:,程序例:,分析:在本例中,当X1为TRUE时,TRUNC执行把操 作数X7截尾取整的运算,即当X7=9.89时,取其整数部分,并把结果输出到X8,即 X8=9。,取余指令MOD,一个变量与另一个变量相除取余。允许的变量类型:BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT。结果为除法运算的余数,是一个整数。指令如下图所示:,程序例:,分析:在本例中,当X1为TRUE时,MOD指令执行 把X3除以X4,并把余数输出到X5中;即 当X3=10,X4=6时,余数X5=4。,比较等于指令EQ,指令如下图所示:,当两个操作数相等时,返回值为TRUE。操作数可以为BOOL、BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL、TIME、DATE、TIME_OF_DAY、DATE_AND_TIME和STRING类型。,程序例:,分析:在本例中,当X1为TRUE时,EQ指令执行,比 较X3和X4的值,如X3=X4,则输出比较结果 X2为TRUE;否则,X2为FALSE。所以,当 X3=X4=6时,比较结果X2=TRUE。,比较 大于等于指令GE,大于或等于。指令如下图:,当第一个操作数大于或者等于第二个操作数时,返回值为TRUE。操作数可以为BOOL、BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL、TIME、DATE、TIME_OF_DAY、DATE_AND_TIME和STRING类型。,程序例:,分析:在本例中,当X1为TRUE时,GE指令执行,比较X3和X4的值,如X3大于等于X4,则输 出比较结果X2为TRUE;否则,X2为FALSE。所以,当X3=5;X4=6时,比较结果X2=FALSE。,比较 大于指令GT,大于。指令如下图:,当第一个操作数比第二个大时,返回值为TRUE。操作数可以为BOOL、BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL、TIME、DATE、IME_OF_DAY、DATE_AND_TIME和STRING类型。,程序例:,分析:在本例中,当X1为TRUE时,GT指令执行,比 较X3和X4的值,如X3大于X4,则输出比较结 果X2为TRUE;否则,X2为FALSE。所以,当 X3=8,X4=6时,比较结果X2=TRUE。,比较 小于等于指令LE,小于等于。指令如下图所示:,第一个操作数小于或者等于第二个操作数时,返回值为TRUE。操作数可以为BOOL、BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL、TIME、DATE、TIME_OF_DAY、DATA_AND_TIME和STRING类型。,程序例:,分析:在本例中,当X1为TRUE时,LE指令执行,比较X3和X4的值,如X3小于或者等于X4,则输出比较结果X2为TRUE,否则,X2为 FALSE。所以,当X3=8,X4=9时,比较结 果X2=TRUE。,比较 小于指令LT,小于。指令如下图所示:,当第一个操作数比第二个小时,返回值为TRUE。操作数可以为BOOL、BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL、TIME、DATE、TIME_OF_DAY、DATA_AND_TIME和STRING类型。,程序例:,分析:在本例中,当X1为TRUE时,LE指令执行,比 较X3和X4的值,如X3小于X4,则输出比较结 果X2为TRUE,否则,X2为FALSE。所以,当 X3=8,X4=9时,比较结果X2=TRUE。,比较 不等于指令NE,不等于。指令如下图所示:,当两个操作数不相等时,返回值为TRUE。操作数可以为BOOL、BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、LREAL、TIME、DATE、TIME_OF_DAY、DATA_AND_TIME和STRING类型。,程序例:,分析:在本例中,当X1为TRUE时,LE指令执行,比较X3和X4的值,如X3不等于X4,则输出 比较结果X2为TRUE,否则,X2为FALSE。所 以,当X3=8,X4=9时,比较结果X2=TRUE。,循环左移指令ROL,将操作数按位循环左移。指令如下图所示:,ROL(in,n)。允许的数据类型:BYTE、WORD、DWORD。in会左移二进制位n次,同时左边移出的位重新补充到右边。,程序例:,分析:在本例中,inbyte和outbyte分别设为byte数 据类型,inbyte=10#69,n=2。当X1为 TRUE 时,ROL执行循环左移位,此时,inbyte=10#69=2#01000101,循环左移2位后,outbyte=2#00010101=10#21,循环右移指令ROR,将操作数按位循环右移。指令如下图所示:,ROR(in,n)。允许的数据类型:BYTE、WORD、DWORD。in会左移二进制位n次,同时右边移出的位重新补充到左边。,程序例:,分析:在本例中,inbyte和outbyte分别设为byte数 据类型,inbyte=10#69,n=2。当X1为TRUE时,ROR执行循环右移位,此时,inbyte=10#69=2#01000101,循环右移2位后,outbyte=2#01010001=10#81。,左移指令SHL,将操作数按位左移。指令如下图所示:,SHL(in,n)。in:需要左移的操作数。n:操作数左移的位数。如果n超出了数据本身的位数,BYTE、WORD和DWORD类型的操作数将会补0,而有符号类型的操作数(例如INT)将会进行算数移位。也就是说会将这些数的最高位的值补在空出的二进制位上。,程序例:,分析:在本例中,inbyte和outbyte分别设为byte 数据类型,inbyte=10#69,n=2。当X1为 TRUE时,ROL执行左移位,此时,inbyte=10#69=2#01000101,左移2位后,outbyte=2#00010100=10#20。,右移指令SHR,将操作数按位右移。指令如下图所示:,SHR(in,n)。in:需要右移的操作数。n:操作数右移的位数。如果n超出了数据本身的位数,BYTE、WORD和DWORD类型的操作数将会补0,而有符号类型的操作数(例如INT)将会进行算数移位。也就是说会将这些数的最高位的值补在空出的二进制位上。,程序例:,分析:在本例中,inbyte和outbyte分别设为byte数 据类型,inbyte=10#69,n=2。当X1为TRUE时,ROR执行右移位,此时 inbyte=10#69=2#01000101,右移2位后,outbyte=2#00010001=10#17。,正弦函数SIN,返回一个数的正弦值,数据以弧度计算。指令如下图:,输入变量可以是BYTE、WORD、DWORD、INT、DINT、REAL、SINT、USINT、UINT、UDINT类型。输出变量只能是REAL类型。,程序例:,分析:在本例中,X3=1弧度=180/pi度;当X1为TRUE 时,SIN执行正弦计算,将X3的正弦值输出到 X7中,所以X7=0.841。,余弦函数COS,返回一个数的余弦值,数据以弧度计算。指令如下图:,输入变量可以是BYTE、WORD、DWORD、INT、DINT、REAL、SINT、USINT、UINT、UDINT类型。输出变量只能是REAL类型。,程序例:,分析:在本例中,X3=1弧度=180/pi度;当X1为 TRUE时,SIN执行余弦运算,将X3的余弦值 输出到X7中,所以X7=0.54,正切函数TAN,返回一个数的正切值,数据以弧度计算。指令如下图:,输入变量可以是BYTE、WORD、DWORD、INT、DINT、REAL、SINT、USINT、UINT、UDINT类型。输出变量只能是REAL类型。,程序例:,分析:在本例中,X3=1弧度=180/pi度;当X1为 TRUE时,SIN执行正切运算,将X3的正切 值输出到X7中,所以X7=1.56。,反正弦函数ASIN,返回一个数的反正弦值,数据以弧度计算。指令如下图:,输入变量可以是BYTE、WORD、DWORD、INT、DINT、REAL、SINT、USINT、UINT、UDINT类型。输出变量只能是REAL类型。,程序例:,分析:在本例中,X3=1弧度=180/pi度;当X1为 TRUE时,ASIN执行反正弦运算,将X3的反 正弦值输出到X7中,所以X7=1.57。,反余弦函数ACOS,返回一个数的反余弦值,数据以弧度计算。指令如下图:,输入变量可以是BYTE、WORD、DWORD、INT、DINT、REAL、SINT、USINT、UINT、UDINT类型。输出变量只能是REAL类型。,程序例:,分析:在本例中,X3=1弧度=180/pi度;当X1为 TRUE时,ACOS执行反余弦运算,将X3的 反余弦输出到X7中,所以X7=0。,反正切函数ATAN,返回一个数的反正切值。数据以弧度计算。指令如下图:,输入变量可以是BYTE、WORD、DWORD、INT、DINT、REAL、SINT、USINT、UINT、UDINT类型。输出变量只能是REAL类型。,程序例:,分析:在本例中,X3=1弧度=180/pi度;当X1为 TRUE时,ATAN执行反正切运算,将X3的反 正切值输出到X7中,所以X7=0.785。,取绝对值函数ABS,返回一个数的绝对值。指令如下图:,输入 输出INT INT,REAL,WORD,DWORD,DINTREAL REALBYTE INT,REAL,BYTE,WORD,DWORD,DINTWORD INT,REAL,WORD,DWORD,DINTDWORD REAL,DWORD,DINTSINT REALUSINT REALUINT INT,REAL,WORD,DWORD,DINT,UDINT,UINTDINT REAL,DWORD,DINTUDINT REAL,DWORD,DINT,UDINT,程序例:,分析:在本例中,当X1为TRUE时,ABS指令 执行,将X3的绝对值输出到X7中;如 X3=-8,则输出X7=8。,指数函数EXP,返回指数函数。指令如下图:,输入变量可以是BYTE、WORD、DWORD、INT、DINT、REAL、SINT、USINT、UINT、UDINT类型。输出变量只能是REAL类型。,程序例:,分析:在本例中,当X1为TRUE时,EXP指令执 行,将X3的指数输出到X7中;如X3=2,则输出X7=7.39,幂函数EXPT,求一个变量关于另一个变量的幂。指令如下图:,两个操作数可以是BYTE、WORD、DWORD、INT、DINT、REAL、SINT、USINT、UINT、UDINT类型。输出变量只能是REAL类型。,程序例:,分析:在本例中,当X1为TRUE时,EXPT指令执 行,把X3的X5次幂输出到X7中;如X3=2,X5=3,则X7=23=8,取平方根函数SQRT,返回一个数的平方根。指令如下图:,输入变量可以是BYTE、WORD、DWORD、INT、DINT、REAL、SINT、USINT、UINT、UDINT类型。输出变量只能是REAL类型。,程序例:,分析:在本例中,当X1为TRUE时,SQRT指令 执行,把X3的平方根值输出到X7中;如X3=64,则X7=8。,对数函数LOG,返回值是以10为底的对数。指令如下图:,输入变量可以是BYTE、WORD、DWORD、INT、DINT、REAL、SINT、USINT、UINT、UDINT类型。输出变量只能是REAL类型。,程序例:,分析:在本例中,当X1为TRUE时,LOG指令执 行,把X3的以10为底的对数结果输出到 X7中;如X3=100,则X7=2。,自然对数函数LN,返回一个数的自然对数。指令如下图:,输入变量可以是BYTE、WORD、DWORD、INT、DINT、REAL、SINT、USINT、UINT、UDINT类型。输出变量只能是REAL类型。,程序例:,分析:在本例中,当X1为TRUE时,LN指令执 行,把X3的自然对数结果输出到X7 中;如X3=88,则X7=4.48。,取地址指令ADR,取地址指令。指令如下图:,ADR返回变量自身的地址,数据类型为DWORD。这个地址可以作为指针传递给操作函数,也可以赋给工程内的某个指针。,程序例:,分析:在本例中,当X1为TRUE时,ADR指令执行,将 X3的地址赋予指针变量zhizhen1上,即 zhizhen1指向了X1;如X3=88,则指针变量 zhizhen1的值16#1187CBB8即是X1的地址,同 时指针的指向变量的值zhizhen1是88。,字节长度指令SIZEOF,这个操作符用来确定给定变量x需要占用多少个字节。指令图下图:,SIZEOF操作符通常返回一个无符号数。返回值的类型与变量x的大小相匹配。SIZEOF(x)的返回值 返回值的类型0=x的值 256 USINT256=x的值 65536 UINT65536=x的值4294967296 UDINT4294967296=x的值 ULINT,程序例:,分析:在本例中,当X1为TRUE时,SIZEOF指令 执行,来确定给定数组变量arr1需要占 用多少个字节,并将结果输出到var3(USINT型);由于arr1是0到5的INT型数 组变量,因此var3=12。,二选一指令SEL,从两个操作数中选择一个。指令如下图:,由G 决定IN0 还是IN1 为输出。OUT:=SEL(G,IN0,IN1)的含义:OUT:=IN0;若G=FALSEOUT:=IN1;若G=TRUE.允许的数据类型:IN0,IN1,OUT:任意类型G:BOOL.,程序例:,分析:在本例中,当X1为FALSE时,SEL指令选 择X3输出到X5中,所以X5=X3=8;当X1为 TRUE时,SEL指令选择X4输出到X5中,所 以X5=X3=19。,多选一指令MUX,多项选择操作符。指令如下图:,IN0、.,INn以及OUT可以是任意类型的变量。X1必须为BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT或UDINT类型。MUX从这一组值中选择第X1个值。,程序例:,分析:在本例中,MUX指令根 据X1的值,来决定X9 的输出值。当X1=8时,MUX取功能块中的第8 个值,即X9=X8=8。,取极限指令LIMIT,取极限。指令如下图:,程序例:,当X1X2时,X2X1X3时,X1X3时,分析:Max是结果的上限值,Min是结果的下限值。如果IN值大于上限值Max,LIMIT将返回Max,而如果IN小于Min,那么结果为Min。在本 例中,当X1X3X2时,输出X9=X3。,取最大值指令MAX,取最大值函数。返回输入的值中最大的那一个。指令如下图:,IN0,IN1,IN2和OUT可以为任意类型的变量。,程序例:,分析:程序运行时,MAX指令取输入的X1,X2,X3 中最大的值,并将结果输出到X9中。在 本例中X2最大,因此X9=X2=9。,取最小值指令MIN,取最小值函数。返回两个值中较小的那一个。指令如下图:,IN0,IN1,IN2和OUT可以为任意类型的变量。,程序例:,分析:程序运行时,MIN指令取输入的X1,X2,X3 中最小的值,并将结果输出到X9中。在本 例中X3最小,因此X9=X3=6。,赋值指令MOVE,将一个变量的值赋给另一个适当类型的变量。指令如下图:,在图形编辑器FBD、LD、CFC中,MOVE是一个方框。在这个方框里(未锁定的)EN/ENO功能也可以用于变量赋值。,程序例:,分析:在本例中,当X1为TRUE时,MOVE指令执 行,将X3的值赋给到X4中;即X4=X3=8。,布尔类型转换指令,从布尔类型转换为其它任意类型。BOOL_TO_转换为数字类型时,若操作数为TRUE,结果为1;若操作数为FALSE,结果为0。BOOL_TO_转换为字符串类型时,若操作数为TRUE,结果为“TRUE”,若操作数为FALSE,则结果为“FALSE”。,程序例1:,程序例2:,分析:在本例中,当X1为TRUE时,BOOL_TO_BYTE指令执行,输出结果outbyte;由于X2=TRUE,所以outbyte=1。,分析:在本例中,当X1为TRUE时,BOOL_TO_STRING指令执行,输出结果outstring;由于X2=TRUE,所以outstring=TRUE。,字节类型转换指令,BYTE_TO_转换为数字类型时,若操作数为TRUE,结果为1;若操作数为FALSE,结果为0。BYTE_TO_转换为布尔类型时,若操作数为TRUE,结果为TRUE;若操作数为FALSE,结果为FALSE。BYTE_TO_转换为字符串类型时,若操作数为TRUE,结果为“TRUE”,若操作数为FALSE,则结果为“FALSE”。,程序例:,分析:在本例中,当X1为TRUE时,BYTE_TO_WORD 指令执行,输出结果WORD1;由于 OUTBYTE=1,所以WORD1=1。,日期转换指令,从日期和日期时间类型变量转换为其他类型变量指令如下图:,日期以秒为单位,用DWORD数据类型从1970年1月1日起存储在内部。然后再进行转化。从较大的数据类型转换为较小的数据类型时,有可能丢失部分信息。转换为字符串类型变量时,转换结果为日期常量。,程序例1:,程序例2:,分析:在本例中,当X1为TRUE时DATE_TO_WORD指令执行,输出结果OUTWORD;由于输入日期是1970-10-10,所以outword=50994。,分析:在本例中,当X1为TRUE时,DATE_TO_STRING指令执行,输出结OUTSTRING;由于输入日期是1970-10-10,所以OUTSTRING=D#1970-10-10。,程序例3:,分析:在本例中,当X1为TRUE时,DATE_TO_DWORD 指令执行,输出结果OUTDWORD;由于输入 日期是1970-10-10,所以 OUTDWORD=24364800。,整数转换指令,INT_TO_数据类型,是将整型数据转成其他数据类型。指令如下图:,程序例1:,程序例2:,分析:在本例中,当X1为TRUE时,INT_TO_BCD指令执行,输出结果OUTWORD;由于输入X3=88,所以OUTWORD=136。,分析:在本例中,当X1为TRUE时,INT_TO_STRING指令执行,输出结果OUTSTRING;由于输入X3=88,所以OUTSTRING=88。,实数/长实数类型转换,从实数/长实数变量类型转换为其它类型。指令如下图:,数值将被四舍五入为近似的整数值,然后转换成新的变量类型。请注意转换为字符串类型时,(长)实数的位数不能超过16位。如果位数太多,那么第十六位将被四舍五入。如果定义的字符串长度比较短,那么数字的右侧部分将被截去。,程序例:,分析:在本例中,当X1为TRUE时,REAL_TO_DINT 指令执行,输出结果OUTDINT;由于输入 X3=-88.1,数值将被四舍五入,所以 OUTDWORD=-88。,字符串类型转换命令,STRING_TO_。把字符串类型变量转换为其它类型。指令如下图:,先把STRING转换为INT类型变量,然后把INT转换为BYTE类型。由于高字节将被截去,因此结果将介于0-255之间。STRING类型变量的操作数中必须包含一个在目标类型变量里有效的值,否则转换的结果为0。,程序例:,分析:当X1为TRUE时,STRING_TO_DINT指令执 行,输出结果OUTDINT;由于输 OUTSTRING=abcde,不在DINT的数 据类型中,所以OUTDINT=0。,