Jelajahi Sumber

添加接收进制转换

章政 7 tahun lalu
induk
melakukan
8f87cc4ed5

+ 41 - 0
UAS_DeviceMonitor/Entity/SocketObject.cs

@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Sockets;
+using System.Text;
+
+namespace UAS_DeviceMonitor.Entity
+{
+    class SocketObject
+    {
+        private Socket socket;
+
+        private string receiveCoding;
+
+        public Socket Socket
+        {
+            get
+            {
+                return socket;
+            }
+
+            set
+            {
+                socket = value;
+            }
+        }
+
+        public string ReceiveCoding
+        {
+            get
+            {
+                return receiveCoding;
+            }
+
+            set
+            {
+                receiveCoding = value;
+            }
+        }
+    }
+}

+ 8 - 6
UAS_DeviceMonitor/Main.cs

@@ -293,18 +293,20 @@ namespace UAS_DeviceMonitor
             string Decode = pl.DeviceCode;
             string Dccode = pl.CommandCode;
             DataTable dt = (DataTable)dh.ExecuteSql("select dnc_ip,dnc_port from DEVICENETCONFIG where dnc_decode='" + Decode + "'", "select");
-            DataTable dt1 = (DataTable)dh.ExecuteSql("select dc_sendcoding,dc_value from devicecommand where dc_code='" + Dccode + "'", "select");
+            DataTable dt1 = (DataTable)dh.ExecuteSql("select dc_sendcoding,dc_value,dc_receivecoding from devicecommand where dc_code='" + Dccode + "'", "select");
             if (dt.Rows.Count > 0)
             {
                 string IP = dt.Rows[0]["dnc_ip"].ToString() + ":" + dt.Rows[0]["dnc_port"].ToString();
-                string Coding = "";
+                string SendCoding = "";
+                string ReceiveCoding = "";
                 string Command = "";
                 if (dt1.Rows.Count > 0)
                 {
-                    Coding = dt1.Rows[0]["dc_sendcoding"].ToString();
+                    SendCoding = dt1.Rows[0]["dc_sendcoding"].ToString();
+                    ReceiveCoding = dt1.Rows[0]["dc_receivecoding"].ToString();
                     Command = dt1.Rows[0]["dc_value"].ToString();
                 }
-                mbt.Send(IP, Coding, Command);
+                mbt.Send(IP, SendCoding, ReceiveCoding, Command);
                 //处理2秒之内返回的指令
                 Thread.Sleep(2000);
                 if (mbt.Returnvalue.ContainsKey(IP))
@@ -395,7 +397,7 @@ namespace UAS_DeviceMonitor
         //重新展示设备图像界面
         private void ShowDeviceStatus()
         {
-            DataTable dt = (DataTable)dh.ExecuteSql("select * from device left join DEVICEPOLLINGCONFIG on dpc_decode=de_code order by de_code", "select");
+            DataTable dt = (DataTable)dh.ExecuteSql("select * from device left join DEVICEPOLLINGCONFIG on dpc_decode=de_code where rownum<4 order by de_code", "select");
             int CountPerRow = PanelDeviceStatus.Width / 110;
             int RightPadding = PanelDeviceStatus.Width % 110;
             int Count = dt.Rows.Count;
@@ -436,7 +438,7 @@ namespace UAS_DeviceMonitor
         }
 
         private void PanelDeviceStatus_SizeChanged(object sender, EventArgs e)
-        {
+        {   
             if (PageDeviceStatus.PageVisible)
             {
                 ShowDeviceStatus();

+ 15 - 0
UAS_DeviceMonitor/PublicMethod/BaseUtil.cs

@@ -1,6 +1,8 @@
 using DevExpress.XtraEditors;
 using DevExpress.XtraEditors.Repository;
+using System;
 using System.Data;
+using System.Text;
 using UAS_DeviceMonitor.DataOperate;
 
 namespace UAS_DeviceMonitor.PublicMethod
@@ -80,5 +82,18 @@ namespace UAS_DeviceMonitor.PublicMethod
 
             return LRCre;
         }
+
+        public static string ByteToHexadecimalString(byte[] b, int length)
+        {
+            string returnStr = "";
+            if (b != null)
+            {
+                for (int i = 0; i < length; i++)
+                {
+                    returnStr += Convert.ToString(b[i], 16);//ToString("X2") 为C#中的字符串格式控制符
+                }
+            }
+            return returnStr;
+        }
     }
 }

+ 25 - 13
UAS_DeviceMonitor/PublicMethod/ModeBusTCPServer.cs

@@ -84,6 +84,8 @@ namespace UAS_DeviceMonitor.PublicMethod
             }
         }
 
+        public Dictionary<string, string> ReceiveCoding = new Dictionary<string, string>();
+
         private string iP;
 
         private string port;
@@ -106,7 +108,6 @@ namespace UAS_DeviceMonitor.PublicMethod
                     if (IpEntry.AddressList[i].AddressFamily == AddressFamily.InterNetwork)
                         iP = IpEntry.AddressList[i].ToString();
                 }
-                Console.WriteLine(iP);
                 //定义一个套接字用于监听客户端发来的信息  包含3个参数(IP4寻址协议,流式连接,TCP协议)
                 socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                 //服务端发送信息 需要1个IP地址和端口号
@@ -133,8 +134,10 @@ namespace UAS_DeviceMonitor.PublicMethod
             }
         }
 
-        public void Send(string IPAddress, string EnCoding, string Command)
+        public void Send(string IPAddress, string EnCoding, string receiveCoding, string Command)
         {
+            if (!ReceiveCoding.ContainsKey(IPAddress))
+                ReceiveCoding.Add(IPAddress, receiveCoding);
             foreach (Socket item in list)
             {
                 if (item != null)
@@ -226,13 +229,6 @@ namespace UAS_DeviceMonitor.PublicMethod
                 thread.IsBackground = true;
                 //启动线程     
                 thread.Start(connection);
-                //创建一个通信线程
-                //ParameterizedThreadStart sed = new ParameterizedThreadStart(sends);
-                //Thread threadsed = new Thread(sed);
-                //设置为后台线程,随着主线程退出而退出
-                //threadsed.IsBackground = true;
-                //启动线程
-                //threadsed.Start(connection);
                 list.Add(connection);
             }
         }
@@ -253,10 +249,26 @@ namespace UAS_DeviceMonitor.PublicMethod
                     {
                         break;
                     }
-                    if (!returnvalue.ContainsKey(socketServer.RemoteEndPoint.ToString()))
-                        returnvalue.Add(socketServer.RemoteEndPoint.ToString(), Encoding.UTF8.GetString(arrServerRecMsg, 0, length));
-                    //将机器接受到的字节数组转换为人可以读懂的字符串     
-                    //将发送的字符串信息附加到文本框txtMsg上     
+                    if (ReceiveCoding.ContainsKey(socketServer.RemoteEndPoint.ToString()))
+                    {
+                        if (!returnvalue.ContainsKey(socketServer.RemoteEndPoint.ToString()))
+                        {
+                            switch (ReceiveCoding[socketServer.RemoteEndPoint.ToString()])
+                            {
+                                case "UTF-8":
+                                    returnvalue.Add(socketServer.RemoteEndPoint.ToString(), Encoding.UTF8.GetString(arrServerRecMsg, 0, length));
+                                    break;
+                                case "ASCII":
+                                    returnvalue.Add(socketServer.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(arrServerRecMsg, 0, length));
+                                    break;
+                                case "Hexadecimal":
+                                    returnvalue.Add(socketServer.RemoteEndPoint.ToString(), BaseUtil.ByteToHexadecimalString(arrServerRecMsg, length));
+                                    break;
+                                default:
+                                    break;
+                            }
+                        }
+                    }
                 }
                 catch (Exception)
                 {

+ 1 - 0
UAS_DeviceMonitor/UAS_DeviceMonitor.csproj

@@ -118,6 +118,7 @@
       <DependentUpon>FormNewCommand.cs</DependentUpon>
     </Compile>
     <Compile Include="Entity\Polling.cs" />
+    <Compile Include="Entity\SocketObject.cs" />
     <Compile Include="Entity\SystemInf.cs" />
     <Compile Include="Main.cs">
       <SubType>Form</SubType>