产品描述
大连西门子中国代理商触摸屏供应商
对于plc用户来说,在编写用户程序或选择设备时,清楚下面介绍的三个阶段,即用户程序执行过程的原理。
PLC采用集中处理的方法,即对输入扫描信号、执行用户程序和输出刷新都采用集中分批处理的工作方式。
(1)输入扫描 在这一阶段中,PLC以扫描方式读入所有输入端子上的输入信号,并将输入信号存入输入映像区,输入映像存储器被刷新。在程序执行阶段和输出刷新阶段中,输入映像存储器与外界隔离,其内容保持不变,直至下一个扫描周期的输入扫描阶段,才被重新读入的输入信号刷新。可见,PLC在执行程序和处理数据时,不直接使用现场当时的输入信号,而使用本次采样时输入到映像区中的数据。如果输入设备能使PLC输入端形成闭合回路,对应输入端编号的内部输入继电器内保存为“1”,即相当于继电器线圈导通。在程序执行过程中,该编号对应的触点动作;如果输入设备能使输入开路,则对应输入端编号的内部输入继电器内保存为“0”,即相当于继电器线圈没导通,在程序执行过程中,该编号对应的触点不动作。如果在PLC处于非输入扫描的阶段,PLC外的输入设备状态发生了变化,内部输入继电器也不会发生变化,要等到下一个输入扫描阶段才能根据此时的输入状态来刷新。所以,对于少于十几毫秒的输入信号,经常采集不到。
(2)执行程序 在执行用户程序过程中,PLC按梯形图程序顺序自上而下、从左至右逐个扫描执行,即按助记符指令表的先后顺序执行。但遇到程序跳转指令,则根据跳转条件是否满足来决定程序跳转地址。程序执行过程中,PLC从输入映像区中取出输入变量的当前状态,然后进行由程序确定的逻辑运算或其他运算,根据程序指令将运算结果存入相应的内部继电器中,包括输出继电器、内部辅助继电器、定时器、计数器等。输出继电器的信号存放在输出映像区,即输出继电器与PLC外部的同编号的输出点对应。
在程序执行过程中,同一周期内,的逻辑结果影响后面的触点,即后执行的程序可能用到的新中间运算结果;但同一周期内,后面的运算结果不影响的逻辑关系。该扫描周期内除输入继电器以外的所有内部继电器的终状态(导通与否),将影响下一个扫描周期各触点的开与闭。
(3)输出刷新 程序执行阶段的运算被存入输出映像区,而不送到输出端口上。在输出刷新阶段,PLC将输出映像区中的输出变量送入输出锁存器,然后由锁存器通过输出模块产生本周期的控制输出。如果内部输出继电器的状态为“1”,则输出继电器触点闭合。全部输出设备的状态要保持一个扫描周期。
关于模拟量的控制本人认为用plc有点费劲,虽然是可以实现但很繁琐,因为PLC算四则混和运算不是长项,例如你让PLC算A+B*C-D,它要分4步完成,无法一次全部处理完。运算的多了,编写程序就会很费劲,用语句编写还好点,若用梯形图因电脑屏幕有限很容易把程序员弄蒙!下面说说我对PLC模拟控制的一些想法:
一:模拟量的输入
实际工作中我都会将模拟量信号转为标准信号,如果它本身就是标准信号好,否则我会给它加变送器,例如温度采集时,我就用温度变送器将热电偶的信号转换为4-20MA电流信号或1-10V电压信号。(好像有直接采集温度的模块,但我没用过)如果可以尽量采用电流信号,这样干扰会小一些。信号线采用有屏蔽层的那种。然后就要考虑滤波问题了,因为干扰的存在,所以滤波。滤波方法有很多种:求平均值法,低通法等大概有10种左右,有时候要多种方法一起用。这要看你现场干扰情况了,实在不行在输入端并个电容,硬件滤波。这样我们将得到一个比较平和的模拟量,也就是我们要控制的那个量,温度,压力,流量,电压,电流等模拟量都可以这么采集,频率我不知道是不是有频率变送器,没用过,但是频率在不是很高的时候可以由开关量输入端输入,频率高了可以采用高速计数器,再高了我就不知道了。
二:给定值的输入
可以采用人机界面直接将给定值写到PLC的寄存器,也可以用电位器将电压信号传给PLC,也可以用上位机(电脑或其他设备)经网络传过来。
三:控制过程
根据所控制的模拟量的不同,所选的元件也不同。例如说温度,分为加热和制冷,加热要用加热管,制冷要用压缩机。压力如果是液压站的压力可以选比例溢流阀,流量控制要用电动蝶阀之类的阀,电压和电流可以是步进电机带动电位器的方法实现。应根据模拟量的不同选则合适的元件。以烤箱为例说明:设给定值为100摄氏度。我们需要的主要元件有加热管,固态继电器。在开始工作的初期因为温度是20度左右这时候加热管可以全功率运行,我们可以以1秒为单位,控制加热的速度,比如说0.9秒加热,0.1秒停电加热会很快。如果0.1秒加热,0.9秒停电加热就会慢。根据反馈回来的温度信号,我们可以改变这个比例。如果温度100我们可以断电,温度80我们可以通电,当温度到达80和100之间时再用这个比例让温度趋近于100.即使PLC能实现这些但实际工作中我也不会采用,你也看到了这种控制多么复杂,没有100步也得有50步,我肯定会蒙圈的。
四:建议
再实际工作中我都是采用的这样的方法,PLC加仪表的方法,比如说温度控制,我就用一块温控表去控制温度,因为它也可以驱动固态继电器或是其他元件,而且相当,滤波效果好,比PLC好10倍。而且它是PID控制的,我不用考虑哪些复杂的运算过程,在这里PLC只是将一个触点连接到温控表的控制线上,这样只有PLC触点吸合,温控表才能控制固态继电器,固态继电器才能给加热棒供电。其他的模拟量也可以采用这样的方法。如果PLC需要哪些数据用来存储,可以让仪表将那个数发给PLC或是给PLC提供一个标准信号。PLC也可以把设定值传给仪表,一般仪表的面板上都是可以设定给定值的。这样PLC起到的作用有两个负责启动停止和存储数据。而控制过程交给仪表。(如果你想要具体PLC控制模拟量的算法,你把条件写的清楚些,例如具体多少度,多少流量,如果我把所有的模拟量算法都写出来估计100000字都够呛说明白,不好意思了,另外模拟量控制一般都是用PID,而且具体问题还得具体分析,不是随便写个数就能用的)
(一)数字量输入和输出映象区
1.输入映象寄存器(数字量输入映象区)(I)
数字量输入映象区是S7-200 CPU为输入端信号状态开辟的一个存储区。输入映像寄存器的标志符为I,在每个扫描周期的开始,CPU对输入点进行采样,并将采样值存于输入映象寄存器中。
输入映象寄存器是plc接收外部输入的开关量信号的窗口。
可以按位、字节、字、双字四种方式来存取。
(1)按“位”方式:从I0.0-I15.7,共有128点
(2)按“字节”方式:从IB0-IB15,共有16个字节
(3)按“字”方式:从IW0-IW14,共有8个字
(4)按“双字”方式:从ID0-ID12,共有4个双字
2.输出映象寄存器(Q)
数字量输出映象区是S7-200 CPU为输出端信号状态开辟的一个存储区。输出映像寄存器的标识符为Q(从Q0.0-Q15.7,共有128点),在每个扫描周期的末尾,CPU将输出映像寄存器的数据传送给输出模块,再由后者驱动外部负载。
可以按位、字节、字、双字四种方式来存取。
(1)按“位”方式:从Q0.0-Q15.7,共有128点
(2)按“字节”方式:从0-15,共有16个字节
(3)按“字”方式:从QW0-QW14,共有8个字
(4)按“双字”方式:从QD0-QD12,共有4个双字
(二)模拟量输入映象区和输出映象区
1.模拟量输入映象区(AI区)
模拟量输入映象区是S7-200 CPU为模拟量输入端信号开辟的一个存储区。S7-200将测得的模拟量(如温度、压力)转换成一个字长(2个字节)的数字量,模拟量输入映像寄存器用标识符(AI)、数据长度(W)及字节的起始地址表示。
从AIW0-AIW30,共有16个字,总共允许有16路模拟量输入。
说明:模拟量输入值为只读数据。
2.模拟量输出映象区(AQ区)
模拟量输出映象区是S7-200 CPU为模拟量输出端信号开辟的一个存储区。S7-200将1个字长(2个字节,16位)的数字量按比例转换为电流或电压。模拟量输出映像寄存器用标识符(AQ)、数据长度(W)及字节的起始地址表示。
从AQW0-AQW30,共有16个字,总共允许有16路模拟量输出。
(三)变量存储器(V)(相当于内辅继电器)
PLC执行程序过程中,会存在一些控制过程的中间结果,这些中间数据也需要用存储器来保存。变量存储器就是根据这个实际的要求设计的。变量存储器是S7-200 CPU为保存中间变量数据而建立的一个存储区,用V表示。
可以按位、字节、字、双字四种方式来存取。
(1)按“位”方式:从V0.0-V15119.7,共有40960点。CPU221、CPU222变量存储器只有2048个字节,其变量存储区只能到V2047.7位。
(2)按“字节”方式:从VB0-VB5119,共有5120个字节
(3)按“字”方式:从VW0-VW5118,共有2560个字
(4)按“双字”方式:从VD0-VD5116,共有1280个双字
(四)位存储器(M)区
PLC执行程序过程中,可能会用到一些标志位,这些标志位也需要用存储器来寄存。位存储器就是根据这个要求设计的。位存储器是S7-200 CPU为保存标志位数据而建立的一个存储区,用M表示,用M表示。该区虽然叫位存储器,但是其中的数据不仅可以是位,还可以是字节、字或双字。
(1)按“位”方式:从M0.0-M31.7,共有256点。
(2)按“字节”方式:从MB0-MB31,共有32个字节
(3)按“字”方式:从MW0-MW30,共有16个字
(4)按“双字”方式:从MD0-MD28,共有8个双字
(五)顺序控制继电器区(S)
PLC执行程序过程中,可能会用到顺序控制。顺序控制继电器就是根据顺序控制的特点和要求设计的。顺序控制继电器区是S7-200 CPU为顺序控制继电器的数据而建立的一个存储区,用S表示。在顺序控制过程中,用于组织步进过程的控制。
可以按位、字节、字、双字四种方式来存取。
(1)按“位”方式:从S0.0-S31.7,共有256点
(2)按“字节”方式:从SB0-SB31,共有32个字节
(3)按“字”方式:从SW0-SW30,共有16个字
(4)按“双字”方式:从SD0-SD28,共有8个双字
(六)局部存储器区(L)(相当于内辅继电器)
S7-200 PLC有64个字节的局部存储器,其中60个可以用作暂时存储器或者给子程序传递参数。
局部存储器和变量存储器很相似,主要区别是变量存储器是全局有效的,而局部存储器是局部有效的。全局是指同一个存储器可以被任何程序存取(例如,主程序、子程序或中断程序)。局部是指导存储器区和特定的程序相关联。
几种程序之间不能互访。
局部存储器区是S7-200 CPU为局部变量数据建立的一个存储区,用L表示。该区域的数据可以用位、字节、字、双字四种方式来存取。
(1)按“位”方式:从L0.0-L63.7,共有512点。
(2)按“字节”方式:从LB0-LB63,共有64个字节
(3)按“字”方式:从LW0-LW62,共有32个字
(4)按“双字”方式:从LD0-LD60,共有16个双字
(七)定时器存储器区(T)
PLC在工作中少不了需要计时,定时器就是实现PLC具有计时功能的计时设备。定时器的编号:
T0、T1、.....、T255
S7-200有256个定时器
(八)计数器存储器区(C)
PLC在工作中有时不仅需要计时,还可能需要计数功能。计数器就是PLC具有计数功能的计数设备。
计数器的编号:C0、C1、......、C255
(九)高速计数器存储器区(HSC)
高速计数器用来累计比CPU扫描速率快的事件。S7-200各个高速计数器计数频率高达30kHz。
S7-200各个高速计数器有32位带符号整数计数器的当前值。若要存取高速计数器的值,则给出高速计数器的,即高速计数器的编号。
告诉计数器的编号为:HSC0、HSC1、......、HSC5。
S7-200有6个高速计数器。其中的CPU221和CPU222仅有4个高速计数器(HSC0、HSC3、HSC4、HSC5)
(十)累加器存储器区(AC)
累加器是可以像存储器那样进行读/写的设备。例如,可以用累加器向子程序传递参数,或从子程序返回参数,以及用来存储计算的中间数据。
S7-200CPU提供了4个32位累加器(AC0、AC1、AC2、AC3)。
可以按字节、字或双字来存取累加器数据中的数据。但是,以字节形式读/写累加器中的数据时,只有读/写累加器32位数据中的8位数据。如果是以字的形式读/写累加器中的数据时,才能一次读写全部32位数据。
因为PLC的运算功能是离不开累加器的。因此不能像占用其他存储器那样占用累加器。
(十一)特殊存储器区(SM)
特殊存储器是S7-200 PLC为CPU和用户程序之间传递信息的媒介。它们可以反映CPU在运行中的各种状态信息,用户可以根据这些信息来判断机器工作状态,从而确定用户程序该做什么,不该做什么。这些特殊信息也需要用存储器来寄存。特殊存储器就是根据这个要求设计的。
1.特殊存储器区
它是S7-200为保存自身工作状态数据而建立的一个存储区,用SM表示。特殊存储器区的数据有些是可读可写的,有一些是只读的。特殊存储器区的数据可以是位,也可是字节、字或双字。
(1)按“位”方式:从SM0.0-SM179.7,共有1440点。
(2)按“字节”方式:从SM0-SM179,共有180个字节。
(3)按“字”方式:从SMW0-SMW178,共有90个字
(4)按“双字”方式:从SMD0-SMD176,共有45个双字
说明:特殊存储器区的头30个字节为只读区。
2.常用的特殊继电器及其功能
特殊存储器用于CPU与用户之间的交换信息,例如SM0.0一直为“1”状态,SM0.1仅在执行用户程序的个扫描周期为“1”状态。
SM0.4和SM0.5分别提供周期为1min和1s的时钟脉冲。SM1.0、SM1.1和SM1.2分别是零标志、溢出标志和负数标志
目前,PLC(可编程逻辑控制器)已经广泛应用于钢铁、石油、化工、电力、建材、机械制造、汽车、轻纺、交通运输、环保及文化等各个,它具有高性、抗干扰能力强、功能强大、灵活,易学易用、体积小,重量轻,价格的特点,在流量计量方面也有着广泛的用途,在用于流量累积时又有其编程的特之处,下面进行详细的分析和论述,包括在西门子S7-200CPU上编程的例子。
流量计输出的信号一般是脉冲信号或4-20mA电流信号,这两种信号输出的都是瞬时(也有用继电器输出累积量信号,原理一样,不再赘述),我们的目的是在PLC中计算和显示瞬时流量值和计算累积量值,当输入信号是脉冲信号是,在计算瞬时流量的时候,按照一个严格的时间间隔计算才能保证瞬时流量的准确性,因此,计算瞬时流量的时候用定时中断来进行,而且,在PLC系统中只能运行这一个中断程序,不允许再产生其它中断(即使是低级的中断也不允许运行),以防止干扰定时中断的时间间隔的准确性,计算瞬时流量就是将这个时间段的累计脉冲个数换算成累计流量,再除以时间就是瞬时流量,对于4-20mA输入只需按照其对应的量程进行换算就可以直接得到瞬时流量,而累积流量就是将每个时间段内的累积流量累加起来就是累积流量,在实际使用PLC编程的过程中注意以下几个问题:
1. 输入脉冲频率范围是否出PLC接收的范围;
2. PLC高速计数器在达到大计数值时如何保证计算正确;
3. 如何保证定时中断不受干扰;
4. 如何避免计算累积量的误差;
5. 累积量的大累积位数;
6. 如何复位累积量;
下面就关键的2,4,6问题进行详细的叙述,以西门子S7-200 CPU224为例,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位,从而省略累积器倍乘系数,使读数简便。
对累积器需要在一定条件下复位,累积到大数值或手动复位,在中断程序中判断累积量是否达到过大位数,当过大数值时,将各个累积器清零,另外清零的触发信号也可以是手动触发。
产品推荐