GetPLC_Data/GetData_PLC/frmMain.cs
2025-11-08 08:17:36 +08:00

785 lines
36 KiB
C#
Raw 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.ComponentModel;
using System.Data;
using System.Data.OracleClient;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GetData_PLC
{
public partial class frmMain : Form
{
[DllImport("Iphlpapi.dll")]
private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);
//[DllImport("Ws2_32.dll")]
private static string strErr = "";
public static string strAppPath = Environment.CurrentDirectory ; //采集程序路径
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 DataTable dtZhan = new DataTable();
static DataTable dtJld = new DataTable();
//检查控制台程序如果一分钟之内启动超过3次则可能有错误重启计算机。
private static int StartConselTimes;
//控制台是否运行的标志
private static bool ConselRunFlag;
// 程序启动的时间,用于主程序自动重启
private static DateTime MainPragramStartTime;
Boolean SaveHourFlag; //小时保存数据
Boolean SaveSSFlag; //实时数据保存数据
Boolean SaveDayFlag; //保存日报表标志
Boolean SaveSCDayFlag; //保存日报表标志
Boolean UpdateFlag; //更新计量器具的标志
private static int SaveDiff = 300;//实时数据存盘间隔 五分钟
bool SaveEnable;
private static DateTime PragramStartTime;// 程序启动的时间,用于主程序自动重启
private static DateTime LastSaveTime;
public frmMain()
{
InitializeComponent();
}
private void frmMain_Load(object sender, EventArgs e)
{
//写入程序已经运行的标志 避免服务器程序重复启动
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); //分站xml存储文件夹
System.IO.Directory.CreateDirectory(strDataPath_ScData); //输差数据XML存储文件夹
System.IO.Directory.CreateDirectory(strDataPath_DataTime);//分站时间xml存储文件夹
System.IO.Directory.CreateDirectory(strDataPath_Log); //日志存储文件夹
// 备份数据库
DataSet dsBackUp = new DataSet();
DataTable dtBackUp = new DataTable();
dtBackUp = OracleLink.ExecuteDataTable("select * from RV2_BASEINFO", "JLXT", "");
dtBackUp.TableName = "FlowMeter";
dsBackUp.Tables.Add(dtBackUp.Copy());
dtBackUp = new DataTable();
dtBackUp = OracleLink.ExecuteDataTable("select * from RV2_TRANS_CONFIG", "JLXT", "");
dtBackUp.TableName = "SCConfig";
dsBackUp.Tables.Add(dtBackUp.Copy());
dtBackUp = new DataTable();
dtBackUp = OracleLink.ExecuteDataTable("select * from SYS_ORGANISE", "JLXT", "");
dtBackUp.TableName = "OrgConfig";
dsBackUp.Tables.Add(dtBackUp.Copy());
dsBackUp .WriteXml (strParPath + "dsConfig.xml", XmlWriteMode.WriteSchema);
string strParPath1 = strParPath + "runstate.txt";
if (File.Exists(strParPath))
{
if (File.ReadAllText(strParPath1) == "true")
{
MessageBox.Show("已有一个采集进程在运行,退出 ", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
}
}
else
{
File.WriteAllText(strParPath1, "true");
}
System.Net.IPAddress[] addressList = Dns.GetHostByName(Dns.GetHostName()).AddressList;
toolStripStatusLabel1.Text = "天然气产销厂自动计量采集程序";
toolStripStatusLabel2.Text = DateTime.Now.ToString();
Control.CheckForIllegalCrossThreadCalls = false;//跨线程操作
string strFileName = "";
dtZhan = new DataTable();
try
{
dtZhan = OracleLink.ExecuteDataTable(SQL_Strings.strSQLZhan, "JLXT", strErr);
}
catch (Exception)
{
strFileName = strDataPath + "dtZhan.xml";
dtZhan.ReadXml(strFileName);
}
dtZhan.TableName = "集输站场";
DataTable dtStationNew = dtZhan.Copy();
try
{
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);
}
}
}
comboBox1.DataSource = dtStationNew;
comboBox1.DisplayMember = dtZhan.Columns["ORG_NAME"].ToString();
comboBox1.ValueMember = dtZhan.Columns["ORG_ID"].ToString();
dtStationNew.WriteXml(strDataPath + "dtZhan.xml", XmlWriteMode.WriteSchema);
}
catch (Exception ex)
{
}
LastSaveTime = DateTime.Now;
PragramStartTime = DateTime.Now;
string name = Dns.GetHostName();
IPAddress[] ipadrlist = Dns.GetHostAddresses(name);
for (int i = 0; i < ipadrlist.Length; i++)
{
if (ipadrlist[i].ToString() == "10.75.167.5" || ipadrlist[i].ToString() == "10.75.166.5")
{
checkBox1.Checked = true;
}
}
}
#region "启停采集控制台"
private void startConsel(string _filePath, string _ProcessesName)
{
foreach (Process p in Process.GetProcesses())
{
if (p.ProcessName == _ProcessesName)
{
try
{
p.Kill();
}
catch
{
}
}
}
//实例化一个进程类
//Thread.Sleep(5000);
Process cmd = new Process();
cmd.StartInfo.FileName = _filePath + "\\" + _ProcessesName + ".exe";
//不显示命令行窗口界面true不显示
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
cmd.Start(); //启动进程
textBox1.AppendText("采集程序启动---" + DateTime.Now + "\r\n");
ConselRunFlag = true;
StartConselTimes = 0;
}
private void CloseConsel(string _ProcessesName)
{
foreach (Process p in Process.GetProcesses())
{
if (p.ProcessName == _ProcessesName)
{
try
{
p.Kill();
}
catch
{
}
}
}
}
private void timer3_Tick(object sender, EventArgs e)
{
//定时重启 2天重启一次
TimeSpan stST = DateTime.Now - MainPragramStartTime;
DateTime SAVETIME = DateTime.Now;
DateTime oldTime = DateTime.Parse(toolStripStatusLabel2.Text);
TimeSpan strRuntime = SAVETIME - oldTime;
toolStripStatusLabel3.Text = "已运行【" + strRuntime.Days.ToString("0#") + "天" + strRuntime.Hours.ToString("0#") + "小时" + strRuntime.Minutes.ToString("0#") + "分钟" + strRuntime.Seconds.ToString("0#") + "秒 】";
toolStripStatusLabel4.Text = DateTime.Now.ToString();
#region //启动停止更新计量器具控制台程序
//try
//{
// if (SAVETIME.Hour >= 2 && SAVETIME.Hour < 3 && UpdateFlag == false) //过了2点启动
// {
// UpdateFlag = true;
// startConsel(strAppPath, "UpdateMeter");
// try
// {
// File.Delete(strAppPath + @"\Data\UpdateMeter\updateFlag.xml");
// }
// catch (Exception)
// {
// }
// }
// if (UpdateFlag) //如果更新成功 则关闭控制台程序
// {
// if (File.Exists(strAppPath + @"\Data\UpdateMeter\updateFlag.xml"))
// {
// CloseConsel("UpdateMeter");
// }
// }
// if (SAVETIME.Hour < 2 || SAVETIME.Hour > 3)
// {
// UpdateFlag = false;
// try
// {
// File.Delete(strAppPath + @"\Data\UpdateMeter\updateFlag.xml");
// }
// catch (Exception)
// {
// }
// }
//}
//catch (Exception ex)
//{
//}
#endregion
#region //客户端重启control
try
{
string strQuery = "select * from control"; //从数据库中查询出所有站场的名称和站场ID//返回不带重复记录的站场ID表格
string RestartFlag = "";
DataTable ReadFlagTable = OracleLink.ExecuteDataTable(strQuery, "DTJK", "");
RestartFlag = ReadFlagTable.Rows[0]["RESTART"].ToString();
if (RestartFlag == "1")
{
strQuery = "update control set RESTART=0 where id=1 "; //从数据库中查询出所有站场的名称和站场ID//返回不带重复记录的站场ID表格
OracleLink.ExecuteNonQuery(strQuery, "DTJK", strErr);
startConsel(strAppPath, "ConsoleGetPLCData");
}
}
catch (SystemException err)
{
}
#endregion
try
{
if (stST.Minutes > 2880)
{
System.Diagnostics.Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location);
Application.Restart();
}
toolStripStatusLabel5.Text = "";
Int64 intPLCPageMemory = 0;
Int64 intPLCSystemMemory = 0;
ConselRunFlag = false;
foreach (Process p in Process.GetProcesses())
{
if (p.ProcessName == "ConsoleGetPLCData")
{
string PLCMemory = "PLC采集程序【物理内存" + (p.WorkingSet64 / 1024 / 1024).ToString() + " MB--" + "分页内存:" + (p.PagedMemorySize64 / 1024 / 1024).ToString() + " MB】";
intPLCPageMemory = p.PagedMemorySize64 / 1024 / 1024;
intPLCSystemMemory = p.WorkingSet64 / 1024 / 1024;
toolStripStatusLabel5.Text = PLCMemory;
ConselRunFlag = true;
StartConselTimes = 0;
break;
}
}
if (ConselRunFlag == false)
{
StartConselTimes = StartConselTimes + 1;
startConsel(strAppPath, "ConsoleGetPLCData");
textBox1.AppendText("启动采集程序 " + "\r\n");
}
bool Restart = false;
if ((System.Math.IEEERemainder(SAVETIME.Minute, 5) > 0 && System.Math.IEEERemainder(SAVETIME.Minute, 5) < 4) || (DateTime.Now.Hour == 23 && DateTime.Now.Minute >= 56))
{
Restart = true;
}
if (intPLCPageMemory >= 250 && Restart)
{
CloseConsel("ConsoleGetPLCData");
Thread.Sleep(2000);
startConsel(strAppPath, "ConsoleGetPLCData");
toolStripStatusLabel7.Text = (int.Parse(toolStripStatusLabel7.Text) + 1).ToString();
textBox1.AppendText("分页内存超过250MB重启采集程序----" + DateTime.Now + "\r\n");
}
if (intPLCSystemMemory >= 150 && Restart)
{
CloseConsel("ConsoleGetPLCData");
Thread.Sleep(2000);
startConsel(strAppPath, "ConsoleGetPLCData");
toolStripStatusLabel7.Text = (int.Parse(toolStripStatusLabel7.Text) + 1).ToString();
textBox1.AppendText("物理内存超过150MB重启采集程序----" + DateTime.Now + "\r\n");
}
timer1.Enabled = true;
}
catch (Exception)
{
}
}
#endregion
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
try
{
string strFilePath = @"D:\GetPLCData\Data\RealTime\";
DataTable dtStation = new DataTable();
dtStation.ReadXml(strFilePath + "JlData\\" + comboBox1.SelectedValue.ToString() + ".xml");
dataGridView1.DataSource = dtStation;
DataSet SsDataDs = new DataSet();//数据集,用于存放全厂所有计量点实时数据
DataTable dtScRealTime = new DataTable();//数据集,用于存放全厂站场输差、管管线输差和自定义输差的实时显示
DataTable TotalTable = new DataTable();
try
{
dtScRealTime.ReadXml(strDataPath + "ScData.xml");
SsDataDs.ReadXml(strDataPath + "SsData.xml", XmlReadMode.ReadSchema);
TotalTable.ReadXml(strDataPath + "TotalData.xml");
}
catch (SystemException err)
{
if (err.Message != null)
{
//textBox1.AppendText("注意: 读取合并xml文件出错 " + err.Message + err.StackTrace.Substring(err.StackTrace.LastIndexOf("行号") - 1) + "\r\n");
//textBox1.AppendText("注意: 读取合并xml文件出错 " + "\r\n");
}
}
try
{
CopyDirectory(strAppPath + "\\Data\\", textBox2 .Text );
}
catch
{
}
#region
if (checkBox1.Checked)
{
DateTime SAVETIME = DateTime.Now;
string strQuery = "";
#region"保存实时数据"//------------------------------------------------------------------------
//if (System.Math.Abs(DateDiff.TotalSeconds - SaveDiff) < 1)
if (System.Math.IEEERemainder(SAVETIME.Minute, 5) == 0 && SaveSSFlag == false)
{
strQuery = "select ID,DEPT_ID,STATION_ID,JLD_ID,RTIME,WD,YL,CY,SSL,JRL,JRSJ,YBZT,SSGKLL,CXFLAG from REALTIME_DATA where ID=0";
DataTable SaveRealTimeData = OracleLink.ExecuteDataTable(strQuery, "DTJK", strErr);
for (int j = 0; j < TotalTable.Rows.Count; j++)
{
DataRow tempRow = SaveRealTimeData.NewRow();
tempRow["ID"] = TotalTable.Rows[j]["ID"];
tempRow["RTIME"] = SAVETIME;
tempRow["WD"] = TotalTable.Rows[j]["WD"];
tempRow["YL"] = TotalTable.Rows[j]["YL"];
tempRow["CY"] = TotalTable.Rows[j]["CY"];
tempRow["SSL"] = TotalTable.Rows[j]["SSL"];
tempRow["JRL"] = TotalTable.Rows[j]["JRL"];
tempRow["JRSJ"] = TotalTable.Rows[j]["JRSJ"];
tempRow["YBZT"] = TotalTable.Rows[j]["YBZT"];
tempRow["SSGKLL"] = TotalTable.Rows[j]["SSGKLL"];
tempRow["CXFLAG"] = TotalTable.Rows[j]["CXFLAG"];
tempRow["DEPT_ID"] = TotalTable.Rows[j]["DEPT_ID"];
tempRow["STATION_ID"] = TotalTable.Rows[j]["STATION_ID"];
tempRow["JLD_ID"] = TotalTable.Rows[j]["JLD_ID"];
SaveRealTimeData.Rows.Add(tempRow);
}
try
{
strQuery = "select ID,DEPT_ID,STATION_ID,JLD_ID,RTIME,WD,YL,CY,SSL,JRL,JRSJ,YBZT,SSGKLL,CXFLAG from REALTIME_DATA";
SaveRealTimeData.WriteXml ("d:\\ccc.xml",XmlWriteMode.WriteSchema);
OracleLink.SaveDataTable(strQuery, SaveRealTimeData, "DTJK", strErr);
strErr = "注意:" + DateTime.Now + "保存实时数据成功" + "\r\n";
textBox1.AppendText(strErr);
}
catch (SystemException err)
{
if (err.Message != null)
{
strErr = "注意:" + DateTime.Now + "保存实时数据库时出错" + err.Message + "\r\n";
textBox1.AppendText(strErr);
}
}
#endregion
#region"保存实时输差"//-----------------------------------------------------
strQuery = "select id, in_p,out_p,rtime, scname, ssintotal, ssouttotal, sssc, ssscbfs, jrlintotal, jrlouttotal, jrlsc, jrlscbfs, station_id, sctype, redept_name from SC_DATA where id=0 ";
try
{
DataTable ScTotalTable = new DataTable();
ScTotalTable = OracleLink.ExecuteDataTable(strQuery, "DTJK", strErr);
ScTotalTable.Rows.Clear();
for (int j = 0; j < dtScRealTime.Rows.Count; j++)
{
DataRow tempRow = ScTotalTable.NewRow();
tempRow["RTIME"] = SAVETIME;
tempRow["ID"] = dtScRealTime.Rows[j]["SCID"];
tempRow["IN_P"] = dtScRealTime.Rows[j]["IN_P"];
tempRow["OUT_P"] = dtScRealTime.Rows[j]["OUT_P"];
tempRow["scname"] = dtScRealTime.Rows[j]["SCNAME"];
tempRow["ssintotal"] = dtScRealTime.Rows[j]["SsInTotal"];
tempRow["ssouttotal"] = dtScRealTime.Rows[j]["SsOutTotal"];
tempRow["sssc"] = dtScRealTime.Rows[j]["SsSc"];
tempRow["ssscbfs"] = dtScRealTime.Rows[j]["SsPer"];
tempRow["jrlintotal"] = dtScRealTime.Rows[j]["JrInTotal"];
tempRow["jrlouttotal"] = dtScRealTime.Rows[j]["JrOutTotal"];
tempRow["jrlsc"] = dtScRealTime.Rows[j]["JrSc"];
tempRow["jrlscbfs"] = dtScRealTime.Rows[j]["JrPer"];
tempRow["station_id"] = dtScRealTime.Rows[j]["station_id"];
tempRow["redept_name"] = dtScRealTime.Rows[j]["RE_DEPT_ID"];
tempRow["sctype"] = dtScRealTime.Rows[j]["SCTYPE"];
ScTotalTable.Rows.Add(tempRow);
}
strQuery = "select id, rtime,in_p,out_p, scname, ssintotal, ssouttotal, sssc, ssscbfs, jrlintotal, jrlouttotal, jrlsc, jrlscbfs, station_id, sctype, redept_name from SC_DATA ";
OracleLink.SaveDataTable(strQuery, ScTotalTable, "DTJK", strErr);
strErr = "注意:" + DateTime.Now + "保存实时输差数据成功" + "\r\n";
textBox1.AppendText(strErr);
}
catch (SystemException err)
{
if (err.Message != null)
{
strErr = ("注意:" + DateTime.Now + "保存输差数据失败" + err.Message) + "\r\n";
textBox1.AppendText(strErr);
}
}
LastSaveTime = SAVETIME;
SaveSSFlag = true;
}
if (System.Math.IEEERemainder(SAVETIME.Minute, 5) != 0)
{
SaveSSFlag = false;
}
#endregion
#region "存小时数据"//-----------------------------------------------------------------
if (SAVETIME.Minute == 59 && SAVETIME.Second > 40 && SaveHourFlag == false) //到小时整点,如果还没有存储过则开始存储
{
strQuery = "select ID,RTIME,WD,YL,CY,SSL,JRL,JRSJ,YBZT,DEPT_ID,STATION_ID,JLD_ID from HOURREPORT where ID=0";
DataTable SaveHourTable = OracleLink.ExecuteDataTable(strQuery, "DTJK", strErr);
for (int j = 0; j < TotalTable.Rows.Count; j++)
{
DataRow tempRow = SaveHourTable.NewRow();
tempRow["ID"] = TotalTable.Rows[j]["ID"];
tempRow["RTIME"] = SAVETIME;
tempRow["WD"] = TotalTable.Rows[j]["WD"];
tempRow["YL"] = TotalTable.Rows[j]["YL"];
tempRow["CY"] = TotalTable.Rows[j]["CY"];
tempRow["SSL"] = TotalTable.Rows[j]["SSL"];
tempRow["JRL"] = TotalTable.Rows[j]["JRL"];
tempRow["JRSJ"] = TotalTable.Rows[j]["JRSJ"];
tempRow["YBZT"] = TotalTable.Rows[j]["YBZT"];
tempRow["DEPT_ID"] = TotalTable.Rows[j]["DEPT_ID"];
tempRow["STATION_ID"] = TotalTable.Rows[j]["STATION_ID"];
tempRow["JLD_ID"] = TotalTable.Rows[j]["JLD_ID"];
SaveHourTable.Rows.Add(tempRow);
}
strQuery = "select ID,RTIME,WD,YL,CY,SSL,JRL,JRSJ,YBZT,DEPT_ID,STATION_ID,JLD_ID from HOURREPORT";
try
{
OracleLink.SaveDataTable(strQuery, SaveHourTable, "DTJK", strErr);
strErr = "注意:" + DateTime.Now + "保存小时数据成功" + "\r\n";
textBox1.AppendText(strErr);
SaveHourFlag = true;
SaveHourTable.Dispose();
}
catch (SystemException err)
{
if (err.Message != null)
{
strErr = "注意:" + DateTime.Now + "保存小时数据出错" + "\r\n";
textBox1.AppendText(strErr);
}
}
}
if (SAVETIME.Minute != 59) //过了小时准点 存储标志设为否
{
SaveHourFlag = false;
}
#endregion
#region "输差每日23:59:55 存盘一次
if (SAVETIME.Hour == 23 && SAVETIME.Minute.ToString() == "59" && SAVETIME.Second.ToString() == "55" && SaveSCDayFlag == false) //过了零点十分则日报表
{
strQuery = "select id, in_p,out_p,rtime, scname, ssintotal, ssouttotal, sssc, ssscbfs, jrlintotal, jrlouttotal, jrlsc, jrlscbfs, station_id, sctype, redept_name from SC_DAYDATA where id=0 ";
DataTable ScTotalTableH = new DataTable();
ScTotalTableH = OracleLink.ExecuteDataTable(strQuery, "DTJK", strErr);
ScTotalTableH.Rows.Clear();
try
{
for (int j = 0; j < dtScRealTime.Rows.Count; j++)
{
DataRow tempRow = ScTotalTableH.NewRow();
tempRow["RTIME"] = SAVETIME;
tempRow["ID"] = dtScRealTime.Rows[j]["SCID"];
tempRow["IN_P"] = dtScRealTime.Rows[j]["IN_P"];
tempRow["OUT_P"] = dtScRealTime.Rows[j]["OUT_P"];
tempRow["scname"] = dtScRealTime.Rows[j]["SCNAME"];
tempRow["ssintotal"] = dtScRealTime.Rows[j]["SsInTotal"];
tempRow["ssouttotal"] = dtScRealTime.Rows[j]["SsOutTotal"];
tempRow["sssc"] = dtScRealTime.Rows[j]["SsSc"];
tempRow["ssscbfs"] = dtScRealTime.Rows[j]["SsPer"];
tempRow["jrlintotal"] = dtScRealTime.Rows[j]["JrInTotal"];
tempRow["jrlouttotal"] = dtScRealTime.Rows[j]["JrOutTotal"];
tempRow["jrlsc"] = dtScRealTime.Rows[j]["JrSc"];
tempRow["jrlscbfs"] = dtScRealTime.Rows[j]["JrPer"];
tempRow["station_id"] = dtScRealTime.Rows[j]["station_id"];
tempRow["redept_name"] = dtScRealTime.Rows[j]["RE_DEPT_ID"];
tempRow["sctype"] = dtScRealTime.Rows[j]["SCTYPE"];
ScTotalTableH.Rows.Add(tempRow);
}
strQuery = "select id, rtime,in_p,out_p, scname, ssintotal, ssouttotal, sssc, ssscbfs, jrlintotal, jrlouttotal, jrlsc, jrlscbfs, station_id, sctype, redept_name from SC_DAYDATA ";
OracleLink.SaveDataTable(strQuery, ScTotalTableH, "DTJK", strErr);
strErr = "注意:" + DateTime.Now + "保存实时输差数据成功" + "\r\n";
SaveSCDayFlag = true;
textBox1.AppendText(strErr);
}
catch (SystemException err)
{
if (err.Message != null)
{
strErr = ("注意:" + DateTime.Now + "保存输差数据失败" + err.Message) + "\r\n";
textBox1.AppendText(strErr);
}
}
}
if (SAVETIME.Hour != 23 && SAVETIME.Minute.ToString() != "59" && SAVETIME.Second.ToString() != "55") //过了小时准点 存储标志设为否
{
SaveSCDayFlag = false;
}
#endregion
#region "存日报表"//-----------------------------------------------------------
if (SAVETIME.Hour == 0 && SAVETIME.Minute.ToString() == "10" && SaveDayFlag == false) //过了零点十分则日报表
{
string Queryql = "select ID,RTIME,QL,DEPT_ID,STATION_ID,JLD_ID,JLSJ from DAYREPORT where ID=0";
DataTable SaveDAYTable = OracleLink.ExecuteDataTable(Queryql, "DTJK", strErr);
DateTime _Date = DateTime.Now.AddDays(-1);
_Date = DateTime.Parse(_Date.ToString("yyyy-MM-dd"));
for (int j = 0; j < TotalTable.Rows.Count; j++)
{
DataRow tempRow = SaveDAYTable.NewRow();
tempRow["ID"] = TotalTable.Rows[j]["ID"];
tempRow["RTIME"] = _Date;
tempRow["QL"] = TotalTable.Rows[j]["ZRL"];
tempRow["DEPT_ID"] = TotalTable.Rows[j]["DEPT_ID"];
tempRow["STATION_ID"] = TotalTable.Rows[j]["STATION_ID"];
tempRow["JLD_ID"] = TotalTable.Rows[j]["JLD_ID"];
tempRow["JLSJ"] = TotalTable.Rows[j]["ZRSJ"];
SaveDAYTable.Rows.Add(tempRow);
}
Queryql = "select ID,RTIME,QL,DEPT_ID,STATION_ID,JLD_ID,JLSJ from DAYREPORT";
try
{
OracleLink.SaveDataTable(Queryql, SaveDAYTable, "DTJK", strErr);
//SaveDAYTable.WriteXml(strDataPath + DateTime.Now.ToString() + "SaveTable.xml",XmlWriteMode.WriteSchema);
//File.Copy(strDataPath + "TotalData.xml", strDataPath + DateTime.Now.ToString() + "TotalData.xml");
strErr = "注意:" + DateTime.Now + "保存日报表成功" + "\r\n";
textBox1.AppendText(strErr);
SaveDayFlag = true;
SaveDAYTable.Dispose();
}
catch (SystemException err)
{
if (err.Message != null)
{
strErr = "注意:" + DateTime.Now + "保存日报表数据出错" + strErr + "\r\n";
textBox1.AppendText(strErr);
}
}
}
if (SAVETIME.Hour != 1 && SAVETIME.Minute.ToString() != "10") //过了小时准点 存储标志设为否
{
SaveDayFlag = false;
}
#endregion
}
#endregion
}
catch { }
}
private void frmMain_Activated(object sender, EventArgs e)
{
}
private void frmMain_FormClosed(object sender, FormClosedEventArgs e)
{
CloseConsel("ConsoleGetPLCData");
}
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
CloseConsel("ConsoleGetPLCData");
File.WriteAllText(strParPath + "runstate.txt", "false");
System.Environment.Exit(0);//彻底关闭线程
}
private void timer2_Tick(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
string strQuery = "update control set ThreadRestartFlag='1',Thread_ZCID='" + comboBox1.SelectedValue.ToString() + "' where id=1 "; //从数据库中查询出所有站场的名称和站场ID//返回不带重复记录的站场ID表格
OracleLink.ExecuteNonQuery(strQuery, "DTJK", strErr);
}
private void button1_Click(object sender, EventArgs e)
{
string strQuery = "update control set ThreadRestartFlag='1',Thread_ZCID='" + comboBox1.SelectedValue.ToString() + "' where id=1 "; //从数据库中查询出所有站场的名称和站场ID//返回不带重复记录的站场ID表格
OracleLink.ExecuteNonQuery(strQuery, "DTJK", strErr);
}
private void button4_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.SelectedPath = @"D:\";
if (fbd.ShowDialog() == DialogResult.OK)
{
this.textBox2.Text = fbd.SelectedPath;
}
File.WriteAllText(strAppPath + "\\CopyPath.txt", textBox2.Text);
}
public void CopyDirectory(string sourceDirName, string destDirName)
{
try
{
if (!Directory.Exists(destDirName))
{
Directory.CreateDirectory(destDirName);
File.SetAttributes(destDirName, File.GetAttributes(sourceDirName));
}
if (destDirName[destDirName.Length - 1] != Path.DirectorySeparatorChar)
destDirName = destDirName + Path.DirectorySeparatorChar;
string[] files = Directory.GetFiles(sourceDirName);
foreach (string file in files)
{
File.Copy(file, destDirName + Path.GetFileName(file), true);
File.SetAttributes(destDirName + Path.GetFileName(file), FileAttributes.Normal);
//total++;
}
string[] dirs = Directory.GetDirectories(sourceDirName);
foreach (string dir in dirs)
{
CopyDirectory(dir, destDirName + Path.GetFileName(dir));
}
}
catch (Exception ex)
{
StreamWriter sw = new StreamWriter(Application.StartupPath + "\\log.txt", true);
sw.Write(ex.Message + " " + DateTime.Now + "\r\n");
sw.Close();
}
}
}
}