Browse Source

分别用数据库链接跑对应设备指令

章政 6 years ago
parent
commit
f44de3e3ff

+ 7 - 6
PLCDataReader/Main.cs

@@ -404,13 +404,13 @@ namespace UAS_PLCDataReader
                     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.DeviceCode, pl.DeviceName, "running");
+                    LogicHandler.UpdateDeviceStatus(pl.Dh, pl.DeviceCode, pl.DeviceName, "running");
                     pt.AddTask(RunTask, pl);
                     //添加到状态为运行的行
                     PollSettingPaintRowIndex.Add(i);
                     GridPollingSetting.Focus();
                 }
-                else LogicHandler.UpdateDeviceStatus(pl.DeviceCode, pl.DeviceName, "stopped");
+                else LogicHandler.UpdateDeviceStatus(pl.Dh, pl.DeviceCode, pl.DeviceName, "stopped");
             }
         }
 
@@ -486,6 +486,7 @@ namespace UAS_PLCDataReader
                 else
                 {
                     ModBusTCPClient modclient = new ModBusTCPClient(DNC.Rows[0]["dnc_ip"].ToString(), DNC.Rows[0]["dnc_port"].ToString(), pl.DeviceCode, pl.DeviceName);
+                    modclient.Dh = dh;
                     client.Add(DpcID, modclient);
                 }
                 //如果不包含该项数据则在键值对中添加
@@ -538,10 +539,10 @@ namespace UAS_PLCDataReader
                     }
                     else
                     {
-                        if (ReturnData[Decode].ItemData == null)
+                        if (ReturnData[Decode].ItemData == null|| ReturnData[Decode].ItemData.Count==0)
                         {
                             ReturnData[Decode].ItemData = ItemData;
-                            LogicHandler.UpdateDeviceData(Decode, ItemData);
+                            LogicHandler.UpdateDeviceData(dh, Decode, ItemData);
                         }
                         //每次更新轮询的数据
                         ReturnData[Decode].ReceiveDataSize += ReceiveCommandByteSize;
@@ -549,9 +550,9 @@ namespace UAS_PLCDataReader
                         if (BaseUtil.CheckDicDiff(ReturnData[Decode].ItemData, ItemData))
                         {
                             ReturnData[Decode].ItemData = ItemData;
-                            LogicHandler.UpdateDeviceData(Decode, ItemData);
+                            LogicHandler.UpdateDeviceData(dh, Decode, ItemData);
                             QueueUpdateDevice.Enqueue(ReturnData[Decode]);
-                            LogicHandler.DoDeviceDataDiffLog(pl.DeviceCode, pl.DeviceName, pl.CommandCode, User.UserName);
+                            LogicHandler.DoDeviceDataDiffLog(dh, pl.DeviceCode, pl.DeviceName, pl.CommandCode, User.UserName);
                         }
                     }
                     client[DpcID].Returnvalue.Remove(IP);

+ 21 - 10
PLCDataReader/PublicMethod/BaseUtil.cs

@@ -357,20 +357,31 @@ namespace UAS_PLCDataReader.PublicMethod
 
         public static int[] GetDecimalData(string HexStr, int DataSize)
         {
-            //去除前面的指令字符和数据长度字符
-            HexStr = HexStr.Replace(":", "");
-            string RealData = HexStr.Substring(6);
             List<int> ReturnData = new List<int>();
-            //每个地址位存的数据是DataSize个
-            for (int i = 0; i < RealData.Length; i = i + DataSize)
+            try
             {
-                if (i + DataSize < RealData.Length)
+                //去除前面的指令字符和数据长度字符
+                HexStr = HexStr.Replace(":", "");
+                if (HexStr != "")
                 {
-                    if (Convert.ToInt32("0x" + (RealData.Substring(i, DataSize).Substring(0, 4)), 16) / 1 != 0)
-                        ReturnData.Add(Convert.ToInt32("0x" + (RealData.Substring(i, DataSize).Substring(0, 4)), 16));
-                    else
-                        break;
+                    string RealData = HexStr.Substring(6);
+
+                    //每个地址位存的数据是DataSize个
+                    for (int i = 0; i < RealData.Length; i = i + DataSize)
+                    {
+                        if (i + DataSize < RealData.Length)
+                        {
+                            if (Convert.ToInt32("0x" + (RealData.Substring(i, DataSize).Substring(0, 4)), 16) / 1 != 0)
+                                ReturnData.Add(Convert.ToInt32("0x" + (RealData.Substring(i, DataSize).Substring(0, 4)), 16));
+                            else
+                                break;
+                        }
+                    }
                 }
+            }
+            catch (Exception)
+            {
+
             }
             return ReturnData.ToArray();
         }

+ 3 - 3
PLCDataReader/PublicMethod/LogicHandler.cs

@@ -41,7 +41,7 @@ namespace UAS_PLCDataReader.PublicMethod
         /// <summary>
         /// 进行差异日志记录
         /// </summary>
-        public static void DoDeviceDataDiffLog(string iDeCode, string iDeName, string iCommand, string iMan)
+        public static void DoDeviceDataDiffLog(DataHelper dh, string iDeCode, string iDeName, string iCommand, string iMan)
         {
             sql.Clear();
             sql.Append("insert into DeviceRunRecord(drr_id,drr_decode,drr_dename,drr_command,drr_date,drr_doman,drr_remark)");
@@ -54,7 +54,7 @@ namespace UAS_PLCDataReader.PublicMethod
         /// </summary>
         /// <param name="Decode"></param>
         /// <param name="ItemData"></param>
-        public static void UpdateDeviceData(string Decode, Dictionary<string, string> ItemData)
+        public static void UpdateDeviceData(DataHelper dh, string Decode, Dictionary<string, string> ItemData)
         {
             string INQTY = "";
             string OUTQTY = "";
@@ -81,7 +81,7 @@ namespace UAS_PLCDataReader.PublicMethod
             dh.ExecuteSql(sql.ToString(), "select", INQTY, OUTQTY, TEMPERATURE);
         }
 
-        public static void UpdateDeviceStatus(string iDecode, string iDename, string iDestatus)
+        public static void UpdateDeviceStatus(DataHelper dh, string iDecode, string iDename, string iDestatus)
         {
             sql.Clear();
             sql.Append("MERGE INTO DeviceRunstatus alias1 USING (select '" + iDecode + "' dr_decode from  dual) alias2 ");

+ 20 - 4
PLCDataReader/PublicMethod/ModBusTCPClient.cs

@@ -4,6 +4,7 @@ using System.Linq;
 using System.Net;
 using System.Net.Sockets;
 using System.Text;
+using UAS_PLCDataReader.DataOperate;
 
 namespace UAS_PLCDataReader.PublicMethod
 {
@@ -17,6 +18,8 @@ namespace UAS_PLCDataReader.PublicMethod
 
         private bool receiveData;
 
+        private DataOperate.DataHelper dh;
+
         private Dictionary<string, string> returnvalue = new Dictionary<string, string>();
 
         public bool IsOpen
@@ -84,6 +87,19 @@ namespace UAS_PLCDataReader.PublicMethod
             }
         }
 
+        internal DataHelper Dh
+        {
+            get
+            {
+                return dh;
+            }
+
+            set
+            {
+                dh = value;
+            }
+        }
+
         private string iP;
 
         private string port;
@@ -104,7 +120,7 @@ namespace UAS_PLCDataReader.PublicMethod
             catch (Exception e)
             {
                 Console.WriteLine(e.Message);
-                LogicHandler.UpdateDeviceStatus(decode, dename, "disconnect");
+                LogicHandler.UpdateDeviceStatus(Dh,decode, dename, "disconnect");
             }
         }
 
@@ -127,9 +143,9 @@ namespace UAS_PLCDataReader.PublicMethod
                 socket.Send(arr);
 
                 byte[] receive = new byte[1024 * 1024];
-                LogicHandler.UpdateDeviceStatus(decode, dename, "noanswer");
+                LogicHandler.UpdateDeviceStatus(Dh,decode, dename, "noanswer");
                 int length = socket.Receive(receive);
-                LogicHandler.UpdateDeviceStatus(decode, dename, "running");
+                LogicHandler.UpdateDeviceStatus(Dh,decode, dename, "running");
                 if (!returnvalue.ContainsKey(socket.RemoteEndPoint.ToString()))
                 {
                     returnvalue.Add(socket.RemoteEndPoint.ToString(), BaseUtil.ByteToHexadecimalString(receive, length));
@@ -138,7 +154,7 @@ namespace UAS_PLCDataReader.PublicMethod
             }
             catch (Exception)
             {
-                LogicHandler.UpdateDeviceStatus(decode, dename, "disconnect");
+                LogicHandler.UpdateDeviceStatus(Dh,decode, dename, "disconnect");
             }
         }
     }