浏览代码

Merge branch 'master' of ssh://10.10.100.21/source/mes-client

Hcsy 7 年之前
父节点
当前提交
bf7fb825f9

+ 3 - 38
PLCDataReader/DataOperate/DataHelper.cs

@@ -15,7 +15,7 @@ namespace UAS_PLCDataReader.DataOperate
         //泽天ERP地址
         public static readonly string ERPAddesss = "http://183.238.39.179:8099/ERP/";
         //用户选择的数据库的连接字符串
-        public static string DBConnectionString ;
+        public static string DBConnectionString;
         public static OracleConnection connection = null;
         OracleCommand command = null;
         /// <summary>
@@ -56,7 +56,6 @@ namespace UAS_PLCDataReader.DataOperate
         {
             DataTable dt = new DataTable();
             string sql = "select " + Field + " from " + TableName + " where " + Condition;
-            Console.WriteLine(sql);
             command = new OracleCommand(sql, connection);
             OracleDataAdapter ad = new OracleDataAdapter();
             ad.SelectCommand = command;
@@ -86,41 +85,6 @@ namespace UAS_PLCDataReader.DataOperate
             }
         }
 
-        /// <summary>
-        /// 执行打印的SQL
-        /// </summary>
-        /// <param name="SQL">SQL语句</param>
-        /// <param name="Parameters">动态添加的参数,主要根据条码枪扫描获取</param>
-        /// <returns></returns>
-        public object ExecutePrintSQL(string SQL, params string[] Parameters)
-        {
-            //按照?拆分数据,然后以:Param替换问号,同时添加参数
-            string[] Param = SQL.Split('?');
-            int ParamNum = Param.Length - 1;
-            //条码打印必然存在需要维护的参数
-            if (ParamNum > 0)
-            {
-                StringBuilder sb = new StringBuilder();
-                for (int i = 0; i < ParamNum; i++)
-                {
-                    sb.Append(Param[i] + ":Param" + i);
-                }
-                command = new OracleCommand(sb.ToString(), connection);
-
-                for (int i = 0; i < ParamNum; i++)
-                {
-                    command.Parameters.Add("Param" + i, OracleDbType.Varchar2, Parameters[i], ParameterDirection.Input);
-                }
-                OracleDataAdapter ad = new OracleDataAdapter(command);
-                DataTable dt = new DataTable();
-                ad.Fill(dt);
-                ad.Dispose();
-                command.Dispose();
-                return dt;
-            }
-            return "参数错误,请检查SQL语句";
-        }
-
         /// <summary>
         /// 获取指定表的记录的条数 ,带条件
         /// </summary>
@@ -529,6 +493,7 @@ namespace UAS_PLCDataReader.DataOperate
                 for (int i = 0; i < addpar.Length; i++)
                     command.Parameters.Add(new OracleParameter(addpar[i].ToString(), OracleDbType.Varchar2, names[i], ParameterDirection.Input));
             }
+            Console.WriteLine(SQL);
             switch (Type.ToUpper())
             {
                 case "SELECT":
@@ -540,7 +505,7 @@ namespace UAS_PLCDataReader.DataOperate
                     }
                     catch (Exception e)
                     {
-                        LogManager.DoLog(e.StackTrace + e.Message);
+                        LogManager.DoLog(e.StackTrace + e.Message + SQL);
                         connection = new OracleConnection(DBConnectionString);
                         connection.Open();
                         command = new OracleCommand(SQL, connection);

+ 1 - 1
PLCDataReader/Device/Information/DeviceStatusInfo.cs

@@ -53,7 +53,7 @@ namespace UAS_PLCDataReader.Device.Infomation
             sql.Append("select * from DEVICERUNRECORD where drr_decode='"+ de_code + "'");
             GridDeviceRunLog.DataSource = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
             sql.Clear();
-            sql.Append("select '接收'||nvl(dpg_senddatasize,0)||'字节' dpg_receivedatasize,'发送'||nvl(dpg_receivedatasize,0)||'字节' dpg_senddatasize");
+            sql.Append("select '接收'||nvl(dpg_receivedatasize,0)||'字节' dpg_receivedatasize,'发送'||nvl(dpg_senddatasize,0)||'字节' dpg_senddatasize");
             sql.Append(",dpg_onlinetime,dpg_offlinetime,'IP:'||dnc_ip dnc_ip,'端口:'|| dnc_port||',间隔'||dpg_interval||'S' dnc_port,");
             sql.Append("round(to_number(sysdate-DPG_ONLINETIME )*1440) dpg_runtime from devicepollinglog left join DEVICENETCONFIG on dnc_decode=dpg_decode ");
             sql.Append("where dpg_id=(select max(dpg_id) from devicepollinglog where dpg_decode='" + de_code + "')");

+ 8 - 1
PLCDataReader/Main.Designer.cs

@@ -198,6 +198,7 @@ namespace UAS_PLCDataReader
             this.TimerDeviceStatus = new System.Windows.Forms.Timer(this.components);
             this.CommonTipController = new DevExpress.Utils.ToolTipController(this.components);
             this.TimerUpdateDevice = new System.Windows.Forms.Timer(this.components);
+            this.TimerUpdateSQL = new System.Windows.Forms.Timer(this.components);
             ((System.ComponentModel.ISupportInitialize)(this.RibbonNav)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.MainTabControl)).BeginInit();
             this.MainTabControl.SuspendLayout();
@@ -1321,7 +1322,7 @@ namespace UAS_PLCDataReader
             this.dpc_decode.VisibleIndex = 1;
             this.dpc_decode.Width = 90;
             // 
-            // PollingSettingDeviceSearchLookUpEdit1
+            // PollSettingDeviceSearchLookUpEdit
             // 
             this.PollSettingDeviceSearchLookUpEdit.AutoHeight = false;
             this.PollSettingDeviceSearchLookUpEdit.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
@@ -1932,6 +1933,11 @@ namespace UAS_PLCDataReader
             this.TimerUpdateDevice.Interval = 20000;
             this.TimerUpdateDevice.Tick += new System.EventHandler(this.TimerUpdateDevice_Tick);
             // 
+            // TimerUpdateSQL
+            // 
+            this.TimerUpdateSQL.Interval = 5000;
+            this.TimerUpdateSQL.Tick += new System.EventHandler(this.TimerUpdateSQL_Tick);
+            // 
             // Main
             // 
             this.AllowFormGlass = DevExpress.Utils.DefaultBoolean.False;
@@ -2170,5 +2176,6 @@ namespace UAS_PLCDataReader
         private SimpleButton ButtonSaveClientParam;
         private DevExpress.XtraGrid.Views.Grid.GridView repositoryItemSearchLookUpEdit1View;
         private DevExpress.XtraEditors.Repository.RepositoryItemSearchLookUpEdit PollSettingDeviceSearchLookUpEdit;
+        private System.Windows.Forms.Timer TimerUpdateSQL;
     }
 }

+ 25 - 15
PLCDataReader/Main.cs

@@ -3,7 +3,6 @@ using System.Data;
 using System.Text;
 using System.Collections.Generic;
 using System.Drawing;
-using System.Threading;
 using System.Windows.Forms;
 using DevExpress.XtraBars;
 using DevExpress.XtraGrid.Views.Grid;
@@ -29,12 +28,14 @@ namespace UAS_PLCDataReader
         DataHelper dh = SystemInf.dh;
         ModeBusTCPServer mbt = new ModeBusTCPServer();
         List<string> SQL = new List<string>();
+
+        DataHelper updatedh = new DataHelper();
         //存放所有的设备返回的数据,用于比较
         public static Dictionary<string, Entity.Device> ReturnData = new Dictionary<string, Entity.Device>();
         /// <summary>
         /// 需要更新的设备列表
         /// </summary>
-        public static Queue<Entity.Device> QueueUpdateDevice = new Queue<Entity.Device>();
+        public static Queue<string> QueueUpdateDevice = new Queue<string>();
         /// <summary>
         /// 本地设定的上传时间
         /// </summary>
@@ -183,11 +184,12 @@ namespace UAS_PLCDataReader
                 TimerUpdateDevice.Interval = 60 * 1000;
             }
             TimerUpdateDevice.Start();
+            TimerUpdateSQL.Start();
 
             Ptime = new Dictionary<int, PollingTimer>();
 
-            ButtonPollingSetting.PerformClick();
-            ButtonStartPolling.PerformClick();
+            //ButtonPollingSetting.PerformClick();
+            //ButtonStartPolling.PerformClick();
         }
         #endregion
 
@@ -414,18 +416,26 @@ namespace UAS_PLCDataReader
                     sql.Clear();
                     sql.Append("insert into DEVICEPOLLINGLOG(dpg_id,dpg_decode,dpg_starttime,dpg_interval)values");
                     sql.Append("(DEVICEPOLLINGLOG_seq.nextval,'" + pl.DeviceCode + "',sysdate,'" + pl.Interval + "')");
-                    dh.ExecuteSql(sql.ToString(), "insert");
-                    LogicHandler.UpdateDeviceStatus(pl.Dh, pl.DeviceCode, pl.DeviceName, DeviceStatus.Noanswer);
+                    QueueUpdateDevice.Enqueue(sql.ToString());
+                    LogicHandler.UpdateDeviceStatus(pl.DeviceCode, pl.DeviceName, DeviceStatus.Noanswer);
                     pt.AddTask(RunTask, pl);
                     //添加到状态为运行的行
                     PollSettingPaintRowIndex.Add(i);
                     GridPollingSetting.Focus();
                 }
-                else LogicHandler.UpdateDeviceStatus(pl.Dh, pl.DeviceCode, pl.DeviceName, DeviceStatus.Stopped);
+                else LogicHandler.UpdateDeviceStatus(pl.DeviceCode, pl.DeviceName, DeviceStatus.Stopped);
             }
             ButtonSaveCommandSet.DoSaveAfterHandler(false);
         }
 
+        private void TimerUpdateSQL_Tick(object sender, EventArgs e)
+        {
+            while (QueueUpdateDevice.Count > 0)
+            {
+                updatedh.ExecuteSql(QueueUpdateDevice.Dequeue(), "update");
+            }
+        }
+
         /// <summary>
         /// 绘制轮询状态
         /// </summary>
@@ -505,7 +515,7 @@ namespace UAS_PLCDataReader
                     }
                     catch (Exception)
                     {
-                        LogicHandler.UpdateDeviceStatus(pl.Dh, pl.DeviceCode, pl.DeviceName, DeviceStatus.Disconnect);
+                        LogicHandler.UpdateDeviceStatus(pl.DeviceCode, pl.DeviceName, DeviceStatus.Disconnect);
                     }
                 }
                 //如果不包含该项数据则在键值对中添加
@@ -570,7 +580,7 @@ namespace UAS_PLCDataReader
                         if (ReturnData[Decode].ItemData == null || (ReturnData[Decode].ItemData.Count == 0 && ItemData.Count != 0))
                         {
                             ReturnData[Decode].ItemData = ItemData;
-                            LogicHandler.UpdateDeviceData(dh, Decode, ItemData);
+                            LogicHandler.UpdateDeviceData(Decode, ItemData);
                         }
                         //每次更新轮询的数据
                         ReturnData[Decode].ReceiveDataSize += ReceiveCommandByteSize;
@@ -578,14 +588,14 @@ namespace UAS_PLCDataReader
                         if (BaseUtil.CheckDicDiff(ReturnData[Decode].ItemData, ItemData))
                         {
                             ReturnData[Decode].ItemData = ItemData;
-                            LogicHandler.UpdateDeviceData(dh, Decode, ItemData);
-                            LogicHandler.DoDeviceDataDiffLog(dh, pl.DeviceCode, pl.DeviceName, Command, pl.CommandCode, User.UserName);
+                            LogicHandler.UpdateDeviceData(Decode, ItemData);
+                            LogicHandler.DoDeviceDataDiffLog(pl.DeviceCode, pl.DeviceName, Command, pl.CommandCode, User.UserName);
                         }
                     }
                     client[DpcID].Returnvalue.Remove(IP);
                 }
             }
-            else LogicHandler.UpdateDeviceStatus(pl.Dh, pl.DeviceCode, pl.DeviceName, DeviceStatus.Disconnect);
+            else LogicHandler.UpdateDeviceStatus(pl.DeviceCode, pl.DeviceName, DeviceStatus.Disconnect);
         }
 
         /// <summary>
@@ -614,7 +624,7 @@ namespace UAS_PLCDataReader
             if (ButtonSaveCommandSet.LastSaveID != null && ButtonSaveCommandSet.LastSaveID.Length > 0)
             {
                 dh.BatchInsert(sql.ToString(), new string[] { "dpc_id" }, ButtonSaveCommandSet.LastSaveID);
-            }   
+            }
             GridPollingSetting.RefreshData();
         }
         /// <summary>
@@ -662,8 +672,8 @@ namespace UAS_PLCDataReader
             {
                 DeviceStatusQuerySQL.Clear();
                 CheckEditDeviceStatusEnable_CheckedChanged(sender, e);
-                  //填充筛选条件,车间和线体
-                  DataTable dt = (DataTable)dh.ExecuteSql("select wc_code,wc_name from workcenter", "select");
+                //填充筛选条件,车间和线体
+                DataTable dt = (DataTable)dh.ExecuteSql("select wc_code,wc_name from workcenter", "select");
                 BaseUtil.FillComBoxEditWidthDataTable(ComboxDeviceStatusWC, "wc_name", "wc_code", dt, true);
             }
         }

+ 3 - 0
PLCDataReader/Main.resx

@@ -543,6 +543,9 @@
   <metadata name="TimerUpdateDevice.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>350, 20</value>
   </metadata>
+  <metadata name="TimerUpdateSQL.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>520, 25</value>
+  </metadata>
   <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAABMLAAATCwAAAAAAAAAA

+ 15 - 72
PLCDataReader/PublicMethod/LogicHandler.cs

@@ -97,17 +97,6 @@ namespace UAS_PLCDataReader.PublicMethod
             return true;
         }
 
-        /// <summary>
-        /// 进行差异日志记录
-        /// </summary>
-        public static void DoDeviceDataDiffLog(DataHelper dh, string iDeCode, string iDeName, string iCommand, string iCommandFrom, string iMan)
-        {
-            sql.Clear();
-            sql.Append("insert into DeviceRunRecord(drr_id,drr_decode,drr_dename,drr_command,drr_commandfrom,drr_date,drr_doman,drr_remark)");
-            sql.Append("values(DeviceRunRecord_seq.nextval,'" + iDeCode + "','" + iDeName + "','" + iCommand + "','" + iCommandFrom + "',sysdate,'" + iMan + "','')");
-            dh.ExecuteSql(sql.ToString(), "insert");
-        }
-
         /// <summary>
         /// 进行差异日志记录
         /// </summary>
@@ -116,7 +105,7 @@ namespace UAS_PLCDataReader.PublicMethod
             sql.Clear();
             sql.Append("insert into DeviceRunRecord(drr_id,drr_decode,drr_dename,drr_command,drr_commandfrom,drr_date,drr_doman,drr_remark)");
             sql.Append("values(DeviceRunRecord_seq.nextval,'" + iDeCode + "','" + iDeName + "','" + iCommand + "','" + iCommandFrom + "',sysdate,'" + iMan + "','')");
-            dh.ExecuteSql(sql.ToString(), "insert");
+            Main.QueueUpdateDevice.Enqueue(sql.ToString());
         }
 
         /// <summary>
@@ -140,8 +129,7 @@ namespace UAS_PLCDataReader.PublicMethod
                 sql.Append("dpg_offlinetime = sysdate,dpg_status='disconnected' where dpg_id=(select max(dpg_id)");
                 sql.Append(" from DEVICEPOLLINGLOG where dpg_decode='" + iDeCode + "') and dpg_status='running'");
             }
-
-            dh.ExecuteSql(sql.ToString(), "insert");
+            Main.QueueUpdateDevice.Enqueue(sql.ToString());
         }
 
         /// <summary>
@@ -165,7 +153,7 @@ namespace UAS_PLCDataReader.PublicMethod
                 sql.Append(",dpg_offlinetime = sysdate,dpg_status='disconnected'");
             }
             sql.Append(" where dpg_id=(select max(dpg_id) from DEVICEPOLLINGLOG where dpg_decode='" + iDeCode + "')");
-            dh.ExecuteSql(sql.ToString(), "insert");
+            Main.QueueUpdateDevice.Enqueue(sql.ToString());
         }
 
         /// <summary>
@@ -180,52 +168,7 @@ namespace UAS_PLCDataReader.PublicMethod
             sql.Append("update DEVICEPOLLINGLOG set dpg_status='running',dpg_senddatasize=nvl(dpg_senddatasize,0)+" + iSendDataSize);
             sql.Append(",dpg_receivedatasize=nvl(dpg_receivedatasize,0)+" + iReceiveDataSize + ",dpg_count=nvl(dpg_count,0)+1 ");
             sql.Append(" where dpg_id=(select max(dpg_id) from DEVICEPOLLINGLOG where dpg_decode='" + iDeCode + "')");
-            dh.ExecuteSql(sql.ToString(), "insert");
-        }
-
-        /// <summary>
-        /// 更新设备数据投入,产出等数据
-        /// </summary>
-        /// <param name="Decode"></param>
-        /// <param name="ItemData"></param>
-        public static void UpdateDeviceData(DataHelper dh, string Decode, Dictionary<string, string> ItemData)
-        {
-            string INQTY = "";
-            string OUTQTY = "";
-            string TEMPERATURE = "";
-            string PARAM1 = "";
-            string PARAM2 = "";
-            string PARAM3 = "";
-            foreach (var item in ItemData)
-            {
-                switch (item.Key)
-                {
-                    case "INQTY":
-                        INQTY = item.Value;
-                        break;
-                    case "OUTQTY":
-                        OUTQTY = item.Value;
-                        break;
-                    case "TEMPERATURE":
-                        TEMPERATURE = item.Value;
-                        break;
-                    case "PARAM1":
-                        PARAM1 = item.Value;
-                        break;
-                    case "PARAM2":
-                        PARAM2 = item.Value;
-                        break;
-                    case "PARAM3":
-                        PARAM3 = item.Value;
-                        break;
-                    default:
-                        break;
-                }
-            }
-            sql.Clear();
-            sql.Append("update DeviceRunstatus set dr_qty=:dr_inqty,dr_okqty=:dr_okqty,dr_TEMPERATURE=:dr_TEMPERATURE,");
-            sql.Append("dr_value1=:dr_value1,dr_value2=:dr_value2,dr_value3=:dr_value3,dr_updatedate=sysdate where dr_decode='" + Decode + "'");
-            dh.ExecuteSql(sql.ToString(), "update", INQTY, OUTQTY, TEMPERATURE, PARAM1, PARAM2, PARAM3);
+            Main.QueueUpdateDevice.Enqueue(sql.ToString());
         }
 
         /// <summary>
@@ -235,12 +178,12 @@ namespace UAS_PLCDataReader.PublicMethod
         /// <param name="ItemData"></param>
         public static void UpdateDeviceData(string Decode, Dictionary<string, string> ItemData)
         {
-            string INQTY = "";
-            string OUTQTY = "";
-            string TEMPERATURE = "";
-            string PARAM1 = "";
-            string PARAM2 = "";
-            string PARAM3 = "";
+            string INQTY = "''";
+            string OUTQTY = "''";
+            string TEMPERATURE = "''";
+            string PARAM1 = "''";
+            string PARAM2 = "''";
+            string PARAM3 = "''";
             if (ItemData == null)
                 return;
             foreach (var item in ItemData)
@@ -270,9 +213,9 @@ namespace UAS_PLCDataReader.PublicMethod
                 }
             }
             sql.Clear();
-            sql.Append("update DeviceRunstatus set dr_qty=:dr_inqty,dr_okqty=:dr_okqty,dr_TEMPERATURE=:dr_TEMPERATURE,");
-            sql.Append("dr_value1=:dr_value1,dr_value2=:dr_value2,dr_value3=:dr_value3,dr_updatedate=sysdate where dr_decode='" + Decode + "'");
-            dh.ExecuteSql(sql.ToString(), "update", INQTY, OUTQTY, TEMPERATURE, PARAM1, PARAM2, PARAM3);
+            sql.Append("update DeviceRunstatus set dr_qty={0},dr_okqty={1},dr_TEMPERATURE={2},");
+            sql.Append("dr_value1={3},dr_value2={4},dr_value3={5},dr_updatedate=sysdate where dr_decode='" + Decode + "'");
+            Main.QueueUpdateDevice.Enqueue(string.Format(sql.ToString(), INQTY, OUTQTY, TEMPERATURE, PARAM1, PARAM2, PARAM3));
         }
 
         /// <summary>
@@ -282,14 +225,14 @@ namespace UAS_PLCDataReader.PublicMethod
         /// <param name="iDecode"></param>
         /// <param name="iDename"></param>
         /// <param name="iDestatus"></param>
-        public static void UpdateDeviceStatus(DataHelper dh, string iDecode, string iDename, string iDestatus)
+        public static void UpdateDeviceStatus(string iDecode, string iDename, string iDestatus)
         {
             sql.Clear();
             sql.Append("MERGE INTO DeviceRunstatus alias1 USING (select '" + iDecode + "' dr_decode from  dual) alias2 ");
             sql.Append("ON (alias1.dr_decode=alias2.dr_decode) WHEN MATCHED THEN  UPDATE  SET dr_startdate =sysdate,Dr_runstatus='" + iDestatus + "' ");
             sql.Append("WHEN NOT MATCHED THEN INSERT (Dr_id,dr_decode,dr_dename,Dr_runstatus,dr_startdate) VALUES (DeviceRunstatus_seq.nextval,");
             sql.Append("'" + iDecode + "','" + iDename + "','" + iDestatus + "',sysdate)");
-            dh.ExecuteSql(sql.ToString(), "update");
+            Main.QueueUpdateDevice.Enqueue(sql.ToString());
         }
     }
 }

+ 4 - 4
PLCDataReader/PublicMethod/ModBusTCPClient.cs

@@ -118,7 +118,7 @@ namespace UAS_PLCDataReader.PublicMethod
             }
             catch (Exception)
             {
-                LogicHandler.UpdateDeviceStatus(Dh, decode, dename, DeviceStatus.Disconnect);
+                LogicHandler.UpdateDeviceStatus(decode, dename, DeviceStatus.Disconnect);
                 LogicHandler.DoDevicePollingLog(decode, false);
             }
         }
@@ -142,10 +142,10 @@ namespace UAS_PLCDataReader.PublicMethod
                 socket.Send(arr);
 
                 byte[] receive = new byte[1024 * 1024];
-                LogicHandler.UpdateDeviceStatus(Dh, decode, dename, DeviceStatus.Noanswer);
+                LogicHandler.UpdateDeviceStatus(decode, dename, DeviceStatus.Noanswer);
                 LogicHandler.DoDevicePollingLog(decode, true);
                 int length = socket.Receive(receive);
-                LogicHandler.UpdateDeviceStatus(Dh, decode, dename, DeviceStatus.Running);
+                LogicHandler.UpdateDeviceStatus(decode, dename, DeviceStatus.Running);
                 if (!returnvalue.ContainsKey(socket.RemoteEndPoint.ToString()))
                 {
                     returnvalue.Add(socket.RemoteEndPoint.ToString(), BaseUtil.ByteToHexadecimalString(receive, length));
@@ -153,7 +153,7 @@ namespace UAS_PLCDataReader.PublicMethod
             }
             catch (Exception)
             {
-                LogicHandler.UpdateDeviceStatus(Dh, decode, dename, DeviceStatus.Disconnect);
+                LogicHandler.UpdateDeviceStatus(decode, dename, DeviceStatus.Disconnect);
                 LogicHandler.DoDevicePollingLog(decode, false);
             }
         }