From b7308bba3d7ffad271ce7fc7a93c8c45d76be87d Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期五, 13 六月 2025 17:21:03 +0800
Subject: [PATCH] 优化印尼佳通-硫化胚胎出入库逻辑策略优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/device/S7Helper.cs |  776 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 776 insertions(+), 0 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/device/S7Helper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/device/S7Helper.cs
new file mode 100644
index 0000000..673a5d9
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/device/S7Helper.cs
@@ -0,0 +1,776 @@
+锘縰sing HH.WCS.Mobox3.FJJT.api;
+using HH.WCS.Mobox3.FJJT.util;
+using Newtonsoft.Json.Linq;
+using S7.Net;
+using S7.Net.Types;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web.Services.Description;
+using static HH.WCS.Mobox3.FJJT.util.Settings;
+
+namespace HH.WCS.Mobox3.FJJT.device
+{
+
+    /// <summary>
+    /// 瑗块棬瀛恜lc
+    /// </summary>
+    public class S7Helper
+    {
+        private static bool debug = true;
+        private static S7.Net.Plc plc = null;
+        static S7Helper()
+        {
+            Init();
+        }
+        private static Dictionary<string, Plc> plcDic = new Dictionary<string, Plc>();
+        private static void Init()
+        {
+            //閰嶇疆鏂囦欢璇诲彇鎵�湁鐨刾lc杩涜鍒濆鍖�+            try
+            {
+                var plc1 = new Plc(CpuType.S71500, "", 0, 1);
+                plcDic.Add("plc1", plc1);
+                Link(plc1);
+            }
+            catch (Exception ex)
+            {
+
+                Console.WriteLine("S7Helper Init err=" + ex.Message);
+            }
+        }
+        private static Plc GetPlc(string plc)
+        {
+            if (plcDic.ContainsKey(plc))
+            {
+                return plcDic[plc];
+            }
+            else
+            {
+                return null;
+            }
+        }
+        public static Dictionary<string, string> s7TestData = new Dictionary<string, string>();
+        private static void Link(Plc plc)
+        {
+            try
+            {
+                //if (!plc.IsConnected) {
+                plc.Close();
+                plc.Open();
+                if (plc.IsConnected)
+                {
+                    Console.WriteLine($"宸茶繛鎺ュ埌plc{plc.IP}");
+                }
+                else
+                {
+                    Console.WriteLine($"plc{plc.IP}杩炴帴澶辫触");
+                    LogHelper.Info($"plc{plc.IP}杩炴帴澶辫触", "Plc");
+                }
+
+                //}
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine($"plc{plc.IP}杩炴帴澶辫触锛宔rr={ex.Message}");
+                LogHelper.Info($"plc{plc.IP}杩炴帴澶辫触锛宔rr={ex.Message}");
+                //Init();
+            }
+
+        }
+        //https://www.ad.siemens.com.cn/productportal/Prods/S7-1200_PLC_EASY_PLUS/SmartSMS/060.html
+        //https://www.ad.siemens.com.cn/productportal/Prods/S7-1200_PLC_EASY_PLUS/07-Program/02-basic/01-Data_Type/09-String.html
+
+
+
+        internal static short[] ReadInt(string device, int db, int byteAddr, int count)
+        {
+            short[] result = null;
+            try
+            {
+                if (debug)
+                {
+                    var s7Key = $"int_{db}_{byteAddr}_{count}";
+                    if (s7TestData.ContainsKey(s7Key))
+                    {
+                        var data = s7TestData[s7Key].Split(',');
+                        if (data.Length == count)
+                        {
+                            result = Array.ConvertAll(data, s => short.Parse(s));
+                        }
+                        else
+                        {
+                            result = new short[count];
+                            s7TestData[s7Key] = string.Join(",", result);
+                        }
+                        Console.WriteLine($"璇诲彇plc {device}淇℃伅鎴愬姛锛� addr={byteAddr} data={string.Join(",", result)}");
+                    }
+                }
+                else
+                {
+                    var plc = GetPlc(device);
+                    if (plc != null)
+                    {
+                        if (plc.IsConnected)
+                        {
+                            result = (short[])plc.Read(DataType.DataBlock, db, byteAddr, VarType.Int, count, 0);
+                            Console.WriteLine($"璇诲彇plc {device}淇℃伅鎴愬姛锛宨p={plc.IP}  addr={byteAddr} data={string.Join(",", result)}");
+                            if (result.Length == 0)
+                            {
+                                Console.WriteLine($"plc {device}鍑嗗閲嶆柊杩炴帴");
+                                Link(plc);
+                            }
+                        }
+                        else
+                        {
+                            Console.WriteLine($"鍑嗗杩炴帴plc {device}");
+                            Link(plc);
+                        }
+                    }
+                    else
+                    {
+                        Console.WriteLine($"plc {device}涓嶅瓨鍦�);
+                    }
+
+                }
+
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine($"ReadInt锛宒evice={device}  addr={byteAddr} count={count} err={ex.Message}");
+                LogHelper.Error($"ReadInt锛宒evice={device}  addr={byteAddr}  count={count} err={ex.Message}", ex);
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="db"></param>
+        /// <param name="byteAddr"></param>
+        /// <param name="data"></param>
+        /// <returns></returns>
+        internal static bool WriteInt(int db, int byteAddr, short data)
+        {
+            var result = false;
+            try
+            {
+                if (plc.IsConnected)
+                {
+                    plc.Write(DataType.DataBlock, db, byteAddr, data);
+                    Console.WriteLine($"鍐欏叆plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} ");
+                    LogHelper.Info($"鍐欏叆plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} ");
+                    if (result)
+                    {
+                        //鍐欏畬鍐嶈涓�纭
+                        var readData = (short)plc.Read(DataType.DataBlock, db, byteAddr, VarType.Int, 1, 0);
+                        Console.WriteLine($"璇诲彇plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} res={string.Join(", ", readData)}");
+                        LogHelper.Info($"璇诲彇plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} res={string.Join(", ", readData)}", "PLC");
+                        result = readData == data;
+                    }
+
+
+                }
+                else
+                {
+                    Console.WriteLine("鍑嗗杩炴帴plc1");
+                    Link(plc);
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Error($"鍐欏叆plc1淇℃伅澶辫触锛宨p={plc.IP} addr={byteAddr} data={data} err={ex.Message}", ex);
+            }
+            return result;
+        }
+        public static object ReadBit(string device, int db, int byteAddr, byte bitAddr)
+        {
+            object result = null;
+            try
+            {
+                if (debug)
+                {
+                    var s7Key = $"bit_{db}_{byteAddr}_{bitAddr}";
+                    if (s7TestData.ContainsKey(s7Key))
+                    {
+                        var data = s7TestData[s7Key];
+                        if (data == "1")
+                        {
+                            result = true;
+                        }
+                        else { result = false; }
+                        Console.WriteLine($"璇诲彇plc {device}淇℃伅鎴愬姛锛� addr={byteAddr} data={result.ToString()}");
+                    }
+                }
+                else
+                {
+                    var plc = GetPlc(device);
+                    if (plc != null)
+                    {
+                        if (plc.IsConnected)
+                        {
+                            result = plc.Read(DataType.DataBlock, db, byteAddr, VarType.Int, 1, bitAddr);
+                            Console.WriteLine($"璇诲彇plc {device}淇℃伅鎴愬姛锛宨p={plc.IP}  addr={byteAddr} data={result.ToString()}");
+                        }
+                        else
+                        {
+                            Console.WriteLine($"鍑嗗杩炴帴plc {device}");
+                            Link(plc);
+                        }
+                    }
+                    else
+                    {
+                        Console.WriteLine($"plc {device}涓嶅瓨鍦�);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine($"ReadBit锛宒evice={device}  addr={byteAddr} bit={bitAddr} err={ex.Message}");
+                LogHelper.Error($"ReadBit锛宒evice={device}  addr={byteAddr} bit={bitAddr} err={ex.Message}", ex);
+            }
+            return result;
+        }
+        public static string ReadStr(string device, int db, int byteAddr, int count)
+        {
+            string result = string.Empty;
+            try
+            {
+                if (debug)
+                {
+                    var s7Key = $"str_{db}_{byteAddr}_{count}";
+                    if (s7TestData.ContainsKey(s7Key))
+                    {
+                        var data = s7TestData[s7Key];
+                        if (data.Length == count)
+                        {
+                            result = data;
+                            Console.WriteLine($"ReadStr 鎴愬姛锛�addr={byteAddr}  res={result}");
+                        }
+                    }
+                }
+                else
+                {
+                    if (plc.IsConnected)
+                    {
+                        result = plc.Read(DataType.DataBlock, 100, byteAddr, VarType.String, count, 0).ToString();
+                        Console.WriteLine($"ReadStr 鎴愬姛锛宨p={plc.IP} addr={byteAddr}  res={result}");
+                        if (result.Length == 0)
+                        {
+                            Link(plc);
+                        }
+                    }
+                    else
+                    {
+                        Console.WriteLine("鍑嗗杩炴帴plc");
+                        Link(plc);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine($"ReadStr锛宒evice={device}  addr={byteAddr}  count={count} err={ex.Message}");
+                LogHelper.Error($"ReadStr锛宒evice={device}  addr={byteAddr}  count={count} err={ex.Message}", ex);
+            }
+            return result;
+        }
+
+        #region 鎵归噺鍐欏叆 璇诲彇
+
+        /// <summary>
+        /// s7鍐欏叆鍙栧�鏂规硶
+        /// </summary>
+        public static void Write()
+        {
+            var plcInfo = Settings.linePlcInfo.Where(a => (a.deviceNo == "1") && a.enable == 1).FirstOrDefault();
+
+            //鑾峰彇閰嶇疆鏂囦欢鍐欏叆鐨勫湴鍧�+            List<S7Model> writemodels = Settings.plcValue.Find(a => a.address == plcInfo.address).read;
+
+            if (writemodels.Count > 0)
+            {
+                writemodels.Find(a => a.addr == 0).value = "1";
+                writemodels.Find(a => a.addr == 2).value = "2";
+                writemodels.Find(a => a.addr == 4).value = "4";
+                writemodels.Find(a => a.addr == 18).value = "TP24121108";
+                byte[] bytes = GetWriteByte(writemodels);
+                if (PLCWrite(plcInfo, 100, bytes))
+                {
+                    Console.WriteLine("鍐欏叆鎴愬姛");
+                    //鍐欏叆鎴愬姛鏍¢獙鏁版嵁
+                    Read();
+                    if (Dictvalues[plcInfo.address].Find(a => a.addr == 2).value == "2")
+                    {
+                        Console.WriteLine("鏁版嵁鏍¢獙鎴愬姛锛屼慨鏀逛换鍔$姸鎬�);
+                    }
+                }
+                else
+                {
+                    Console.WriteLine("鍐欏叆澶辫触");
+                }
+            }
+ 
+        
+        }
+
+        /// <summary>
+        /// 灏嗚鍐欑殑鏁版嵁杞崲鎴恇yte
+        /// </summary>
+        /// <param name="writemodels"></param>
+        /// <returns></returns>
+        public static byte[] GetWriteByte(List<S7Model> writemodels)
+        {
+            var model = writemodels.OrderByDescending(a => a.addr).First();
+            var readlen = model.addr + model.length;
+            byte[] bytes = new byte[readlen];
+
+            foreach (var item in writemodels)
+            {
+                if (!string.IsNullOrEmpty(item.value))
+                {
+                    //杞崲byte
+                    switch (item.type)
+                    {
+                        case "Int":
+                        case "Bit":
+                            bytes[item.addr] = (byte)((uint)(int.Parse(item.value) >> 8) & 0xFFu);
+                            bytes[item.addr + 1] = (byte)((uint)(int.Parse(item.value) >> 0) & 0xFFu);
+                            break;
+                        case "DInt":
+                        case "Real":
+                            bytes[item.addr] = (byte)((uint)(int.Parse(item.value) >> 24) & 0xFFu);
+                            bytes[item.addr + 1] = (byte)((uint)(int.Parse(item.value) >> 16) & 0xFFu);
+                            bytes[item.addr + 2] = (byte)((uint)(int.Parse(item.value) >> 8) & 0xFFu);
+                            bytes[item.addr + 3] = (byte)((uint)(int.Parse(item.value) >> 0) & 0xFFu);
+                            break;
+                        case "String":
+                        case "Byte":
+                            var bytevalue = Encoding.UTF8.GetBytes(item.value);
+                            if (bytevalue.Count() <= item.length)
+                            {
+                                for (int i = 0; i < bytevalue.Count(); i++)
+                                {
+
+                                    bytes[item.addr + item.length - bytevalue.Count() + i] = bytevalue[i];
+                                }
+                            }
+                            break;
+                    }
+                }
+
+            }
+            return bytes;
+        }
+
+        public static Dictionary<string, List<S7Model>> Dictvalues = new Dictionary<string, List<S7Model>>();
+
+        /// <summary>
+        /// s7璇诲彇鏂规硶
+        /// </summary>
+        public static void Read()
+        {
+            var plcInfo = Settings.linePlcInfo.Where(a => (a.deviceNo == "1") && a.enable == 1).FirstOrDefault();
+            var bytes = new byte[0];
+            //鑾峰彇閰嶇疆鏂囦欢璇诲彇鐨勫湴鍧�+            List<S7Model> readmodels = Settings.plcValue.Find(a => a.address == plcInfo.address).read;
+            if (readmodels.Count > 0)
+            {
+                //鑾峰彇璇诲彇闀垮害
+
+                var model = readmodels.OrderByDescending(a => a.addr).First();
+                var readlen = model.addr + model.length;
+                PLCRead(plcInfo, 100, 0, readlen, out bytes);
+
+                //灏嗛厤缃枃浠堕厤缃殑鍋忕Щ閲忚浆鎹㈠瓨鏀惧埌瀛楀吀閲�+                // List<S7Value> s7Values = new List<S7Value>();
+                foreach (var item in readmodels)
+                {
+                    //瑙f瀽鏁版嵁
+                    string value = "";
+                    switch (item.type)
+                    {
+                        case "Int":
+                            value = GetInt(bytes, item.addr, VarType.Int).ToString();
+                            break;
+                        case "DInt":
+                            value = GetInt(bytes, item.addr, VarType.DInt).ToString();
+                            break;
+                        case "Real":
+                            value = GetInt(bytes, item.addr, VarType.Real).ToString();
+                            break;
+                        case "String":
+                            value = GetString(bytes, item.addr, VarType.String, item.length).ToString();
+                            break;
+                            //case "Byte":
+                            //    value = S7Help.GetInt(bytes, item.addr, VarType.Byte,item.length).ToString();
+                            //    break;
+                    }
+                    item.value = value;
+                    // s7Values.Add(new S7Value { addr = item.addr, type = item.type, value = value });
+                }
+                //鏁版嵁瀛樺叆瀛楀吀
+                if (Dictvalues.Keys.Contains(plcInfo.address))
+                {
+                    Dictvalues[plcInfo.address] = readmodels;
+                }
+                else
+                {
+                    Dictvalues.Add(plcInfo.address, readmodels);
+
+                }
+            }
+
+        }
+        /// <summary>
+        /// S7鍐欏叆byte鏁扮粍
+        /// </summary>
+        /// <param name="plcInfo">閰嶇疆鏂囦欢</param>
+        /// <param name="db">DB鍧�/param>
+        /// <param name="bytes"></param>
+        /// <returns></returns>
+        public static bool PLCWrite(Settings.LinePlcInfo plcInfo, int db, byte[] bytes)
+        {
+            bool result = false;
+            var plc = new Plc(CpuType.S71500, plcInfo.address, 0, 1);
+            Link(plc);
+
+            try
+            {
+                result = plc.WriteBytes(DataType.DataBlock, Convert.ToInt16(db), Convert.ToInt16(plcInfo.writeAddr), bytes) == ErrorCode.NoError;
+                return result;
+            }
+            catch (Exception ex)
+            {
+
+                throw ex;
+            }
+        }
+
+        /// <summary>
+        /// S7璇诲彇byte鏁扮粍
+        /// </summary>
+        /// <param name="plcInfo">閰嶇疆鏂囦欢</param>
+        /// <param name="db">DB鍧�/param>
+        /// <param name="addr">璇诲彇璧峰鍋忕Щ閲�/param>
+        /// <param name="bytes">杈撳嚭byte</param>
+        /// <returns></returns>
+        public static bool PLCRead(Settings.LinePlcInfo plcInfo, int db, int addr, int len, out byte[] bytes)
+        {
+
+            bool result = false;
+            var plc = new Plc(CpuType.S71500, plcInfo.address, 0, 1);
+            Link(plc);
+
+            string res = string.Empty;
+            bytes = new byte[len];
+            try
+            {
+                if (plcInfo != null)
+                {
+
+                    bytes = plc.ReadBytes(DataType.DataBlock, Convert.ToInt16(db), Convert.ToInt16(plcInfo.readAddr + addr), len);
+                    var r1 = "new byte[] {" + string.Join(",", bytes) + " }";
+                    res = $" B{db} A{addr} L{len} A{r1}";
+
+                }
+                else
+                {
+                    res = " 娌¤澶囥�";
+                }
+            }
+            catch (Exception ex)
+            {
+                res = "Err" + ex.Message + ex.StackTrace;
+            }
+
+            //  result = plc.WriteBytes(DataType.DataBlock, Convert.ToInt16(1000), Convert.ToInt16(linePlcInfo.writeAddr + 6), bytes) == ErrorCode.NoError;
+            return result;
+        }
+
+        /// <summary>
+        /// 瑙f瀽鍫嗗灈鏈篵yte鏁扮粍int绫诲瀷
+        /// </summary>
+        /// <param name="adr">鍋忕Щ閲�/param>
+        /// <param name="varType">绫诲瀷</param>
+        /// <param name="action">瑙f瀽澶辫触璋冨彇鏂规硶鍗曚釜璇诲彇</param>
+        /// <returns></returns>
+        public static int GetInt(byte[] bytes, int adr, VarType varType, Func<int> action = null)
+        {
+            var b = -1;
+            byte[] by = new byte[0];
+
+            by = bytes;
+
+            if (by.Count() > 0)
+            {
+                b = GetInt(adr, varType, by);
+            }
+            if (b == -1 && action != null)
+            {
+                b = action();
+            }
+
+
+            return b;
+        }
+
+        public static int GetInt(int adr, VarType varType, byte[] d, int length = 1)
+        {
+            //璁$畻绫诲瀷闀垮害锛宻tring绫诲瀷涓哄彲鍙橀暱搴︾敤閰嶇疆鏂囦欢瀹氫箟鐨勯暱搴�+            var vlen = VarTypeToByteLength(varType);
+            if (varType == VarType.String)
+            {
+                vlen = length;
+            }
+
+            if (adr + vlen > d.Length)
+            {
+                return -1;
+            }
+
+            var adrbyte = d.Skip(adr).Take(vlen).ToArray();
+            var obj = ParseBytes(varType, adrbyte, 1, 0);
+            return Convert.ToInt32(obj);
+        }
+        /// <summary>
+        /// 瑙f瀽string绫诲瀷
+        /// </summary>
+        /// <param name="bytes"></param>
+        /// <param name="adr"></param>
+        /// <param name="varType"></param>
+        /// <param name="count"></param>
+        /// <param name="action"></param>
+        /// <returns></returns>
+        public static string GetString(byte[] bytes, int adr, VarType varType, int count, Func<int> action = null)
+        {
+            string b = null;
+            byte[] by = new byte[0];
+
+            by = bytes;
+
+            if (by.Count() > 0)
+            {
+                b = GetString(adr, varType, by, count);
+            }
+            if (string.IsNullOrEmpty(b) && action != null)
+            {
+                b = action().ToString();
+            }
+
+
+            return b;
+        }
+        public static string GetString(int adr, VarType varType, byte[] d, int length = 1)
+        {
+            //璁$畻绫诲瀷闀垮害锛宻tring绫诲瀷涓哄彲鍙橀暱搴︾敤閰嶇疆鏂囦欢瀹氫箟鐨勯暱搴�+            var vlen = VarTypeToByteLength(varType);
+            if (varType == VarType.String)
+            {
+                vlen = length;
+            }
+
+            if (adr + vlen > d.Length)
+            {
+                return "";
+            }
+
+            var adrbyte = d.Skip(adr).Take(vlen).ToArray();
+            adrbyte = adrbyte.Skip(adrbyte.ToList().FindIndex(x => x > 0)).ToArray();
+            var obj = ParseBytes(varType, adrbyte, 1, 0);
+            return obj.ToString();
+        }
+
+        private static int VarTypeToByteLength(VarType varType, int varCount = 1)
+        {
+            switch (varType)
+            {
+                case VarType.Bit:
+                    return varCount;
+                case VarType.Byte:
+                    if (varCount >= 1)
+                    {
+                        return varCount;
+                    }
+
+                    return 1;
+                case VarType.String:
+                    return varCount;
+                case VarType.StringEx:
+                    return varCount + 2;
+                case VarType.Word:
+                case VarType.Int:
+                case VarType.Timer:
+                case VarType.Counter:
+                    return varCount * 2;
+                case VarType.DWord:
+                case VarType.DInt:
+                case VarType.Real:
+                    return varCount * 4;
+                default:
+                    return 0;
+            }
+        }
+        private static object ParseBytes(VarType varType, byte[] bytes, int varCount, byte bitAdr = 0)
+        {
+            if (bytes == null)
+            {
+                return null;
+            }
+
+            switch (varType)
+            {
+                case VarType.Byte:
+                    if (varCount == 1)
+                    {
+                        return bytes[0];
+                    }
+
+                    return bytes;
+                case VarType.Word:
+                    if (varCount == 1)
+                    {
+                        return Word.FromByteArray(bytes);
+                    }
+
+                    return Word.ToArray(bytes);
+                case VarType.Int:
+                    if (varCount == 1)
+                    {
+                        return Int.FromByteArray(bytes);
+                    }
+
+                    return Int.ToArray(bytes);
+                case VarType.DWord:
+                    if (varCount == 1)
+                    {
+                        return DWord.FromByteArray(bytes);
+                    }
+
+                    return DWord.ToArray(bytes);
+                case VarType.DInt:
+                    if (varCount == 1)
+                    {
+                        return DInt.FromByteArray(bytes);
+                    }
+
+                    return DInt.ToArray(bytes);
+                case VarType.Real:
+                    if (varCount == 1)
+                    {
+                        return S7.Net.Types.Double.FromByteArray(bytes);
+                    }
+
+                    return S7.Net.Types.Double.ToArray(bytes);
+                case VarType.String:
+                    return S7.Net.Types.String.FromByteArray(bytes);
+                case VarType.StringEx:
+                    return StringEx.FromByteArray(bytes);
+                case VarType.Timer:
+                    if (varCount == 1)
+                    {
+                        return S7.Net.Types.Timer.FromByteArray(bytes);
+                    }
+
+                    return S7.Net.Types.Timer.ToArray(bytes);
+                case VarType.Counter:
+                    if (varCount == 1)
+                    {
+                        return Counter.FromByteArray(bytes);
+                    }
+
+                    return Counter.ToArray(bytes);
+                case VarType.Bit:
+                    if (varCount == 1)
+                    {
+                        if (bitAdr > 7)
+                        {
+                            return null;
+                        }
+
+                        return Bit.FromByte(bytes[0], bitAdr);
+                    }
+
+                    return Bit.ToBitArray(bytes);
+                default:
+                    return null;
+            }
+        }
+        #endregion
+   
+        #region 鐢ㄤ簬妯℃嫙娴嬭瘯
+        /// <summary>
+        /// short绫诲瀷锛屼竴涓崰2涓猙yte
+        /// </summary>
+        public class DBWModel
+        {
+            public int db { get; set; }
+            public int byteAddr { get; set; }
+            /// <summary>
+            /// int绫诲瀷闇�鐢ㄩ�鍙峰垎寮�紝string涓嶉渶瑕�+            /// </summary>
+            public string value { get; set; }
+        }
+        /// <summary>
+        /// 瀛楃涓茬被鍨嬶紝涓�釜鍗�涓猙yte
+        /// </summary>
+        public class DBBModel
+        {
+            public int db { get; set; }
+            public int byteAddr { get; set; }
+            public string value { get; set; }
+        }
+        public class DBXModel
+        {
+            public int db { get; set; }
+            public int byteAddr { get; set; }
+            public int bitAddr { get; set; }
+            /// <summary>
+            /// 1:true 0:false
+            /// </summary>
+            public int value { get; set; }
+        }
+        public static void s7SetInt(DBWModel model)
+        {
+            var data = model.value.Replace(",", "");
+            var s7Key = $"int_{model.db}_{model.byteAddr}_{data.Length}";
+            if (s7TestData.ContainsKey(s7Key))
+            {
+                s7TestData[s7Key] = model.value;
+            }
+            else
+            {
+                s7TestData.Add(s7Key, model.value);
+            }
+        }
+
+        internal static void s7SetBit(DBXModel model)
+        {
+            var s7Key = $"bit_{model.db}_{model.byteAddr}_{model.bitAddr}";
+            var value = model.value == 1 ? "1" : "0";
+            if (s7TestData.ContainsKey(s7Key))
+            {
+                s7TestData[s7Key] = value;
+            }
+            else
+            {
+                s7TestData.Add(s7Key, value);
+            }
+        }
+
+        internal static void s7SetStr(DBBModel model)
+        {
+            var s7Key = $"str_{model.db}_{model.byteAddr}_{model.value.Length}";
+            if (s7TestData.ContainsKey(s7Key))
+            {
+                s7TestData[s7Key] = model.value;
+            }
+            else
+            {
+                s7TestData.Add(s7Key, model.value);
+            }
+        }
+    }
+    #endregion
+}

--
Gitblit v1.9.1