现场DCS仪表清零后报表每小时用量的SQL处理方法(列转行)

最近我在做项目的时候,在现场碰到客户煤气仪表每天累积量达到几百万,一个月累计下来表的度数就要超出仪表的上限,所以客户每个月25号必须进行一次清零。这样仪表的度数就重新从零开始计算。在统计每小时煤气产量的时候,现场如果是手工抄数就不要紧,只需要做一下简单的公式计算即可 【产量】=【清零时表的读数】-【上个整点读数】+【当前点清零后的读数】即可。但是对于一个软件系统来说,没有人的大脑进行干预可就没有那么简单,他需要知道仪表是否清零,得知道什么时候清的零,还需要知道清零时候的读数。知道这三点才能提供软件的方法进行自动处理清零情况。

我在现场给客户生产部门开发了一个24小时,每小时整点的煤气产量报表,每天打开,自动计算出整点的煤气使用量,如下图

当时通过实时库软件按照整点请采集到全部是整点数据,这个在仪表不清零持续累积是没有问题的,但是一旦清零,就会出现下面情况,见红框框

因为这数据是每个小时的整点采集,不管是否在两个整点之间清零,系统根据读数向减都会算错一个整点的数据,当前这种情况的数据采集表是每小时一次,结构如下:

按照上面提到的算法公式:【产量】=【清零时表的读数】-【上个整点读数】+【当前点清零后的读数】,需要知道仪表是否清零,还得知道什么时候清的零,还需要知道清零时候的读数。那么系统要及时反应出清零时刻,如果不及时的话会造成比较大的误差。我用了一个比较简单的方法,重新去实时库系统采集每分钟的煤气读数,一旦清零,1分钟就可以反映过了,不会造成很大误差,用户可以接受,同时比按照秒来采集,会大大减少表的数据,对报表性能影响不大。

提供这个表,提过后前相邻的分钟数据相减,一旦出现负值,我就可以知道这个仪表在这个时间(小时+分钟)出现清零,同时找到上一分钟的读数,和第一分钟的度数M0就可以算出清零之前的使用量,同时再加上M59读数,就得到了清零的这个时间段整点的使用量。提过上图 我们就可以知道在10点8分出现过清零,那么10点的使用量就是M8-M0+M59.

通过上面的分析,我们的思路就出来了,

1、找出 清零的数据时间点 ,后前分钟数相减

2、为了便于计算,通过简单的sql 运算就可以定位到在什么时间出现清零,我们需要将列进行反转变成行,同时得到分指数。通过 unpivot  方法来进行

3、通过 后减前为赋值定位到清零的时间点和上一个时间点,发生在哪个的小时

SELECT top 1  SUBSTRING(MNAME,2,LEN(mname)-2) mins1 ,datepart(hh,[DATE]),
SUBSTRING(MNAME,2,LEN(mname)-2)-1 mins0 ,datepart(hh,[DATE]) OCCH
from  unpvt WHERE  mvalues<0;

4、定位到时间点以后,通过时间点请找到分钟表里面的读数,进行计算即可,因为字段是计算得到,这里用动态sql

declare @m1value decimal(22,6) ,@m0value decimal(22,6) ,@m59value decimal(22,6) ;
 set @qzerosql=
 ‘  select top 1 @m1value=M‘[email protected] +‘ , @m0value=M0, @m59value=m59 ‘
 + ‘   from tblxxxx  ‘
 + ‘   where CONVERT(varchar(10),[date],120)[email protected] and DATEPART(hh,[date])[email protected] ‘;

 exec sp_executesql @qzerosql,N‘@m1value decimal(22,6) output,@m0value decimal(22,6) output,@m59value decimal(22,6) output,@occurdate date,@OCCH int,@pointname varchar(100)‘,
 @m1value output, @m0value output,@m59value output,@occurdate,@OCCH;

5、最后,返回计算好的数据和该数据所在的时间点,在报表上通过时间点在报表单元格进行判断处理即可。

 SET @ResetHourValue= (select @m1value [email protected] [email protected] );
 
 set @[email protected];

这个问题的处理关键是定位清零时间点,方法是通过sql sever 列转行的方法。如果大家有其他简便可行的方法,也请一并赐教,O(∩_∩)O谢谢

时间: 2024-08-06 03:41:23

现场DCS仪表清零后报表每小时用量的SQL处理方法(列转行)的相关文章

部分激光打印机清零方法

部分打印机加粉后清零操作原因:厂商为了控制用户的耗材利用率,在机器内部增加了计数程序或增加了计数芯片 兄弟7360打印机加粉清零方法 碳粉清零: 1.打开前盖 2.按清除键,显示跟换硒鼓,不理它 3.再按启用键,然后按00 ,过几秒就可以关前盖,就可以了. 硒鼓清零: 1.打开前盖 2.按清除键,显示跟换硒鼓: 1是2否 3.按1 ,过几秒就可以关前盖,就可以了. 兄弟2140硒鼓清零方法: 在开机情况下打开前盖,按住GO键不放(此时应前盖已经打开,必须按住机器内部的白色按钮,如下图圆圈所示位置

专家表示武汉有望3月底新增病例“清零”,但多地出现出院“复阳”该如何破?

#永洪科技今日疫情播报#截至3月6日9:30,我国累计确诊80710例,现有确诊23872例,现有疑似482例,累计治愈53793例 ,累计死亡3045例.新增境外输入确诊病例16例(甘肃11例,北京4例,上海1例),累计报告境外输入确诊病例36例. 中央指导组专家组成员.中国工程院院士.天津中医药大学校长张伯礼,近日在接受媒体专访时表示:武汉市有希望到3月底实现新增病例基本"清零". 这无疑是大家期待的好消息,但2月以来,我国多地出现患者出院后复检核酸阳性的情况,"复阳&q

各种投影灯泡的清零方法!

刚开学,学校的多媒体坏了很多,除了新安装的12套,其余的基本都 有问题. 连续2个星期,基本都 在维修多媒体中,很忙,很累. 好在是,新招入的小徐同学,还 是很给力的,够勤快,脑子也很灵光,是个好苗子. 这两天,接连遇到几次要给投影机清零 的问题. 于是收集整理了一下各种投影机清零的方法. ******************************** sharp DLP投影机的清零 待机状态时同时按"right"+"down"+"enter"

转载:2410中断中SRCPND和INTPND清零的疑问

2410中断中SRCPND和INTPND清零的疑问SRCPND是中断源引脚寄存器,某个位被置1表示相应的中断被触发,但我们知道在同一时刻内系统可以触发若干个中断,只要中断被触发了,SRCPND的相应位便被置1,也就是说SRCPND在同一时刻可以有若干位同时被置1,然而INTPND则不同,他在某一时刻只能有1个位被置1,INTPND 某个位被置1(该位对应的中断在所有已触发的中断里具有最高优先级且该中断没有被屏蔽),则表示CPU即将或已经在对该位相应的中断进行处理,于是我们可以有一个总结:SRCP

九零后女孩币圈变形记

周小雪的大学时代             来源:新浪微博 一 今天我们来认识一个刚刚大学毕业的94年女孩. 周小雪,湖南大学2012级应用物理专业,和大部分的同龄女孩一样,她热爱音乐,从小学开始弹吉他,高中组建乐队,担任主唱.她也热爱旅行,热爱祖国的青山绿水,她在大学期间用一年的时间走遍了中国的每一个省份. 周小雪                    来源:新浪微博 大一暑假时,小雪家门口的小学来了一支国际支教队,她被深深吸引,支教活动是国际经济学商学学生联合会(AIESEC)组织的,小雪经过

如何理解清零心态

之前写过博客.办过网站但都没有能坚持下来.这又一次从零开始:说到从零开始又提及到了清零心态:人在到达一定阶段的时刻是否真的需要有一种清理心态呢? 答案是肯定的.当你在一个环境中时间太长后,会完全熟悉和接受这里的一切,不再想去改变也不需要去改变,因为你自己完全融入其中.不再能进步甚至不需再进步,同时因为你的存在你的行为和思想还会影响到新人.这其实就很可怕了.就如同井底之蛙 .这个时候你需要适走出去,看看外面的世界.新的环境中你不再有任何的优势,你以前优势积累的东西在新环境或许一文不值,但你却可以在

Python语言程序设计之一--for循环中累加变量是否要清零

最近学到了Pyhton中循环这一章.之前也断断续续学过,但都只是到了函数这一章就停下来了,写过的代码虽然保存了下来,但是当时的思路和总结都没有记录下来,很可惜.这次我开通了博客,就是要把这些珍贵的学习思考总结记录下来.从现在开始. 关于这一章始终有几个难点不懂.第一个就是每次循环过后,其中的累加变量是否要清零?这个问题困扰了我许久.很多次写完代码运行时发现,计算结果和我想要的结果根本不同.比如在<Python语言程序设计>这本书里,第5章习题第27题: 计算π的值:π =4 * (1 - 1/

爆零后的感受外加一道强联通分量HDU 4635的题解

今天又爆零了,又是又,怎么又是又,爆零爆多了,又也就经常挂嘴边了,看到这句话,你一定很想说一句"",弱菜被骂傻,也很正常啦. 如果你不开心,可以考虑往下看. 翻到E(HDU 4635 Strongly connected)题,这么短的题目,肯定要先看啦.然后D(LightOJ 1229),然后C(ZOJ 2243),然后F(HDU 4711),然后B(CodeForces 385D),然后看A(HDU 3889)好吧,我承认,A题看了一眼就不看了,B题一看是线段什么有点几何的味道就果断

(网管工作日志)Canon 清零

公司打印机canon ip 1980最近一直在报错:废墨盒已满,本来想找到这个废墨盒清理一下,可找了半天还是不确定找到的对不对..可打印机不能不用,所以就按网上说的方法将打印机清零,效果不错. 方法: 1.在打印时提示废墨盒已满时,将打印机电源拔掉,然后按多次电源开关,将电放完为止: 2.按住电源开关不放,并同时接上电源线,5秒过后(反正我是5秒左右,也可以按久些),松开电源开关,这时会出现一个打印机副本: 3.运行清零软件.打印机为ip1980.清零软件链接http://down.51cto.