《可编程控制器-梯形图指令.ppt》由会员分享,可在线阅读,更多相关《可编程控制器-梯形图指令.ppt(134页珍藏版)》请在三一办公上搜索。
1、GE可编程控制器,张晓丹,梯形图线圈 梯形图触点 梯形图定时器 梯形图计数器 梯形图数据转移功能块 梯形图数据表功能块 梯形图数学运算功能块 梯形图程序流程功能块 梯形图关系运算功能块 梯形图高级数学运算 梯形图位操作 梯形图控制功能块 梯形图转换功能块,GE梯形图指令,1.线圈,线圈用来控制分配给线圈的离散(布尔)变量。条件逻辑必须用来控制线圈的能流。线圈 直接引起动作。它们不流过能流到右边。如果程序内另外的逻辑执行作为线圈条件的结果,你可以使用一个内部参考地址给线圈或一个延续线圈/触点组合。,图形表示保持型的布尔变量。在电源掉电时,分配的布尔变量的值被保存,当PLC从停止模式变为运行模式,
2、再恢复为保存的值。无保持的布尔变量.当电源掉电或PLC从停止模式变为运行模式时,分配的布尔变量的值设定为0。%T总是无保持的。只有%M 和%Q 可以是无保持的或保持的。,一个保持变量分配给线圈,一个非保持变量分配给线圈,操作当线圈收到能流时,它设定其相应的布尔变量为ON(1)。当线圈收到无能流时,它设定其相应的布尔变量为OFF(0)。线圈可以分配一个保持变量或非保持变量。,常开线圈,常闭线圈,一个保持变量分配给负线圈,一个非保持变量分配给负线圈,操作当它没有收到能流时,负线圈(NCCOIL)设定离散参考地址为ON。NCCOIL可以分配给一个保持变量或非保持变量。,置位线圈和复位线圈,一个保持变
3、量分配给置位线圈和复位线圈,一个非保持变量分配给置位线圈和复位线圈,你可以使用SETCOIL 和RESETCOIL,保持(锁定)变量状态ON或OFF。你可以分配同样布尔变量给SETCOIL和RESETCOIL,不需要任何限制。当SETCOIL收到能流,它设定它的相关布尔变量为ON。当它收到非能流,它对布尔变量没有影响。SETCOIL是唯一不能设定与它关联的布尔变量为OFF的线圈。为了设定相关的布尔变量为OFF,建议使用RESETCOIL.当RESETCOIL收到能流,它设定它的相关布尔变量为 OFF.当它收到非能流,它对布尔变量没有影响。RESETCOIL不能设定它相关的布尔变量为ON的线圈.
4、为了设定相关的布尔变量为 ON,建议使用SETCOIL.,SETCOIL 和 RESETCOIL 可以分配保持变量或非保持变量。,只要变量E2或E6为ON,E1表示的线圈变为ON。只要变量E3或E5为ON,E1表示的线圈变为OFF。,跳变线圈 POSCOIL和NEGCOIL,转换线圈-PTCOIL 和 NTCOIL,注意,一但PTCOIL或NTCOIL变为ON或OFF,它更新它的实例数据。PTCOIL或NTCOIL的多个实例能与同一布尔变量相关联,但是PTCOIL或NTCOIL的每个实例的实例数据与布尔变量相关是唯一的,那就是,它独自跟踪。要求数据是非保持的,那就是,当CPU从停止变为运行模式
5、时,它清除为OFF。你可以使用任一类型转换线圈与参考地址,保持的或非保持的内存(%Q,%M,%T,%G,%SA,%SB,or%SC)。一个梯级行以一个转换线圈结束,不能有另一个有线圈的分支,甚至另一个转换线圈。实例数据使用符号离散内存。,警告:不要通过强制其参考位来强制跳变线圈。如果强制了跳变线圈,不仅跳变线圈对参考位无效,而且在取消跳变线圈的强制时,线圈可能持续一个扫描周期为ON。这将对PLC LD逻辑和与PLC相连的现场设备引起不可预料的结果。,注意你可以使用任何一种跳变线圈与参考地址,保持或非保持内存(%Q,%M,%T,%G,%SA,%SB,or%SC).不要使用跳变触点在跳变线圈上,因
6、为线圈使用跳变位存储线圈的能流值。一个梯级以一个跳变线圈结束,不能有另一个有线圈的分支,甚至另一个跳变线圈。,警告:不要从外部设备(例如,PCM,编程器,或 ADS)写跳换线圈的参考位,因为这将破坏线圈的值只保持一个周期的特性,线圈不可能按照描述来动作。,当参考E1从OFF变为ON时,线圈E2和E3收到能流,在1个逻辑扫描周期内线圈E2变为ON。当参考E1从ON变为OFF时,线圈E2和E3失去能流,在1个逻辑扫描周期内线圈E3变为ON。,触点,触点用来监视参考地址的状态。是否触点通过能流,取决于被监视参考地址的状态和触点类型。如果它的状态为1,参考地址为ON;如果它的状态为0,参考地址为OFF
7、。,常闭触点,操作常闭触点(NCCON)作为一个开关,如果BOOLV操作数为OFF(假,0),则通过能流。,常开触点,操作常开触点(NCCON)作为一个开关,如果BOOLV操作数为ON(真,1),则通过能流。,跳变触点,警告:不要使用POSCON 或 NEGCON跳变触点给那些已经被转换线圈(同样是一次有效)或置位和复位线圈使用的变量。,参考点的转换位每次受到写入点的影响。当点从OFF转变为ON 时,它设定POSCON。当点从ON转变为OFF 时,它设定NEGCON。当点反方向转换时或当写后的状态与写前状态一样时,它清除POSCON或NEGCON。那就是,ON到ON,OFF到OFF。,示例 1
8、,当元素E1从OFF转变为ON时,线圈 E2在一个逻辑扫描内为ON。当元素E3从ON转变为OFF时,线圈 E4在一个逻辑扫描内为ON。,示例 2,%M00017由BIT_SET 函数设定位,然后由BIT_CLR函数清除。正跳变触点X1 激活BIT_SET,负转变触点X2激活BIT_CLR.与位%M00017关联的正跳变将保持为ON,直到BIT_CLR 函数复位%M00017。因为只有当触点X1从OFF变为ON时才写位。同样,与位M00017关联的负跳变将为ON,直到BIT_SET函数设定%M00017为ON。,转变触点-PTCON 和 NTCON,%I1:输入信号%M1:输出线圈T:一次扫描周
9、期,延续触点与延续线圈,每行程序最多可以有9个触点,一个线圈。如超过这个限制,则要用到延续触点与延续线圈。注意延续触点与延续线圈的位置关系。,当%I1得电时,%M1与%M2不会得电,只有%I2得电时,%M1与%M2才会得电。,一些系统触点的含意,(只能做触点用,不能做线圈用):ALW_ON:常开触点;ALW_OFF:常闭触点;FST_SCN:在开机的第一次扫描时为“1”,其他时间为“0”T_10ms:周期为0.01秒的方波;T_100ms:周期为0.1秒的方波;T_Sec:周期为1秒的方波;T_Min:周期为1分钟的方波。,计数器函数,计数器中的函数数据块,每个计数器用一个三个字的WORD 数
10、组(%R,%P,%L)或存储器(%W)来储存下列信息.,当开始一个计数器,必须先为三个字的WORD数组(寄存器块)设定一个开始地址,警告:不要用两个连续的寄存器作为两个计数器的起始地址.CIMPLICITY Logic Developer-PLC对于寄存器块重叠不进行检查也不进行警告.如果将第二个计数器的当前值放置在前一个计数器的预置值之上,则计数器将不工作.,减法计数器(DNCTR)函数从一预置值递减.PV的最小值是零.最大值是+32,767 当CV达到其最小值-32,768就保持直到被复位.当DNCTR被复位,CV被设置成PV值当输入的使能信号由变OFF为ON,CV 开始以步长为.1递减只
11、要CV 小于等于0,则输出为ON.,计数端,复位端,预置值,输出端,当前值,该计数器是复位优先的计数器,当复位端为“1”时(无需上升沿跃变),当前值于预置值均被清零,如有输出,也被清零。,例,加法计数器,当计数端输入由“01”(脉冲信号),当前值加“1”,当当前值等于预置值时,输出端置“1”。只要当前值大于或等于预置值,输出端始终为“1”,而且该输出端带有断电自保功能,在上电时不自动初始化。该计数器是复位优先的计数器,当复位端为“1”时(无需上升沿跃变),当前值于预置值均被清零,如有输出,也被清零。该计数器计数范围为0至32,767。,每一个计数器需占用3个连续的寄存器变量。计数端的输入信号一
12、定要是脉冲信号,否则将会屏蔽下一次计数。减计数器,例,定时器,延时断开计时器,定时器将采用不同的步长来计时,这取决于CPU:秒 0.1秒 0.01秒 0.001秒,Enable,复位端,输出端,enable,预置值,输出,当前值,PV的范围为0 到+32,767个时间单位。如果PV超出范围,则对于定时器无效。当断电时定时器的状态保持不变;在上电时不会发生自动初始化 如果预设值为零或为负,OFDT将不传递使能信号。,不要将?,?+1,或?+2 地址用于其它指令。参考地址的交叠会引起定时器运行的不稳定。,通过应用常闭线圈,输出的结果被保留。每当%I0001关闭则OFDT函数关闭常闭线圈。在%I00
13、01打开后,Q0001保持关闭两秒钟然后打开。,保持延时接通定时器,enable,预置值,输出,当前值,ONDTR_SECONDTR_TENTHSONDTR_HUNDSONDTR_THOUS,复位端,例,延时接通定时器,enable,预置值,输出,当前值,TMR_SECTMR_TENTHSTMR_HUNDSTMR_THOUS,范围为0 到+32,767个时间单位。当掉电时定时器的状态保持不变;在上电时不会发生自动初始化。当TMR接到使能信号,便开始计时(CV增加).当在LD程序中扫描到定时器,定时器的CV便更新来反映在上次TMR重置后过了多少时间.只要使能信号保持为ON,这个更新就发生.当CV
14、等于或超过PV,TMR中止并且向右端传递使能信号.定时器继续计时直到到达最大值(32,767时间单位).使能信号输入端由ON变为OFF,TMR停止计时,CV被重置为零并且Q被关闭.当TMR被激活并且PV CV时,输出端Q被激活.,关系运算符,关系函数比较两个相同类型的值或确定一个值是否在某个指定的范围内。源值不受影响。,比较,当CMP接收到使能信号,便将IN1和IN2进行比较。如果 IN1 IN2,CMP激活GT(大于)输出.IN1和IN2必须是同样的数据类型.CMP可以比较如下类型的数据:DINT,INT,REAL,和UINT.对于不同数据类型的比较,首先使用转换函数进行数据转换.当接收到使
15、能信号,CMP便将使能信号传递到右端,除非IN1或IN2不是数.,助记符:CMP_DINTCMP_INTCMP_REALCMP_UINT,实例,等于,当函数接收到使能信号,便将IN1于IN2进行比较.IN1和IN2必须是相同的数据类型.如果IN1和IN2相等,函数传递使能信号,除非IN1或IN2不是数.,助记符:EQ_DINTEQ_INTEQ_REALEQ_UINT,大于等于,当函数接收到使能信号,便将IN1于IN2进行比较.IN1和IN2必须是相同的数据类型.若IN1 IN2,函数传递使能信号,除非IN1或IN2不是数.,小于,当函数接收到使能信号,便将IN1于IN2进行比较.IN1和IN2
16、必须是相同的数据类型.如果IN1 IN2,函数传递使能信号,除非IN1或IN2不是数.,助记符:LT_DINTLT_INTLT_REALLT_UINT,小于等于,当函数接收到使能信号,便将IN1于IN2进行比较.IN1和IN2必须是相同的数据类型.如果IN1 IN2,函数传递使能信号,除非IN1或IN2不是数.,助记符:LE_DINTLE_INTLE_REALLE_UINT,不等于,当函数接收到使能信号,便将IN1于IN2进行比较.IN1和IN2必须是相同的数据类型.如果IN1不等于 IN2,函数传递使能信号,除非IN1或IN2不是数.,助记符:NE_DINTNE_INTNE_REALNE_U
17、INT,范围,范围函数接受到使能信号,便将IN处的值与L1和L2比较,看是否在其范围内.L1或L2可能是最小值也可能是最大值.当 Q为ON(1).否则,Q为OFF(0).如果成功运行,则传递使能信号到右端.,助记符:RANGE_DINTRANGE_DWORDRANGE_INTRANGE_UINTRANGE_WORD,实例,当RANGE_INT从常开触点%I0001接受到使能信号,便判断%R00003处的值是否在0到100间(包含0和100).只有当0%AI0050 100时,线圈%M00002为ON.,数学运算,在应用数学函数前,也需要通过逻辑功能块将数据转换为不同的类型.每一个函数的描述都包
18、括适当的数据类型.数据类型转换函数那一节讲解如何转换数据为不同的类型.,避免溢出应用乘和处函数时要小心避免溢出.如果要将INT型转换为DINT型,要注意CPU使用标准的2s补足,将符号扩展到最高位.必须检查低十六位的值,并且把它扩展到高16位.如果一个INT型的最高有效位为0(正),则将0移到所有的高16位.如果INT型的最高有效位为1(负),则将-1或十六进制数0FFFFh移到高16位.将DINT型转换为INT型数据就相对简单,因为低16位(第一个寄存器)是型DINT(32位)的整数部分.高16位不是0(正)就是-1(负),或者DINT型数据太大因此不能转换为16位.,绝对值,当函数接受到使
19、能信号,便将IN的绝对值放置在Q.函数传递使能信号,除非有以下情况发生:对于INT型,IN为MININT.对于DINT型,IN为MINDINT.对于REAL型,IN不是一个数.,助记符:ABS_DINTABS_INTABS_REAL,-2976的绝对值,即2976,放置在%R00010,加法,当.接收到使能信号时,便将相同类型的IN1和IN2相加,并且将结果存到同样类型的Q中.函数传递使能信号,除非溢出或有运行错误.如果发生溢出,结果为可能的带正确符号的最大值,并且没有使能信号传递.,助记符:ADD_DINTADD_INTADD_REALADD_UINT,例子是想建立一个回路的计数器(计算开关
20、%I0001关闭的次数),运行的总次数储存在%R0002,但是这个设计是失败的.设计的目的是当%I0001关闭,ADD函数应当把%R0002处的值加一,并且把结果在放入%R0002.这个设计的问题是当%I0001关闭时,每PLC扫描一次则ADD函数就执行一次.例如:如果在五次扫描中%I0001一直保持关闭,那么%I0001尽管在这段时间仅关闭了一次,输出仍然增加了五次.,在改进的线路中,%I0001控制跳变一个扫描周期有效)线圈%M0001。每次%I0001关闭%M0001只是在一次扫描中使ADD函数接受到使能信号。为了使%M0001再次关闭,%I0001必须再次打开和关闭。,除法,运行当DI
21、V函数接收到使能信号时,便将IN1除以IN2,并且将结果存到的Q中,IN1和IN2和都必须是相同的类型.DIV是舍去小数,并不是四舍五入到最近的整型值.例如:24 DIV 5=4.当没有溢出或没有运行错误时,函数传递使能信号.如果发生溢出,结果为带有正确符号的可能的最大值并且不传递使能信号.,助记符:DIV_DINTDIV_INTDIV_MIXEDDIV_REALDIV_UINT,取模,当MOD函数接受到使能信号,便将IN1除以IN2,并且把得到的余数放入Q。IN1,IN2和Q都必须是相同的数据类型。结果的符号根IN1的符号相同。输出可以通过如下式子来计算出:Q=IN1-(IN1 DIV IN
22、2)*IN2)这里DIV运算的到的是商.当函数接受到使能信号,使能信号输出端一直是ON,除非出现除数是零的情况。在这种情况下,使能信号输出端为OFF.,助记符:MOD_DINTMOD_INTMOD_UINT,乘法,当MUL函数接受到使能信号,便将IN1和IN2相乘,结果放入Q。IN1,IN2和Q都必须是相同的数据类型。函数传递使能信号,除非溢出或有运行错误.如果发生溢出,结果为带有正确符号的可能的最大值并且不传递使能信号。,助记符:MUL_DINTMUL_INTMUL_MIXEDMUL_REALMUL_UINT,比例缩放,当比例缩放函数接收到使能信号时,便IN将处的数据进行比例缩放,并且把结果
23、放入OUT。,助记符:SCALE_DINTSCALE_INTSCALE_UINTSCALE_WORD,寄存器%R0120-%R0123用来存储缩放时的高低值。将被缩放的输入值是%AI0017处的模拟量输入。缩放后的数据用来控制模拟量输出%AQ0017。当%I0001为ON缩放开始进行。,减法,当SUB函数接收到使能信号,便计算.IN1-IN2.并将结果放入Q,IN1,IN2和Q。当没有溢出或没有运行错误时,函数传递使能信号.如果发生溢出,结果为带有正确符号的可能的最大值并且不传递使能信号.,助记符:SUB_DINTSUB_INTSUB_REALSUB_UINT,程序流函数,调用,非参数化的调用
24、,参数化的调用对应参数化的C语言块或参数化的其他语言的程序块。,当CALL函数接收到使能信号,便马上扫描指定的子程序块如:LD 块,C 块,或IL 块(不论是否是参数化的程序块)并且执行它。子程序块运行完毕,则马上转到CALL后面的指令。,注解CALL函数可用在任何一个LD块,包括MAIN块或参数化的块。不能调用_MAIN块或 C 程序.在运行call前,要访问的块必须存在。可用内存限制了对特定块访问的最大次数。,注释,操作注释函数用来在程序中输入文本说明信息。当向LD程序中插入注释指令,则显示.?.。在键入信息后,只显示前面的一些字。,数据移动指令,块清除,当.BLKCLR_WORD.接收到
25、使能信号时,便把从IN处的参考地址开始的数据块清零,当要被清除的数据来自布尔(即不连续的)存储区(%I,%Q,%M,%G,或%T),与参考地址关联的变换信息也将被清除.只要.BLKCLR_WORD.接收到使能信号便将此信号传到右端。,当收到使能信号,%Q 存储区从Q0001开始的32个字(512个点)被清零。与这些地址有关的转换信息也将被清零。,数据块移动,助记:BLKMOV_DINTBLKMOV_DWORDBLKMOV_INTBLKMOV_REALBLKMOV_UINTBLKMOV_WORD,当.BLKMOV.接收到程序执行信号时,便将一个包含七个常数的数据块复制到Q端指定为开始的连续的区域
26、。只要.BLKMOV.接收到使能信号便将此信号传到右端。,当输入使能端.#FST_SCN.为ON,.BLKMOV_INT.复制七个输入的常量到存储区(%R0010 到%R0016)。,助记符:MOVE_BOOLMOVE_DINTMOVE_DWORDMOVE_INTMOVE_REALMOVE_UINTMOVE_WORD,移动数据,当MOVE函数接收到使能信号时,从PLC存储区的一个区域复制各个位数据到另一个区域。因为数据是采用位格式来复制的,因此新的区域不须和原来相同的数据类型相同。当MOVE函数接收到使能信号时,便以位的方式从IN处复制数据到Q。如果数据是从一个离散的存储区域移向另一个区域,例
27、如:从存储区%I到存储区%T,与离散存储元素有关的跳变信息便更新,以显示MOVE函数的运行是否引起任何离散存储元素状态的改变。在输入处的数据不改变,除非来源地址和目标地址产生了交叠。,如果一个由Q指定的BOOL型的数组数据不包括一个字节的所有位,当Move函数接到使能信号,与这个字节有关的变换位(不在这个数组里)被清除。输入IN可以是一个变量(提供数据将被移动的区域的地址)也可以是一个常数。如果是一个常数,这个常数值放在由输出参数指定的地址。例如,若在IN处指定了常数值4,则4便被放在Q指定的存储区域。若指定常数的长度大于1,那么这个常数被放置在以Q指定的为首地址、长度为指定长度的连续区域中。
28、不允许IN和Q处的地址交叠。,V_M00001和V_M00033都是长度为3的WORD数组,即在每一个队列里有48位。因为PLC不能识别数组,操作参数.?.须设置为3,即总共要移动的字数。当使能输入端V_Q0014为ON,MOVE_WORD从%M00001移动48位到%M00033。若目的地数据与源数据产生16位的重叠,数据的移动照样正确地进行,,MOVE函数运行的结果由函数所选的数据类型来决定,如下所示.例如,IN处指定常数值9且长度为4,则9被放置到由Q指定的区域以及接下来的三个区域:,只要%I00003被置位,三个位数据%M00001,%M00002,和%M00003分别被移到%M001
29、00,%M00101,和%M00102.线圈%Q00001开启.,移位寄存器,当移位寄存器函数(SHFR_BIT,SHFR_DWORD,或SHFR_WORD)接收到使能信号时并且 R.没有复位,则SHFR从参考地址移位一个或多个BIT数据,DWORD数据,或WORD数据到指定的存储区域.邻近的储存区域作为暂时储存区.例如,一个word的数据若移位到一个存有5个word数据的存储区.这次转移的结果是,另一个word数据将被从这个存储区的末端移出.,复位输入(R)的优先权比函数的使能端输入高.当R有效,移位寄存器的区域(以ST为开始地址,区域长度为?指定的长度),都将置零.如果函数接收到使能信号并
30、且R没复位,移位寄存器的每一个BIT,DWORD,或WORD数据被移动到下一个高位参数地址。移位寄存器里排在最后面的一个数据被移到Q。IN处移位寄存器的最高地址处的数据被移到以ST为开始的被腾空的区域。当使能信号被接收到并且R端没有接受到复位信号,程序就将此信号进行传递到右端.,SHFR_WORD工作在寄存存储区%R0001-%R0100.当重置参数CLEAR接到信号,移位寄存器里的字置零。当NXT_CYC接到使能信号并且CLEAR没有接到,在%Q0033处的word数据被转移到移位寄存器%R0001。从移位寄存器%R0100移出的数据被储存到%M0005。注意:在本例,指定的长度(LEN)和
31、要移动数据的个数(N)并不相同。,总线读取,助记符:BUS_RD_BYTEBUS_RD_DWORDBUS_RD_WORD,总线读取(BUS_RD)函数从总线读取数据。,当.BUS_RMW.接收到使能信号时,便访问总线上的模块。用操作参数R,S,SS,RGN,和 OFF来决定要读取的存储区地址。读阶段:BUS_RMW 读取总线地址的byte,word,或 dword数据。修改阶段:这些byte,word,或 dword数据与MSK数据进行与(AND)/或(OR)运算。.AND.和.OR.的选择是通过OP输入端来进行的。MSK是一个一字的值。如果对象是byte数据,则仅用到的MSK低八位。如果对象
32、是word数据,则仅用到MSK的低十六位。写阶段:结果写入和读取时相同的总线地址。只要.BUS_RMW.接收到使能信号便将此信号传到右端,除非有错误发生。,BUS_RMW_WORD只工作于连续的绝对地址(绝对地址=基地址+偏移量)。BUS_RMW_DWORD只工作于是四的倍数的绝对地址。,总线测试和设置,总线测试和设定(BUS_TS)函数操作总线上的信号。BUS_TS 在当前信号所在位置,交换布尔值ON(1).如果此值已经是ON,则BUS_TS得不到信号。如果存在的值是OFF,则信号被复位,并且BUS_TS函数得到信号和它所控制的存储区的使用。信号可通过BUS_WRT函数清零-向信号所在区域写
33、入零。,当.BUS_TS.接收到使能信号时,便访问总线上的模块。应用操作参数R,S,SS,RGN,和 OFF来决定要读取的存储区地址。然后BUS_TS交换在此地址数据的布尔值ON。如果信号可用(OFF)并被获得,则BUS_TS设置输出Q为ON。只要.BUS_TS.接收到使能信号便将此信号传到右端,除非在执行时有错误发生。,总线写入,当.BUS_WRT.接收到使能信号时,便访问总线上的模块。应用操作参数R,S,SS,RGN,和 OFF来决定要读取的存储区地址。然后BUS_WRT复制在输入参数IN的数据到总线模板。只要.BUS_WRT.接收到使能信号便将此信号传到右端,除非在执行时有错误发生。,总
34、线读取修改写入,助记符:BUS_RMW_BYTEBUS_RMW_DWORDBUS_RMW_WORD,总线读取/修改/写入(BUS_RMW)函数更新总线上的数据元素。,位操作指令,逻辑与,每当功能块在扫描周期中接收到电流,逻辑与功能块检查输入IN1的位串和输入IN2的位串的相对应的每一位,从最小的指定位开始。可以指定位串的长度为1到256个字。,逻辑非,当逻辑非或逻辑翻转功能接收到电流,它会将输入IN1位串的每位输入的状态翻转成相对的状态放到输出Q的位串的相应位中。每个扫描周期中功能块接收到电流时,所有的位都会转换一次状态,使输出字符串Q为输入IN1的逻辑补码。功能块在接到电流时传送电流到功能块
35、的右边。,逻辑或,每当功能块在扫描周期中接收到电流,逻辑或功能块检查输入IN1的位串和输入IN2的位串的相对应的每一位,从最小的指定位开始。可以指定字符串的长度为1到256个字。,如果逻辑或功能块发现比较的俩位中其中的一位是1,它会在输出字符串Q的相应的位上置1。如果俩位都是0,在相应的位置上的位上置0。功能块在接收到电流时传送电流到功能块的右边。,逻辑异或,当异或功能块接收到电流,它比较输入IN1和输入IN2的位串的每一位。如果存在不同的位,它会在输出的相应的位置上置1。每次接收到输入使能的扫描,异或功能块都会从最小的检测位开始检测输入IN1和输入IN2的位串的每个相应位。可以指定位串的长度
36、,范围是1到256个字。,检查这一对数据相应的位,只要有一个位是1,异或就在输出Q的相应位置上置1。异或功能块在接收到输入使能时总是将使能信号向后传递。,移位操作,当左移功能块(SHIFTL_WORD)得电,它将使一个或一组字中的所有位左移指定的位数。当左移进行时,指定数量的位向左移出输出位串。当这些位移出最高有效位(MSB),同样数量的位从最低有效位(LSB)移入。,助记符:SHIFTL_DWORDSHIFTL_WORDSHIFTR_DWORDSHIFTR_WORD,右移当右移功能块(SHIFTR_WORD)得电,它将使一个或一组字中的所有位右移指定的位数。当右移进行时,指定数量的位向右移出
37、输出位串。当这些位移出最低有效位(LSB),同样数量的位从最高有效位(MSB)移入。,左移和右移一个长为1到256个字的位串能用于这两个函数.指定移动(N)的数字必须比0大,但不能比位串的位数大。如果N超出范围,在PACSystems.,无移动发生,不产生能流。,被移进字符串首的位由输入参数B1指定。如果指定的移动的位数大于1,每位以相同值(0或1)填充。B1可能是:另一功能块的布尔输出所有为1所有为0,移位功能块传递能流到右边,除非指定的移动位数为0或比位串数组大。输出Q 是输入位串的移位复制。如果你想移位输入位串,输出参数Q必须使用与输入参数IN一样的内存地址。在每次接收到能流时,写整个移
38、动字符串。例如,如果移动了4位,B2将是移出的第4位。,只要输入V_I0001被置为1,WORD1开始的输入位串中的位复制到WORD2开始的输出位串。WORD2左移8位,如输入N指定。结果在输出串的起始位置空出的位,被设定为V_I0002的值。,定位指令,位定位函数将在一个位串中定位被置为1的一位的位置。当使能信号被接收到时,函数将对以输入IN为开始地址的位串扫描。当发现某一位为1,或者是整个位串被扫描完毕,函数将停止扫描。POS将对位串中第一个非零位定位,如果字符串中没有非零位,POS将置0。串长度可以选择为1 到 256个WORD,注意:当使用位检测,位置位,位清零或是位定位函数时,位的编
39、号是从1到16,而不是从0到15。,位置位,位清零,助记符BIT_SET_DWORDBIT_SET_WORDBIT_CLR_DWORDBIT_CLR_WORD,置位函数将位串中的一位设置为1。清零函数通过将位串中的一位设置为0而清除此位。,接到使能信号的每次扫描,该函数置位或清零指定的位。如果用一个变量而不是一个常量指定位数,同样的函数块在连续的扫描中对不同的位置位或清零。可以选择长度为1到256个WORDS的位串。,当使用置位或清零函数时,对于WORD型位输入为1到16,而不是0到15,对于DWORD型为1到32。,位测试,当位测试功能块接通,它将测试位串中的某一位,确定此位当前值为1或0。
40、测试的结果送入输出Q。此功能块得电时的每次扫描,位测试功能块将其输出Q置为与指定位相同的状态。如果指定位数的不是一个常数而是一个变量,则用此功能块可以在连续扫描中完成对不同位的测试。如果BIT值超出范围(1 BIT(16*长度)对于一个字和1 BIT(32*长度)对一个双字),则Q置为OFF。可指定的串的长度范围为1 到 256 个WORD或DWORD。,当输入 V_I0001 置位,PRD_CDE中位置为变量 PICKBIT中的值的一位被测试。如果它为1,则输出Q向ADD功能块传递电流使能,使得ADD功能块的输入IN1在当前值的基础上加1。,掩码比较(屏蔽比较指令),功能块比较两个位串的内容
41、。它提供了只比较掩码选定的位的功能。,提示:输入位串1可能是线圈和电机起动器类负载等输出的状态。输入位串2可能包括它们的状态反馈,例如限位开关或节点的状态。,当功能块接收到使能信号时,它开始比较第一个输入位串和第二个输入位串的相应位。比较继续进行,直到发现了不匹配或者到达位串的末尾。,在第一次扫描过后,掩码比较字节功能开始执行。%M0001到%M0016与%M0017到%M0032进行比较。%M0033到%M0048包含掩码值。%R001的值决定了比较开始时,两个输入串的位的位置。,只要%I00001被置位,MASK_COMP_WORD都会比较功能块中变量value的值和变量expect的值。
42、比较从功能块中bitnum值1开始。如果检测到无掩码的不匹配,比较停止。比较位在掩码RESULT中置位。另外,线圈%Q00002得电。线圈%Q00001当MASK_COMP_WORD得电时总是得电状态。,BIT输入端存储下一个应该比较的位的位号值。通常情况下,它等于上次不匹配发生时的位的位号值。因为上次不匹配发生时的位的位号存储在输出BN里,BIT和BN可以使用相同的变量地址。比较实际上从BIT的下一位开始,因此,BIT的初始值应该是比要比较的第一位的位号值小1(例如,开始比较的是%I00001,BIT号应该是0)。BIT和BN使用相同的变量时,比较从一个不匹配的位的下一位开始,或者,当在调用
43、功能块时,前一次比较所有的位都是匹配的,比较从头开始。,如果想要开始其它位置的位串的下一次比较,可以给BIT和BN输入不同的变量。如果BIT的值超过位串最后位置,在开始下次比较之前,BIT复位为0。,功能块得电时总是向下传递电流。功能块的另一个输出取决于比较掩码位的状态。如果在IN1和IN2的字符串的比较位是匹配的,功能块将不匹配的输出节点置为0,并将BN置为输入字符串的最高位号。然后比较终止。在下一次调用掩码比较时,它被复位为0。如果发现了不匹配,意味着比较的两位是不相同的,功能块检查位串M(掩码)的相应数字位。如果掩码位是1,比较继续直到到达另一个不匹配的位或者到达输入字符串的结尾。如果检
44、测到不匹配而且掩码位是0,功能块作下面的动作:,1.置位M中的比较掩码位为1。2.置位不匹配(MC)输出为1。3.更新输出位串Q来和新的掩码位串M相匹配。4.置输出(BN)为不匹配位的位号。5.停止比较。,数据转换模块,数据类型转换函数将数据项目的数据格式(数据类型)转变为另一种数据格式(数据类型)。许多编程指令如数学函数,所用的数据必须定为某一种类型。因此在应用那些编程指令前就要用到数据转换。,角度类型转换,当角度到弧度的转换(DEG_TO_RAD)或弧度到角度的转换(RAD_TO_DEG)函数接收到程序执行信号时,就对在输入端.IN.的实型值进行适当的角度转换然后在.Q.端输出结果。当.DEG_TO_RAD.和.RAD_TO_DEG.运行且没有数据溢出时,它们就传递程序使能信号到右端,除非输入端IN.不是一个数.,当输入%I0002置位,在PARTS处的BCD4值被转换为整型(INT)并且被传递到.ADD_INT.程序。在.ADD_INT.程序运行中,传递的整形数据与由RUNNING表示的整型数据相加得到输出结果(TOTAL)。,变量监视窗口,