283 lines
11 KiB
C#
283 lines
11 KiB
C#
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using GetData_PLC;
|
|
namespace ConsoleGetPLCData.CS
|
|
{
|
|
class ScCal
|
|
{
|
|
|
|
string strError="";
|
|
public void ZhanXianScCal() //通过selcet语句从 oracle 输差配置读取站内所有输差类型 ,再分系统计算输差
|
|
{
|
|
Thread .Sleep (2000);
|
|
ProgramGetData.strAppend( DateTime.Now.ToString() + "------开始计算输差");
|
|
while (true)
|
|
{
|
|
|
|
DataSet dsSsData = new DataSet(); ;
|
|
DataTable dtTotal = new DataTable();
|
|
dtTotal.TableName = "TotalData";
|
|
try
|
|
{
|
|
dsSsData.ReadXml(ProgramGetData.strDataPath + "SsData.xml", XmlReadMode.ReadSchema);
|
|
for (int i = 0; i < dsSsData.Tables.Count; i++) //构建出实时数据总表
|
|
{
|
|
dtTotal.Merge(dsSsData.Tables[i].Copy());
|
|
}
|
|
dtTotal.WriteXml(ProgramGetData.strDataPath + "TotalData.xml",XmlWriteMode .WriteSchema);
|
|
|
|
|
|
|
|
if (dtTotal.Rows.Count > 0)
|
|
{
|
|
|
|
for (int i = 0; i < ProgramGetData.dtScRealTime.Rows.Count; i++)
|
|
{
|
|
Thread.Sleep(10); //暂停10毫秒 释放资源
|
|
|
|
ScDataCal(ProgramGetData.dtScRealTime.Rows[i], dtTotal);
|
|
}
|
|
ProgramGetData.dtScRealTime.WriteXml(ProgramGetData.strDataPath + "ScData.xml", XmlWriteMode.WriteSchema);
|
|
|
|
DataRow[] drScRealTime = ProgramGetData.dtScRealTime.Select("sctype='管线输差'"); //写线输差xml
|
|
|
|
DataTable dtScTemp = ProgramGetData.dtScRealTime.Clone();
|
|
for (int mm = 0; mm < drScRealTime.Length; mm++)
|
|
{
|
|
DataRow dr = dtScTemp.NewRow();
|
|
dr.ItemArray = drScRealTime[mm].ItemArray;
|
|
dtScTemp.Rows.Add(dr);
|
|
}
|
|
dtScTemp.WriteXml(ProgramGetData.strDataPath + "\\ScData\\XIANSC.xml", XmlWriteMode.WriteSchema);
|
|
|
|
|
|
drScRealTime = ProgramGetData.dtScRealTime.Select("sctype='站场输差'"); //写线输差xml
|
|
|
|
dtScTemp = ProgramGetData.dtScRealTime.Clone();
|
|
for (int mm = 0; mm < drScRealTime.Length; mm++)
|
|
{
|
|
DataRow dr = dtScTemp.NewRow();
|
|
dr.ItemArray = drScRealTime[mm].ItemArray;
|
|
dtScTemp.Rows.Add(dr);
|
|
}
|
|
dtScTemp.WriteXml(ProgramGetData.strDataPath + "\\ScData\\ZHANSC.xml", XmlWriteMode.WriteSchema);
|
|
|
|
drScRealTime = ProgramGetData.dtScRealTime.Select("sctype='自定义输差'"); //写线输差xml
|
|
|
|
dtScTemp = ProgramGetData.dtScRealTime.Clone();
|
|
for (int mm = 0; mm < drScRealTime.Length; mm++)
|
|
{
|
|
DataRow dr = dtScTemp.NewRow();
|
|
dr.ItemArray = drScRealTime[mm].ItemArray;
|
|
dtScTemp.Rows.Add(dr);
|
|
}
|
|
dtScTemp.WriteXml(ProgramGetData.strDataPath + "\\ScData\\ZDYSC.xml", XmlWriteMode.WriteSchema);
|
|
|
|
//drScRealTime = ProgramGetData.dtScRealTime.Select("sctype='管线输差' and DEPT_ID='14'"); //巡线一支队
|
|
//dtScTemp = ProgramGetData.dtScRealTime.Clone();
|
|
//for (int mm = 0; mm < drScRealTime.Length; mm++)
|
|
//{
|
|
// DataRow dr = dtScTemp.NewRow();
|
|
// dr.ItemArray = drScRealTime[mm].ItemArray;
|
|
// dtScTemp.Rows.Add(dr);
|
|
//}
|
|
//dtScTemp.WriteXml(ProgramGetData.strDataPath + "\\ScData\\14.xml", XmlWriteMode.WriteSchema);
|
|
|
|
}
|
|
}
|
|
|
|
catch (SystemException err)
|
|
{
|
|
if (err.Message != null)
|
|
{
|
|
ProgramGetData.strAppend( DateTime.Now.ToString() + "------输差计算读取总表格xml时 文件占用");
|
|
}
|
|
}
|
|
Thread.Sleep(1799);
|
|
}
|
|
}
|
|
|
|
|
|
private void ScDataCal(DataRow _DataRow, DataTable dtTotalData)
|
|
{
|
|
|
|
try
|
|
{
|
|
|
|
//_ScDataTable.Rows.Clear();
|
|
|
|
string strInJLD = _DataRow["IN_JLD_ID"].ToString();
|
|
string strOutJLD = _DataRow["OUT_JLD_ID"].ToString();
|
|
string strScType = _DataRow["SCTYPE"].ToString();
|
|
string Express = "";
|
|
|
|
Single SsSumIn = 0;
|
|
Single JrSumIn = 0;
|
|
Single ZrSumIn = 0;
|
|
Single SsSumOut = 0;
|
|
Single JrSumOut = 0;
|
|
Single ZrSumOut = 0;
|
|
string strIn_P = "";
|
|
string strOut_P = "";
|
|
|
|
if (strInJLD != "")
|
|
{
|
|
Express = "ID in(" + strInJLD + ")";
|
|
DataRow[] SumRow = dtTotalData.Select(Express);
|
|
if (SumRow.Length >= 0)
|
|
{
|
|
SsSumIn = 0; JrSumIn = 0; ZrSumIn = 0;
|
|
SsSumIn = sumColumon(SumRow, "SSL");
|
|
JrSumIn = sumColumon(SumRow, "JRL");
|
|
ZrSumIn = sumColumon(SumRow, "ZRL");
|
|
if (strScType == "管线输差")
|
|
{
|
|
for (int m = 0; m < SumRow.Length; m++)
|
|
{
|
|
strIn_P = strIn_P + SumRow[m]["YL"].ToString() + "★";
|
|
|
|
}
|
|
if (strIn_P.Length > 0)
|
|
strIn_P = strIn_P.Substring(0, strIn_P.Length - 1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
SsSumIn = 0; JrSumIn = 0; ZrSumIn = 0; strIn_P = "";
|
|
}
|
|
}
|
|
|
|
if (strOutJLD != "")
|
|
{
|
|
|
|
Express = "ID in(" + strOutJLD + ")";
|
|
DataRow[] SumRow = dtTotalData.Select(Express);
|
|
if (SumRow.Length >= 0)
|
|
{
|
|
SsSumOut = 0; JrSumOut = 0; ZrSumOut = 0;
|
|
SsSumOut = sumColumon(SumRow, "SSL");
|
|
JrSumOut = sumColumon(SumRow, "JRL");
|
|
ZrSumOut = sumColumon(SumRow, "ZRL");
|
|
if (strScType == "管线输差")
|
|
{
|
|
for (int m = 0; m < SumRow.Length; m++)
|
|
{
|
|
strOut_P = strOut_P + SumRow[m]["YL"].ToString() + "★";
|
|
}
|
|
if (strOut_P.Length > 0)
|
|
strOut_P = strOut_P.Substring(0, strOut_P.Length - 1);
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
SsSumOut = 0; JrSumOut = 0; ZrSumOut = 0; strOut_P = "";
|
|
|
|
}
|
|
}
|
|
|
|
_DataRow["IN_P"] =strIn_P ;
|
|
_DataRow["OUT_P"] = strOut_P ;
|
|
|
|
_DataRow["SsInTotal"] = SsSumIn.ToString("0.####");
|
|
_DataRow["SsOutTotal"] = SsSumOut.ToString("0.###");
|
|
_DataRow["SsSc"] = (SsSumOut - SsSumIn).ToString("0.####");
|
|
if (SsSumIn != 0)
|
|
{
|
|
_DataRow["SsPer"] = ((SsSumOut - SsSumIn) * 100 / SsSumIn).ToString("0.##") + "%";
|
|
}
|
|
else
|
|
{
|
|
if (SsSumOut == 0)
|
|
{
|
|
_DataRow["SsSc"] = "0";
|
|
_DataRow["SsPer"] = "0%";
|
|
}
|
|
else
|
|
{
|
|
_DataRow["SsPer"] = "故障";
|
|
}
|
|
|
|
}
|
|
|
|
_DataRow["JrInTotal"] = JrSumIn.ToString("0.####");
|
|
_DataRow["JrOutTotal"] = JrSumOut.ToString("0.###");
|
|
_DataRow["JrSc"] = (JrSumOut - JrSumIn).ToString("0.####");
|
|
if (JrSumIn != 0)
|
|
{
|
|
_DataRow["JrPer"] = ((JrSumOut - JrSumIn) * 100 / JrSumIn).ToString("0.##") + "%";
|
|
}
|
|
else
|
|
{
|
|
if (JrSumOut == 0)
|
|
{
|
|
_DataRow["JrSc"] = "0";
|
|
_DataRow["JrPer"] = "0%";
|
|
}
|
|
else
|
|
{
|
|
_DataRow["JrPer"] = "故障";
|
|
}
|
|
|
|
}
|
|
|
|
_DataRow["ZrInTotal"] = ZrSumIn.ToString("0.####");
|
|
_DataRow["ZrOutTotal"] = ZrSumOut.ToString("0.###");
|
|
_DataRow["ZrSc"] = (ZrSumOut - ZrSumIn).ToString("0.####");
|
|
if (ZrSumIn != 0)
|
|
{
|
|
_DataRow["ZrPer"] = ((ZrSumOut - ZrSumIn) * 100 / ZrSumIn).ToString("0.##") + "%";
|
|
}
|
|
else
|
|
{
|
|
if (ZrSumOut == 0)
|
|
{
|
|
_DataRow["ZrSc"] = "0";
|
|
_DataRow["ZrPer"] = "0%";
|
|
}
|
|
else
|
|
{
|
|
_DataRow["ZrPer"] = "故障";
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
catch (SystemException err)
|
|
{
|
|
if (err.Message != null)
|
|
{
|
|
ProgramGetData . strAppend( DateTime.Now.ToString() + "------" + "输差计算时出错");
|
|
|
|
}
|
|
}
|
|
}
|
|
private float sumColumon(DataRow[] _DataRow, string _ColumonName)
|
|
{
|
|
float FlowSum = 0;
|
|
|
|
foreach (DataRow Dr1 in _DataRow)
|
|
{
|
|
try
|
|
{
|
|
FlowSum = FlowSum + float.Parse(Dr1[_ColumonName].ToString());
|
|
}
|
|
catch (SystemException err)
|
|
{
|
|
if (err.Message != "")
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
return FlowSum;
|
|
|
|
}
|
|
}
|
|
}
|