6ES7253-1AA22-0XA0代理直销
( 1 )功能指令编号: 功能指令按功能号 FNC00 ~ FNC246 来编号,如图 中的 ①所示。
( 2 )助记符:功能指令的助记符是该指令的英文缩写。如加法指令“ ADDITION ”简写为 ADD , 如图(a) 中的②所示。
( 3 )数据长度:功能指令可按处理数据的长度分为 16 位指令和 32 位指令。其中 32 位指令用( D )表示,无( D)符号的为 16 位指令。图( a )中③表示该指令为 32 位指令。
( 4 )执行形式:功能指令有脉冲执行型和连续执行型两种。指令中标有( P )(图 (a)中的④所示)的为脉冲执行型,在指令表示栏中用“
”警示,如图 ( a )中的⑤所示。脉冲执行型指令在执行条件满足时仅执行一个扫描周期,图 (a) 中,当 X0闭合时,只在一个扫描周期中将加数( D11 、 D10 )和加数( D13 、 D12 )做一次加法运算。连续执行型如图所示,在 X0为 ON 的每个扫描周期都要被重复执行加法运算。在不需要每一个扫描周期都执行时,用脉冲执行方式可缩短程序执行时间。 XCH(数据交换)、 INC (加 1 )、 DEC (减 1)等指令一般应使用脉冲执行方式,若用连续执行时要特别注意,因为在每一个扫描周期内,其结果均在变化。
图 连续执行方式
( 5 )操作数:操作数是功能指令 涉及或产生的数据,如图 (a) 中的⑥所示。它一般由 1 ~ 4个操作数组成,但有的功能指令只有助记符和功能号而不需要操作数。操作数分为源操作数、目标操作数和其它操作数。
[S] :源( Source )操作数,其内容不随指令执行而变化。使用变址功能时,表示为 [S] 形式。源操作数不止一个时,可用[S1] 、 [S2] 等表示。
[D] :目标( Destination)(电工之家http://www.pw0.cn)操作数,其内容随执行指令而改变。使用变址功能时,表示为 [D]形式。目标操作数不止一个时,可用 [D1] 、 [D2] 等表示。
[m] 与 [n] :表示其他操作数。常用来表示常数或作为源操作数和目标操作数的补充说明。表示常数时, K 表示十进制, H表示十六进制,注释可用 m1 、 m2 等表示。
功能指令的助记符占一个程序步,每个操作数占 2 个或 4 个程序步( 16 位操作数占 2 个程序步, 32 位操作数占 4个程序步)。
操作数从根本上来说,是参加运算的数据的地址。地址是依元件的类型分布在存储区中。由于不同指令对参与操作的元件类型有一定的限制,操作数的取值就有一定的范围,如图5.28(b) 所示的加法指令的操作数范围。正确选取操作数类型,对正确使用指令有很重要的意义。
2. 功能指令的数据结构
功能指令的操作数的数据长度有 16 位和 32 位两种。构成数据的方法如下:
( 1 )位元件与位元件的组合
只处理 ON/OFF 状态的元件称位元件,如 X 、 Y 、 M 、 S 。位元件 X 、 Y 、 M 、 S等的组合也可以作为数值数据进行处理。将这些位元件组合,以 KnP 的形式表示,每组由 4 个连续的位元件组成, P 为位元件的首地址,n 为组数( n = 1 ~ 8 )。 4 个单元 K4 组成 16 位操作数,如 K 4M 10 表示由 M10~M15 组成的16 位数据。
当一个 16 位数据传送到 K 1M 0 、 K 2M 0 、 K 3M 0时,只传送相应的低位数据,高位数据溢出。
在处理一个 16 位操作数时,参与操作的元件由 K1 ~ K4 指定。若仅由 K1 ~ K3 指定,不足部分的高位作 0处理,这意味着只能处理正数(符号位为 0 )。
被组合的位元件的首元件号可以是任意的,习惯采用以 0 结尾的元件,如 M0 , M100 等。
如图 (b) 所示,功能指令中的操作数可能取 K (十进制常数)、 H (十六进制常数)、 KnX 、 KnY 、 KnM 、 KnS、 T 、 C 、 D 、 V 、 Z 。
( 2 )字元件
处理数据的元件称为字元件,如 T 和 C 的设定值寄存器、当前值寄存器和数据寄存器 D 等,一个字由 16 个二进制位组成。处理 32位数据时,功能指令中用符号 D 表示,如图 5.29 中的( D ) ADD D10 D12 D14,这时相邻的两个数据寄存器组成数据寄存器对,该指令将 D11 和 D10 中的数据与 D13 和 D12 中的数据相加的和传送到D15 和 D14 中去, D10 中为低 16 位数据, D11 中为高 16位数据,为了避免出现错误,建议首地址统一用偶数编号。指令前面没有 D 时表示 16 位数据。 32 位计数器 C200 ~ C255不能用作 16 位指令的操作数。
变址寄存器在传送、比较指令中用来修改操作对象的元件号,其操作方式与普通数据寄存器一样。当操作数据是 32 位时, V 作高 16 位,Z 作低 16 位。(1 )功能指令编号: 功能指令按功能号 FNC00 ~ FNC246 来编号,如图 中的 ①所示。
( 2 )助记符:功能指令的助记符是该指令的英文缩写。如加法指令“ ADDITION ”简写为 ADD , 如图(a) 中的②所示。
( 3 )数据长度:功能指令可按处理数据的长度分为 16 位指令和 32 位指令。其中 32 位指令用( D )表示,无( D)符号的为 16 位指令。图( a )中③表示该指令为 32 位指令。
( 4 )执行形式:功能指令有脉冲执行型和连续执行型两种。指令中标有( P )(图 (a)中的④所示)的为脉冲执行型,在指令表示栏中用“
”警示,如图 ( a )中的⑤所示。脉冲执行型指令在执行条件满足时仅执行一个扫描周期,图 (a) 中,当 X0闭合时,只在一个扫描周期中将加数( D11 、 D10 )和加数( D13 、 D12 )做一次加法运算。连续执行型如图所示,在 X0为 ON 的每个扫描周期都要被重复执行加法运算。在不需要每一个扫描周期都执行时,用脉冲执行方式可缩短程序执行时间。 XCH(数据交换)、 INC (加 1 )、 DEC (减 1)等指令一般应使用脉冲执行方式,若用连续执行时要特别注意,因为在每一个扫描周期内,其结果均在变化。
图 连续执行方式
( 5 )操作数:操作数是功能指令 涉及或产生的数据,如图 (a) 中的⑥所示。它一般由 1 ~ 4个操作数组成,但有的功能指令只有助记符和功能号而不需要操作数。操作数分为源操作数、目标操作数和其它操作数。
[S] :源( Source )操作数,其内容不随指令执行而变化。使用变址功能时,表示为 [S] 形式。源操作数不止一个时,可用[S1] 、 [S2] 等表示。
[D] :目标( Destination)(电工之家http://www.pw0.cn)操作数,其内容随执行指令而改变。使用变址功能时,表示为 [D]形式。目标操作数不止一个时,可用 [D1] 、 [D2] 等表示。
[m] 与 [n] :表示其他操作数。常用来表示常数或作为源操作数和目标操作数的补充说明。表示常数时, K 表示十进制, H表示十六进制,注释可用 m1 、 m2 等表示。
功能指令的助记符占一个程序步,每个操作数占 2 个或 4 个程序步( 16 位操作数占 2 个程序步, 32 位操作数占 4个程序步)。
操作数从根本上来说,是参加运算的数据的地址。地址是依元件的类型分布在存储区中。由于不同指令对参与操作的元件类型有一定的限制,操作数的取值就有一定的范围,如图5.28(b) 所示的加法指令的操作数范围。正确选取操作数类型,对正确使用指令有很重要的意义。
2. 功能指令的数据结构
功能指令的操作数的数据长度有 16 位和 32 位两种。构成数据的方法如下:
( 1 )位元件与位元件的组合
只处理 ON/OFF 状态的元件称位元件,如 X 、 Y 、 M 、 S 。位元件 X 、 Y 、 M 、 S等的组合也可以作为数值数据进行处理。将这些位元件组合,以 KnP 的形式表示,每组由 4 个连续的位元件组成, P 为位元件的首地址,n 为组数( n = 1 ~ 8 )。 4 个单元 K4 组成 16 位操作数,如 K 4M 10 表示由 M10~M15 组成的16 位数据。
当一个 16 位数据传送到 K 1M 0 、 K 2M 0 、 K 3M 0时,只传送相应的低位数据,高位数据溢出。
在处理一个 16 位操作数时,参与操作的元件由 K1 ~ K4 指定。若仅由 K1 ~ K3 指定,不足部分的高位作 0处理,这意味着只能处理正数(符号位为 0 )。
被组合的位元件的首元件号可以是任意的,习惯采用以 0 结尾的元件,如 M0 , M100 等。
如图 (b) 所示,功能指令中的操作数可能取 K (十进制常数)、 H (十六进制常数)、 KnX 、 KnY 、 KnM 、 KnS、 T 、 C 、 D 、 V 、 Z 。
( 2 )字元件
处理数据的元件称为字元件,如 T 和 C 的设定值寄存器、当前值寄存器和数据寄存器 D 等,一个字由 16 个二进制位组成。处理 32位数据时,功能指令中用符号 D 表示,如图 5.29 中的( D ) ADD D10 D12 D14,这时相邻的两个数据寄存器组成数据寄存器对,该指令将 D11 和 D10 中的数据与 D13 和 D12 中的数据相加的和传送到D15 和 D14 中去, D10 中为低 16 位数据, D11 中为高 16位数据,为了避免出现错误,建议首地址统一用偶数编号。指令前面没有 D 时表示 16 位数据。 32 位计数器 C200 ~ C255不能用作 16 位指令的操作数。
变址寄存器在传送、比较指令中用来修改操作对象的元件号,其操作方式与普通数据寄存器一样。当操作数据是 32 位时, V 作高 16 位,Z 作低 16 位。程序很简单,目的是在仿真软件上练习FC的使用。编写的程序是设定电机的星三角启动时间(xing_time)和电机运行时间(san_time),程序如图。现在的问题是分别调用功能块时,设定两组不同的时间,但效果都是一样,不知什么问题。(程序调试过很多次,都没问题)
答: 你的FC功能块了调用了全局变量!出现上述问题!
如果要把你个FC功能块作为通用的块来调用,就要全部运用局部变量来编程。
在引用FC的时候,只需要向相应的管脚填写相应变量即可!
全局变量和局部变量的区别:
全局变量就就是在整个程序中都有效,内存中有固定的存储地址,局部变量只是在某个程序块中有效,只有在调用该程序块时,系统才为它在内存中分配存储空间,该程序块调用结束时,它的存储地址将不再有效,可能被分配给别的变量,也可能处于空闲状态。
你现在的功能块是无条件调用的,而你的定时器是同一个定时器,你让一个定时器,有两个设定值,怎么能正确呢,建议将两个FC1的前面加两个按钮,注意不要调用FC1,这样应该就OK 了
目前,PLC(可编程逻辑控制器)已经广泛应用于钢铁、石油、化工、电力、建材、机械制造、汽车、轻纺、交通运输、环保及文化娱乐等各个行业,它具有高可靠性、抗干扰能力强、功能强大、灵活,易学易用、体积小,重量轻,价格便宜的特点,在流量计量方面也有着广泛的用途,在用于流量累积时又有其编程的独特之处,下面进行详细的分析和论述,包括在西门子S7-200CPU上编程的例子。
流量计输出的信号一般是脉冲信号或4-20mA电流信号,这两种信号输出的都是瞬时流量(也有用继电器输出累积量信号,原理一样,不再赘述),我们的目的是在PLC中计算和显示瞬时流量值和计算累积量值,当输入信号是脉冲信号是,在计算瞬时流量的时候,必须按照一个严格的时间间隔计算才能保证瞬时流量的准确性,计算瞬时流量的时候必须用定时中断来进行,在PLC系统中只能运行这一个中断程序,不允许再产生其它中断(是低优先级的中断也不允许运行),以防止干扰定时中断的时间间隔的准确性,计算瞬时流量就是将这个时间段的累计脉冲个数换算成累计流量,再除以时间就是瞬时流量,对于4-20mA输入只需按照其对应的量程进行换算就可以直接得到瞬时流量,而累积流量就是将每个时间段内的累积流量累加起来就是累积流量,在实际使用PLC编程的过程中必须注意以下几个问题:
1. 输入脉冲频率范围是否超出PLC接收的范围;
2. PLC高速计数器在达到大计数值时如何保证计算正确;
3. 如何保证定时中断不受干扰;
4. 如何避免计算累积量的误差;
5. 累积量的大累积位数;
6. 如何复位累积量;
下面就关键的2,4,6问题进行详细的叙述,以西门子S7-200CPU224为例,S7-200的CPU224具有6个单相大30kHz的高速计数器,但PLC内部没有提供相应的算法来计算频率,需要自己编程计算,这就需要在PLC高速计数器在达到大计数值时要保证计算的正确性,实际编程时,对高速计数器初始化以后就使之连续计数,不再对其进行任何干预,其高速计数器的初始化程序如下:
注意:此段程序应该放到PLC个扫描周期执行的程序中执行。
对于高速计数器是否达到大计数值时需要判断,S7-200CPU的高速计数器是可以周而复始的进行累计的,高位为符号位,小值为7FFFFFFF,由于计数器是一直累加的,不可能出现本次读取的的计数值小于上次的计数值,判断计数器当前值是否小于前一次的计数值,就可以判断计数是否达到大值的拐点(7FFFFFFF),如果达到,则执行特殊的计算以便消除计算错误,如下列程序所示,当当前计数值大于等于上次计数值时,两个计数值做差,就得到程序两次扫描时间间隔内的计数差值,将当前计数值赋值到上次计数值上;当当前计数值小于上次计数值时,计算上次计数值与7FFFFFFF之间的差值(用减法),以及当前计数值和7FFFFFFF之间的差值(用加法),将两个结果相加就是程序两次扫描时间间隔内的计数差值,从而实现对对累计计数值达到拐点时的正确计算。
注:此程序应放在定时中断子程序中执行。
实际上,在现场应用中定时中断子程序是采用250ms中断一次执行的,使用SMB34进行控制的,需要注意的是,系统中必须只保证这个中断是唯一存在的,不会受到其他中断的影响,否则可能会由于其他中断的影响使周期性中断不准时,从而影响精度。
通过以上计算就得到了250ms内流量计发过来的脉冲个数,这个数值乘以脉冲当量就是250ms内的流量值,再除以时间就是瞬时流量,在250ms内再执行累加程序就可以计算累积流量了,在计算累积流量过程中需要避免累积过程的的计算误差,我们知道,流量累积量是一直累积的一个数值,一般会累积到8位数,而PLC内部的浮点数的有效位数是6位,当累积量数值很大的时候就会造成一个大数和一个小数相加,势必导致小数的有效位数丢失,造成很大的累积误差,要避免大数和小数相加的情况出现,解决方法是采用多个流量累积器,只允许同数量级的数值相加,从而避免数值有效位数损失,实际编程中采用了5个累积器,根据常用流量情况下,在周期中断时间间隔(250ms)内流过的流量乘以15作为个累积器的上限,当达到这个累积器的上限值后,将这个累积器的值累加到第2个累积器中,并把个累积器清零,对于第三个累积器也同样处理,第4个累积器用于保存累积量小数部分数值,第5个累积器用于保存累积量整数部分数值,这样在显示总累积量时只需显示整数部分和小树部分就可以了,整个过程充分避免了累积过程中大数与小数相加的情况出现,在实际工程中,需根据流量的大小、周期中断的时间间隔来确定所用累积器的个数,而累积器的整数部分用双整数来表示,双整数的范围是-2,147,483,648到+2,147,483,647,可以使累积器的整数位数达到9位,这样,在显示累积量时就可以多显示9位整数的累积量和6位的小数累积量。总计15位,从而省略累积器倍乘系数,使读数更简便。
对累积器需要在一定条件下复位,累积到大数值或手动复位,在中断程序中判断累积量是否达到超过大位数,当超过大数值时,将各个累积器清零,清零的触发信号也可以是手动触发