Просмотр исходного кода

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

Hcsy 7 лет назад
Родитель
Сommit
8971b09293

+ 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);

+ 2 - 2
PLCDataReader/Main.cs

@@ -198,7 +198,7 @@ namespace UAS_PLCDataReader
             ButtonAddNetConfig.Grid = GridDeviceNetSetting;
             ButtonSaveNetConfig.Grid = GridDeviceNetSetting;
 
-            GridDeviceData.GetDataSQL = "select dr_decode,dr_dename,case when dr_runstatus='disconnected' then '无法连接' when dr_runstatus='stopped' then '未运行' when dr_runstatus='running' then '运行中' when dr_runstatus='noanswer' then '无应答' end dr_runstatus,dr_qty,dr_okqty,de_item1||':'||dr_value1 dr_value1,de_item2||':'||dr_value2 dr_value2,de_item3||':'||dr_value3 dr_value3,de_item4||':'||dr_value4 dr_value4,de_item5||':'||dr_value5 dr_value5,de_item6||':'||dr_value6 dr_value6,de_item7||':'||dr_value7 dr_value7,de_item8||':'||dr_value8 dr_value8,de_item9||':'||dr_value9 dr_value9,de_item10||':'||dr_value10 dr_value10 from devicerunstatus left join device on dr_decode=de_code order by dr_decode";
+            GridDeviceData.GetDataSQL = "select dr_decode,dr_dename,case when dr_runstatus='disconnect' then '无法连接' when dr_runstatus='stopped' then '未运行' when dr_runstatus='running' then '运行中' when dr_runstatus='noanswer' then '无应答' end dr_runstatus,dr_qty,dr_okqty,de_item1||':'||dr_value1 dr_value1,de_item2||':'||dr_value2 dr_value2,de_item3||':'||dr_value3 dr_value3,de_item4||':'||dr_value4 dr_value4,de_item5||':'||dr_value5 dr_value5,de_item6||':'||dr_value6 dr_value6,de_item7||':'||dr_value7 dr_value7,de_item8||':'||dr_value8 dr_value8,de_item9||':'||dr_value9 dr_value9,de_item10||':'||dr_value10 dr_value10 from devicerunstatus left join device on dr_decode=de_code order by dr_decode";
 
             GridDeviceRunLog.GetDataSQL = "SELECT * FROM DEVICERUNRECORD";
             GridDeviceRunLog.ID = "drr_id";
@@ -1002,7 +1002,7 @@ namespace UAS_PLCDataReader
 
         private void Main_FormClosing(object sender, FormClosingEventArgs e)
         {
-            dh.ExecuteSql("update devicerunstatus set dr_runstatus='disconnected'", "update");
+            dh.ExecuteSql("update devicerunstatus set dr_runstatus='"+DeviceStatus.Disconnect+"'", "update");
         }
 
         private void ButtonRefreshDeviceData_Click(object sender, EventArgs e)

+ 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)

+ 7 - 5
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))
                     {
@@ -400,7 +400,8 @@ namespace UAS_PLCDataReader.PublicMethod
                     }
                 }
             }
-            return ReturnStr.ToUpper();
+            int ValueDataSize = Convert.ToInt32("0x" + (ReturnStr.Substring(4, 2)), 16) * 2;
+            return ReturnStr.ToUpper().Substring(0, ValueDataSize + 6 + 2);//首部6位和尾部2位校验位
         }
 
         public static int[] GetDecimalData(string HexStr, int DataSize)
@@ -412,8 +413,9 @@ namespace UAS_PLCDataReader.PublicMethod
                 HexStr = HexStr.Replace(":", "");
                 if (HexStr != "")
                 {
+                    int ValueDataSize = Convert.ToInt32("0x" + (HexStr.Substring(4, 2)), 16) * 2;
                     string RealData = HexStr.Substring(6);
-                    RealData = RealData.Substring(0, RealData.Length - 2);
+                    RealData = RealData.Substring(0, ValueDataSize);
                     //每个地址位存的数据是DataSize个
                     for (int i = 0; i < RealData.Length; i = i + DataSize)
                     {

+ 3 - 3
PLCDataReader/PublicMethod/LogicHandler.cs

@@ -122,11 +122,11 @@ namespace UAS_PLCDataReader.PublicMethod
             if (iOnLine)
             {
                 sql.Append("dpg_onlinetime = sysdate,dpg_status='running' where dpg_id=(select max(dpg_id)");
-                sql.Append(" from DEVICEPOLLINGLOG where dpg_decode='" + iDeCode + "') and nvl(dpg_status,'disconnected')='disconnected'");
+                sql.Append(" from DEVICEPOLLINGLOG where dpg_decode='" + iDeCode + "') and nvl(dpg_status,'disconnect')='disconnect'");
             }
             else
             {
-                sql.Append("dpg_offlinetime = sysdate,dpg_status='disconnected' where dpg_id=(select max(dpg_id)");
+                sql.Append("dpg_offlinetime = sysdate,dpg_status='disconnect' where dpg_id=(select max(dpg_id)");
                 sql.Append(" from DEVICEPOLLINGLOG where dpg_decode='" + iDeCode + "') and dpg_status='running'");
             }
             Main.QueueUpdateDevice.Enqueue(sql.ToString());
@@ -167,7 +167,7 @@ namespace UAS_PLCDataReader.PublicMethod
             }
             else
             {
-                sql.Append(",dpg_offlinetime = sysdate,dpg_status='disconnected'");
+                sql.Append(",dpg_offlinetime = sysdate,dpg_status='disconnect'");
             }
             sql.Append(" where dpg_id=(select max(dpg_id) from DEVICEPOLLINGLOG where dpg_decode='" + iDeCode + "')");
             Main.QueueUpdateDevice.Enqueue(sql.ToString());

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