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(); } } } }