Browse Source

调整数据解析字符长度异常BUG

章政 6 years ago
parent
commit
bbd40d1c73

+ 15 - 54
PLCDataReader/DataOperate/DataHelper.cs

@@ -9,11 +9,14 @@ namespace UAS_PLCDataReader.DataOperate
 {
     class DataHelper
     {
-
-        //泽天外网地址
-        private readonly string ConnectionStrings = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=GOLDEN_TEST;Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.158)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));";
-        //泽天ERP地址
-        public static readonly string ERPAddesss = "http://183.238.39.179:8099/ERP/";
+        //内网地址
+        public static readonly string Address = "192.168.0.158";
+        //外网地址
+        //public static readonly string Address = "183.238.39.179";
+        //外网地址
+        private readonly string ConnectionStrings = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=GOLDEN;Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + Address + ")(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));";
+        //ERP地址
+        public static readonly string ERPAddesss = "http://" + Address + ":8099/ERP/";
         //用户选择的数据库的连接字符串
         public static string DBConnectionString;
         public static OracleConnection connection = null;
@@ -467,6 +470,7 @@ namespace UAS_PLCDataReader.DataOperate
         {
             object result = null;
             command = new OracleCommand(SQL, connection);
+            Reconnect(command);
             if (SQL == null)
                 return null;
             //用来拼接参数的
@@ -560,18 +564,6 @@ namespace UAS_PLCDataReader.DataOperate
             return result;
         }
 
-        /// <summary>
-        /// 为了同步BS端的条码维护,检测时允许问号的存在,在检测时默认将问号换成:Param参数
-        /// </summary>
-        /// <param name="SQL"></param>
-        public void CheckSQL(string SQL)
-        {
-            SQL = SQL.Replace("?", ":Param");
-            command = new OracleCommand(SQL, connection);
-            command.ExecuteNonQuery();
-            command.Dispose();
-        }
-
         public int GetDistinctRowCount(string TableName, string Field)
         {
             DataTable dt = new DataTable();
@@ -860,41 +852,6 @@ namespace UAS_PLCDataReader.DataOperate
             }
         }
 
-
-        //将数据类型的列类型转换为DataTable
-        public DataTable DataTypeColumnToDataTable(DataTable dt)
-        {
-            DataTable dt1 = new DataTable();
-            dt1.Rows.Add();
-            foreach (DataRow dr in dt.Rows)
-            {
-                dt1.Columns.Add(dr[0].ToString());
-                int index = dt.Rows.IndexOf(dr);
-                if (dr[1].ToString() == "NUMBER")
-                {
-                    dt1.Rows[0][index] = 0;
-                }
-                if (dr[1].ToString() == "VARCHAR2")
-                {
-                    dt1.Rows[0][index] = "这是一段文字";
-                }
-                if (dr[1].ToString() == "DATE")
-                {
-                    dt1.Rows[0][index] = DateTime.Now.ToString("yyyy-MM-dd");
-                }
-                if (dr[1].ToString() == "FLOAT")
-                {
-                    dt1.Rows[0][index] = 1.0;
-                }
-                if (dr[1].ToString() == "CLOB")
-                {
-                    dt1.Rows[0][index] = "一段长文字";
-                }
-            }
-            return dt1;
-        }
-
-
         /// <summary>
         /// 通过条件更新
         /// </summary>
@@ -1093,9 +1050,13 @@ namespace UAS_PLCDataReader.DataOperate
             return param;
         }
 
-        public void Dispose()
+        private void Reconnect(OracleCommand cmd)
         {
-
+            if (cmd.Connection.State == ConnectionState.Closed)
+            {
+                cmd.Connection.Open();
+                LogManager.DoLog("超时重连");
+            }
         }
     }
 }

+ 1 - 1
PLCDataReader/Login.cs

@@ -38,7 +38,7 @@ namespace UAS_PLCDataReader
                 string master = BaseUtil.GetComboxEditValue(Master);
                 if (LogicHandler.CheckUserLogin(UserName.Text, PassWord.Text, master, out oErrMessage))
                 {
-                    DataHelper.DBConnectionString = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=" + master + ";Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=183.238.39.179)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));";
+                    DataHelper.DBConnectionString = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=" + master + ";Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + DataHelper.Address + ")(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));";
                     dh = new DataHelper();
                     SystemInf.dh = dh;
                     BaseUtil.SetCacheData("Master", Master.SelectedIndex);

+ 1 - 1
PLCDataReader/MainWindow.cs

@@ -53,7 +53,7 @@ namespace UAS_PLCDataReader
 
         private void SEND_Click(object sender, EventArgs e)
         {
-            Console.WriteLine(BaseUtil.ASCIIToString(SENDMESSAGE.Text));
+            Console.WriteLine(BaseUtil.ASCIIToString("3A30313033343032314330303030303231374130303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303430DA"));
         }
 
         public static string HexStringToASCII(string hexstring)

+ 3 - 3
PLCDataReader/PublicMethod/BaseUtil.cs

@@ -340,10 +340,10 @@ namespace UAS_PLCDataReader.PublicMethod
         public static string ASCIIToString(string ASCII)
         {
             string ReturnStr = "";
-            ASCII = ASCII.Replace(" ", "").Replace("3A", "").Replace("0D", "").Replace("0A", "");
-            for (int i = 0; i < ASCII.Length; i = i + 2)
+            ASCII = ASCII.Replace(" ", "").Replace("3A", "").Replace("DA", "").Replace("0D", "").Replace("0A", "");
+            for (int i = 0; i <= ASCII.Length; i = i + 2)
             {
-                if (i + 2 < ASCII.Length)
+                if (i + 2 <= ASCII.Length)
                 {
                     switch (ASCII.Substring(i, 2))
                     {

+ 6 - 4
PLCDataReader/PublicMethod/ModBusTCPClient.cs

@@ -116,15 +116,17 @@ namespace UAS_PLCDataReader.PublicMethod
                 serverFullAddr = new IPEndPoint(IPAddress.Parse(IP), int.Parse(Port));//设置IP,端口
                 socket.Connect(serverFullAddr);
             }
-            catch (Exception)
+            catch (Exception ex)
             {
                 LogicHandler.UpdateDeviceStatus(decode, dename, DeviceStatus.Disconnect);
                 LogicHandler.DoDevicePollingLog(decode, false);
+                LogManager.DoLog(ex.Message + ex.StackTrace);
             }
         }
 
         public void Send(string Command)
         {
+            string str = "";
             try
             {
                 if (!socket.Connected)
@@ -140,23 +142,23 @@ namespace UAS_PLCDataReader.PublicMethod
                     arr[i] = (byte)Convert.ToInt32(Command.Substring(i * 2, 2), 16);
                 }
                 socket.Send(arr);
-
                 byte[] receive = new byte[1024 * 1024];
                 LogicHandler.UpdateDeviceStatus(decode, dename, DeviceStatus.Noanswer);
                 LogicHandler.DoDevicePollingLog(decode, true);
                 int length = socket.Receive(receive);
                 LogicHandler.UpdateDeviceStatus(decode, dename, DeviceStatus.Running);
-                string str = BaseUtil.ByteToHexadecimalString(receive, length);
+                str = BaseUtil.ByteToHexadecimalString(receive, length);
                 LogicHandler.DoDevicePollingLog(decode, BaseUtil.ASCIIToString(str));
                 if (!returnvalue.ContainsKey(socket.RemoteEndPoint.ToString()))
                 {
                     returnvalue.Add(socket.RemoteEndPoint.ToString(), str);
                 }
             }
-            catch (Exception)
+            catch (Exception ex)
             {
                 LogicHandler.UpdateDeviceStatus(decode, dename, DeviceStatus.Disconnect);
                 LogicHandler.DoDevicePollingLog(decode, false);
+                LogManager.DoLog(ex.Message + ex.StackTrace + "\n" + decode + " " + str);
             }
         }
     }