PLC基础及应用 郝 坤 淮南职业技术学院 煤矿机电系
第6章 PLC的应用指令 6.1 FX系列PLC应用指令概述 6.1.1 应用指令的表示方法 1.助记符与操作数 6.1.1 应用指令的表示方法 1.助记符与操作数 FX系列PLC采用计算机通用的助记符形式来表示应用指令。一般用指令的英文名称或缩写作为助记符。
BMOV数据块传送指令:
应用指令有0~4个操作数 [S·]表示源操作数 [D·]表示目标操作数 S和D右边的“·”表示可以使用变址功能。 多个操作数时,可以表示为[S1·]、[S2·]、[D1]和[D2]等。 n或m表示其他操作数,表示常数,或源操作数和目标操作数的补充说明。
输入应用指令BMOV时,输入“BMOV D10 D20 K3",操作数之间用空格分隔开。 X0接通时,将3个(n=3)数据寄存器D10~D12中的数据传送到D20~D22中去。
2.32位指令 MOV之前的“D”表示处理32位(bit)双字数据; 相邻的两个数据寄存器组成数据寄存器对,该指令将D31和D30中的数据传送到D33和D32中去,D30中为低16位数据,D31中为高16位数据。处理32位数据时,建议使用首地址为偶数的操作数。
3.脉冲执行指令 “P”表示脉冲执行 在X1由OFF→ON状态时执行一次。没有“P”,则在X1为ON的每个扫描周期指令都要被执行(连续执行)。 INC(加1)、DEC(减1)和XCH(数据交换)等一般使用脉冲执行方式。 “P”和“D”可同时使用,例如D☆☆☆P。详见附录C各指令处理32位和脉冲执行功能。
4.变址寄存器 V0~V7和Z0~Z7。 在传送、比较指令中,用来修改操作对象的元件号。 对于32位,V为高16位,Z为低16位。中V、Z自动组对使用。32位只需指定Z0,Z0就能代表V0和Z0的组合。 下图中的各触点接通时,常数10送到V0,常数20送到Z1,ADD(加法)指令完成运算(D5V0)+(D15Z1) →(D40Z1),即(D15)+(D35) →(D60)。
6.1.2 数据格式 1.位元件与位元件的组合 位元件用来表示开关量的状态。X、Y、M和S为位元件。 用KnP的形式表示连续的位元件组,每组由4个连续的位元件组成,P为位元件的首地址,n为组数(n=l~8)。 如K2M0表示由M0~M7组成的两个位元件组,M0为数据的最低位(首位)。16位操作数时n=l~4,n<4时高位为0;32位操作数时n=1~8,n<8时高位为0。
在使用成组的位元件时,X和Y的首地址的最低位为0,例如X0、X10、Y20等。对于M和S,首地址可以采用能被8整除的数,也可以采用最低位为0的地址作首地址,例如M32和S50等。 应用指令中的操作数可能取K(十进制常数)、H(十六进制常数)、KnX、KnY、KnM、KnS、T、C、D、V和Z。
2.字元件 定时器、和计数器、寄存器和数据寄存器D都是字元件,位元件X、Y、M、S也可以组成字元件来进行数据处理。 (1)二进制补码。数据以二进制补码的形式存储。 16位二进制数0000 0100 1000 0110对应的十进制数为 210+27+22+21=1158 最大的16位二进制正数为011l 1111 1111 1111,对应的十进制数为32 767。
(2)十六进制数。 用十六进制数来表示多位二进制数。十六进制数使用16个数字符号。 4位二进制数可以转换为l位十六进制数,例如二进制数1010 1110 0111 0101可以很容易地转换为十六进制数AE75。
(3)BCD码。 BCD码是按二进制编码的十进制数。 如BCD码1001 0110 0111 0101对应的十进制数为9675。允许的最大数字为9999,最小的数字为0000。从PLC外部的数字拨码开关输入的数据是BCD码,PLC送给外部的七段显示器的数据一般也是BCD码。
不同进制的数的表示方法
3.科学计数法与浮点数 (1)科学计数法。 数字占用相邻的两个数据寄存器字,如D0和D1,D0中是尾数,D1中是指数,尾数是4位BCD整数,范围为0、1000~9999和-1000~-9999,指数的范围为-41~+35。 如小数24.567表示为2456×10-2。 该格式不能直接用于运算,可以用于监视接口中数据的显示。在PLC内部,尾数和指数都按2的补码处理,它们的最高位为符号位。 使用应用指令EBCD和EBIN,可以实现科学计数法格式与浮点数格式之间的相互转换。
(2)浮点数格式。 由相邻的两个数据寄存器字,如D11和D10,D10中的数是低16位。在32位中,尾数占低23位(b0~b22位,最低位为b0位),指数占8位(b23~b30位),最高位(b31位)为符号位。 浮点数=(尾数)×2指数 因为尾数为23位,与科学计数法相比,浮点数的精度有很大的提高,其尾数相当于6位十进制数。浮点数的表示范围为±1.175×10-38~±3.403×1038。 使用应用指令FLT和INT可以实现整数与浮点数之间的相互转换。
6.1.3 怎样学习应用指令 应用指令是指基本逻辑指令之外的指令。 (1)较常用的指令:如跳转、子程序调用和返回、数据的传送与比较、数学运算指令等。 (2)与数据的基本操作有关的指令:如数据的移位、循环移位和数据的转换等。 (3)与PLC的高级应用有关的指令:如与中断、高速计数、位置控制、闭环控制和通信有关的指令。 (4)方便指令与外部I/O设备指令:用于特殊的场合,如旋转工作台指令,一般的使用者很难用到它们。 (5)用于实现人机对话,如数字的输入和显示。
6.2 程序流控制指令 6.2.1 条件跳转指令 指针P用于跳转指令和子程序调用。在梯形图中,指针放在左侧母线的左边。。 CJ用于跳过顺序程序中的某一部分,以控制程序的流程。 如图X0为ON时,程序跳到指针P8处,如果X0为OFF。用指令表输人程序时图中的指针P8放在指令“LD X14”之前。多条跳转指令可以使用相同的指针。
如果反复跳转时间超过设定时间,会引起监控定时器出错。 一个指针只能出现一次。 定时器和计数器如果被CJ指令跳过,跳转期间它们的当前值将被冻结。如果在跳转开始时定时器和计数器正在工作,在跳转期间它们将停止定时和计数,在CJ指令的条件变为不满足后继续工作。
6.2.2 子程序调用与返回指令 CALL(FNC01)的操作数为P0~P127(不包括P63),SRET(S-R-Return,FNC02)无操作数。 当图中的X10为ON时,CALL指令使程序跳到指针P8处,子程序被执行,执行完SRET指令后返回到104步。 子程序应放在FEND(主程序结束)指令之后,同一指针只能出现一次,CJ指令中用过的指针不能再用,不同位置的CALL指令可以调用同一指针的子程序。
在子程序中调用子程序最多可以嵌套5级。右图的“CALLP P11”指令仅在X0由OFF变为ON时执行一次。在执行子程序1时,如果X1为ON,“CALL P12”指令被执行,程序跳到P12处,嵌套执行子程序2。执行第二条SRET指令后,返回子程序1中“CALL P12”指令的下一条指令,执行第一条SRET指令后返回主程序中“CALLP P11”指令的下一条指令。
6.2.3 中断指令与中断程序 包括输入中断、定时器中断和高速计数器中断,发生中断事件时,CPU停止执行当前的工作,立即执行预先写好的相应的中断程序,这一过程不受PLC扫描工作方式的影响,因此使PLC能迅速响应中断事件。 1.用于中断的指针 用于中断的指针用来指明某一中断源的中断程序人口指针,执行到IRET(中断返回)指令时返回中断事件出现时正在执行的程序。中断指针应在FEND指令之后使用。
输人中断用来接收特定的输入地址号的输入信号,输人中断指针为I口0口,最高位与X0~X5的元件号相对应。最低位为0时表示下降沿中断,反之为上升沿中断。例如中断指针I001之后的中断程序在输入信号X0的上升沿时执行。 同一个输入中断源只能使用上升沿中断或下降沿中断,例如不能同时使用中断指针I000和I001。用于中断的输入点不能与已经用于高速计数器的输入点冲突。
FX2N和FX2NC系列有3点定时器中断,中断指针为I6口口~I8口口,低两位是以毫秒为单位的定时时间。定时器中断使PLC以指定的周期定时执行中断子程序,循环处理某些任务,处理时间不受PLC扫描周期的影响。 FX2N和FX2NC系列有6点计数器中断,中断指针为I0口0(口=1~6)。计数器中断与HSCS(高速计数器比较置位)指令配合使用,根据高速计数器的计数当前值与计数设定值的关系来确定是否执行相应的中断服务程序。
2.与中断有关的指令 中断返回指令IRET 、允许中断指令EI 和禁止中断指令DI。 PLC通常处于禁止中断的状态,指令EI和DI之间的程序段为允许中断的区间,当程序执行到该区间时,如果中断源产生中断,CPU将停止执行当前的程序,转去执行相应的中断子程序,执行到中断子程序中的IRET指令时,返回原断点,继续执行原来的程序。
中断程序从它惟一的中断指针开始,到第一条IRET指令结束。中断程序应放在主程序结束指令FEND之后,IRET指令只能在中断程序中使用。特殊辅助继电器M805△为ON时(△=0~8),禁止执行相应的中断I△口口(口口是与中断有关的数字)。M8059为ON时,关闭所有的计数器中断。 如果有多个中断信号依次出现,则优先级按出现的先后为序。
执行一个中断子程序时,其他中断被禁止,在中断子程序中编入EI和DI,可以实现双重中断,只允许两级中断嵌套。如果中断信号在禁止中断区间出现,该中断信号被储存,并在EI指令之后响应该中断。不需要关中断时,只使用EI指令,可以不使用DI指令。 中断输入信号的脉冲宽度应大于200μs,选择了输人中断时,其硬件输入滤波器自动地复位为50μs(通常为10ms)。
直接高速输入可以用于“捕获”窄脉冲信号。FX系列PLC需要用EI指令来激活X0~X5的脉冲捕获功能,捕获的脉冲状态存放在M8170~M8175中。接收到脉冲后,相应的特殊辅助继电器M变为ON,可以用捕获的脉冲来触发某些操作。如果输入元件已经用于其他高速功能,脉冲捕获功能将被禁止。
[例6-1] 在X0的上升沿通过中断使Y0立即变为ON,在X1的下降沿通过中断使Y0立即变为OFF,编写出指令表程序。
[例6-2] 用定时器中断,每1s将Y0~Y7组成的8位二进制数加1。(定时器中断的最大定时时间(99ms)小于定时的时间间隔1s。 设置中断指针为I650,中断时间间隔为50ms。在中断指针I650开始的中断程序中,用D0作中断次数计数器,在中断程序中将D0加1,然后用比较触点指令“LD=”判断D0是否等于20。若相等(中断了20次)则执行1次INC指令,同时将D0清零。
6.2.4 其他指令 1.主程序结束指令(FNC06) 主程序结束指令FEND无操作数,占用一个程序步,表示主程序结束和子程序区的开始。执行到FEND指令时PLC进行输入输出处理、监控定时器刷新,完成后返回第0步。子程序(包括中断子程序)应放在FEND指令之后。CALL指令调用的子程序必须用SRET指令结束,中断程序必须以IRET指令结束。 使用多条FEND指令时,中断程序应放在最后的FEND指令和END指令之间。
2.监控定时器指令(FNC07) 监控定时器指令WDT(Watch Dog Timer)无操作数,占用一个程序步。 监控定时器又称看门狗,在执行FEND和END指令时,监控定时器被刷新(复位),PLC正常工作时扫描周期(从0步到FEND或END指令的执行时间)小于它的定时时间。 如果强烈的外部干扰使PLC偏离正常的程序执行路线,监控定时器不再被复位,定时时间到时,PLC将停止运行,它上面的CPU-E(CPU错误)发光二极管亮。 监控定时器定时时间的默认值为200ms,可以通过修改D8000来设定它的定时时间。
当PLC的特殊I/O模块和通信模块的个数较多时,PLC进入RUN模式时对这些模块的缓冲存储器的初始化时间较长,可能导致监控定时器动作。另外如果执行大量的读/写特殊I/O模块的TO/FROM指令,或向多个缓冲存储器传送数据时,也会导致监控定时器动作。在上述情况下,可以将WDT指令插入到适当的程序步中,以复位监控定时器。 如果FOR-NEXT循环程序的执行时间过长,可能超过监控定时器的定时时间,可以将WDT指令插入到循环程序中。
3.循环指令 FOR指令(FNC08)用来表示循环区的起点,它的源操作数用来表示循环次数N(N=1~32767),可以取任意的数据格式。如果N为负数,当作N=1处理,循环可以嵌套5层。 NEXT(FNC09)是循环区终点指令,无操作数。 FOR与NEXT之间的程序被反复执行,执行次数由FOR指令的源操作数设定。执行完后,执行NEXT后面的指令。 右图,外层循环程序A嵌套了内层循环B,循环A执行5次,每执行一次循环A,就要执行10次循环B,因此循环B一共要执行50次。利用循环中的CJ指令可以跳出FOR-NEXT之间的循环区。
例6-3 在X1的上升沿,将D0~D49中的50个数据逐个异或,求出它们的异或校验码,设计出指令表程序。
6.3 比较与传送指令 6.3.1 整数比较指令 比较指令包括CMP(比较)和ZCP(区间比较),比较结果用目标元件的状态来表示。待比较的源操作数[S1·]、[S2·]和[S3·](CMP只有两个源操作数)可以取任意的数据格式,目标操作数[D·]可以取Y、M和S,占用连续的3个元件。
X1为OFF时不进行比较,M0~M2的状态保持不变。X1为ON时进行比较,比较结果对目标操作数M0~M2的影响如图6-9所示。 1.比较指令(FNCl0) 比较指令CMP比较源操作数[S1·]和[S2·],比较的结果送到目标操作数[D·]中去。图6—9中的比较指令将十进制常数100与计数器C10的当前值比较,比较结果送到M0~M2。 X1为OFF时不进行比较,M0~M2的状态保持不变。X1为ON时进行比较,比较结果对目标操作数M0~M2的影响如图6-9所示。 指定的元件种类或元件号超出允许范围时将会出错。
2.区间比较(FNC11) 区间比较指令的助记符为ZCP(Zone Compare),图中的X2为ON时,执行ZCP指令,将T3的当前值与常数100和150相比,比较结果对目标操作数M3~M5的影响如图所示。源数据[S1·]不能大于[S2·]。
3.触点型比较指令(FUN224~246) 触点型比较指令相当于一个触点,执行时比较源操作数[S1·]和[S2·],满足比较条件则触点闭合,源操作数可以取所有的数据类型。各种触点型比较指令的助记符和意义见下表。
左图中C10的当前值等于20时,Y10被驱动,D200的值大于-30且X0为ON时,Y11被SET指令置位。 右图中M27为ON或C20的当前值等于146时,M50的线圈通电。
6.3.2 浮点数比较指令与时钟数据比较指令 1.浮点数比较指令(FNC110) 浮点数比较指令ECMP的源操作数[S1·]和[S2·]可以取K、H和D,目标操作数为Y、M和S,占用连续的3个元件。常数参与比较时,被自动转换为浮点数。 2.浮点数区间比较指令(FNC111) , 浮点数区间比较指令EZCP的源操作数[S1·]、[S2·]和[S3·]可以取K、H和D,目标操作数为Y、M和S,占用连续的3个元件,[S1·]应小于[S2·]。参与比较的常数被自动转换为浮点数。
3.时钟数据比较指令(FNC160) 时钟数据比较指令TCMP的源操作数[S1·]、[S2·]和[S3·]用来存放指定时间的时、分、秒,可以取任意的数据类型,[S·]可以取T、C和D,目标操作数[D·]为Y、M和S,占用3个连续的元件。该指令用来比较指定时刻与时钟数据的大小。时钟数据的时间存放在[S·]~[S·]+2中。 可以利用PLC内置的实时钟数据,D8013~D8015分别存放秒、分和时。图中的X1变为OFF后,目标元件的ON/OFF状态仍保持不变。
4.时钟数据区间比较指令(FNCl61) 时钟数据区间比较指令TZCP (见前图)的源操作数[S1·]、[S2·]和[S·]可以取T、C和D,要求[S1·]≤[S2·] 目标操作数[D·]为Y、M和S(占用3个连续的元件),只有16位运算。[S1·]、[S2·]和[S·]分别占用3个数据寄存器,图中的D20~D22分别用来存放时、分、秒。 [S·]中的时间与[S1·]和[S2·]指定的时间区间相比。
6.3.3 传送指令 传送指令包括MOV(传送)、SMOV(BCD码移位传送)、CML(取反传送)、BMOV(数据块传送)和FMOV(多点传送)以及XCH(数据交换)指令。 1.传送指令(FNCl2) 传送指令MOV将源数据传送到指定目标,图中的X1为ON时,常数100被传送到D10,并自动转换为二进制数。
2.移位传送(FNC13) 移位传送指令SMOV将4位十进制源数据[S·]中指定位数的数据,传送到4位十进制目标操作数中指定的位置。 3.取反传送指令(FNC14) 取反传送指令CML将源元件中的数据逐位取反(1→0,0→1),并传送到指定目标。
4.块传送指令(FNC15) 块传送指令BMOV将源操作数指定的元件开始的n个数据组成的数据块传送到指定的目标。如果元件号超出允许的范围,数据仅传送到允许的范围。 传送顺序是自动决定的,以防止源数据块与目标数据块重叠时源数据在传送过程中被改写。如果源元件与目标元件的类型相同,传送顺序同前图右边所示。
5.多点传送指令(FNC16) 多点传送指令FMOV将单个元件中的数据传送到指定目标地址开始的n个元件中(n≤512),传送后n个元件中的数据完全相同。图中的X2为ON时,将常数0送到D5~D14这10个(n=10)数据寄存器中。 6.数据交换指令(FNC17) 执行数据交换指令XCH时,数据在指定的目标元件之间交换,数据交换指令一般采用脉冲执行方式,否则在每一个扫描周期都要交换一次。
6.4 数学运算指令 6.4.1 整数运算指令 算术运算(即整数运算)指令包括ADD、SUB、MUL和DIV(二进制加、减、乘、除)指令。 6.4 数学运算指令 6.4.1 整数运算指令 算术运算(即整数运算)指令包括ADD、SUB、MUL和DIV(二进制加、减、乘、除)指令。 每个数据的最高位为符号位(0为正,1为负),所有的运算均为代数运算。在32位运算中被指定的字编程元件为低位字,下一个字编程元件为高位字。为了避免错误,建议指定操作元件时采用偶数元件号。如果目标元件与源元件相同,为了避免每个扫描周期都执行一次指令,应采用脉冲执行方式。
如果运算结果为0,零标志M8020置1,运算结果超过32 767(16位运算)或2147 483 647(32位运算),进位标志M8022置1;运算结果小于-32 768(16位运算)或-2147 483 648(32位运算),借位标志M8021置1。 如果目标操作数(例如KnM)的位数小于运算结果,将只保存运算结果的低位。例如运算结果为二进制数11001(十进制数25),如果指定的目标操作数为K1Y4(由Y4~Y7组成的4位二进制数),实际上只能保存低位的二进制数1001(十进制数9) 。 令M8023为ON,可以用算术运算指令作32位浮点数运算。
1.加法指令(FNC20) 加法指令ADD将源元件中的二进制数相加,结果送到指定的目标元件。图中的X0为ON时,执行(D10)+(D12)→(D14)。 2.减法指令(FNC21) 减法指令SUB将[S1·]指定的元件中的数减去[S2·]指定的元件中的数,结果送到[D·]指定的目标元件。图中的X1由OFF变为ON时,执行(D1,D0)—22 →(D1,D0)。
3.乘法指令(FNC22) 16位乘法指令MUL将源元件中的二进制数相乘,结果(32位)送到指定的目标元件。图中的X0为ON时,执行(D0)×(D2) →(D5,D4),乘积的低位字送到D4,高位字送到D5。32位乘法的结果为64位。目标位元件(例如KnM)的位数如果小于运算结果的位数,只能保存结果的低位。 4.除法指令(FNC23) 除法指令DIV用[S1·]除以[S2·],商送到目标元件[D·],余数送到[D·]的下一个元件。图中的X3为ON时,执行32位除法运算(D7,D6)/(D9,D8),商送到(D3,D2),余数送到(D5,D4)。 若除数为0则出错,不执行该指令。若位元件被指定为目标元件,不能获得余数,商和余数的最高位为符号位。
【例6-4】 用模拟电位器调节定时器T37的设定值,定时范围为10~15s。 FX1N和FX1S系列有两个内置的设置参数用的小电位器,“外部调节寄存器”D8030和D8031的值(0~255)与小电位器的位置对应。 要求在输入信号X4的上升沿,用D8030对应的电位器来设置定时器T0的设定值,设定的时间范围为10~15s,即从电位器读出的数字0~255对应于10~15s。设读出的数字为N,定时器的设定值为 (150-100)×N/255+100=50N/255+100 式中,150是T0定时15s的设定值。
为了保证运算的精度,应先乘后除。N的最大值为255,乘法运算的结果小于一个字能表示的最大正数32 767,故可以使用16位除法指令DIV。除法运算的结果占用D20和D21,后者不能再作他用。下面是实现上述要求的指令表程序。
5.加1指令和减1指令 加1指令INC(FNC 24)和减1指令DEC(FNC 25)用于对操作数加l和减1。它们不影响零标志、借位标志和进位标志。 图中的X4每次由OFF变为ON时,由[D·]指定的元件中的数被加1。如果不用脉冲指令,每一个扫描周期都要加1。在16位运算中,32 767再加1就变成-32 768。32位运算时,+2147 483 647再加l就变为-2 147 483 648。减1指令也采用类似的处理方法。
6.4.2 浮点数运算指令 浮点数算术运算指令的源操作数[S1·]和[S2·]可以取K、H和D,目标操作数为D。浮点数为32位数,FUN110~127均为32位指令,下图中指令助记符的前面均应加字母D。源操作数和目标操作数均为浮点数,常数参与运算时,被自动转换为浮点数。运算结果为0时M8020(零标志)为ON,超过浮点数的上、下限时,M8022(进位标志)和M8021(借位标志)分别为ON,运算结果分别被置为最大值和最小值。源操作数和目标操作数如果是同一数据寄存器,应采用脉冲执行方式。
1.浮点数的加法指令(FNC120)与减法指令(FNC121) 浮点数加法指令EADD将两个源操作数内的浮点数相加,运算结果存人目标操作数。 浮点数减法指令ESUB将[S1·]指定的浮点数减去[S2·]指定的浮点数,运算结果存人目标操作数[D·]。 2.浮点数的乘法指令(FNC122)与除法指令(FNC123) 浮点数乘法指令EMUL将两个源操作数内的浮点数相乘,运算结果存入目标操作数 [D·]。 浮点数除法指令EDIV将[S1·]指定的浮点数除以[S2·]指定的浮点数,运算结果存人目标操作数[D·]。除数为零时出现运算错误,不执行指令。
3.浮点数开平方指令(FNC127) 浮点数开平方指令ESQR的源操作数[S·]为K、H和D,目标操作数[D·]为D。[S·]指定的浮点数被开平方,结果存人目标操作数。源操作数应为正数,若为负数则出错,运算错误标志M8067为ON,不执行指令。 4.三角函数运算指令 浮点数三角函数运算指令包括SIN(正弦)、COS(余弦)和TAN(正切)指令,应用指令编号分别为FUN130~132,均为32位指令。源操作数[S·]和目标操作数[D·]为D。 这些指令用来求出源操作数指定的浮点数的三角函数,角度单位为弧度,结果也是浮点数,并存人目标操作数指定的单元。源操作数应满足0≤角度≤2 π ,弧度值=π×角度值/180o。
6.4.3 字逻辑运算指令 字逻辑运算指令包括字逻辑与指令WAND(FNC 26)、字逻辑或指令WOR(FNC27)、字逻辑异或指令WXOR(FNC 28)和求补NEG指令(FNC 29)。 这些指令以位(bit)为单位作相应的运算(见下表)。
XOR指令与求反指令(CML)组合使用可以实现“异或非”运算。 求补指令NEG只有目标操作数。它将[D·]指定的数的每一位取反后再加1,结果存于同一元件,求补指令实际上是绝对值不变的变号操作。 FX系列PLC的负数用2的补码的形式来表示,最高位为符号位,正数时该位为0,负数时该位为l,将负数求补后得到它的绝对值。
【例6-5】 在X0的上升沿,将Y4和Y5置为0,将Y9和Y10置为l,Y0~Y17中其他输出点的状态保持不变。程序中的“H”用来表示十六进制常数。
6.5 循环移位指令与移位指令 6.5.1循环移位指令 1.右、左循环移位指令 6.5 循环移位指令与移位指令 6.5.1循环移位指令 1.右、左循环移位指令 右、左循环移位指令的指令助记符分别为ROR(FNC30)和ROL(FNC31)。它们只有目标操作数。 执行这两条指令时,各位的数据向右(或向左)循环移动n位(n为常数),16位指令和32位指令中n应分别小于16和32,每次移出来的那一位同时存人进位标志M8022中。若在目标元件中指定位元件组的组数,只有K4(16位指令)和K8 (32位指令)有效,例如K4Y10和K8M0。
2.带进位的循环移位指令 带进位的右、左循环移位指令的指令助记符分别为RCR(FNC32)和RCL(FNC33)。它们的移位位数n的取值范围与循环移位指令相同。执行这两条指令时,各位的数据与进位位M8022一起(16位指令时一共17位)向右(或向左)循环移动n位。在循环中移出的位送人进位标志,后者又被送回到目标操作数的另一端。
[例6-6] 设计循环右移的16位彩灯控制程序,移位的时间间隔为1s,开机时用X0~X17来设置彩灯的初值。T0用来产生周期为1s的移位脉冲序列。
6.5.2 移位指令 1.位右移和位左移指令 位右移SFTR(FNC34)指令与位左移SFTL(FNC35)指令使位元件中的状态成组地向右或向左移动,由n1指定位元件组的长度,n2指定移动的位数,常数n2≤n1≤1024。 2.字右移和字左移指令 字右移WSFR(FNC36)指令和字左移WSFL(FNC37)指令将n1个字成组地右移或左移n2个字(n2≤n1≤512)。 3.移位寄存器写入与读出指令 移位寄存器又称为FIFO(先人先出)堆栈,堆栈的长度范围为2~512个字。移位寄存器写入指令SFWR(FNC38)和移位寄存器读出指令SFRD(FNC39)用于FIFO堆栈的读、写,先写入的数据先读出。
6.6 数据处理指令 6.6.1 数据转换指令 1.BCD变换指令(FNC18) 6.6 数据处理指令 6.6.1 数据转换指令 1.BCD变换指令(FNC18) BCD变换指令将源元件中的二进制数转换为BCD码并送到目标元件中。如果执行的结果超过0~9 999,或双字的执行结果超过0~99 999 999,将会出错。 PLC内部的算术运算用二进制数进行,可以用BCD指令将二进制数变换为BCD数后输出到七段显示器。M8032为ON时,双字将被转换为科学计数法格式。
2.BIN变换指令(FNC19) BIN变换指令(Binary)将源元件中的BCD码转换为二进制数后送到目标元件中。 可以用BIN指令将BCD数字拨码开关提供的设定值输入到PLC,如果源元件中的数据不是BCD数,将会出错。M8032为ON时,将科学计数法格式的数转换为浮点数。 3.浮点数转换为科学计数法格式的数(FNC118) 浮点数转换为科学计数法格式的数指令EBCD的源操作数[S·]和目标操作数[D·]均为D。
下图中的DEBCD指令将D20和D21中的浮点数转换为科学计数法格式的数后,存入D50(尾数)和D51(指数),指令之前的“D”表示双字指令。为了保证转换的精度,尾数在l 000~9 999之间,或等于0。例如在源操作数为3.456 7×10-5时,转换后D50=3 456,D51=-8。
4.科学计数法格式的数转换为浮点数(FNC119) 科学计数法格式的数转换为浮点数指令DEBIN的源操作数[S·]和目标操作数[D·]均为D。该指令将源操作数指定的单元内的科学计数法格式的数转换为浮点数,并存人目标地址。为了保证转换的精度,科学计数法格式的数的尾数应在1 000~9 999之间(或等于0)。 5.浮点数转换为二进制整数(FNC129) 浮点数转换为二进制整数指令INT的源操作数[S·] (32位)和目标操作数[D·]均为D,16位或32位运算时目标操作数分别为16位或32位。 该指令将源操作数指定的浮点数舍去小数部分后转换为二进制整数,并存人目标地址。该指令是FLT指令(FUN49)的逆运算,运算结果为0时,零标志M8020为ON;因转换结果不足1而舍掉时,借位标志M8021为ON;如果运算结果超出目标操作数的范围,将会发生溢出,进位标志M8022为ON,此时目标操作数中的值无效。
6.浮点数转换指令(FNC49) 浮点数转换指令FLT的源操作数和目标操作数均为D。上图中的X6为ON,且M8023(浮点数标志)为OFF时,该指令将存放在源操作数D10中的数据转换为浮点数,并将结果存放在目标寄存器D13和D12中。用于存放浮点数的目标操作数应为双整数,源操作数可以是整数或双整数。M8023为ON时,将把浮点数转换为整数。
[例6-7] 整数格式的半径在D2中,用浮点数运算求圆的面积。
6.6.2 报警器置位/复位指令 在使用指令ANS(信号报警器置位)和ANR(信号报警器复位)时,状态标志S900~S999用作外部故障诊断的输出,称为信号报警器。 1.报警器置位指令(FNC46) 报警器置位指令ANS的源操作数为T0~T199,目标操作数为S900~8999,m=1~32 767,是指定的定时器以100ms为单位的设定值。
下图M8000的常开触点一直接通,使M8049的线圈通电,特殊数据寄存器D8049的监视功能有效,D8049用来存放S900~S999中处于活动状态且元件号最小的状态继电器的元件号。图中Y0变为ON后,T0开始定时,如X0在10s内未动作(n2=100),S900变为ON。如果S900~S999中任意一个的状态为ON,特殊辅助继电器M8048为ON,使指示故障的输出继电器Y10变为ON。 若图中输入电路断开,定时器T0复位,而S900仍保持原有状态不变。
2.报警器复位指令(FNC47). 报警器复位指令ANR无操作数,前图中用故障复位按钮X5和ANR指令将用于故障诊断的状态继电器复位,每按一次复位按钮,按元件号递增的顺序将一个故障报警器状态复位。 发生某一故障时,对应的报警器状态为ON,如果同时发生多个故障,D8049中是S900~S999中地址最低的被置位的报警器的元件号。将它复位后,D8049中是下一个地址最低的被置位的报警器的元件号。
6.6.3 其他数据处理指令 1.区间复位指令 区间复位指令ZRST(FNC 40)将[Dl·]和[D2·]指定的元件号范围内的同类元件成批复位,目标操作数可以取T、C和D(字元件)或Y、M和S(位元件)。 [D1·]和[D2·]指定的应为同一类元件,[D1·]的元件号应小于[D2·]的元件号。如果[Dl·]的元件号大于[D2·]的元件号,则只有[D1·]指定的元件被复位。 虽然ZRST指令是16位处理指令, [D1·]和[D2·]也可以指定32位计数器。
2.解码与编码指令 设前图的解码指令DECO(FNC41)的源操作数X2~X0组成的二进制数为N,该指令将M10开始的目标操作数M10~M17(共8位,2n=8)中的第N位置为1,其余各位置0,相当于数字电路中译码电路的功能。利用解码指令,可以用数据寄存器中的值来控制位元件的ON/OFF。N=1~4,X0是源操作数的首位。 图中的编码指令ENCO(FNC42)将源操作数M20~M27(共8位,2n=8)中为ON的最高位的位数(二进制)存放在目标元件D10的低3位中,n=l~4。
3.求置ON位总数与ON位判别指令 位元件的值为1称为ON,求置ON位总数指令SUM(FNC43)统计源操作数中为ON的位的个数,并将它送入目标操作数。 ON位判别指令BON用来检测指定元件中的指定位是否为ON。若为ON,则位目标操作数变为ON,目标元件是源操作数中指定位的状态的镜像。
4.平均值指令(FNC45) 平均值指令MEAN用来求1~64个源操作数的代数和被n除的商,余数略去。
5.二进制平方根指令(FNC48) 平方根指令SQR的源操作数[S·]应大于零,可以取K、H和D,目标操作数为D。前图中的X2为ON时,将存放在D45中的数开平方,结果存放在D123内。计算结果舍去小数,只取整数。M8023为ON时,将对32位浮点数开方,结果为浮点数。源操作数为整数时,将自动转换为浮点数。如果源操作数为负数,运算错误标志M8067将会ON。
6.高低字节交换指令(FNC147) 一个16位的字由两个8位的字节组成。16位运算时,高低字节交换指令SWAP交换源操作数的高字节和低字节。32位运算时,如果指定的源操作数为D20,先交换D20的高字节和低字节,再交换D21的高字节和低字节。
6.7 高速处理指令 6.7.1 与输入输出有关的指令 1.输入输出刷新指令(FNC50) 6.7 高速处理指令 6.7.1 与输入输出有关的指令 1.输入输出刷新指令(FNC50) 输入输出刷新指令REF的目标操作数[D·]用来指定目标元件的首位,应取最低位为0的X和Y元件,例如X0、X10、Y20等,n应为8的整倍数。 FX系列PLC使用I/O批处理的方法,即输入信号是在程序处理之前成批读人到输入映像寄存器的,而输出数据是在执行END指令之后由输出映像寄存器通过输出锁存器送到输出端子的。REF指令用于在某段程序处理时读人最新信息,或将操作结果立即输出。
若图中的X0为ON,X10~X17这8点输入(n=8)被立即刷新。X1为ON时,Y0~Y27(八进制数)共24点输出被刷新。I/O元件被刷新时有很短的延迟,输入的延迟与输入滤波器的设置有关。
2.刷新和滤波时间常数调整指令(FNC51) 刷新和滤波时间常数调整指令REFF用来刷新FX1S和FX1N系列的X0~X7,或FX2N的X0~X17,并指定它们的输入滤波时间常数n(n=0~60ms)。前图中的X10为ON时,FX2N中X0~X17的输入映像寄存器被刷新,它们的滤波时间常数被设定为1ms(n=1)。
为了防止输入噪声的影响,输入端有RC滤波器,滤波时间常数约为10ms,无触点的电子固态开关没有抖动噪声,可以高速输入。对于这一类输入信号,PLC输入端的RC滤波器影响了高速输入的速度。FX系列PLC的X0~X17输入端采用数字滤波器,滤波时间可以用REFF指令加以调整,调节范围为0~60ms,这些输入端也有RC滤波器,其滤波时间常数不小于50μs。使用高速计数输入指令、速度检测指令SPD,或者输入中断指令时,输入滤波器的滤波时间自动设置为50μs。
3.矩阵输入指令(FNC52) 矩阵输入指令MTR用连续的8点输入与连续的n点晶体管输出组成n行8列的输入矩阵,用来输入n× 8个开关量信号。指令处理时间为n×20ms。如果用高速输入X0~X17作输入点,读入时间减半。
6.7.2 高速计数器指令 高速计数器(C235~C255)用来对外部输入的高速脉冲计数,高速计数器比较置位指令HSCS和高速计数器比较复位指令HSCR均为32位运算。源操作数[S1·]可以取所有的数据类型,[S2·]为C235~C255,目标操作数可以取Y、M和S。建议用一直为ON的M8000的常开触点来驱动高速计数器指令。
1.高速计数器比较置位指令(FNC53) HSCS是高速计数器比较置位指令。高速计数器的当前值达到预置值时,[D·]指定的输出用中断方式立即动作。下图中C255的设定值为100([S1·]=100),其当前值由99变为100或由101变为100时,Y10立即置1,不受扫描时间的影响。如果当前值是被强制为100的,Y10不会ON。
2.高速计数器比较复位指令(FNC54) 前图中高速计数器比较复位指令HSCR中的计数器C254的当前值由199变为200([S1·]=200),或由201变为200时,用中断方式使Y20立即复位。如果当前值是被强制为200的,Y20不会OFF。
3.高速计数器区间比较指令(FNC55) 高速计数器区间比较指令HSZ有3种工作模式:标准模式、多段比较模式和频率控制模式,详细的使用方法请参阅FX系列的编程手册。
6.7.3 速度检测与脉冲输出指令 1.速度检测指令(FNC56) 速度检测指令SPD用来检测给定时间内从编码器输入的脉冲个数,并计算出速度。[S1·]用来指定计数脉冲输入点(X0~XS),[S2·]用来指定以ms为单位的计数时间,[D·]用来指定计数结果的存放处,占用3个元件。
下图中的SPD指令用D1对X0输入的脉冲上升沿计数,100ms后计数结果送到D0,Dl中的当前值复位,重新开始对脉冲计数。D2中是剩余的时间,D0的值与转速成正比: n=60×(D0)×103/t 式中,n为转速(r/min);(D0)为D0中的数;t为[S2·]指定的计数时间(ms)。 SPD指令中用到的输入不能用于其他高速处理。
2.脉冲输出指令(FNC57) 脉冲输出指令PLSY的源操作数[S1·]和[S2·]可以取所有的数据类型,[D·]为Y1和Y2,该指令只能使用一次。 PLSY指令用于产生指定数量和频率的脉冲。 [S1·]指定脉冲频率(2~20 000Hz),[S2·]指定脉冲个数,16位指令的脉冲数范围为l~32 767,32位指令的脉冲数范围为1~2147 483 647。若指定的脉冲数为0,则持续产生脉冲。[D·]用来指定脉冲输出元件的元件号,只能指定晶体管输出型PLC的Y0或Y1。 脉冲的占空比为50%,以中断方式输出。指定脉冲数输出完后,指令执行完成标志M8029置1。前图中X10由ON变为OFF时,M8029复位,脉冲输出停止。X10再次变为ON时,脉冲重新开始输出。在发出脉冲串期间X10若变为OFF,Y0也变为OFF。
FX1S和FX1N的输出频率可达60kHz,FX2N和FX2NC为20kHz。Y0或Y1输出的脉冲个数可以分别通过D8140、D8141或D8142、D8143监视,脉冲输出的总数可以分别用D8136和D8137监视。 [S1·]和[S2·]中的数据在指令执行过程中可以改变,但是[S2·]中数据的改变在指令执行完之前不起作用。
3.脉宽调制指令(FNC58) 脉宽调制指令PWM的源操作数和目标操作数的类型与PLSY指令相同,只能用于晶体管输出型PLC的Y0或Y1,该指令只能使用一次。 PWM指令用于产生指定脉冲宽度和周期的脉冲串。[S1·]用来指定脉冲宽度(t=l~32 767ms),[S2·]用来指定脉冲周期(T=1~32 767ms),[S1·]应小于[S2·],[D·]用来指定输出脉冲的元件号(Y0或Y1),输出的ON/OFF状态用中断方式控制。 前图中D10的值从0~50变化时,Y0输出的脉冲的占空比从0~1变化。X11变为OFF时,Y1也OFF。
4.带加减速功能的脉冲输出指令(FNC59) 带加减速功能的脉冲输出指令PLSR的源操作数和目标操作数的类型与PLSY指令相同,只能用于晶体管输出型PLC的Y0或Y1,该指令只能使用一次。 用户需要指定最高频率、总的输出脉冲、加减速时间和脉冲的输出元件号(Y0或Y1),加减速的变速次数固定为10次。
6.8 方便指令与外部设备指令 6.8.1 方便指令 1.状态初始化指令(FNC60) 6.8 方便指令与外部设备指令 6.8.1 方便指令 1.状态初始化指令(FNC60) 状态初始化指令IST与STL(步进梯形)指令一起使用,用于自动设置多种工作方式的系统的顺序控制程序的参数。
2.数据搜索指令(FNC61) 数据搜索指令SER用于在数据表中查找指定的数据,可以提供搜索到的符合条件的值的个数、搜索到的第一个数据在表中的序号,搜索到的最后一个数据在表中的序号,和表中最大的数和最小的数的序号。
3.绝对值式凸轮顺控指令(FNC62) 装在机械转轴上的编码器给PLC的计数器提供角度位置脉冲,绝对值式凸轮顺控指令ABSD可以产生一组对应于计数值变化的输出波形,用来控制最多64个输出变量(Y、M和S)的ON/OFF。
4.增量式凸轮顺控指令(FNC63) 增量式凸轮顺控指令INCD根据计数器对位置脉冲的计数值,实现对最多64个输出变量(Y、M和S)的循环顺序控制,使它们依次为ON,并且同时只有一个输出变量为ON。 5.示教定时器指令(FNC64) 示教定时器指令TTMR的目标操作数[D·]为D,n=0~2。使用该指令可以用一只按钮调整定时器的设定时间。
下图中的示教定时器将按钮X10按下的时间乘以系数10n后作为定时器的预置值,按钮按下的时间(单位为s)由D301记录,该时间(s)乘以10n后存人D300。设按钮按下的时间为t,存人D300的值为10n ~t,即n=0时存入t,n=1时存人10t,n=2时存人100t。X10为OFF时,D301复位,D300保持不变。
6.特殊定时器指令(FNC65) 特殊定时器指令STMR的源操作数[S·]为T0~T199(100ms定时器),目标操作数[D·]可以取Y、M和S,m=1~32 767,只有16位运算。 特殊定时器指令用来产生延时断开定时器、单脉冲定时器和闪动定时器。m用来指定定时器的设定值,图6—34中T12的设定值为5s(m=50)。图中的M0是延时断开定时器,M1是X2由ON→OFF的单脉冲定时器,M2和M3是为闪动而设的。
下图中M3的常闭触点接到STMR指令的输入电路中,使M1和M2产生闪动输出。X2为OFF时,M0~M2在设定的时间后变为OFF,T12同时被复位。
7.交替输出指令(FNC66) 交替输出指令ALT的目标操作数[D·]可以取Y、M和S。 每当图中的X0由OFF变为ON时,Y0的状态改变一次,若不用脉冲执行方式,每个扫描周期Y0的状态都要改变一次。ALT指令具有分频器的效果,使用ALT指令,用1只按钮X0就可以控制Y0对应的外部负载的起动和停止。
8.斜坡信号输出指令(FNC67) 斜坡信号输出指令RAMP与模拟量输出结合可以实现软起动和软停止。设置好斜坡输出信号的初始值和最终值后,执行该指令时输出数据由初始值逐渐地变为最终值,变化的全过程所需的时间用扫描周期的个数来设置。
9.旋转工作台控制指令(FNC68) 旋转工作台控制指令ROTC使工作台上指定位置的工件以最短的路径转到出口位置。 10.数据排序指令(FNC69) 数据排序指令SORT将数据按指定的要求以从小到大的顺序重新排列。
6.8.2 外部I/O设备指令 1.10键输入指令(FNC70) 10键输入指令TKY只能使用一次。右图用X0作首元件,10个键接在X0~X11上。假设以(1)、(2)、(3)、(4)的顺序按数字键X2、X1、X3和X0,则[D1·]中存人数据2130。若送人的数大于9 999,高位数溢出并丢失,数据以二进制形式存于D0。
使用32位指令DTKY时,D1和D2组合使用,输入的数据大于99 999 999时,高位数据溢出。 因为指定[D2·]为M10,按下X2后,M12被置l至另一键被按下,其他键亦一样,M10~M19的动作对应于X0~X11。任一键按下,键信号标志M20置1,直到该键放开。两个或更多的键按下时,最先按下的键有效。X30变为OFF时,D0中的数据保持不变,但是M10~M20全部变为OFF。
2.16键输入指令(FNC71) 16键输入十六进制数指令HKY用矩阵方式排列的16个键来输入BCD数字和6个功能键的状态,占用PLC的4个输入点和4个输出点。扫描全部16个键需要8个扫描周期。 3.数字开关指令(FNC72) 数字开关指令DSW用于读人一组或两组4位BCD码数字拨码开关的设置值,占用PLC的4个或8个输入点和4个输出点。
4.译码指令(FNC73) 七段译码指令SEGD将源操作数指定的元件的低4位中的十六进制数(0~F)译码后送给七段显示器显示,译码信号存于目标操作数指定的元件中,输出时要占用7个输出点。 5.带锁存的七段显示指令(FNC74) 带锁存的七段显示指令SEGL用12个扫描周期显示一组或两组4位数据,占用8个或12个晶体管输出点。
6.方向开关指令(FNC75) 方向开关指令ARWS用方向开关(4只按钮)来输入4位BCD数据,用4个带锁存的七段显示器来显示输入的数据。输人数据时用左移、右移开关来移动要修改和显示的位,用加、减开关增减该位的数据。该指令占用4个输入点和8个输出点。 7.ASCII码转换指令(FNC76) ASCII码转换指令ASC将最多8个字符转换为ASCII码,并存放在指定的元件中。 8.ASCII码打印指令(FNC77) 打印指令PR用于ASCII码的打印输出,PR指令和ASC指令配合使用,可以用外部显示单元显示出错信息等。
9.读特殊功能模块指令(FNC78) 下图中的X3为ON时,读特殊功能模块指令FROM将编号为m1(0~7)的特殊功能模块内编号为m2(0~32 767)开始的,n个缓冲存储器的数据读人PLC,并存人[D·]开始的n个数据寄存器中。 接在FX系列PLC基本单元右边扩展总线上的功能模块,从紧靠基本单元的那个开始,其编号依次为0~7。n是待传送数据的字数,n=1~16(16位操作)或l~32(32位操作)。
10.写特殊功能模块指令(FNC79) 写特殊功能模块指令的参数m1、m2和n的意义和取值范围与读特殊功能模块指令相同。 前图中的X0为ON时,TO指令将PLC基本单元中从[S·]指定的元件开始的n个字的数据写到编号为m1的特殊功能模块中编号m2开始的n个缓冲存储器中。 M8028为ON时,在FROM指令和TO指令的执行过程中,禁止中断;在此期间发生的中断在FROM和TO指令执行完后执行。M8028为OFF时,在FROM和TO指令执行过程中,不禁止中断。
6.8.3 FX系列外部设备指令 FX系列外部设备指令(FNC80~89)包括与串行通信有关的指令、模拟量功能扩展板处理指令和PID运算指令。 1.串行通信指令(FNC80) 串行通信指令RS(RS-232C)的源操作数和目标操作数为D,m和n(1~255,FX2N为1~4096)可以使用常数和D。
该指令是通信用的功能扩展板发送和接收串行数据的指令。[S·]和m用来指定发送数据缓冲区的首地址和数据寄存器的个数,[D·]和n用来指定接收数据缓冲区的首地址和数据寄存器的个数。数据的传送格式(例如数据位数、奇偶校验位、停止位、波特率、是否有调制解调等)可以用初始化脉冲和MOV指令写入串行通信用的特殊数据寄存器D8120,具体的使用方法参见编程手册。
2.八进制位传送指令(FNC81) 八进制位传送指令PRUN(FNC81)用于八进制位传送,将数据送人位发送区或从位接收区读出。下图中的X30为ON时,将X20~X27→M810~M817,将X30~X37→M820~M827。数据不会写入M818和M819,因为它们不属于八进制计数系统。
3.HEX转换为ASCII码的指令ASCI(FNC82) HEX→ASCII码转换指令ASCI将十六进制数转换为ASCII码。M816l为OFF时为16位模式,每4个十六进制数占一个数据寄存器,转换后每两个ASCII码占一个数据寄存器,转换的字符个数由n指定,n=1~256。M8161为ON时指令为8位模式,转换后的每一个ASCII码传送给目标操作数的低8位,其高8位为0。
4.ASCII转换为HEX的指令HEX(FNC83) M816l为OFF时为16位模式,ASCII→HEX转换指令HEX将最多256个ASCII码转换为4位HEX数,每两个ASCII码占一个数据寄存器,每4个ASCII码转换后的HEX占一个数据寄存器。M816l为ON时为8位模式,只转换源操作数低字节中的ASCII码。
5.校验码指令(FNC84) 校验码指令CCD与串行通信指令RS配合使用,它将[S·]指定的字节堆栈中最多256B的8位二进制数据分别求和与“异或”(异或又称为垂直奇偶校验),将累加和存人目标操作数D,异或值存人D+l中。通信时将求和与异或的结果随同数据发送出去,对方收到后对接收到的数据也作同样的求和与异或运算,并判别接收到的求和与异或的结果是否等于求出的结果,如不等则说明数据传送出错。
6.FX-8AV模拟量功能扩展板读出指令(FNC85) 读模拟量功能扩展板指令VRRD的源操作数[S·]为常数0~7,用来指定模拟量的编号。 FX2N-8AV-BD是内置式8位8路模拟量功能扩展板,板上有8个小型电位器,用VRRD指令读出的数据(0~255)与电位器的角度成正比。图6-40中的X0为ON时,读出0号模拟量的值([S·]=0),送到D0后作为定时器T0的设定值。也可以用乘法指令将读出的数乘以某一系数后作为设定值。
7.FX-8AV模拟量功能扩展板开关设定指令(FNC86) 模拟量功能扩展板开关设定指令VRSC将从电位器读出的数四舍五人,整量化为0~10的整数值,存放在[D·]中,这时电位器相当于一个有11档的模拟开关。图6-41表示通过VRSC指令,用模拟开关的输出值和解码指令DECO来控制M0~M10,用户可以根据模拟开关的刻度0~10来分别控制M0~M10的ON/OFF。
8.PID回路运算指令(FNC88) PID(比例—微分—积分)回路运算指令用于模拟量闭环控制。PID运算所需的参数存放在指令指定的数据区内。
6.9 其他指令 6.9.1 时钟运算指令 1.时钟数据加法指令(FNCl62) 6.9 其他指令 6.9.1 时钟运算指令 1.时钟数据加法指令(FNCl62) 时钟数据加法指令TADD的[S1·]、[S2·]和[D·]中存放的是时间数据(时、分、秒),[S1·]、 [S2·]和[D·]可以取T、C和D。下图中的TADD指令将D10~D12和D20~D22中的时钟数据相加后存人D30~D32中。运算结果如果超过24h,进位标志ON,其和减去24h后存人目标地址。 2.时钟数据减法指令(FNCl63) 下图中的时钟数据减法指令TSUB将D40~D42和D50~D52的时钟数据相减后存人D60~D62中。运算结果如小于零,借位标志ON,其差值加上24h后存人目标地址。
3.时钟数据读出指令(FNC166) 时钟数据读出指令TRD的目标操作数[D·]可以取T、C和D,只有16位运算。该指令用来读出内置的实时钟的数据,并存放在[D·]开始的7个字内,实时钟的时间数据存放在特殊数据寄存器D8013~D8019内,D8018~D8013中分别存放年、月、日、时、分和秒,星期存放在D8019中。下图中的X3为ON时,D8018~D8013中存放的6个时钟数据分别读人D0~D5,D8019中的星期值读人D6。
4.时钟数据写入指令(FNC167) 时钟数据写入指令TWR的[S·]可以取T、C和D,只有16位运算。该指令用来将时间设定值写入内置的实时钟,写入的数据预先放在[S·]开始的7个单元内。执行该指令时,内置的实时钟的时间立即变更,改为使用新的时间。前图中的D10~D15分别存放年、月、日、时、分和秒,D16存放星期。X4为ON时,D10~D15中的预置值分别写入D8018~D8013,D16中的数写入D8019。
[例6-8] 用实时时钟指令控制路灯的定时接通和断开,20:00开灯,06:00关灯,下面是指令表程序。
5.小时定时器指令(FNC169) 在小时定时器指令HOUR中, [S·]可以选所有的数据类型,它是使报警器输出[D2·](可以选X、Y、M和S)为ON所需的延时时间(小时), [D1·]为当前的小时数,为了在PLC断电时也连续计时,应选有断电保持功能的数据寄存器。[D1·]+l是以s为单位的小于1h的当前值。 在[DI·]超过[S·]时,例如在300h零1s时,前图中的报警输出[D2·](Y7)变为ON。此后小时定时器仍继续运行。其值达到16位(HOUR指令)或32位数(DHOUR指令)的最大值时停止定时。如果需要再次工作,应清除[D1·]和[D1·]+1(16位指令)或[D1·]~[D1·]+2(32位指令)。
6.9.2其他指令 1.FX1S和FX1N的定位控制指令 定位控制采用两种位置检测装置,即绝对位置编码器和增量式编码器。前者输出的是绝对位置的数字值,后者输出的脉冲个数与位置的增量成正比。定位控制用晶体管输出型的Y0和Y1输出的脉冲来控制步进电动机。 读当前绝对值指令DABS(FNC155)用来读取绝对位置数据。 回零指令ZRN(Zero Return,FNC156)在开机或初始设置时使机器返回原点。 PLSV是带方向输出的变速脉冲输出指令(FNC157),输出脉冲的频率可以在运行中修改。 增量式单速定位指令(FNC158)DRVI,用于增量式定位控制,可以指定脉冲个数和脉冲频率。绝对式单速定位指令(FNC159)DRVA是使用零位和绝对位置测量的定位指令。
2.格雷码变换指令(FNCl70) 格雷码常用于光电码盘编码器,其特点是用二进制数表示的相邻的两个数的各位中,只有一位的值不同。格雷码变换指令GRY将源数据(二进制数)转换为格雷码并存入目标地址。格雷码逆变换指令GBIN将从格雷码编码器输入的数据转换为二进制数。
3.读写FX0N-3A指令(FUN176,FUN177) RD3A指令用于读取模拟量模块FX0N-3A的值,WR3A指令用于将数据写入模拟量模块FX0N-3A。
谢谢! 今天的课到此结束,同学们再见!