分支自 SuZhouGuanHong/TaiYuanTaiZhong

huanghongfeng
2024-07-19 bb929bd0809eefc1108dd779846ff07d997f7ef0
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_WCS/WCSClient/Siemens/SiemensPLCClient.cs
@@ -3,6 +3,7 @@
using System.Net.NetworkInformation;
using WIDESEA_Comm.DataHandle;
using WIDESEA_Comm.LogInfo;
using static FreeSql.Internal.GlobalFilter;
namespace WIDESEA_WCS.WCSClient
{
@@ -14,9 +15,12 @@
        private readonly object _lockWrite = new object();
        public SiemensS7Net siemensPLCClient { get; set; }
        public SiemensPLCClient()
        public SiemensPLCClient(string model)
        {
            siemensPLCClient = new SiemensS7Net(SiemensPLCS.S1200);
            if (model == "S300")
                siemensPLCClient = new SiemensS7Net(SiemensPLCS.S300);
            else
                siemensPLCClient = new SiemensS7Net(SiemensPLCS.S1500);
            base.siemensPLCClient = this.siemensPLCClient;
        }
@@ -48,6 +52,7 @@
            siemensPLCClient.Port = Port;
            siemensPLCClient.Slot = (byte)Slot;
            siemensPLCClient.ConnectTimeOut = 1000 * 3;//超时时间
            siemensPLCClient.ReceiveTimeOut = 1000 * 3;
            siemensPLCClient.ConnectClose();
            var coonRes = siemensPLCClient.ConnectServer();
            IsConnected = coonRes.IsSuccess;
@@ -130,8 +135,11 @@
            }
            else if (typeof(DataType) == typeof(string))//字符串
            {
                var bytes = (byte[])GetContent(siemensPLCClient.Read(dbAddress, (ushort)len), dbAddress);
                string str = DataParse.GetStr(bytes, 0);
                //var bytes = (byte[])GetContent(siemensPLCClient.Read(dbAddress, (ushort)len), dbAddress);
                //string str = DataParse.GetStr(bytes, 0);
                //return (DataType)(str as object);
                var str = GetContent(siemensPLCClient.ReadString(dbAddress, (ushort)len), dbAddress).ToString();
                str = str.Replace("\0", "")?.Replace("\\", "")?.Replace("\u0014", "")?.Replace("?\u0006", "")?.Replace("\u000e\u000e", "")?.Replace("\n", "")?.Replace("?", "")?.Trim();
                return (DataType)(str as object);
            }
            else
@@ -147,8 +155,17 @@
        /// <returns></returns>
        public override DataType ReadByOrder<DataType>(string orderName, string Method = null)
        {
            var item = itemGroups.Where(t => t.name.Equals(orderName)).FirstOrDefault();
            if (Method != null) { item = itemGroups.Where(t => t.name.Equals(orderName) && t.Methods.Equals(Method)).FirstOrDefault(); }
            DBItemGroup item = null;
            //var item = itemGroups.Where(t => t.name.Equals(orderName)).FirstOrDefault();
            //if (Method != null) { item = itemGroups.Where(t => t.name.Equals(orderName) && t.Methods.Equals(Method)).FirstOrDefault(); }
            var items = itemGroups.Where(t => t.name.Contains(orderName)).ToList();
            if (items.Count > 0)
            {
                if (Method != null)
                    item = items.Where(t => t.Methods.Contains(Method)).FirstOrDefault();
                else
                    item = items.Where(t => t.name.Contains(orderName)).FirstOrDefault();
            }
            if (item == null)
            {
                throw new Exception($"PLC{PLCName},未定义指令{orderName}");
@@ -189,7 +206,7 @@
            else if (typeof(DataType) == typeof(string))//字符串
            {
                var str = GetContent(siemensPLCClient.ReadString(item.dbAddress, (ushort)item.dataLen), item).ToString();
                str = str.Replace("\0", "")?.Replace("\\", "")?.Replace("\u0014", "")?.Replace("?\u0006", "");
                str = str.Replace("\0", "")?.Replace("\\", "")?.Replace("\u0014", "")?.Replace("?\u0006", "")?.Replace("\n", "")?.Replace("?", "")?.Trim();
                return (DataType)(str as object);
            }
            else
@@ -253,6 +270,7 @@
                if (!result.IsSuccess)
                {
                    IsConnected = false;
                    WriteLog.Write_Log(PLCName, $"{PLCName}_Write", $"{dbAddress}写入失败," + result.Message);
                    throw new Exception($"{dbAddress}写入失败," + result.Message);
                }
@@ -322,6 +340,7 @@
                if (!result.IsSuccess)
                {
                    IsConnected = false;
                    WriteLog.Write_Log(PLCName, $"{PLCName}_Write", $"{orderName}写入失败," + result.Message, item);
                    throw new Exception($"{PLCName},{orderName}写入失败," + result.Message);
                }