GetPLC_Data/ConsoleGetPLCData/Program.cs
2025-11-08 08:17:36 +08:00

1085 lines
48 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using GetData_PLC;
using ConsoleGetPLCData.CS;
using System.Net;
namespace ConsoleGetPLCData
{
public struct stStation
{
public string ip;
public int port;
public string ZCID;
public int readDiffTime;
public string strError;
public string ZCName;
public string MeterTYPE;
public string NetTYPE;
}
class ProgramGetData
{
public static DataSet dsJLDataRealTime = new DataSet(); //实时采集数据集
public static DataSet dsPparameter = new DataSet(); //站场参数数据集
public static DataTable dtScRealTime = new DataTable(); // 实时输差数据集
public static DataSet dsZhanDateTime = new DataSet(); // 实时PLC时间
public static DataTable dtZhan = new DataTable(); //站场数据集
public static DataTable dtZhanNet = new DataTable(); //局域网站场数据集
public static DataTable dtZhanGPRS = new DataTable(); //GPRS站场数据集
public static string strAPPDataPath = Environment.CurrentDirectory + @"\Data\"; //采集程序路径
public static string strParPath = strAPPDataPath + @"par\"; //计量参数文件存储路径
public static string strConfigPath = strAPPDataPath + @"Config\"; //采集程序参数保存路径
public static string strDataPath = strAPPDataPath + @"RealTime\"; //实时数据存储路径
public static string strDataPath_JlData = strDataPath + @"JlData\"; //分站计量实时数据存储路径
public static string strDataPath_ScData = strDataPath + @"ScData\"; //输差数据XML存储文件夹
public static string strDataPath_DataTime = strDataPath + @"DateTime\"; //分站时间xml存储文件夹
public static string strDataPath_Log = strDataPath + @"Log\"; //日志存储文件夹
//log 日志存放数据
public static string strLogPath = strDataPath + @"log\" + DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + "_log.txt";
public static string strLogPath_Data = strDataPath + @"log\" + DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + "_Datalog_";
private string strErr = "";
private string strSQL = "";
public static bool blWriteParXMLFlag;
private Thread[] GetPLCDataThread;
Dictionary<string, Thread> ThreadDictionary = new Dictionary<string, Thread>();
static void Main(string[] args)
{
strAppend(DateTime.Now.ToString() + "------启动实时采集程序!");
System.IO.Directory.CreateDirectory(strAPPDataPath); //Data文件夹
System.IO.Directory.CreateDirectory(strParPath); //Data\par文件夹
System.IO.Directory.CreateDirectory(strDataPath); //Data\realtime文件夹
System.IO.Directory.CreateDirectory(strConfigPath); //Data\realtime文件夹
System.IO.Directory.CreateDirectory(strDataPath_JlData + "JSON\\"); //分站xml存储文件夹
System.IO.Directory.CreateDirectory(strDataPath_ScData); //输差数据XML存储文件夹
System.IO.Directory.CreateDirectory(strDataPath_DataTime);//分站时间xml存储文件夹
System.IO.Directory.CreateDirectory(strDataPath_Log); //日志存储文件夹
FileInfo fi = new FileInfo(ProgramGetData.strLogPath);
if (fi.Exists == false)
{
File.CreateText(ProgramGetData.strLogPath);
}
ProgramGetData objPLC = new ProgramGetData();
objPLC.InitialTalbe();// 初始化采集相关表格
Thread.Sleep(5000);
//objPLC.GetPLCDataStart();
objPLC.GetGPRSStart();
objPLC.GetNetStart();
Thread.Sleep(3000);
strAppend(DateTime.Now.ToString() + "------启动输差实时计算线程!");
objPLC.ScCal();//启动输差实时计算
Thread.Sleep(3000);
objPLC.SaveXML();//启动保存xml线程
Console.ReadKey();
}
private void SaveXML() //输差计算
{
//保存实时数据到xml
Thread th = new Thread(SaveXML_ReadPar);
th.Start();
}
private void ScCal() //输差计算
{
ScCal newSccal = new ScCal();
Thread ScThread = new Thread(new ThreadStart(newSccal.ZhanXianScCal));
ScThread.Start();
strAppend(DateTime.Now.ToString() + "------启动输差实时计算线程---完成!");
}
/// <summary>
/// 向IP端口发json
/// </summary>
/// <param name="url"></param>
/// <param name="param"></param>
/// <returns></returns>
public static string HttpWebRequestPost(string url, string param)
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
Encoding encoding = Encoding.UTF8;
byte[] byteArray = Encoding.ASCII.GetBytes(param);
string responseData = String.Empty;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = byteArray.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(byteArray, 0, byteArray.Length);
}
using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
{
responseData = reader.ReadToEnd();
}
return responseData;
}
}
public string HttpWebRequestGet(string url, string param)
{
param = param.IndexOf('?') > -1 ? (param) : ("?" + param);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url + param);
Encoding encoding = Encoding.UTF8;
string responseData = String.Empty;
req.Method = "GET";
using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
{
responseData = reader.ReadToEnd();
}
return responseData;
}
}
/// <summary>
/// 实时保存采集的数据到XML文件监控是否有读取计量点参数的命令
/// </summary>
private void SaveXML_ReadPar()
{
while (true)
{
#region XML
string name = strDataPath + "SsData.xml";
try
{
dsJLDataRealTime.WriteXml(name, XmlWriteMode.WriteSchema);//保存所有站场实时采集的计量数据集
dsZhanDateTime.WriteXml(strDataPath + "dtTime.xml", XmlWriteMode.WriteSchema);//保存所有站场实时采集的时钟数据集
string strTotalJson = "{";
int ii = 0;
foreach (DataTable dtTemp in dsJLDataRealTime.Tables) //分站保存所有站场实时采集的计量数据集
{
string strID = dtTemp.TableName;
dtTemp.WriteXml(strDataPath_JlData + dtTemp.TableName + ".xml", XmlWriteMode.WriteSchema);
try
{
string json = DataTableToJson(dtTemp, dsZhanDateTime.Tables[strID], strID);
strTotalJson += "\"" + dtTemp.TableName + "\":" + json + ",";
File.WriteAllText(strDataPath_JlData + "\\JSON\\" + dtTemp.TableName + ".json", json);
}
catch (Exception ex)
{
}
//ii += 1;
//if (ii > 6)
//{
// break;
//}
}
strTotalJson = strTotalJson.TrimEnd(',') + "}";
//HttpWebRequestPost("Http://10.75.166.59:8081", strTotalJson);
File.WriteAllText(strDataPath_JlData + "\\JSON\\" + "Total.json", strTotalJson);
foreach (DataTable dtTemp in dsZhanDateTime.Tables)//分站保存所有站场实时采集的时钟数据集
{
dtTemp.WriteXml(strDataPath_DataTime + dtTemp.TableName + ".xml", XmlWriteMode.WriteSchema);
}
if (blWriteParXMLFlag) //分站保存计量点参数数据集
{
foreach (DataTable dtTemp in dsPparameter.Tables)
{
dtTemp.WriteXml(strParPath + dtTemp.TableName + ".xml", XmlWriteMode.WriteSchema);
}
blWriteParXMLFlag = false;
}
//Console.WriteLine("。。。。。保存实时数据PLC时间计量点参数到xml");
}
catch (SystemException err)
{
if (err.Message != null)
{
//strErr = "注意:" + DateTime.Now + "保存到实时数据到xml出错" + err.Message + err.StackTrace.Substring(err.StackTrace.LastIndexOf("行号") - 1) + "\r\n";
}
}
#endregion
#region
try
{
; //从数据库中查询出所有站场的名称和站场ID//返回不带重复记录的站场ID表格
DataTable dtReadFlag = OracleLink.ExecuteDataTable(SQL_Strings.strReadParFlag + " and readparflag='1'", "JLXT", strErr);
if (dtReadFlag.Rows.Count > 0)
{
foreach (DataRow drFlag in dtReadFlag.Rows)
{
string strTempZCID = drFlag["STATION_NAME"].ToString();
string strTempJLD_ID = drFlag["JLD_ID"].ToString();
DataRow[] drJldPar = dsJLDataRealTime.Tables[strTempZCID].Select("jld_id='" + strTempJLD_ID + "'");
drJldPar[0]["readparflag"] = "1";
blWriteParXMLFlag = true;
string SQL = "update RV2_BASEINFO set readparflag='' where xh='" + drFlag["ID"] + "'";
OracleLink.ExecuteNonQuery(SQL, "JLXT", strErr);
}
}
//启动或停止某个站的线程
try
{
string strQuery = "select * from control"; //从数据库中查询出所有站场的名称和站场ID//返回不带重复记录的站场ID表格
string RestartFlag = "";
DataTable ReadFlagTable = OracleLink.ExecuteDataTable(strQuery, "DTJK", "");
RestartFlag = ReadFlagTable.Rows[0]["ThreadRestartFlag"].ToString();
string zcid = ReadFlagTable.Rows[0]["Thread_ZCID"].ToString();
if (RestartFlag == "1")
{
ThreadDictionary[zcid].Abort();
dtJldList(zcid);
strQuery = "update control set ThreadRestartFlag='0',Thread_ZCID='' where id=1 "; //从数据库中查询出所有站场的名称和站场ID//返回不带重复记录的站场ID表格
OracleLink.ExecuteNonQuery(strQuery, "DTJK", strErr);
GetPLCDataStart(zcid);
}
}
catch
{
}
//同步PLC时间
DataTable dtTBTime = OracleLink.ExecuteDataTable(SQL_Strings.strSQLZhan + " and TBTime='1'", "JLXT", strErr);
if (dtTBTime.Rows.Count > 0)
{
foreach (DataRow drFlag in dtTBTime.Rows)
{
string strTempZCID = drFlag["ID"].ToString();
dsZhanDateTime.Tables[strTempZCID].Rows[0]["TongBuFlag"] = "同步";
string SQL = "update 集输站场 set TBTime='' where ID='" + strTempZCID + "'";
OracleLink.ExecuteNonQuery(SQL, "JLXT", strErr);
}
}
}
catch { }
#endregion
Thread.Sleep(1111);
}
}
/// <summary>
/// 启动各站数据采集线程
/// </summary>
private void GetPLCDataStart() //启动各站数据采集线程
{
//int ThreadNum = dtZhan.Rows.Count;
//GetDataThread[] arrayThread;
//GetPLCDataThread = new Thread[ThreadNum];
//arrayThread = new GetDataThread[ThreadNum];
try
{
int ThreadNum = dtZhan.Rows.Count;
GetDataThread[] arrayThread;
GetPLCDataThread = new Thread[ThreadNum];
arrayThread = new GetDataThread[ThreadNum];
for (int i = 0; i < ThreadNum; i++)
{
string ZCID = dtZhan.Rows[i]["ORG_ID"].ToString();
if (dsJLDataRealTime.Tables[ZCID].Rows.Count > 0)
{
//if (dtZhan.Rows[i]["PORT"].ToString() == "1512")
{
//if (ZCID.Split('_').Length > 1)
{
try
{
stStation Station = new stStation();
Station.ZCID = dtZhan.Rows[i]["ORG_ID"].ToString();
Station.ZCName = dtZhan.Rows[i]["ORG_NAME"].ToString();
Station.ip = dtZhan.Rows[i]["IP"].ToString();
Station.port = Convert.ToInt32(dtZhan.Rows[i]["PORT"].ToString());
Station.NetTYPE = dtZhan.Rows[i]["NETTYPE"].ToString();
Station.MeterTYPE = dtZhan.Rows[i]["DEVICETYPE"].ToString();
Station.readDiffTime = Convert.ToInt32(dtZhan.Rows[i]["READTIMESPAN"].ToString());
arrayThread[i] = new GetDataThread(Station);
GetPLCDataThread[i] = new Thread(new ThreadStart(arrayThread[i].GetPLCData)); //string[] tempIp = dtZhan.Rows[i]["IP"].ToString().Split(',');
GetPLCDataThread[i].Start();
ThreadDictionary.Add(Station.ZCID, GetPLCDataThread[i]);
}
catch (Exception ex)
{
continue;
}
}
}
//
}
}
}
catch (Exception ex)
{
}
}
/// <summary>
/// 启动GPRS数据采集线程
/// </summary>
private void GetGPRSStart() //启动各站数据采集线程
{
//int ThreadNum = dtZhan.Rows.Count;
//GetDataThread[] arrayThread;
//GetPLCDataThread = new Thread[ThreadNum];
//arrayThread = new GetDataThread[ThreadNum];
try
{
int ThreadNum = dtZhanGPRS.Rows.Count;
GETDataGPRS[] arrayThread;
GetPLCDataThread = new Thread[ThreadNum];
arrayThread = new GETDataGPRS[ThreadNum];
for (int i = 0; i < ThreadNum; i++)
{
string ZCID = dtZhanGPRS.Rows[i]["ORG_ID"].ToString();
if (dsJLDataRealTime.Tables[ZCID].Rows.Count > 0)
{
//if (dtZhanGPRS.Rows[i]["PORT"].ToString() == "8059")
{
//if (ZCID.Split('_').Length > 1)
{
try
{
stStation Station = new stStation();
Station.ZCID = dtZhanGPRS.Rows[i]["ORG_ID"].ToString();
Station.ZCName = dtZhanGPRS.Rows[i]["ORG_NAME"].ToString();
Station.ip = dtZhanGPRS.Rows[i]["IP"].ToString();
Station.port = Convert.ToInt32(dtZhanGPRS.Rows[i]["PORT"].ToString());
Station.NetTYPE = dtZhanGPRS.Rows[i]["NETTYPE"].ToString();
Station.MeterTYPE = dtZhanGPRS.Rows[i]["DEVICETYPE"].ToString();
Station.readDiffTime = Convert.ToInt32(dtZhanGPRS.Rows[i]["READTIMESPAN"].ToString());
arrayThread[i] = new GETDataGPRS(Station);
GetPLCDataThread[i] = new Thread(new ThreadStart(arrayThread[i].GetDataStart));
//string[] tempIp = dtZhan.Rows[i]["IP"].ToString().Split(',');
GetPLCDataThread[i].Start();
ThreadDictionary.Add(Station.ZCID, GetPLCDataThread[i]);
}
catch (Exception ex)
{
continue;
}
}
}
//
}
}
}
catch (Exception ex)
{
}
}
/// <summary>
/// 启动Net数据采集线程
/// </summary>
private void GetNetStart() //启动各站数据采集线程
{
//int ThreadNum = dtZhan.Rows.Count;
//GetDataThread[] arrayThread;
//GetPLCDataThread = new Thread[ThreadNum];
//arrayThread = new GetDataThread[ThreadNum];
try
{
int ThreadNum = dtZhanNet.Rows.Count;
GetDataNet[] arrayThread;
GetPLCDataThread = new Thread[ThreadNum];
arrayThread = new GetDataNet[ThreadNum];
for (int i = 0; i < ThreadNum; i++)
{
string ZCID = dtZhanNet.Rows[i]["ORG_ID"].ToString();
if (dsJLDataRealTime.Tables[ZCID].Rows.Count > 0)
{
//if (dtZhanNet.Rows[i]["ORG_ID"].ToString() == "6C1AB9BC-AFEC-48B5-AD7D-3932DE414641")
{
//if (ZCID.Split('_').Length > 1)
{
try
{
stStation Station = new stStation();
Station.ZCID = dtZhanNet.Rows[i]["ORG_ID"].ToString();
Station.ZCName = dtZhanNet.Rows[i]["ORG_NAME"].ToString();
Station.ip = dtZhanNet.Rows[i]["IP"].ToString();
Station.port = Convert.ToInt32(dtZhanNet.Rows[i]["PORT"].ToString());
Station.NetTYPE = dtZhanNet.Rows[i]["NETTYPE"].ToString();
Station.MeterTYPE = dtZhanNet.Rows[i]["DEVICETYPE"].ToString();
Station.readDiffTime = Convert.ToInt32(dtZhanNet.Rows[i]["READTIMESPAN"].ToString());
arrayThread[i] = new GetDataNet(Station);
GetPLCDataThread[i] = new Thread(new ThreadStart(arrayThread[i].GetPLCData)); //string[] tempIp = dtZhan.Rows[i]["IP"].ToString().Split(',');
GetPLCDataThread[i].Start();
ThreadDictionary.Add(Station.ZCID, GetPLCDataThread[i]);
}
catch (Exception ex)
{
continue;
}
}
}
//
}
}
}
catch (Exception ex)
{
}
}
private void GetPLCDataStart(string ZCID) //启动各站数据采集线程
{
DataRow[] drZhan = dtZhan.Select("ID='" + ZCID + "'");
if (dsJLDataRealTime.Tables[ZCID].Rows.Count > 0)
{
try
{
stStation Station = new stStation();
Station.ZCID = drZhan[0]["ID"].ToString();
Station.ZCName = drZhan[0]["ZCMC"].ToString();
Station.ip = drZhan[0]["IP"].ToString();
Station.port = Convert.ToInt32(drZhan[0]["PORT"].ToString());
Station.NetTYPE = drZhan[0]["NETTYPE"].ToString();
Station.MeterTYPE = drZhan[0]["SBTYPE"].ToString();
Station.readDiffTime = Convert.ToInt32(drZhan[0]["READTIMESPAN"].ToString());
GetDataThread arrayThread = new GetDataThread(Station);
Thread ThreadZCID = new Thread(new ThreadStart(arrayThread.GetPLCData));
ThreadZCID.Start();
ThreadDictionary[ZCID] = ThreadZCID;
strAppend("重启" + Station.ZCName + "采集成功");
}
catch (Exception ex)
{ }
}
}
/// <summary>
/// 初始化系统所需要的DataSet 和DataTable 结构和数据
/// </summary>
protected void InitialTalbe() //初始化实时数据表格过程,以便添加计量点后重新构建实时数据表格
{
strAppend(DateTime.Now.ToString() + "------开始初始化相关表格!");
try
{
DataTable dtDateTime = new DataTable();
dtDateTime.Columns.Add("ZCID", typeof(string));
dtDateTime.Columns.Add("ZCNAME", typeof(string));
dtDateTime.Columns.Add("PLCTime", typeof(string));
dtDateTime.Columns.Add("TongBuTime", typeof(string));
dtDateTime.Columns.Add("TongBuFlag", typeof(string));
DataTable parTable = new DataTable();
parTable.Columns.Add("CH4", typeof(string));
parTable.Columns.Add("N2", typeof(string));
parTable.Columns.Add("CO2", typeof(string));
parTable.Columns.Add("C2H6", typeof(string));
parTable.Columns.Add("C3H8", typeof(string));
parTable.Columns.Add("H2O", typeof(string));
parTable.Columns.Add("H2S", typeof(string));
parTable.Columns.Add("H2", typeof(string));
parTable.Columns.Add("CO ", typeof(string));
parTable.Columns.Add("O2", typeof(string));
parTable.Columns.Add("i-C4H10", typeof(string));
parTable.Columns.Add("n-C4H10", typeof(string));
parTable.Columns.Add("i-C5H12", typeof(string));
parTable.Columns.Add("n-C5H12", typeof(string));
parTable.Columns.Add("n-C6H14", typeof(string));
parTable.Columns.Add("n-C7H16", typeof(string));
parTable.Columns.Add("n-C8H18", typeof(string));
parTable.Columns.Add("n-C9H20", typeof(string));
parTable.Columns.Add("n-C10H22", typeof(string));
parTable.Columns.Add("He", typeof(string));
parTable.Columns.Add("Ar", typeof(string));
parTable.Columns.Add("bak", typeof(string));
parTable.Columns.Add("GJ", typeof(string));
parTable.Columns.Add("KJ", typeof(string));
parTable.Columns.Add("Gr", typeof(string));
parTable.Columns.Add("DLND", typeof(string));
parTable.Columns.Add("DSZS", typeof(string));
parTable.Columns.Add("BAK1", typeof(string));
parTable.Columns.Add("BAK2", typeof(string));
parTable.Columns.Add("BAK3", typeof(string));
parTable.Columns.Add("Station_ID", typeof(string));
parTable.Columns.Add("ID", typeof(string));
parTable.Columns.Add("JLD_ID", typeof(string));
parTable.Columns.Add("ReadTime", typeof(string));
parTable.Columns.Add("JLD_NAME", typeof(string));
parTable.Columns.Add("CLXX", typeof(string));
parTable.Columns.Add("CLSX", typeof(string));
dtZhan.Clear();
dsJLDataRealTime.Tables.Clear();
#region
strAppend(DateTime.Now.ToString() + "------查询数据库获取所有站场资料!");
try
{
dtZhan = new DataTable();
dtZhan = OracleLink.ExecuteDataTable(SQL_Strings.strSQLZhan, "JLXT", strErr);
}
catch (Exception ex)
{
string strFileName = strDataPath + "dtZhan.xml";
dtZhan.ReadXml(strFileName);
}
dtZhan.TableName = "集输站场";
DataTable dtStationNew = dtZhan.Copy();
for (int i = 0; i < dtZhan.Rows.Count; i++)
{
//柳屯配气站两台PLC 区分
string[] tempIp = dtZhan.Rows[i]["IP"].ToString().Split(',');
string[] tempPORT = dtZhan.Rows[i]["PORT"].ToString().Split(',');
if (tempIp.Length > 1)
{
DataRow drTemp = dtStationNew.NewRow();
drTemp.ItemArray = dtZhan.Rows[i].ItemArray;
dtStationNew.Rows[i]["org_id"] = dtZhan.Rows[i]["org_id"].ToString() + "_0";
dtStationNew.Rows[i]["org_name"] = dtZhan.Rows[i]["org_name"].ToString() + "_0";
dtStationNew.Rows[i]["IP"] = tempIp[0];
dtStationNew.Rows[i]["PORT"] = tempPORT[0];
for (int j = 1; j < tempIp.Length; j++)
{
drTemp["org_id"] = dtZhan.Rows[i]["org_id"].ToString() + "_" + j.ToString();
drTemp["org_name"] = dtZhan.Rows[i]["org_name"].ToString() + "_" + j.ToString();
drTemp["IP"] = tempIp[j];
drTemp["PORT"] = tempPORT[j];
dtStationNew.Rows.Add(drTemp);
}
}
}
DataView dv = dtStationNew.DefaultView;
dv.RowFilter = "NETTYPE='0'";
dtZhanNet = dv.ToTable();
dv.RowFilter = "NETTYPE='1'";
dtZhanGPRS = dv.ToTable();
strAppend(DateTime.Now.ToString() + "------站场资料获取成功!");
#endregion
#region Dataset
DataTable dtDataRealTime = new DataTable();
//ID,JLD_NAME,WD,YL,CY,SSL,JRL,ZRL,LJL,BYL,SYL,ZRSJ,JRSJ,YBZT,RTIME,JLD_ID,STATION_ID,STATION_NAME,DEPT_ID
dtDataRealTime.Columns.Add("ID", typeof(string));
dtDataRealTime.Columns.Add("RTIME", typeof(string));
dtDataRealTime.Columns.Add("JLD_NAME", typeof(string));
dtDataRealTime.Columns.Add("WD", typeof(string));
dtDataRealTime.Columns.Add("YL", typeof(string));
dtDataRealTime.Columns.Add("CY", typeof(string));
dtDataRealTime.Columns.Add("SSL", typeof(string));
dtDataRealTime.Columns.Add("JRL", typeof(string));
dtDataRealTime.Columns.Add("ZRL", typeof(string));
dtDataRealTime.Columns.Add("LJL", typeof(string));
dtDataRealTime.Columns.Add("BYL", typeof(string));
dtDataRealTime.Columns.Add("SYL", typeof(string));
dtDataRealTime.Columns.Add("JRSJ", typeof(string));
dtDataRealTime.Columns.Add("ZRSJ", typeof(string));
dtDataRealTime.Columns.Add("YBZT", typeof(string));
dtDataRealTime.Columns.Add("SSGKLL", typeof(string));
dtDataRealTime.Columns.Add("JLD_ID", typeof(string));
dtDataRealTime.Columns.Add("STATION_ID", typeof(string));
dtDataRealTime.Columns.Add("STATION_NAME", typeof(string));
dtDataRealTime.Columns.Add("DEPT_ID", typeof(string));
dtDataRealTime.Columns.Add("MeterTYPE", typeof(string));
dtDataRealTime.Columns.Add("readparflag", typeof(string));
dtDataRealTime.Columns.Add("TongBuFlag", typeof(string));
dtDataRealTime.Columns.Add("CXFlag", typeof(string));
dtDataRealTime.Columns.Add("LinkStatu", typeof(string)); //计量点连接情况,对于流量积算仪的模式 如果没装表读不上来数可以设置
// 初始化站场计量点表格
strAppend(DateTime.Now.ToString() + "------初始化站场计量点表格和计量点参数");
for (int i = 0; i < dtStationNew.Rows.Count; i++)
{
DataTable dtPar = new DataTable();
DataTable dtJLD = new DataTable();
dtJLD = dtJldList(dtStationNew.Rows[i]["ORG_ID"].ToString(), dtStationNew.Rows[i]["PARENT_ORG_ID"].ToString(), dtDataRealTime, parTable, out dtPar);
dsPparameter.Tables.Add(dtPar);
dsJLDataRealTime.Tables.Add(dtJLD);
//初始化站场时间表格结构和数据
DataTable dtTimeTemp = dtDateTime.Clone();
dtTimeTemp.TableName = dtStationNew.Rows[i]["ORG_ID"].ToString();
DataRow drTime = dtTimeTemp.NewRow();
drTime["ZCID"] = dtStationNew.Rows[i]["ORG_ID"];
drTime["ZCNAME"] = dtStationNew.Rows[i]["ORG_NAME"];
dtTimeTemp.Rows.Add(drTime);
dsZhanDateTime.Tables.Add(dtTimeTemp);
}
strAppend(DateTime.Now.ToString() + "------站场参数、计量点、时间结构和数据表格初始化完成!");
#endregion
#region
strAppend(DateTime.Now.ToString() + "------初始化输差表格 开始!");
blWriteParXMLFlag = true;
dtScRealTime.Columns.Add("SCID", typeof(string));
dtScRealTime.Columns.Add("RTIME", typeof(string));
dtScRealTime.Columns.Add("SCNAME", typeof(string));
dtScRealTime.Columns.Add("SCTYPE", typeof(string));
dtScRealTime.Columns.Add("IN_P", typeof(string));
dtScRealTime.Columns.Add("OUT_P", typeof(string));
dtScRealTime.Columns.Add("SsInTotal", typeof(string));
dtScRealTime.Columns.Add("SsOutTotal", typeof(string));
dtScRealTime.Columns.Add("SsSc", typeof(string));
dtScRealTime.Columns.Add("SsPer", typeof(string));
dtScRealTime.Columns.Add("JrInTotal", typeof(string));
dtScRealTime.Columns.Add("JrOutTotal", typeof(string));
dtScRealTime.Columns.Add("JrSc", typeof(string));
dtScRealTime.Columns.Add("JrPer", typeof(string));
dtScRealTime.Columns.Add("ZrInTotal", typeof(string));
dtScRealTime.Columns.Add("ZrOutTotal", typeof(string));
dtScRealTime.Columns.Add("ZrSc", typeof(string));
dtScRealTime.Columns.Add("ZrPer", typeof(string));
dtScRealTime.Columns.Add("IN_JLD_ID", typeof(string));
dtScRealTime.Columns.Add("OUT_JLD_ID", typeof(string));
dtScRealTime.Columns.Add("DEPT_ID", typeof(string));
dtScRealTime.Columns.Add("STATION_ID", typeof(string));
dtScRealTime.Columns.Add("RE_DEPT_ID", typeof(string));
dtScRealTime.TableName = "SsSC";
strSQL = SQL_Strings.strSQLScConfig + " order by ID";
DataTable dtScConfig = new DataTable();
dtScConfig = OracleLink.ExecuteDataTable(strSQL, "JLXT", strErr);
if (dtScConfig.Rows.Count > 0)
{
foreach (DataRow dr1 in dtScConfig.Rows)
{
DataRow drJld = dtScRealTime.NewRow();
drJld["SCID"] = dr1["ID"];
drJld["SCNAME"] = dr1["TRANS_NAME"];
drJld["IN_JLD_ID"] = dr1["IN_POINTS"];
drJld["OUT_JLD_ID"] = dr1["OUT_POINTS"];
drJld["DEPT_ID"] = dr1["DEPT_ID"];
drJld["STATION_ID"] = dr1["STATION_ID"];
drJld["SCTYPE"] = dr1["TRANS_TYPE"];
drJld["RE_DEPT_ID"] = dr1["RE_DEPT_ID"];
dtScRealTime.Rows.Add(drJld);
}
}
File.Delete(strConfigPath + "dsJlDataRealTime.xml");
File.Delete(strConfigPath + "dsPparameter.xml");
File.Delete(strConfigPath + "dsZhanDateTime.xml");
dsJLDataRealTime.WriteXml(strConfigPath + "dsJlDataRealTime.xml", XmlWriteMode.WriteSchema);//暂存数据结构表
dsPparameter.WriteXml(strConfigPath + "dsPparameter.xml", XmlWriteMode.WriteSchema);//暂存数据结构表
dsZhanDateTime.WriteXml(strConfigPath + "dsZhanDateTime.xml", XmlWriteMode.WriteSchema);//暂存数据结构表
}
catch (Exception ex)
{ }
strAppend(DateTime.Now.ToString() + "------初始化完成!");
#endregion
}
/// <summary>
/// 获取某个站场的计量点结构 和参数表结构
/// </summary>
/// <param name="ZCID">传递站场ID</param>
/// <param name="Dept_ID">传递单位ID</param>
/// <param name="dtDataRealTime">计量点表结构</param>
/// <param name="parTable">参数表结构</param>
/// <param name="dtParList">返回参数表结构</param>
/// <returns>返回计量点表结构</returns>
private DataTable dtJldList(string ZCID, string Dept_ID, DataTable dtDataRealTime, DataTable parTable, out DataTable dtParList)
{
DataTable dtTempStation = new DataTable();
DataTable dtJLD = new DataTable();
string strSTATION_Name = "";
string[] tempZCID = ZCID.Split('_');
strSQL = SQL_Strings.strSQLJld + tempZCID[0] + "' and plc='1' order by jld_id";
dtTempStation = OracleLink.ExecuteDataTable("select * from SYS_ORGANISE where ORG_ID='" + tempZCID[0] + "'", "JLXT", "");
string[] tempIp = dtTempStation.Rows[0]["IP"].ToString().Split(',');
strSTATION_Name = dtTempStation.Rows[0]["ORG_NAME"].ToString();// OracleLink.getStationName(ZCID);
try
{
if (tempZCID.Length > 1)
{
dtJLD = OracleLink.ExecuteDataTable(SQL_Strings.strSQLJld + tempZCID[0] + "' and plc='1' and device_id='" + tempZCID[1] + "' order by jld_id", "JLXT", strErr);
}
else
{
dtJLD = OracleLink.ExecuteDataTable(strSQL, "JLXT", strErr);
}
}
catch (Exception ex)
{
}
if (dtJLD.Rows.Count > 0)
{
DataTable dtTemp = dtDataRealTime.Clone();
DataTable dtPar = parTable.Clone();
foreach (DataRow dr1 in dtJLD.Rows)
{
// 初始化站场计量点表格结构和数据
DataRow drJld = dtTemp.NewRow();
drJld["ID"] = dr1["ID"];
drJld["JLD_NAME"] = dr1["Jld_name"];
drJld["JLD_ID"] = dr1["JLD_ID"];
drJld["MeterTYPE"] = dr1["FLOWMETER_TYPE"];
drJld["STATION_ID"] = dr1["STATION_NAME"];
drJld["STATION_NAME"] = strSTATION_Name;
drJld["readparflag"] = "1";
drJld["DEPT_ID"] = Dept_ID;
dtTemp.Rows.Add(drJld);
// 初始化站场参数表格结构和数据
DataRow drPar = dtPar.NewRow();
drPar["ID"] = dr1["ID"];
drPar["JLD_ID"] = dr1["JLD_ID"];
drPar["Station_ID"] = dr1["STATION_NAME"];
drPar["JLD_NAME"] = dr1["Jld_name"];
try
{
string strTempSQL = "select clsbmc,ccbh,clfw from 测量设备台帐 where sycfdd='" + dr1["AZDD"].ToString() + "' and ZT='在用' and clsbmc like'%流量计%'";
DataTable dtTempCLSB = OracleLink.ExecuteDataTable(strTempSQL, "JLXT", strErr);
if (dtTempCLSB.Rows.Count > 0)
{
string[] strCLFW = dtTempCLSB.Rows[0]["CLFW"].ToString().Split('');
drPar["CLXX"] = strCLFW[0].Substring(1, strCLFW[0].Length - 1);
drPar["CLSX"] = strCLFW[1].Substring(0, strCLFW[1].IndexOf(')'));
}
}
catch { }
dtPar.Rows.Add(drPar);
}
dtTemp.TableName = ZCID;
dtPar.TableName = ZCID;
dtParList = dtPar.Copy();
return dtTemp;
}
else
{
DataTable dtTemp = dtDataRealTime.Clone();
DataTable dtPar = parTable.Clone();
dtTemp.TableName = ZCID;
dtPar.TableName = ZCID;
dtParList = dtPar.Copy();
return dtTemp;
}
}
private DataTable dtJldList(string ZCID)
{
dsJLDataRealTime.Tables[ZCID].Clear();
dsPparameter.Tables[ZCID].Clear();
string strTempFileName = @"D:\GetPLCData\Data\Config\";
DataSet dsJldTemp = new DataSet();
dsJldTemp.ReadXml(strTempFileName + "dsJlDataRealTime.xml");//暂存数据结构表
DataSet dsParTemp = new DataSet();
dsParTemp.ReadXml(strTempFileName + "dsPparameter.xml");//暂存数据结构表
foreach (DataRow dr1 in dsJldTemp.Tables[ZCID].Rows)
{
// 初始化站场计量点表格结构和数据
DataRow drJld = dsJLDataRealTime.Tables[ZCID].NewRow();
drJld["ID"] = dr1["ID"];
drJld["JLD_NAME"] = dr1["Jld_name"];
drJld["JLD_ID"] = dr1["JLD_ID"];
drJld["MeterTYPE"] = dr1["FLOWMETER_TYPE"];
drJld["STATION_ID"] = dr1["STATION_ID"];
drJld["STATION_NAME"] = dr1["STATION_NAME"];
drJld["readparflag"] = dr1["readparflag"];
drJld["DEPT_ID"] = dr1["DEPT_ID"];
dsJLDataRealTime.Tables[ZCID].Rows.Add(drJld);
// 初始化站场参数表格结构和数据
DataRow drPar = dsPparameter.Tables[ZCID].NewRow();
drPar["ID"] = dr1["ID"];
drPar["JLD_ID"] = dr1["JLD_ID"];
drPar["Station_ID"] = dr1["ZCID"];
drPar["JLD_NAME"] = dr1["Jld_name"];
drPar["CLFW"] = dr1["CLFW"];
drPar["CLXX"] = dr1["CLXX"];
drPar["CLSX"] = dr1["CLSX"];
dsPparameter.Tables[ZCID].Rows.Add(drPar);
}
return null;
}
/// <summary>
/// 控制台输出运行信息,并写入日志文件
/// </summary>
/// <param name="strMessage"></param>
public static void strAppend(string strMessage)
{
string strFilePath = strLogPath;
try
{
Console.WriteLine(strMessage);
using (StreamWriter sw = File.AppendText(strFilePath))
{
sw.WriteLine(strMessage);
sw.Flush();
sw.Close();
}
}
catch (Exception)
{
}
}
/// <summary>
/// 控制台输出运行信息,并写入日志文件
/// </summary>
/// <param name="strMessage"></param>
public static void strAppend(string strMessage, string ZCMC)
{
string strFilePath = strLogPath_Data + ZCMC + ".txt";
try
{
Console.WriteLine(strMessage);
using (StreamWriter sw = File.AppendText(strFilePath))
{
sw.WriteLine(strMessage);
sw.Flush();
sw.Close();
}
}
catch (Exception)
{
}
}
protected bool isNumberic(string message)
{
System.Text.RegularExpressions.Regex rex =
new System.Text.RegularExpressions.Regex(@"^(-)?[1-9][0-9]*$");
if (rex.IsMatch(message))
{
return true;
}
else
return false;
}
/// <summary>
/// 把DataTable数据转换为Json格式
/// </summary>
/// <param name="dt">传入DataTable数据</param>
/// <returns></returns>
public string DataTableToJson(DataTable dt, DataTable dtTime, string strStationID)
{
try
{
string[] stationid = strStationID.Split('_');
string strDept_ID = "";
string strStationName = "";
string strDeptName = "";
if (stationid.Length > 1)
{
strStationName = OracleLink.getStationName(stationid[0], ref strDept_ID) + stationid[1];
strDeptName = OracleLink.getStationName(strDept_ID);
}
else
{
strStationName = OracleLink.getStationName(stationid[0], ref strDept_ID);
strDeptName = OracleLink.getStationName(strDept_ID);
}
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("{\"total\"");
jsonBuilder.Append(":");
jsonBuilder.Append(dt.Rows.Count);
jsonBuilder.Append(",\"Dept_ID\"");
jsonBuilder.Append(":\"");
jsonBuilder.Append(strDept_ID);
jsonBuilder.Append("\",\"Dept_Name\"");
jsonBuilder.Append(":\"");
jsonBuilder.Append(strDeptName);
jsonBuilder.Append("\",\"Station_ID\"");
jsonBuilder.Append(":\"");
jsonBuilder.Append(strStationID);
jsonBuilder.Append("\",\"Station_Name\"");
jsonBuilder.Append(":\"");
jsonBuilder.Append(strStationName);
jsonBuilder.Append("\",\"Time\"");
jsonBuilder.Append(":\"");
jsonBuilder.Append(dtTime.Rows[0]["PLCTime"]);
jsonBuilder.Append("\",\"rows");
jsonBuilder.Append("\":[");
for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
if (dt.Columns[j].ColumnName == "RQ")
{
jsonBuilder.Append(dt.Rows[i][j].ToString().Split(' ')[0]);
}
else
{
jsonBuilder.Append(dt.Rows[i][j].ToString());
}
jsonBuilder.Append("\",");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("},");
}
if (dt.Rows.Count > 0)
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
}
jsonBuilder.Append("],");
jsonBuilder.Append("\"title");
//jsonBuilder.Append(dt.TableName);
jsonBuilder.Append("\":[");
//这是循环获取列名称
for (int n = 0; n < dt.Columns.Count; n++)
{
jsonBuilder.Append("{");
jsonBuilder.Append("\"field");
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Columns[n].ColumnName);
jsonBuilder.Append("\",");
jsonBuilder.Append("\"title");
jsonBuilder.Append("\":\"");
jsonBuilder.Append(getStrColumnName(dt.Columns[n].ColumnName));
jsonBuilder.Append("\"");
jsonBuilder.Append("},");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("},");
jsonBuilder.Remove(jsonBuilder.Length - 2, 2);
jsonBuilder.Append("]");
jsonBuilder.Append("}");
return jsonBuilder.ToString();
}
catch (Exception ex)
{
return "错误";
}
}
private string getStrColumnName(string strName)
{
string temp = "";
switch (strName)
{
case "YL":
temp = "压力(MPa)";
//temp = "压力(MPa)";
break;
case "CY":
temp = "压力(kPa)";
break;
case "WD":
temp = "温度(℃)";
break;
case "SSL":
temp = "瞬时流量(Nm³/d)";
break;
case "JRL":
temp = "今日流量(Nm³)";
break;
case "ZRL":
temp = "昨日流量(Nm³)";
break;
case "JLD_NAME":
temp = "计量点名称";
break;
case "JRSJ":
temp = "今日时间(分钟)";
break;
case "ZRSJ":
temp = "昨日时间(分钟)";
break;
case "YBZT":
temp = "仪表状态";
break;
case "SSGKLL":
temp = "瞬时工况流量";
break;
case "JLD_ID":
temp = "站内ID";
break;
}
return temp;
}
}
}