当前位置:首页>编程日记>正文

柜位预測(一)——显示柜位曲线图

近期自己接触到的知识有些杂乱。

近期涉及到了PLC的自己主动化控制、煤气柜位预測等方面的内容。

PLC的学习眼下中断了一阵子。近期接触了柜位预測的相关算法——神经网络、最小二乘法等相关的算法。

今天先简介一下,自己做的一个煤气柜位曲线显示的小demo,相关的算法的实现将在以后学习研究介绍吧。

1、界面曲线显示

我选择採用C#来进行实时曲线的显示,C#报表控件有非常多。经过比較。在实时显示曲线上C#的开源库zedgraph控件是性能最好的,以下是我的实时曲线显示的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ZedGraph;
using IGAI.Util.Excel;namespace ZedGraphExcelTest
{public partial class Form1 : Form{ExcelRead read;int count = 0;public Form1(){InitializeComponent();this.timeDraw.Tick += new EventHandler(timeDraw_Tick);read = new ExcelRead();}private void Form1_Load(object sender, EventArgs e){//获取引用GraphPane myPane = zgc.GraphPane;//设置标题myPane.Title.Text = "实时曲线";//设置X轴说明文字myPane.XAxis.Title.Text = "时间";//设置Y轴说明文字myPane.YAxis.Title.Text = "柜位";RollingPointPairList list = new RollingPointPairList(86400);//開始,添加的线是没有数据点的(也就是list为空)//添加一条名称:Voltage。颜色Color.Red,无符号,无数据的空线条LineItem curve = myPane.AddCurve("柜位", list, Color.Red, SymbolType.None);timeDraw.Interval = 50;     //设置timer控件的间隔为50毫秒timeDraw.Enabled = true;    //timer可用timeDraw.Start();           DateTime t1 = new DateTime(2014, 06, 01);DateTime t2 = new DateTime(2014, 06, 02);double min = new XDate(t1);double max = new XDate(t2);myPane.XAxis.Scale.Min = min;myPane.XAxis.Scale.Max = max;myPane.XAxis.Scale.MinorStep = (max - min) / 24;  //小刻度是1小时myPane.XAxis.Scale.MajorStep = (max - min) / 6;   //大刻度是4小时myPane.XAxis.Type = AxisType.Date;myPane.XAxis.Scale.Format = "yyyy-MM-dd
HH:mm:ss";//改变轴的刻度zgc.AxisChange();read.initExcelDrive("test.xls", "30万气柜");}private void timeDraw_Tick(object sender, EventArgs e){//确保CurveList不为空if (zgc.GraphPane.CurveList.Count <= 0){return;}//取Graph第一个曲线,也就是第一步:在GraphPane.CurveList集合中查找CurveItemLineItem curve = zgc.GraphPane.CurveList[0] as LineItem;if (curve == null){return;}//第二步:在CurveItem中訪问PointPairList(或者其他的IPointList),依据自己的须要添加新数据或改动已存在的数据IPointListEdit list = curve.Points as IPointListEdit;if (list == null){return;}DateTime time = new DateTime();Double value = -1;if (read.isHasData()){time = read.getExcelDataDateTime(0);value = read.getExcelData(1);}XDate max= new XDate(time);XDate min = new XDate(time.AddDays(-1));Scale xScale = zgc.GraphPane.XAxis.Scale;if (max>= xScale.Max){xScale.Max = xScale.Max + xScale.MajorStep;xScale.Min = xScale.Min + xScale.MajorStep;}list.Add(max, value);if (value != -1){//第三步:调用ZedGraphControl.AxisChange()方法更新X和Y轴的范围zgc.AxisChange();//第四步:调用Form.Invalidate()方法更新图表zgc.Invalidate();}}private void Form1_Resize(object sender, EventArgs e){SetSize();}private void SetSize(){// 控制始终是以10像素插入矩形从client的形Rectangle formRect = this.ClientRectangle;formRect.Inflate(-10, -10);if (zgc.Size != formRect.Size){zgc.Location = formRect.Location;zgc.Size = formRect.Size;}}}
}

2.读取Excel数据

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;namespace IGAI.Util.Excel
{public class ExcelRead{private OleDbDataReader dataReader;private OleDbConnection oleDbConnection;public ExcelRead(){}~ExcelRead(){clearExcelDrive();}public bool initExcelDrive(string excelFilePath,string sheetName){string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + excelFilePath + ";Extended Properties=Excel 8.0;"; dataReader = null;oleDbConnection = new OleDbConnection(strConn);OleDbCommand myOleDbCommand = new OleDbCommand("SELECT * FROM ["+sheetName+"$]", oleDbConnection);try{oleDbConnection.Open();dataReader = myOleDbCommand.ExecuteReader();return true;}catch (Exception ex){Console.WriteLine(ex.ToString());return false;}}public bool isHasData(){return dataReader.Read();}public Object getExcelVaule(int colNum){return dataReader.GetValue(colNum);}public Double getExcelData(int colNum){return dataReader.GetDouble(colNum);}public String getExcelDataString(int colNum){return dataReader.GetString(colNum);}public DateTime getExcelDataDateTime(int colNum){return dataReader.GetDateTime(colNum);}public TimeSpan getExcelTimeSpan(int colNum){return dataReader.GetTimeSpan(colNum);}public bool clearExcelDrive(){if (dataReader != null)dataReader.Close();// Close the connection when done with it.if (oleDbConnection != null && oleDbConnection.State == System.Data.ConnectionState.Open)oleDbConnection.Close();return true;}}
}

3.普及一下钢铁企业煤气小知识

焦炉煤气(COG)是钢铁炼焦过程的副产品"炼焦是煤在焦炉炭化室内经过加热干馏转化为焦炭及焦炉煤气的工艺过程"依据炼焦时炉温把其分为高温炼焦!中温炼焦和低温炼焦"通常炼焦都是高温炼焦"煤在炼焦时产生的煤气是煤的组成物质在高温分解时的产品"煤在隔绝空气的情况下逐渐加热时形成煤气的过程为:
第一阶段是煤的基本物质的分解"主要产生一氧化碳(CO)和二氧化碳(coZ),因此这段时间产生的COG的主要成分是CO和COZ"这段时间的炉温柔COG的产出量与煤的品质有非常大的关系"第一阶段终持续到温度为400e,此时逸出的煤气量占正常炼焦产生的煤气总量的非常少部分"
第二阶段即从第一阶段结束到炉温为550e这段时间,这阶段会产生大量的煤气"煤在这阶段内产生的煤焦油,因为炉内的高温进一步分解,变成高温炼焦的焦油并同一时候产生煤气;这部分煤气主要是由氢气和很多碳氢!碳氧化合物所组成,并且是原焦油分解的终于产物之中的一个"
第三阶段是把第二阶段生成的半焦炭继续加热直到生成终于须要的产物一焦炭"这期间煤气的溢出比較均匀,其体积约为炼焦煤气总量的40%,这阶段产生的煤气主要是氢以及氢的化合物这主要是由第二阶段产生的半焦炭分解得到的"。


高炉煤气(BFG Blast Furnace Gas),高炉炼铁时的副产品,热值低。

转炉煤气(LDG是Linz—Donawitz Process Gas)。高炉炼钢时的副产品。

4.本程序的小问题

1)本demo执行后例如以下图:

柜位预測(一)——显示柜位曲线图 配图01

2)在横坐标轴滚动大下一天时,会出现例如以下三幅图所看到的:

柜位预測(一)——显示柜位曲线图 配图02 柜位预測(一)——显示柜位曲线图 配图03 柜位预測(一)——显示柜位曲线图 配图04

这个是本demo的小bug。眼下还未找出原因,您假设知道的话,希望给下回复,谢谢了柜位预測(一)——显示柜位曲线图 配图05

本程序可在此下载。



http://www.coolblog.cn/news/130407ba34b052fb.html

相关文章:

  • asp多表查询并显示_SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询
  • s7day2学习记录
  • 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架。
  • 矿Spring入门Demo
  • 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  • Linux 实时流量监测(iptraf中文图解)
  • Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置
  • 美颜
  • shell访问php文件夹,Shell获取某目录下所有文件夹的名称
  • 如何优雅的实现 Spring Boot 接口参数加密解密?
  • LeCun亲授的深度学习入门课:从飞行器的发明到卷积神经网络
  • Mac原生Terminal快速登录ssh
  • 支撑微博千亿调用的轻量级RPC框架:Motan
  • java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...
  • mysql commit 机制_1024MySQL事物提交机制
  • 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010
  • 2019-9
  • jquery 使用小技巧
  • vscode pylint 错误_将实际未错误的py库添加到pylint白名单
  • 科学计算工具NumPy(3):ndarray的元素处理
  • linux批量创建用户和密码
  • 工程师在工作电脑存 64G 不雅文件,被公司开除后索赔 41 万,结果…
  • js常用阻止冒泡事件
  • newinsets用法java_Java XYPlot.setInsets方法代碼示例
  • 气泡图在开源监控工具中的应用效果
  • 各类型土地利用图例_划重点!国土空间总体规划——土地利用
  • php 启动服务器监听
  • dubbo简单示例
  • [iptables]Redhat 7.2下使用iptables实现NAT
  • Ubuntu13.10:[3]如何开启SSH SERVER服务
  • 【设计模式】 模式PK:策略模式VS状态模式
  • JS实现-页面数据无限加载
  • CSS小技巧——CSS滚动条美化
  • 最新DOS大全
  • Django View(视图系统)
  • 阿里巴巴分布式服务框架 Dubbo
  • 阿里大鱼.net core 发送短信
  • 程序员入错行怎么办?
  • Sorenson Capital:值得投资的 5 种 AI 技术
  • 两张超级大表join优化
  • Arm芯片的新革命在缓缓上演
  • 第九天函数
  • Linux软件安装-----apache安装
  • HDU 5988 最小费用流
  • 《看透springmvc源码分析与实践》读书笔记一
  • 正式开课!如何学习相机模型与标定?(单目+双目+鱼眼+深度相机)
  • nagios自写插件—check_file
  • python3 错误 Max retries exceeded with url 解决方法
  • 通过Spark进行ALS离线和Stream实时推荐
  • 行为模式之Template Method模式