From 1c4426810c71eead57084be8a18ade8d314dd8c4 Mon Sep 17 00:00:00 2001
From: patrick <patrick.xu@broconcentric.com>
Date: 星期二, 10 十二月 2019 14:24:31 +0800
Subject: [PATCH] 1. 重构项目

---
 src/Bro.Device.OmronFins/OmronFinsDriver.cs |  147 ++++++++++++++++++++++--------------------------
 1 files changed, 68 insertions(+), 79 deletions(-)

diff --git a/src/Bro.Device.OmronFins/OmronFinsDriver.cs b/src/Bro.Device.OmronFins/OmronFinsDriver.cs
index 534c13e..13a3065 100644
--- a/src/Bro.Device.OmronFins/OmronFinsDriver.cs
+++ b/src/Bro.Device.OmronFins/OmronFinsDriver.cs
@@ -13,10 +13,11 @@
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
+using static Bro.Common.Helper.EnumHelper;
 
 namespace Bro.Device.OmronFins
 {
-    public class OmronFinsDriver : PLCBase, IMonitor
+    public class OmronFinsDriver : PLCBase
     {
         #region PLCBase
         public override void Read(PLCOperationConfigBase config)
@@ -31,11 +32,11 @@
             }
 
             byte[] data = opFrame.GetSendReadFrameBytes(item, CurrentSid);
-            var stream = opClient.GetStream();
-            stream.Write(data, 0, data.Length);
+            //var stream = opClient.GetStream();
+            opStream.Write(data, 0, data.Length);
 
             byte[] buffer = new byte[2048];
-            int readSize = stream.Read(buffer, 0, buffer.Length);
+            int readSize = opStream.Read(buffer, 0, buffer.Length);
 
             if (readSize > 0)
             {
@@ -70,7 +71,7 @@
             Stopwatch sw = new Stopwatch();
             sw.Start();
 
-            NetworkStream stream = null;
+            //NetworkStream stream = null;
             lock (opClientLock)
             {
                 do
@@ -80,13 +81,13 @@
                         InitialOpClient();
 
                         byte[] data = opFrame.GetSendWriteFrameBytes(item, CurrentSid);
-                        stream = opClient.GetStream();
-                        stream.Write(data, 0, data.Length);
+                        //stream = opClient.GetStream();
+                        opStream.Write(data, 0, data.Length);
 
                         sw.Stop();
                         if (sw.ElapsedMilliseconds > 10)
                         {
-                            LogAsync(DateTime.Now, $"鍙戦�佸畬鎴愶紝鑰楁椂锛歿sw.ElapsedMilliseconds}");
+                            LogAsync(DateTime.Now, $"鍙戦�佸畬鎴�", $"鍙戦�佽�楁椂锛歿sw.ElapsedMilliseconds}");
                         }
                         repeatTime = 0;
 
@@ -101,7 +102,7 @@
                         }
                         else
                         {
-                            LogAsync(DateTime.Now, "Send Exception:" + ex.GetExceptionMessage());
+                            LogAsync(DateTime.Now, "Send Exception", ex.GetExceptionMessage());
                         }
                     }
                 } while (repeatTime > 0);
@@ -111,7 +112,7 @@
                     try
                     {
                         byte[] buffer = new byte[1024];
-                        int bufferCount = stream.Read(buffer, 0, buffer.Length);
+                        int bufferCount = opStream.Read(buffer, 0, buffer.Length);
                         if (bufferCount > 0)
                         {
                             opFrame.AnalyseReceivedItems(buffer.Take(bufferCount).ToArray(), item);
@@ -119,7 +120,7 @@
                     }
                     catch (Exception ex)
                     {
-                        LogAsync(DateTime.Now, "鍐欏叆鍙嶉寮傚父\r\n" + ex.GetExceptionMessage());
+                        LogAsync(DateTime.Now, "鍐欏叆鍙嶉寮傚父", ex.GetExceptionMessage());
                     }
                 }
                 else
@@ -129,7 +130,7 @@
                         try
                         {
                             byte[] buffer = new byte[1024];
-                            int bufferCount = stream.Read(buffer, 0, buffer.Length);
+                            int bufferCount = opStream.Read(buffer, 0, buffer.Length);
                             if (bufferCount > 0)
                             {
                                 opFrame.AnalyseReceivedItems(buffer.Take(bufferCount).ToArray(), item);
@@ -137,7 +138,7 @@
                         }
                         catch (Exception ex)
                         {
-                            LogAsync(DateTime.Now, "鍐欏叆鍙嶉寮傚父\r\n" + ex.GetExceptionMessage());
+                            LogAsync(DateTime.Now, "鍐欏叆鍙嶉寮傚父", ex.GetExceptionMessage());
                         }
                     });
                 }
@@ -163,6 +164,7 @@
 
             item.ADDRESS = "D" + address.ToString();
             item.ITEM_LENGTH = 1;
+            item.ITEM_VALUE_TYPE = 1;
             item.ITEM_VALUE = writeValue.ToString();
 
             //lock (opClient)
@@ -403,7 +405,9 @@
         static object opClientLock = new object();
 
         TcpClient scanClient = new TcpClient();
+        NetworkStream scanStream = null;
         TcpClient opClient = new TcpClient();
+        NetworkStream opStream = null;
 
         IPEndPoint plcEP;
 
@@ -455,10 +459,10 @@
                 scanFrame = new FinsFrame(IConfig.DNA, serverNode, IConfig.DA2, IConfig.SNA, scanNode, IConfig.SA2, false);
 
                 byte[] dataRequest = scanFrame.GetTcpRequestFrame(0);
-                var stream = scanClient.GetStream();
-                stream.Write(dataRequest, 0, dataRequest.Length);
+                scanStream = scanClient.GetStream();
+                scanStream.Write(dataRequest, 0, dataRequest.Length);
                 byte[] dataRead = new byte[2048];
-                int readSize = stream.Read(dataRead, 0, dataRead.Length);
+                int readSize = scanStream.Read(dataRead, 0, dataRead.Length);
 
                 if (readSize <= 0)
                 {
@@ -489,10 +493,10 @@
 
                 opFrame = new FinsFrame(IConfig.DNA, serverNode, IConfig.DA2, IConfig.SNA, opNode, IConfig.SA2, false);
                 byte[] dataRequest = opFrame.GetTcpRequestFrame(0);
-                var stream = opClient.GetStream();
-                stream.Write(dataRequest, 0, dataRequest.Length);
+                opStream = opClient.GetStream();
+                opStream.Write(dataRequest, 0, dataRequest.Length);
                 byte[] dataRead = new byte[2048];
-                int readSize = stream.Read(dataRead, 0, dataRead.Length);
+                int readSize = opStream.Read(dataRead, 0, dataRead.Length);
 
                 if (readSize <= 0)
                 {
@@ -524,14 +528,15 @@
             PLC_ITEM item = new PLC_ITEM();
             item.ADDRESS = "D" + startAddress;
             item.OP_TYPE = 1;
+            item.ITEM_VALUE_TYPE = 1;
             item.ITEM_LENGTH = length;
 
             var data = opFrame.GetSendReadFrameBytes(item, CurrentSid);
-            var stream = opClient.GetStream();
-            stream.Write(data, 0, data.Length);
+            opStream.Write(data, 0, data.Length);
+            opStream.Flush();
 
             byte[] buffer = new byte[2048];
-            int readSize = stream.Read(buffer, 0, buffer.Length);
+            int readSize = opStream.Read(buffer, 0, buffer.Length);
 
             if (readSize > 0)
             {
@@ -555,6 +560,7 @@
             PLC_ITEM item = new PLC_ITEM();
             item.ADDRESS = "D" + startAddress;
             item.OP_TYPE = 1;
+            item.ITEM_VALUE_TYPE = 1;
             item.ITEM_LENGTH = length;
 
             if (scanBuffer == null)
@@ -562,11 +568,11 @@
                 scanBuffer = scanFrame.GetSendReadFrameBytes(item, CurrentSid);
             }
 
-            var stream = scanClient.GetStream();
-            stream.Write(scanBuffer, 0, scanBuffer.Length);
+            //var stream = scanClient.GetStream();
+            scanStream.Write(scanBuffer, 0, scanBuffer.Length);
 
             byte[] buffer = new byte[2048];
-            int readSize = stream.Read(buffer, 0, buffer.Length);
+            int readSize = scanStream.Read(buffer, 0, buffer.Length);
 
             if (readSize > 0)
             {
@@ -578,69 +584,52 @@
                 return new List<int>();
             }
         }
-        #endregion
 
-        #region Log
-        object logLock = new object();
-        private async void LogAsync(DateTime dt, string info)
+        protected override void OnMethodInvoked(IAsyncResult ar)
         {
-            await Task.Run(() =>
+            MonitorSet monitorSet = ar.AsyncState as MonitorSet;
+
+            ProcessResponse resValues = monitorSet.Response;
+
+            if (resValues.ResultValue == (int)PLCReplyValue.IGNORE)
             {
-                if (IConfig.IsEnabelLog)
+                return;
+            }
+
+            if (monitorSet.ReplyDataAddress != -1 && resValues.DataList.Count > 0)
+            {
+                PLC_ITEM item = new PLC_ITEM();
+                item.OP_TYPE = 2;
+                item.ITEM_LENGTH = resValues.DataList.Count;
+                item.ADDRESS = "D" + monitorSet.ReplyDataAddress.ToString();
+                item.ITEM_VALUE = String.Join(",", resValues.DataList);
+                item.ITEM_VALUE_TYPE = (int)PLCItemType.Integer;
+                WriteItem(item, false);
+            }
+
+            if (monitorSet.NoticeAddress != -1)
+            {
+                int repeatTime = 5;
+
+                do
                 {
-                    lock (logLock)
+                    try
                     {
-                        DirectoryInfo dir = new DirectoryInfo(IConfig.LogPath);
-                        if (!dir.Exists)
+                        this.WriteSingleAddress(monitorSet.NoticeAddress, resValues.ResultValue, false);
+                        repeatTime = 0;
+                    }
+                    catch (Exception ex)
+                    {
+                        repeatTime--;
+
+                        if (repeatTime <= 0)
                         {
-                            dir.Create();
-                        }
-
-                        string filePath = Path.Combine(IConfig.LogPath, "PLC_" + DateTime.Now.ToString("yyyyMMdd") + ".txt");
-
-                        using (StreamWriter writer = new StreamWriter(filePath, true))
-                        {
-                            writer.WriteLine(dt.ToString("HH:mm:ss.fff"));
-                            writer.WriteLine(info);
-                            writer.WriteLine();
-
-                            writer.Flush();
-                            writer.Close();
+                            new ProcessException("PLC鍙嶉鍐欏叆寮傚父", ExceptionLevel.Info, ex);
                         }
                     }
-                }
-            });
+                } while (repeatTime > 0);
+            }
         }
-
-        //private async void LogAsync(DateTime dt, IModbusFrame frame)
-        //{
-        //    await Task.Run(() =>
-        //    {
-        //        if (IConfig.IsEnabelLog)
-        //        {
-        //            lock (logLock)
-        //            {
-        //                DirectoryInfo dir = new DirectoryInfo(IConfig.LogPath);
-        //                if (!dir.Exists)
-        //                {
-        //                    dir.Create();
-        //                }
-
-        //                string filePath = Path.Combine(IConfig.LogPath, "PLC_" + DateTime.Now.ToString("yyyyMMdd") + ".txt");
-
-        //                using (StreamWriter writer = new StreamWriter(filePath, true))
-        //                {
-        //                    writer.WriteLine(dt.ToString("HH:mm:ss.fff"));
-        //                    writer.WriteLine(frame.GetFrameString());
-        //                    writer.WriteLine();
-
-        //                    writer.Flush();
-        //                    writer.Close();
-        //                }
-        //            }
-        //        }
-        //    });
-        //}
         #endregion
     }
 }

--
Gitblit v1.8.0