西门子PLC中如何解决流量累积问题
PLC计算流量累计不准?本文解释得很清楚!实例讲解程序!

PLC计算流量累计不准?本文解释得很清楚!实例讲解程序!以前我们讲过西门子S7-200在流量累计中的应用,今天我们来学习一下S7-300系列的应用。
打开今日头条,查看更多图片理论来说,博途系列PLC的编程思路与S7-300一致,只是软件有一些区别而已。
那么PLC计算累计流量有多种方法。
常用的有使用中断计算和脉冲数计算。
今天我们来学习一下利用中断计算。
项目实例,A厂有一燃气流量机,需要使用该表计算其燃气用量。
思路大概如下;因PLC可以接收到其时时流量,因此可以使用100ms的中断去累加该流量,当然1s的中断也可以,不过扫描周期越短,数值越精确。
例如;一块流量计的瞬时流量是10m3/h,那么将该流量值除以36000,那就是100ms的流量,每100ms将该值累加,得到的数值就是累计量,理论来说,中断时间越短,数值越精确。
但考虑PLC负担也增加,因此建议使用100ms-1s的中断。
然后我们进行实例解说。
一流量计信号接线,流量计一般使用模拟量输入的方式连接,如果是电流信号则分为两线制和四线制,二线制信号是指;信号的两根线既是电源线又同时是信号线。
二线制的优点是接线简单,只适用一般功率小的一次传感器,如:压变、差压变、温变、电容式液位计、射频导纳、电磁流量计、涡街流量计等。
传感器本身用电由二线制中得到,是必影响其带载能力。
四线制信号是指;电源两根线,信号两根线。
电源和信号是分开工作的。
四线制的优点是由于是将电源和功率分开,所以本机的功率与信号是没有功率上的关联的,适用于大功率的的传感器,如超声波(由于其为了加大抗干扰能力,所以发射的功率会很大,所以此款产品选型时要尽量四线的,二线的一般抗干扰能力较弱),就不能作成2线的,只能是4线,分别是工作电源2个,输出2个。
按照流量计要求将模拟量信号接入到PLC系统。
二编程;打开程序该程序包含OB1,OB35,FB1,FC105,DB1。
其中OB1是PLC程序必备,对于本实例不需要,空程序即可。
使用PLC做流量累积方法

使用PLC做流量累积方法使用P L C做流量累积首先必须明确,用PLC做流量累计的精度远不如电磁等本身自带累计功能的流量计。
对有累积功能的流量计转换器,一般流量转换器的流量累积输出是脉冲输出,这样,可通过PLC的高速脉冲输入端进行高速计数,从而得出累积流量。
如果不使用高速脉冲通道采集,而使用普通的DI通道进行脉冲采集,要注意脉冲的宽度,宽度太窄的脉冲,PLC的采集是有困难的。
对只有瞬时流量输出的流量计,才考虑在PLC中用定时脉冲进行流量累积加法运算,但要注意数据存储区中数值的溢出问题。
以AB公司的PLC为例,对于CONTROLLOGIX系统,应使用周期性Task进行累积计算,对于SLC500系列的PLC则使用中断的方法。
在PLC内做累积的时候,不应使用定时器来做,那样加出来数据的误差是大的不能承受的。
流量计的数值单位应用的较多的是m3/h。
在PLC内可以每秒钟采一次样,进行累加,再将累加值除以3600,即得到每小时的累积值。
在PLC上做累积的时候还应注意停电后累积流量要能保存,累积数值的自动和手动清零问题也必须考虑,免得溢出。
对于某些需要温压补偿的流量计,流量数据应在处理好后再进行累积,而不能直接使用流量计本身的瞬时值。
SLC500的累积程序示例:除了以上程序,再在主程序中使用MOV 或其它指令实现对累积值的清零。
附:STI 参数的设置STI: 可选定时中断允许用户以特定的周期自动中断主程序文件,扫描一个指定的子程序文件1. 创建一个子程序2. 在S:31内输入可选定时中断STI子程序文件的文件号,如文件号为0,则禁止中断功能。
3.在S:30内输入设定值(两次连续中断的时间间隔).对于5/04,范围是1-32767ms,以ms为单位。
中断STI精度位S:2/10,为1时,单位为ms。
为0时,单位10ms 4.设定值必须长于STI子程序文件执行的时间长,否则次要故障位被置位。
为了表示可选定时中断子程序,在子程序文件的第一梯级的第一条指令应是INT指令。
在PLC中实现高精度流量累积运算的方法

在PLC中实现高精度流量累积运算的方法时间:2009-6-12 15:38:501 引言中国石化股份有限公司广州分公司6号罐区监控系统于2001年由常规仪表改造为PLC系统。
其中工艺要求在监控系统中对瞬时流量FI101进行累积显示。
经过对该流量累积的运算方法的多次测试,找到了在运算中最大限度减少误差的方法,并在逻辑梯形图成功实现累积运算。
2 监控系统简介广州石化6#罐区监控系统采用ROCKWELL公司的可编程控制器和人机界面软件,用于实现对该液态烃罐区的24个球罐的各种工艺参数的实时监控、报警、联锁等功能。
该系统从2000年10月开始设计,2001年4月系统安装、组态、调试工作全面完工。
该系统人机界面采用Rockwell software公司开发的RSView32软件。
RSView32基于Microsoft Windows NT和Windows 95/98平台设计,是一种易用的、可集成的,基于组件的人机对话系统,在编制人机交互界面方面具有极大的灵活性和极强的功能。
控制器采用ControlNet PLC-5/40C处理器热备系统。
ControlNet PLC-5/40C处理器是PLC5系列中的新技术产品,处理器及I/O系统可以通过Redundant ControlNet总线交换数据。
6#罐区监控系统将1号PLC和2号PLC配置为冗余控制器。
在正常状态下,只有主处理器的输出数据对I/O系统进行控制,主从处理器通过ControlNet交换数据及状态保持同步,如果主处理器出错,从处理器将接替主处理器对网络及对I/O系统进行控制。
该PLC系统DI点采用1771-IBD开关量输入模块,DO点采用1771-OW16开关量输出模块,AI点采用1771-IFE模拟量输入模块,16点单边输入。
采用1785-CHBM作为处理器热备模块,1771-ACNR15为带冗余网口的ControlNet适配器模块。
本系统有3台上位机,其中2台为操作站,1台为工程师站。
plc处理流量信号

plc处理流量信号
通过fc6000流量结算仪,读取流量信号,通过ai模块经过plc处理在hmi画面上显示瞬时流量和累计值。
使用中发现当流量较小时,累计值没有变化,不知如何解决,最好有一个实例。
谢谢!
最佳答案
这是因为流量较小时,小时流量就会很小,然后你的累计流量很大,这样在浮点数运算时,大数和小数想加,使小数被大数吃掉,造成累计流量不懂,你可以把累计流量的小数取整,然后和累计流量想减,然后将瞬时流量取整,然后将小数部分相加,然后在加到累计流量中,可以避免这样的问题出现。
基于西门子PLC300的流量累计程序实例

基于西门子PLC300流量累计的程序【在工业中往往会遇到业主要求做流量累积程序,比如要求检测到每月天然气用量,石油采集量,生产材料的多少,针对这些情况,PLC300往往做得多不是很精准,下面我介绍一个精度相对比较高的程序】由于有些地方采用T型图很难实现STL方便复制,本例采用STL 来编写更加方便本例采用OB35中断程序来实现,OB35中断时间为100ms,这个CALL "FLOWCOUNT"Reset :=M11.0instantF :=MD120Cycle :=1.000000e+002LimitF :=0.000000e+000INTF :=MD124DECF :=MD128Error :=MD132BEFORE :=MD136FC200 【FLOWCOUNT】功能块针对流量累积计算的算法原理是:积分量:就是当前中断程序执行的周期时间内的流量总和当前积分量= 积分量+ 以前的计算误差当前累积量= 当前积分量+ 原累积量>=DO #ResetJCN A7d0L L#0T #INTFL 0.000000e+000T #DECFT #Error // 如果累积量大于清零值或者清零键复位,则所以的清零重新累积A7d0: L #instantFL #BEFORE+RL 2.000000e+000/RT #Average //当前周期与上周期采样的值平均L #AverageL #LimitF>=RJCN A7d1L #LimitFT #FlowmeterValueSmallAltL #AverageL #Cycle*RL 3.600000e+006/RL #Error+RT #IntegralL #IntegralL #FlowmeterValueSmallAlt+RT #DECFL #FlowmeterValueSmallAltL #DECF-RL #Integral+RT #ErrorA7d1: L #DECFL 1.000000e+000>=RJCN A7d2L #DECFRNDL #INTF+DT #INTFL #DECFRNDDTR //将ACCU 1与ACCU 2互换L #DECFTAK-RT #DECFA7d2: L #instantFT #BEFORECLR //计算的误差A L 12.1SA VEBE一些指令说明:1.TAK 将ACCU 1与ACCU 2互换目录ACCU 1ACCU 2执行TAK指令之前<MW12><MW10>执行TAK指令之后<MW10><MW12>2.DTR 将长整型(32位)转换为浮点数(32位IEEE 754)例子:STL解释L MD10//将32位整数载入ACCU 1。
基于西门子PLC300的流量累计程序实例

基于西门子PLC300流量累计的程序【在工业中往往会遇到业主要求做流量累积程序,比如要求检测到每月天然气用量,石油采集量,生产材料的多少,针对这些情况,PLC300往往做得多不是很精准,下面我介绍一个精度相对比较高的程序】由于有些地方采用T型图很难实现STL方便复制,本例采用STL 来编写更加方便本例采用OB35中断程序来实现,OB35中断时间为100ms,这个CALL "FLOWCOUNT"Reset :=M11.0instantF :=MD120Cycle :=1.000000e+002LimitF :=0.000000e+000INTF :=MD124DECF :=MD128Error :=MD132BEFORE :=MD136FC200 【FLOWCOUNT】功能块针对流量累积计算的算法原理是:积分量:就是当前中断程序执行的周期时间内的流量总和当前积分量= 积分量+ 以前的计算误差当前累积量= 当前积分量+ 原累积量>=DO #ResetJCN A7d0L L#0T #INTFL 0.000000e+000T #DECFT #Error // 如果累积量大于清零值或者清零键复位,则所以的清零重新累积A7d0: L #instantFL #BEFORE+RL 2.000000e+000/RT #Average //当前周期与上周期采样的值平均L #AverageL #LimitF>=RJCN A7d1L #LimitFT #FlowmeterValueSmallAltL #AverageL #Cycle*RL 3.600000e+006/RL #Error+RT #IntegralL #IntegralL #FlowmeterValueSmallAlt+RT #DECFL #FlowmeterValueSmallAltL #DECF-RL #Integral+RT #ErrorA7d1: L #DECFL 1.000000e+000>=RJCN A7d2L #DECFRNDL #INTF+DT #INTFL #DECFRNDDTR //将ACCU 1与ACCU 2互换L #DECFTAK-RT #DECFA7d2: L #instantFT #BEFORECLR //计算的误差A L 12.1SA VEBE一些指令说明:1.TAK 将ACCU 1与ACCU 2互换目录ACCU 1ACCU 2执行TAK指令之前<MW12><MW10>执行TAK指令之后<MW10><MW12>2.DTR 将长整型(32位)转换为浮点数(32位IEEE 754)例子:STL解释L MD10//将32位整数载入ACCU 1。
西门子PLC的累积流量算法

流量累计例程使用说明Author: SLC A&D CSVersion: V1.0例程功能:完成对实时流量的累计功能程序结构:在循环中断组织块OB35中调用功能块FB1,FB1的背景数据块为DB1例程说明:1. 在例程中配置了一个S7-300站,并添加了一块SM331模板,假定流量计的4-20mA输出信号接至该模板0通道,地址为PIW256。
2. 在硬件配置中CPU的属性界面下设置循环中断组织块OB35的周期为1000ms,即1秒钟。
3. FB1为封装的流量累计子程序,在OB35中调用FB1,其背景数据块为DB1。
FB1的输入/输出管脚需逐个定义,具体说明如下:FB1输入变量:Flow_in : INT ; //流量信号的模拟量输入地址,在例程中为PIW256Hi_limit : REAL ; //流量信号的工程量上限,在例程中为3600.0m3/hLow_limit : REAL ; //流量信号的工程量下限,在例程中为0.0m3/hDivision : DINT ; //实时流量时间单位的除数,如欲每秒计算一次累计流量,则该值为3600,因为实时流量时间单位为h,即小时,一小时为3600秒。
注意:OB35的周期必须与计算累计流量的周期相同。
Clear : BOOL ; //累计流量清零FB1输出变量:Flow_rt : REAL ; //转换为工程单位的实时流量Flow_Accu : REAL ; //当前累计流量值4. 将硬件配置及程序下载至CPU后,CPU将每秒计算一次累计流量,并将当前实时流量和累计流量值分别输出至MD2和MD6供读取。
如想将当前累计流量清零,只需将Clear管脚置“1”,该管脚为高电平有效。
使用方法:将例程中FB1, DB1拷贝至您的项目中某S7-300/-400站下的Blocks中,在OB35中调用,按照上述说明定义FB1的输入/输出管脚即可。
新方案-PLC通过累积流量网关精确获取流量计的累积流量(累计流量)

目前,PLC(可编程逻辑控制器)已经广泛应用于钢铁、石油、化工、电力、建材、机械制造、汽车、轻纺、交通运输、环保及文化娱乐等各个行业,它具有高可靠性、抗干扰能力强、功能强大、灵活,易学易用、体积小,重量轻,价格便宜的特点,在流量计量方面也有着广泛的用途,在用于流量累积时又有其编程的独特之处,下面进行详细的分析和论述,包括在西门子S7-200CPU上编程的例子。
流量计输出的信号一般是脉冲信号或4-20mA电流信号,这两种信号输出的都是瞬时流量(也有用继电器输出累积量信号,原理一样,不再赘述),我们的目的是在PLC中计算和显示瞬时流量值和计算累积量值,当输入信号是脉冲信号是,在计算瞬时流量的时候,必须按照一个严格的时间间隔计算才能保证瞬时流量的准确性,因此,计算瞬时流量的时候必须用定时中断来进行,而且,在PLC系统中只能运行这一个中断程序,不允许再产生其它中断(即使是低优先级的中断也不允许运行),以防止干扰定时中断的时间间隔的准确性,计算瞬时流量就是将这个时间段的累计脉冲个数换算成累计流量,再除以时间就是瞬时流量,对于4-20mA输入只需按照其对应的量程进行换算就可以直接得到瞬时流量,而累积流量就是将每个时间段内的累积流量累加起来就是累积流量,在实际使用PLC编程的过程中必须注意以下几个问题:1. 输入脉冲频率范围是否超出PLC接收的范围;2. PLC高速计数器在达到最大计数值时如何保证计算正确;3. 如何保证定时中断不受干扰;4. 如何避免计算累积量的误差;5. 累积量的最大累积位数;6. 如何复位累积量;对于高速计数器是否达到最大计数值时需要判断,S7-200CPU的高速计数器是可以周而复始的进行累计的,最高位为符号位,最小值为7FFFFFFF,由于计数器是一直累加的,不可能出现本次读取的的计数值小于上次的计数值,因此判断计数器当前值是否小于前一次的计数值,就可以判断计数是否达到最大值的拐点(7FFFFFFF),如果达到,则执行特殊的计算以便消除计算错误,如下列程序所示,当当前计数值大于等于上次计数值时,两个计数值做差,就得到程序两次扫描时间间隔内的计数差值,同时将当前计数值赋值到上次计数值上;当当前计数值小于上次计数值时,计算上次计数值与7FFFFFFF之间的差值(用减法),以及当前计数值和7FFFFFFF之间的差值(用加法),然后将两个结果相加就是程序两次扫描时间间隔内的计数差值,从而实现对对累计计数值达到拐点时的正确计算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西门子PLC中如何解决流量累积问题
问题1:自行编写流量累计程序
自行编写流量累计程序的原理,其实就是积分的最原始算法概念,把单位小间隔时间内的瞬时流量乘以单位间隔时间,得到单位小间隔时间内的流量,再把这些小流量累加起来,就的到了累计流量。
在流量累计编程中经常会遇到实数加法问题,实数加法运算的注意事项也应当引起编程人员的重视,请看下例程序(假设其在OB35中被调用,目的为每隔一定时间间隔就累计一次流量)
L MD0 //累计流量存储值
L MD4 //流量瞬时值+R T MD 0
以上的程序是否存在问题?
很多人会认为没有问题,但实际情况是此程序在运行一段时间后就将出现错误。
此程序在运行之初是正常的,因为累计流量初始值及流量瞬时值都为一个很小的浮点数,两数相加后,结果正确。
但是当一段时间后,累计流量的数值逐渐增大,当它与瞬时流量的数值相差很远的时候,两者执行加法操作后,瞬时流量的数值将被忽略掉(如9999990.0与0.2做加法操作)。
其实具备计算机常识的人都应当清楚这一点,这是由于浮点数的存储机制造成的,是所有计算机方面编程都需要考虑的问题。
这个问题可以通过使用二次累加或多次累加的方法来解决。
所以在编程时应避免数量级相差太多的浮点数之间进行运算。
很多人反映“加法指令不好用了”,很有可能就是数量级相差很多的实数进行了加法运算。
问题2:累计流量误差问题
对于积分算法,取小的矩形对流量进行累计,肯定是矩形划分越细,误差越小,不存在误差
是不可能的。
问题3:流量计与PLC构成的系统的误差
流量计有多种多样,下面举些例子:
1、流量计本身没有累计流量功能,但可以把瞬时流量以模拟量的方式(4-20mA)输出。
此时累计流量的最大误差可以估算为:
流量计本身误差* 流量计D/A误差* 模拟量模块A/D误差* PLC流量累计算法误差
假设上面所有误差都是1%,则最后的误差约为:4.06%
1.01*1.01*1.01*1.01=1.0406
对于某些流量计,本身的瞬时流量误差可能就是3%,所以这样的系统累计流量的误差可能还要大些。
2、流量计本身没有累计流量功能,但可以把瞬时流量以数字量的方式输出。
有些流量计提供数字量接口,可以连接PLC的数字量输入模板,流量计每流过一定流量后(例如0.1吨),此输入点就导通一次,PLC就把累计流量累加0.1吨即可。
此类系统避免了A/D,D/A转化的误差,以及PLC累计算法误差。
但是会出现一定时间内累计流量不变化的情况,实时性不好(每0.1吨累积的时间)。
3、流量计本身有累计流量功能,同时可以把瞬时流量以模拟量的方式(例如4-20mA)输出,但无法将累计流量数值送出。
流量计本身累积流量的数值,最后很有可能与PLC的累计流量数值相差很大,原因可能是多方面造成的,除去系统累计流量误差的因素,如果PLC系统检修时,流量计还计量,则PLC无法累积这部分流量。
4、流量计本身有累计流量功能,同时可以通过通信的方式,把瞬时流量及累计流量数值送给PLC。
这种情况最理想,但系统的成本也最高。