From d0f01f571918ae942349068776fa7fb70f3ab5cd Mon Sep 17 00:00:00 2001
From: hutongqing <hutongqing@hnkhzn.com>
Date: 星期三, 28 八月 2024 16:20:18 +0800
Subject: [PATCH] 更新设备信息表从表导入问题

---
 WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs |  406 ++++++++++++++++++++++-----------------------------------
 1 files changed, 157 insertions(+), 249 deletions(-)

diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs
index 062951d..e504bdc 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs
@@ -24,6 +24,7 @@
 using System.Collections;
 using System.Collections.Generic;
 using System.ComponentModel;
+using System.Diagnostics.CodeAnalysis;
 using System.Linq;
 using System.Net;
 using System.Reflection;
@@ -60,6 +61,9 @@
         /// </summary>
         private bool _connected;
 
+        /// <summary>
+        /// PLC鍚嶇О
+        /// </summary>
         private string _name;
 
         private ILogNet _logNet;
@@ -71,6 +75,9 @@
         /// </summary>
         public override bool IsConnected => _connected;
 
+        /// <summary>
+        /// PLC鍚嶇О
+        /// </summary>
         public override string Name => _name;
 
         public override ILogNet LogNet => _logNet;
@@ -108,7 +115,7 @@
         /// <param name="operateResult">HSLCommunication璇诲彇鐨凮perateResult<T>瀵硅薄</param>
         /// <returns>濡傛灉璇诲彇鎴愬姛锛岃繑鍥炶鍙栫粨鏋滐紝璇诲彇澶辫触锛屾姏鍑鸿嚜瀹氫箟閫氳寮傚父</returns>
         /// <exception cref="CommunicationException">鑷畾涔夐�氳寮傚父绫�</exception>
-        private object? GetContent<T>(OperateResult<T> operateResult, string address)
+        private object GetContent<T>(OperateResult<T> operateResult, string address)
         {
             try
             {
@@ -116,14 +123,13 @@
                 {
                     throw new CommunicationException(string.Format(CommunicationExceptionMessage.ReadFailedException, typeof(T).Name, address, operateResult.Message), CommunicationErrorType.ReadFailed);
                 }
-                return operateResult.Content;
+                return operateResult.Content ?? throw new CommunicationException(string.Format(CommunicationExceptionMessage.ReadDataIsNull, address), CommunicationErrorType.ReadFailed);
             }
             catch (Exception ex)
             {
-                LogNet.WriteException(Name, $"銆恵Name}銆慞LC璇诲彇寮傚父锛屽湴鍧�锛氥�恵address}銆戯紝閿欒淇℃伅锛氥�恵ex.Message}銆�", ex);
-                throw new CommunicationException(ex.Message, CommunicationErrorType.ReadException, innerException: ex);
+                LogNet.WriteException(Name, ex.Message, ex);
+                throw new CommunicationException(ex.Message, CommunicationErrorType.ReadFailed, innerException: ex);
             }
-
         }
 
         /// <summary>
@@ -137,10 +143,10 @@
         /// <exception cref="CommunicationException"></exception>
         private bool GetResult<T>(OperateResult operateResult, string address, T value) where T : notnull
         {
-            string logMsg = "";
+            StringBuilder stringBuilder = new StringBuilder();
             try
             {
-                logMsg += $"銆恵Name}銆慞LC鍐欏叆鏁版嵁锛屽湴鍧�锛氥�恵address}銆戯紝鍐欏叆鐨勬暟鎹細銆恵value}銆憑Environment.NewLine}";
+                stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteData, address, value));
                 if (!operateResult.IsSuccess)
                 {
                     throw new CommunicationException(string.Format(CommunicationExceptionMessage.WriteFailedException, typeof(T).Name, address, value, operateResult.Message), CommunicationErrorType.WriteFailed);
@@ -151,32 +157,30 @@
                     for (int i = 0; i < 5; i++)
                     {
                         T readValue = Read<T>(address);
-                        logMsg += $"銆恵Name}銆慞LC鍐欏叆鍚庤鍙栨暟鎹紝鍦板潃锛氥�恵address}銆戯紝璇诲彇鐨勬暟鎹細銆恵readValue}銆憑Environment.NewLine}";
+                        stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteAfterRead, readValue, value));
                         obj = readValue;
                         if (readValue.Equals(value))
                         {
-                            logMsg += $"銆恵Name}銆慞LC鍐欏叆鍚庤鍙栨暟鎹牎楠屾垚鍔燂紝鍦板潃锛氥�恵address}銆戯紝璇诲彇鐨勬暟鎹細銆恵readValue}銆戯紝鍐欏叆鐨勬暟鎹細銆恵value}銆憑Environment.NewLine}";
+                            stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteAndReadCheckSuccess, address, value, readValue));
                             return true;
                         }
-                        else if(i < 4)
+                        else if (i < 4)
                         {
                             Write(address, value);
                         }
                     }
-
-                    logMsg += $"銆恵Name}銆慞LC鍐欏叆鍚庤鍙栨暟鎹牎楠屽け璐ワ紝鍦板潃锛氥�恵address}銆戯紝璇诲彇鐨勬暟鎹細銆恵obj}銆戯紝鍐欏叆鐨勬暟鎹細銆恵value}銆憑Environment.NewLine}";
-
-                    throw new CommunicationException(string.Format(CommunicationExceptionMessage.ReadWriteDifferentException, typeof(T).Name, address, value, obj), CommunicationErrorType.WriteFailed);
+                    stringBuilder.AppendLine(string.Format(CommunicationExceptionMessage.WriteAndReadCheckFaild, address, value, obj));
+                    throw new CommunicationException(stringBuilder.ToString(), CommunicationErrorType.WriteFailed);
                 }
             }
             catch (Exception ex)
             {
-                LogNet.WriteException(Name, $"銆恵Name}銆慞LC鍐欏叆寮傚父锛屽湴鍧�锛氥�恵address}銆戯紝鍐欏叆鐨勬暟鎹細銆恵value}銆戯紝閿欒淇℃伅锛氥�恵ex.Message}銆�", ex);
+                LogNet.WriteException(Name, ex.Message, ex);
                 throw new CommunicationException(ex.Message, CommunicationErrorType.WriteFailed, innerException: ex);
             }
             finally
             {
-                LogNet.WriteInfo(Name, logMsg);
+                LogNet.WriteInfo(Name, stringBuilder.ToString());
             }
 
         }
@@ -217,21 +221,15 @@
                     default:
                         throw new CommunicationException(string.Format(CommunicationExceptionMessage.DataTypeErrorException, type.Name, address), CommunicationErrorType.TypeError);
                 }
-
-
             }
             catch (CommunicationException ex)
             {
-                throw new CommunicationException($"鍐欏叆閿欒锛�" + ex.Message, ex.ErrorType, ex.ErrorCode, ex.InnerException);
+                throw new CommunicationException(ex.Message, ex.ErrorType);
             }
             catch (Exception ex)
             {
                 //璇诲彇寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
-                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.TypeError, innerException: ex);
-            }
-            finally
-            {
-
+                throw new CommunicationException(string.Format(CommunicationExceptionMessage.DataTypeErrorException, address, value), CommunicationErrorType.TypeError, innerException: ex);
             }
         }
 
@@ -260,13 +258,13 @@
                     case TypeCode.Char:
                         return (char)GetContent(plc.ReadByte(address), address);
                     default:
-                        throw new CommunicationException($"璇诲彇鏁版嵁澶辫触,鏈畾涔夋暟鎹被鍨�:銆恵typeCode}銆�,鍦板潃:銆恵address}銆�", CommunicationErrorType.TypeError);
+                        throw new CommunicationException(string.Format(CommunicationExceptionMessage.DataTypeErrorException, typeCode.ToString(), address), CommunicationErrorType.TypeError);
                 }
             }
             catch (CommunicationException ex)
             {
                 //璇诲彇寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
-                throw ex;
+                throw new CommunicationException(ex.Message, ex.ErrorType);
             }
             catch (Exception ex)
             {
@@ -296,15 +294,15 @@
                 _connected = operateResult.IsSuccess;//灏嗚繛鎺ユ槸鍚︽垚鍔熻祴鍊肩粰褰撳墠閫氳鍣ㄦ槸鍚﹀凡杩炴帴鍒癙LC
 
                 if (_connected)
-                    LogNet.WriteInfo(Name, $"銆恵Name}銆慞LC杩炴帴鎴愬姛锛孖P銆恵_ipAddress}銆戯紝Port銆恵_port}銆�");
+                    LogNet.WriteInfo(Name, string.Format(CommunicationInfoMessage.ConnectSuccess, _ipAddress, _port));
                 else
-                    LogNet.WriteError(Name, $"銆恵Name}銆慞LC杩炴帴澶辫触锛孖P銆恵_ipAddress}銆戯紝Port銆恵_port}銆戯紝閿欒淇℃伅锛歿operateResult.Message}");
+                    LogNet.WriteError(Name, string.Format(CommunicationExceptionMessage.ConnectFaild, _ipAddress, _port, operateResult.Message));
 
                 return operateResult.IsSuccess;
             }
             catch (Exception ex)
             {
-                LogNet.WriteException(Name, $"銆恵Name}銆慞LC杩炴帴寮傚父锛孖P銆恵_ipAddress}銆戯紝Port銆恵_port}銆�", ex);
+                LogNet.WriteException(Name, string.Format(CommunicationExceptionMessage.ConnectFaild, _ipAddress, _port, ex.Message), ex);
                 //杩炴帴寮傚父鏃舵姏鍑鸿嚜瀹氫箟寮傚父绫�
                 throw new CommunicationException(ex.Message, CommunicationErrorType.ConnectionFailed, innerException: ex);
             }
@@ -345,20 +343,7 @@
         /// <exception cref="CommunicationException">鑷畾涔夐�氳寮傚父绫�</exception>
         public override byte[] Read(string address, int length)
         {
-            try
-            {
-                return (byte[])GetContent(plc.Read(address, (ushort)length), address);
-            }
-            catch (CommunicationException ex)
-            {
-                //璇诲彇寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
-                throw ex;
-            }
-            catch (Exception ex)
-            {
-                //璇诲彇寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
-                throw new CommunicationException($"璇诲彇鏁版嵁寮傚父:{ex.Message}", CommunicationErrorType.ReadFailed, innerException: ex);
-            }
+            return (byte[])GetContent(plc.Read(address, (ushort)length), address);
         }
 
         /// <summary>
@@ -371,22 +356,8 @@
         /// <exception cref="CommunicationException">鑷畾涔夐�氳寮傚父绫�</exception>
         public override T Read<T>(string address)
         {
-            try
-            {
-                Type type = typeof(T);
-                return (T)Read(address, Type.GetTypeCode(type));
-
-            }
-            catch (CommunicationException ex)
-            {
-                //璇诲彇寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
-                throw ex;
-            }
-            catch (Exception ex)
-            {
-                //璇诲彇寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
-                throw new CommunicationException($"璇诲彇鏁版嵁寮傚父,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.ReadException, innerException: ex);
-            }
+            Type type = typeof(T);
+            return (T)Read(address, Type.GetTypeCode(type));
         }
 
         /// <summary>
@@ -398,20 +369,7 @@
         /// <exception cref="CommunicationException">鑷畾涔夐�氳寮傚父绫�</exception>
         public override object ReadAsObj(string address, string dataType)
         {
-            try
-            {
-                return Read(address, SiemensDBDataType.GetTypeCode(dataType));
-            }
-            catch (CommunicationException ex)
-            {
-                //璇诲彇寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
-                throw ex;
-            }
-            catch (Exception ex)
-            {
-                //璇诲彇寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
-                throw new CommunicationException($"璇诲彇鏁版嵁寮傚父,鏁版嵁绫诲瀷:銆恵dataType}銆�,鍦板潃:銆恵address}銆�,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.ReadException, innerException: ex);
-            }
+            return Read(address, SiemensDBDataType.GetTypeCode(dataType));
         }
         #endregion
 
@@ -455,20 +413,7 @@
         /// <exception cref="NotImplementedException"></exception>
         public override bool Write<T>(string address, T value)
         {
-            try
-            {
-                return GetResult(Write(address, value), address, value);
-            }
-            catch (CommunicationException ex)
-            {
-                //璇诲彇寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
-                throw ex;
-            }
-            catch (Exception ex)
-            {
-                //璇诲彇寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
-                throw new CommunicationException($"璇诲彇鏁版嵁寮傚父,鍦板潃:銆恵address}銆�,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.TypeError, innerException: ex);
-            }
+            return GetResult(Write(address, value), address, value);
         }
 
         /// <summary>
@@ -479,168 +424,131 @@
         /// <param name="value">瑕佸啓鍏ョ殑鏁版嵁銆�</param>
         /// <returns>濡傛灉鍐欏叆鎴愬姛鍒欒繑鍥瀟rue锛屽け璐ュ垯鎶涘嚭鑷畾涔夐�氳寮傚父銆�</returns>
         /// <exception cref="CommunicationException"></exception>
-        public override bool WriteObj(string address, string dataType, object value)
+        public override bool WriteObj(string address, string dataType, [NotNull] object value)
         {
-            try
+            bool obj = false;
+            switch (dataType.ToLower())
             {
-                bool obj = false;
-                switch (dataType.ToLower())
-                {
-                    case SiemensDBDataType.DataType_DInt:
+                case SiemensDBDataType.DataType_DInt:
+                    {
+                        int writeVal;
+                        try
                         {
-                            int writeVal;
-                            try
-                            {
-                                writeVal = Convert.ToInt32(value);
-                            }
-                            catch (Exception ex)
-                            {
-                                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,鏁版嵁绫诲瀷:銆恵dataType}銆�,鍦板潃:銆恵address}銆�,鏁版嵁:銆恵value}銆�,鏁版嵁绫诲瀷杞崲閿欒,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.TypeError, innerException: ex);
-                            }
-                            obj = GetResult(Write(address, writeVal), address, writeVal);
+                            writeVal = Convert.ToInt32(value);
                         }
-                        break;
-                    case SiemensDBDataType.DataType_DW:
+                        catch (Exception ex)
                         {
-                            uint writeVal;
-                            try
-                            {
-                                writeVal = Convert.ToUInt32(value);
-                            }
-                            catch (Exception ex)
-                            {
-                                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,鏁版嵁绫诲瀷:銆恵dataType}銆�,鍦板潃:銆恵address}銆�,鏁版嵁:銆恵value}銆�,鏁版嵁绫诲瀷杞崲閿欒,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.TypeError, innerException: ex);
-                            }
-                            obj = GetResult(Write(address, writeVal), address, writeVal);
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
                         }
-                        break;
-                    case SiemensDBDataType.DataType_Int:
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+                    break;
+                case SiemensDBDataType.DataType_DW:
+                    {
+                        uint writeVal;
+                        try
                         {
-                            short writeVal;
-                            try
-                            {
-                                writeVal = Convert.ToInt16(value);
-                            }
-                            catch (Exception ex)
-                            {
-                                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,鏁版嵁绫诲瀷:銆恵dataType}銆�,鍦板潃:銆恵address}銆�,鏁版嵁:銆恵value}銆�,鏁版嵁绫诲瀷杞崲閿欒,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.TypeError, innerException: ex);
-                            }
-                            obj = GetResult(Write(address, writeVal), address, writeVal);
+                            writeVal = Convert.ToUInt32(value);
                         }
-
-                        break;
-                    case SiemensDBDataType.DataType_W:
+                        catch (Exception ex)
                         {
-                            ushort writeVal;
-                            try
-                            {
-                                writeVal = Convert.ToUInt16(value);
-                            }
-                            catch (Exception ex)
-                            {
-                                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,鏁版嵁绫诲瀷:銆恵dataType}銆�,鍦板潃:銆恵address}銆�,鏁版嵁:銆恵value}銆�,鏁版嵁绫诲瀷杞崲閿欒,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.TypeError, innerException: ex);
-                            }
-                            obj = GetResult(Write(address, writeVal), address, writeVal);
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
                         }
-
-                        break;
-                    case SiemensDBDataType.DataType_Float:
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+                    break;
+                case SiemensDBDataType.DataType_Int:
+                    {
+                        short writeVal;
+                        try
                         {
-                            float writeVal;
-                            try
-                            {
-                                writeVal = Convert.ToSingle(value);
-                            }
-                            catch (Exception ex)
-                            {
-                                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,鏁版嵁绫诲瀷:銆恵dataType}銆�,鍦板潃:銆恵address}銆�,鏁版嵁:銆恵value}銆�,鏁版嵁绫诲瀷杞崲閿欒,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.TypeError, innerException: ex);
-                            }
-                            obj = GetResult(Write(address, writeVal), address, writeVal);
+                            writeVal = Convert.ToInt16(value);
                         }
-
-                        break;
-                    case SiemensDBDataType.DataType_Bool:
+                        catch (Exception ex)
                         {
-                            bool writeVal;
-                            try
-                            {
-                                writeVal = Convert.ToBoolean(value);
-                            }
-                            catch (Exception ex)
-                            {
-                                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,鏁版嵁绫诲瀷:銆恵dataType}銆�,鍦板潃:銆恵address}銆�,鏁版嵁:銆恵value}銆�,鏁版嵁绫诲瀷杞崲閿欒,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.TypeError, innerException: ex);
-                            }
-                            obj = GetResult(Write(address, writeVal), address, writeVal);
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
                         }
-
-                        break;
-                    case SiemensDBDataType.DataType_Byte:
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+                    break;
+                case SiemensDBDataType.DataType_W:
+                    {
+                        ushort writeVal;
+                        try
                         {
-                            byte writeVal;
-                            try
-                            {
-                                writeVal = Convert.ToByte(value);
-                            }
-                            catch (Exception ex)
-                            {
-                                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,鏁版嵁绫诲瀷:銆恵dataType}銆�,鍦板潃:銆恵address}銆�,鏁版嵁:銆恵value}銆�,鏁版嵁绫诲瀷杞崲閿欒,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.TypeError, innerException: ex);
-                            }
-                            obj = GetResult(Write(address, writeVal), address, writeVal);
+                            writeVal = Convert.ToUInt16(value);
                         }
-
-                        break;
-                    case SiemensDBDataType.DataType_ByteArray:
+                        catch (Exception ex)
                         {
-                            byte[] writeVal;
-                            try
-                            {
-                                writeVal = (byte[])value;
-                            }
-                            catch (Exception ex)
-                            {
-                                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,鏁版嵁绫诲瀷:銆恵dataType}銆�,鍦板潃:銆恵address}銆�,鏁版嵁:銆恵value}銆�,鏁版嵁绫诲瀷杞崲閿欒,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.TypeError, innerException: ex);
-                            }
-                            obj = GetResult(Write(address, writeVal), address, writeVal);
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
                         }
-
-                        break;
-                    case SiemensDBDataType.DataType_String:
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+                    break;
+                case SiemensDBDataType.DataType_Float:
+                    {
+                        float writeVal;
+                        try
                         {
-                            string writeVal;
-                            try
-                            {
-                                writeVal = value.ToString();
-                            }
-                            catch (Exception ex)
-                            {
-                                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,鏁版嵁绫诲瀷:銆恵dataType}銆�,鍦板潃:銆恵address}銆�,鏁版嵁:銆恵value}銆�,鏁版嵁绫诲瀷杞崲閿欒,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.TypeError, innerException: ex);
-                            }
-                            obj = GetResult(Write(address, writeVal), address, writeVal);
+                            writeVal = Convert.ToSingle(value);
                         }
+                        catch (Exception ex)
+                        {
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
+                        }
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+                    break;
+                case SiemensDBDataType.DataType_Bool:
+                    {
+                        bool writeVal;
+                        try
+                        {
+                            writeVal = Convert.ToBoolean(value);
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
+                        }
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+                    break;
+                case SiemensDBDataType.DataType_Byte:
+                    {
+                        byte writeVal;
+                        try
+                        {
+                            writeVal = Convert.ToByte(value);
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
+                        }
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+                    break;
+                case SiemensDBDataType.DataType_String:
+                    {
+                        string writeVal;
+                        try
+                        {
+                            writeVal = value.ToString();
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
+                        }
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
 
-                        break;
-                    case SiemensDBDataType.DataType_Char:
+                    break;
+                case SiemensDBDataType.DataType_Char:
 
-                        //obj = GetResult(plc.Write(address, (int)value), address, (int)value);
-                        break;
-                    case SiemensDBDataType.DataType_CharArray:
-
-                        break;
-                    default:
-                        throw new CommunicationException($"鍐欏叆鏁版嵁澶辫触,鏈畾涔夋暟鎹被鍨�:銆恵dataType}銆�,鍦板潃:銆恵address}銆�,鏁版嵁:銆恵value}銆�", CommunicationErrorType.TypeError);
-                }
-                return obj;
+                    break;
+                default:
+                    throw new CommunicationException(string.Format(CommunicationExceptionMessage.DataTypeErrorException, dataType, address), CommunicationErrorType.TypeError);
             }
-            catch (CommunicationException ex)
-            {
-                //鍐欏叆寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
-                throw ex;
-            }
-            catch (Exception ex)
-            {
-                //鍐欏叆寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
-                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,鏁版嵁绫诲瀷:銆恵dataType}銆�,鍦板潃:銆恵address}銆�,鏁版嵁:銆恵value}銆�,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.TypeError, innerException: ex);
-            }
+            return obj;
         }
         #endregion
 
@@ -661,56 +569,56 @@
         #endregion
 
         #region WriteCustomer
-        public override bool WriteCustomer<T>(string address, T value)
+        public override bool WriteCustomer<T>(string address, [NotNull] T value)
         {
-            string logMsg = string.Empty;
+            StringBuilder stringBuilder = new StringBuilder();
             try
             {
                 OperateResult operateResult = plc.WriteCustomer(address, value);
-                logMsg += $"銆恵Name}銆慞LC鍐欏叆鏁版嵁锛屽湴鍧�锛氥�恵address}銆戯紝鍐欏叆鐨勬暟鎹細銆恵JsonConvert.SerializeObject(value)}銆憑Environment.NewLine}";
+                stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteData, address, JsonConvert.SerializeObject(value)));
                 if (operateResult.IsSuccess)
                 {
+                    object? obj = null;
                     for (int i = 0; i < 5; i++)
                     {
                         T readValue = ReadCustomer<T>(address);
-                        logMsg += $"銆恵Name}銆慞LC鍐欏叆鍚庤鍙栨暟鎹紝鍦板潃锛氥�恵address}銆戯紝璇诲彇鐨勬暟鎹細銆恵JsonConvert.SerializeObject(readValue)}銆憑Environment.NewLine}";
+                        stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteAfterRead, address, JsonConvert.SerializeObject(readValue)));
+                        obj = readValue;
                         PropertyInfo[] propertyInfos = typeof(T).GetProperties();
-                        foreach (var item in propertyInfos)
+                        for (int j = 0; j < propertyInfos.Length; j++)
                         {
-                            object writeValueItem = item.GetValue(value);
-                            if (writeValueItem != null)
+                            object? writeValueItem = propertyInfos[j].GetValue(value);
+                            object? readValueItem = propertyInfos[j].GetValue(readValue);
+                            if (writeValueItem.Equals(readValueItem))
                             {
-                                object readValueItem = item.GetValue(readValue);
-                                if (writeValueItem.Equals(readValueItem))
-                                {
-                                    logMsg += $"銆恵Name}銆慞LC鍐欏叆鍚庤鍙栨暟鎹牎楠屾垚鍔燂紝鍦板潃锛氥�恵address}銆戯紝璇诲彇鐨勬暟鎹細銆恵JsonConvert.SerializeObject(readValue)}銆戯紝鍐欏叆鐨勬暟鎹細銆恵JsonConvert.SerializeObject(value)}銆憑Environment.NewLine}";
-                                    return true;
-                                }
-                                else
-                                {
-                                    plc.WriteCustomer(address, value);
-                                }
-
-                                logMsg += $"銆恵Name}銆慞LC鍐欏叆鍚庤鍙栨暟鎹牎楠屽け璐ワ紝鍦板潃锛氥�恵address}銆戯紝璇诲彇鐨勬暟鎹細銆恵JsonConvert.SerializeObject(readValue)}銆戯紝鍐欏叆鐨勬暟鎹細銆恵JsonConvert.SerializeObject(value)}銆憑Environment.NewLine}";
-                                throw new CommunicationException(string.Format(CommunicationExceptionMessage.ReadWriteDifferentException, typeof(T).Name, address, JsonConvert.SerializeObject(value), JsonConvert.SerializeObject(readValue)), CommunicationErrorType.WriteFailed);
+                                stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteAndReadCheckSuccess, address, JsonConvert.SerializeObject(value), JsonConvert.SerializeObject(readValue)));
                             }
+                            else
+                            {
+                                break;
+                            }
+                            if (j == propertyInfos.Length - 1)
+                                return true;
                         }
+
+                        plc.WriteCustomer(address, value);
                     }
+                    stringBuilder.AppendLine(string.Format(CommunicationExceptionMessage.WriteAndReadCheckFaild, address, JsonConvert.SerializeObject(value), JsonConvert.SerializeObject(obj)));
+                    throw new CommunicationException(string.Format(CommunicationExceptionMessage.WriteAndReadCheckFaild, address, JsonConvert.SerializeObject(value), JsonConvert.SerializeObject(obj)), CommunicationErrorType.WriteFailed);
                 }
                 else
                 {
                     throw new CommunicationException(string.Format(CommunicationExceptionMessage.WriteFailedException, typeof(T).Name, address, JsonConvert.SerializeObject(value), operateResult.Message), CommunicationErrorType.WriteFailed);
                 }
-                return operateResult.IsSuccess;
             }
             catch (Exception ex)
             {
-                LogNet.WriteException(Name, $"銆恵Name}銆慞LC鍐欏叆寮傚父锛屽湴鍧�锛氥�恵address}銆戯紝鍐欏叆鐨勬暟鎹細銆恵JsonConvert.SerializeObject(value)}銆戯紝閿欒淇℃伅锛氥�恵ex.Message}銆�", ex);
+                LogNet.WriteException(Name, ex.Message, ex);
                 throw new CommunicationException(ex.Message, CommunicationErrorType.WriteFailed, innerException: ex);
             }
             finally
             {
-                LogNet.WriteInfo(Name, logMsg);
+                LogNet.WriteInfo(Name, stringBuilder.ToString());
             }
 
         }

--
Gitblit v1.9.3