Browse Source

修改内容提交

callm 6 years ago
parent
commit
c6c85f241c

+ 1 - 1
PLCDataReader/DataOperate/DataHelper.cs

@@ -469,7 +469,6 @@ 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":
@@ -478,6 +477,7 @@ namespace UAS_PLCDataReader.DataOperate
                     try
                     {
                         ad.Fill((DataTable)result);
+                        ad.Dispose();
                     }
                     catch (Exception e)
                     {

+ 25 - 14
PLCDataReader/Main.cs

@@ -455,9 +455,15 @@ namespace UAS_PLCDataReader
         /// </summary>
         List<int> PollSettingPaintRowIndex = new List<int>();
 
+        List<string> StartDecode = new List<string>();
+
+        List<string> StartDccode = new List<string>();
+
         private void ButtonStartPolling_Click(object sender, EventArgs e)
         {
             GridView grid = GridViewPollSetting;
+            StartDecode.Clear();
+            StartDccode.Clear();
             for (int i = 0; i < GridPollingSetting.RowCount; i++)
             {
                 Polling pl = new Polling();
@@ -467,9 +473,10 @@ namespace UAS_PLCDataReader
                 pl.CommandCode = GridViewPollSetting.GetRowCellValue(i, "DPC_DCCODE").ToString();
                 pl.Interval = int.Parse(GridViewPollSetting.GetRowCellValue(i, "DPC_INTERVAL").ToString());
                 pl.Enable = GridViewPollSetting.GetRowCellValue(i, "DPC_ENABLE").ToString() != "0";
-                pl.Dh = new DataHelper();
                 if (pl.Enable)
                 {
+                    StartDecode.Add(pl.DeviceCode);
+                    StartDccode.Add(pl.CommandCode);
                     //插入轮询日志
                     sql.Clear();
                     sql.Append("insert into DEVICEPOLLINGLOG(dpg_id,dpg_decode,dpg_starttime,dpg_interval)values");
@@ -483,6 +490,8 @@ namespace UAS_PLCDataReader
                 }
                 else LogicHandler.UpdateDeviceStatus(pl.DeviceCode, pl.DeviceName, "设备未启用", DeviceStatus.Stopped, 0);
             }
+            DNC = (DataTable)dh.ExecuteSql("select dnc_ip,dnc_port from DEVICENETCONFIG where dnc_decode in (" + BaseUtil.ArrayToString(StartDecode) + ")", "select");
+            DC = (DataTable)dh.ExecuteSql("select dc_sendcoding,dc_value,dc_receivecoding,dc_type from devicecommand where dc_code in (" + BaseUtil.ArrayToString(StartDccode) + ") order by dc_dataindex", "select");
             ButtonSaveCommandSet.DoSaveAfterHandler(false);
         }
 
@@ -529,6 +538,9 @@ namespace UAS_PLCDataReader
             }
         }
 
+        DataTable DNC;
+        DataTable DC;
+
         Dictionary<string, ModBusTCPClient> client = new Dictionary<string, ModBusTCPClient>();
         /// <summary>
         /// 轮询执行的业务
@@ -539,24 +551,23 @@ namespace UAS_PLCDataReader
         {
             PollingTimer timer = (PollingTimer)sender;
             Polling pl = (Polling)timer.Polling;
-            DataHelper dh = pl.Dh;
             string Decode = pl.DeviceCode;
             string Dccode = pl.CommandCode;
             string DpcID = pl.Id.ToString();
-            DataTable DNC = (DataTable)dh.ExecuteSql("select dnc_ip,dnc_port from DEVICENETCONFIG where dnc_decode='" + Decode + "'", "select");
-            DataTable DC = (DataTable)dh.ExecuteSql("select dc_sendcoding,dc_value,dc_receivecoding,dc_type from devicecommand where dc_code='" + Dccode + "' order by dc_dataindex", "select");
-            if (DNC.Rows.Count > 0)
+            DataRow[] dnc_dr = DNC.Select("dnc_decode='" + pl.DeviceCode + "'");
+            DataRow[] dc_dr = DC.Select("dc_decode='" + pl.DeviceCode + "'");
+            if (dnc_dr.Length > 0)
             {
-                string IP = DNC.Rows[0]["dnc_ip"].ToString() + ":" + DNC.Rows[0]["dnc_port"].ToString();
+                string IP = dnc_dr[0]["dnc_ip"].ToString() + ":" + dnc_dr[0]["dnc_port"].ToString();
                 string SendCoding = "";
                 string ReceiveCoding = "";
                 string Command = "";
                 int SendCommandByteSize = 0;
-                if (DC.Rows.Count > 0)
+                if (dc_dr.Length > 0)
                 {
-                    SendCoding = DC.Rows[0]["dc_sendcoding"].ToString();
-                    ReceiveCoding = DC.Rows[0]["dc_receivecoding"].ToString();
-                    Command = DC.Rows[0]["dc_value"].ToString();
+                    SendCoding = dc_dr[0]["dc_sendcoding"].ToString();
+                    ReceiveCoding = dc_dr[0]["dc_receivecoding"].ToString();
+                    Command = dc_dr[0]["dc_value"].ToString();
                     SendCommandByteSize = Encoding.Default.GetBytes(Command.ToCharArray()).Length;
                 }
                 if (client.ContainsKey(DpcID))
@@ -605,18 +616,18 @@ namespace UAS_PLCDataReader
                     Dictionary<string, string> ItemData = new Dictionary<string, string>();
                     int[] Arr = BaseUtil.GetDecimalData(BaseUtil.ASCIIToString(client[DpcID].Returnvalue[IP]), 8);
                     //返回的参数个数和定义的参数个数相等或者小于的时候
-                    if (Arr.Length == DC.Rows.Count || DC.Rows.Count > Arr.Length)
+                    if (Arr.Length == dc_dr.Length || dc_dr.Length > Arr.Length)
                     {
                         for (int i = 0; i < Arr.Length; i++)
                         {
-                            ItemData.Add(DC.Rows[i]["dc_type"].ToString(), Arr[i].ToString());
+                            ItemData.Add(dc_dr[i]["dc_type"].ToString(), Arr[i].ToString());
                         }
                     }
                     else
                     {
-                        for (int i = 0; i < DC.Rows.Count; i++)
+                        for (int i = 0; i < dc_dr.Length; i++)
                         {
-                            ItemData.Add(DC.Rows[i]["dc_type"].ToString(), Arr[i].ToString());
+                            ItemData.Add(dc_dr[i]["dc_type"].ToString(), Arr[i].ToString());
                         }
                     }
                     if (!ReturnData.ContainsKey(Decode))

+ 16 - 1
PLCDataReader/MainWindow.cs

@@ -3,6 +3,10 @@ using System.Windows.Forms;
 using System.Net;
 using System.Net.Sockets;
 using UAS_PLCDataReader.PublicMethod;
+using HslCommunication.Profinet;
+using HslCommunication.Profinet.Melsec;
+using HslCommunication;
+using System.Text;
 
 namespace UAS_PLCDataReader
 {
@@ -53,7 +57,18 @@ namespace UAS_PLCDataReader
 
         private void SEND_Click(object sender, EventArgs e)
         {
-            Console.WriteLine(BaseUtil.ASCIIToString("3A30313033343032314330303030303231374130303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303430DA"));
+            //Console.WriteLine(BaseUtil.ASCIIToString("3A30313033343032314330303030303231374130303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303430DA"));
+            MelsecMcNet melsec_net = new MelsecMcNet("192.168.1.120", 8880);
+            OperateResult<byte[]> read = melsec_net.Read("D200", 5);
+            if (read.IsSuccess)
+            {
+                Console.WriteLine(Encoding.ASCII.GetString(read.Content)); 
+            }
+            else
+            {
+                //失败读取
+                MessageBox.Show(read.ToMessageShowString());
+            }
         }
 
         public static string HexStringToASCII(string hexstring)

+ 18 - 0
PLCDataReader/PublicMethod/BaseUtil.cs

@@ -549,5 +549,23 @@ namespace UAS_PLCDataReader.PublicMethod
             int Mins = Minutes % 60;
             return Day + "天" + Hour + "小时" + Mins + "分钟";
         }
+
+
+        public static string ArrayToString(List<string> Arr)
+        {
+            string str = "";
+            for (int i = 0; i < Arr.Count; i++)
+            {
+                if (i != Arr.Count - 1)
+                {
+                    str += "'" + Arr[i] + "',";
+                }
+                else
+                {
+                    str += "'" + Arr[i] + "'";
+                }
+            }
+            return str;
+        }
     }
 }