From 77f9799304c059996d38914b1adc5c9c965e070e Mon Sep 17 00:00:00 2001
From: zxx <Zxx@HanInfo>
Date: 星期五, 30 五月 2025 13:27:50 +0800
Subject: [PATCH] RGVS7写入修改

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs |  290 ++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 221 insertions(+), 69 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs
index d72dc35..c2d558a 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs
@@ -3,6 +3,7 @@
 using Microsoft.Owin.BuilderProperties;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
+using Opc.Ua;
 using S7.Net;
 using S7.Net.Types;
 using SqlSugar;
@@ -11,6 +12,7 @@
 using System.Data.SqlTypes;
 using System.Linq;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
 using System.Web.Services.Description;
 using static HH.WCS.JuShi.util.Settings;
@@ -164,6 +166,9 @@
             var result = false;
             try
             {
+                var linkplc = Settings.SafeInteractions.First();
+                var plc = new Plc(CpuType.S71200, linkplc.ip, 0, 1);
+                Link(plc);
                 if (plc.IsConnected)
                 {
                     plc.Write(DataType.DataBlock, db, byteAddr, data);
@@ -285,76 +290,187 @@
         }
 
 
-        public static List<PlcDeviceTable> plcDeviceTables = new List<PlcDeviceTable>();
+        public static PlcDeviceTable plcDeviceTables = new PlcDeviceTable();
         /// <summary>
         /// 鑾峰彇杈撻�绾挎暟鎹�         /// </summary>
         public static void ReadSsxPLc()
         {
-            //#region 娴嬭瘯鍐欏叆鏁版嵁
-            //List<S7Model> s7Models = new List<S7Model>();
-            //s7Models.Add(new S7Model() { addr = 0, value = "1", type = "Int", length = 2 });
-            //s7Models.Add(new S7Model() { addr = 2, value = "2", type = "Int", length = 2 });
-            //s7Models.Add(new S7Model() { addr = 4, value = "4", type = "Int", length = 2 });
-            //s7Models.Add(new S7Model() { addr = 18, value = "TP24121108", type = "String", length = 20 });
-            //var plcInfo = Settings.linePlcInfo.Where(a => (a.deviceNo == "2") && a.enable == 1).FirstOrDefault();
-            //Write(s7Models, 100, plcInfo);
-            //#endregion
-
             var db = new SqlHelper<WCSTask>().GetInstance();
-            //涓や釜鎷嗘墭鏈�-            var linkplcs = Settings.linePlcInfos.FindAll(a => a.enable == 1).ToList();
-            foreach (var linkplc in linkplcs){
-                //鑾峰彇璁惧閰嶇疆鏂囦欢
-                var deviceInfos = Settings.ConveyorLinesInfos.Where(a => a.enable == 1 &&a.deviceNo== linkplc.deviceNo).ToList();
-                if (deviceInfos.Count > 0)
+            try
+            {
+                var linkplc = Settings.SafeInteractions.FindAll(a => a.code == 1|| a.code == 7).ToList();
+                var plc = new Plc(CpuType.S71500, linkplc[1].ip, 0, 1);
+                Link(plc);
+                var plc1 = new Plc(CpuType.S71200, linkplc[0].ip, 0, 1);
+                Link(plc1);
+                //鎷嗘墭鏈�
+                //object rawValue = plc.Read(DataType.DataBlock, 8, 230, VarType.Byte, 1);
+                //LogHelper.Info($"Raw value: {rawValue} (Type: {rawValue?.GetType()})");
+                // 鍏堣鍙栨暣涓瓧鑺�+                byte data = (byte)plc.Read(DataType.DataBlock, 8, 230, VarType.Byte, 1);
+                // 鐒跺悗鎻愬彇鍚勪釜浣�+                bool requestPut1 = (data & 0x01) != 0;  // 230.0   1001
+                bool requestTake1 = (data & 0x02) != 0;   // 230.1    1003
+                bool requestPut2 = (data & 0x04) != 0;  // 230.2     1004
+                bool requestTake2 = (data & 0x08) != 0;   // 230.3    1006
+                LogHelper.Info($"鎷嗘墭鏈烘帴鏀朵俊鍙�===={requestPut1}锛寋requestTake1}锛寋requestPut2}锛寋requestTake2}");
+
+                //RGV
+                //var rawValue = plc1.Read(DataType.DataBlock, 51, 0, VarType.Int, 1);
+                //LogHelper.Info($"Raw value: {rawValue}, Type: {rawValue?.GetType()}");
+
+                // RGV鍏佽鍗歌揣鐘舵�璇诲彇 (浠嶥B51璇诲彇)
+                int rgv1AllowUnload = Convert.ToInt32(plc1.Read(DataType.DataBlock, 51, 0, VarType.Int, 1));
+                int rgv2AllowUnload = Convert.ToInt32(plc1.Read(DataType.DataBlock, 51, 2, VarType.Int, 1));
+                int rgv3AllowUnload = Convert.ToInt32(plc1.Read(DataType.DataBlock, 51, 4, VarType.Int, 1));
+                int rgv4AllowUnload = Convert.ToInt32(plc1.Read(DataType.DataBlock, 51, 6, VarType.Int, 1));
+                int rgv5AllowUnload = Convert.ToInt32(plc1.Read(DataType.DataBlock, 51, 8, VarType.Int, 1));
+                int rgv6AllowUnload = Convert.ToInt32(plc1.Read(DataType.DataBlock, 51, 10, VarType.Int, 1));
+
+                LogHelper.Info($"RGV鎺ユ敹淇″彿=== 1={rgv1AllowUnload}, 2={rgv2AllowUnload}, 3={rgv3AllowUnload}, 4={rgv4AllowUnload}, 5={rgv5AllowUnload}, 6={rgv6AllowUnload}");
+
+                //瀛樺埌缂撳瓨
+                if (plcDeviceTables != null)
                 {
-                    int slen =int.Parse(deviceInfos.Min(a => a.readAddr).ToString());
-                    int elen = int.Parse(deviceInfos.Max(a => a.readAddr).ToString());
-
-                    //璇诲彇杈撻�绾挎暣涓亸绉婚噺鐨刡yte鏁扮粍 鏀惧唴瀛橀噷涓�捣瑙f瀽锛岄槻姝㈣繃搴﹁鍙�-                    //PLCRead(linkplc.address, 8, slen, elen + 18, out Ssxbytes);
-
-                    var plc = new Plc(CpuType.S71500, linkplc.address, 0, 1);
-                    Link(plc);
-                    //涓�釜鎷嗘墭鏈轰袱涓嚎浣�-                    foreach (var device in deviceInfos)
+                    plcDeviceTables.requestTake1 = requestTake1;
+                    plcDeviceTables.requestPut1 = requestPut1;
+                    plcDeviceTables.requestTake2 = requestTake2;
+                    plcDeviceTables.requestPut2 = requestPut2;
+                    plcDeviceTables.RGVAllowUnload = new Dictionary<int, int>
                     {
-                        //int workMode = int.Parse(GetValue(int.Parse(device.readAddr.ToString()), VarType.Int, Ssxbytes));        //宸ヤ綔妯″紡
-                        //int lightAction = int.Parse(GetValue(int.Parse((device.readAddr + 2).ToString()), VarType.Int, Ssxbytes));     //鏄惁鏈夎揣锛屽厜鐢典俊鍙�-
-                        int workMode = (short)plc.Read(DataType.DataBlock, 8, int.Parse(device.readAddr.ToString()), VarType.Int, 1, 0);
-                        int lightAction = (short)plc.Read(DataType.DataBlock, 8, int.Parse((device.readAddr + 2).ToString()), VarType.Int, 1, 0);
-                        var requestTake = plc.Read("DB8.DBX"+ device.readAddr+16.0);//杈撻�绾胯姹傚彇妗�-                        var requestPut = plc.Read("DB8.DBX"+ device.readAddr + 16.1);//杈撻�绾垮厑璁告斁妗�-                        //瀛樺埌缂撳瓨
-                        var task = plcDeviceTables.Find(a => a.DeviceNo == device.code);
-                        if (task != null)
-                        {
-                            task.DeviceNo = device.code;
-                            task.workMode = workMode;
-                            task.lightAction = lightAction;
-                            task.requestTake =bool.Parse(requestTake.ToString());
-                            task.requestPut = bool.Parse(requestPut.ToString());
-                        }
-                        else
-                        {
-                            var plcDeviceTable = new PlcDeviceTable();
-                            plcDeviceTable.DeviceNo = device.code;
-                            plcDeviceTable.workMode = workMode;
-                            plcDeviceTable.lightAction = lightAction;
-                            plcDeviceTable.requestTake = bool.Parse(requestTake.ToString());
-                            plcDeviceTable.requestPut = bool.Parse(requestPut.ToString());
-                            plcDeviceTables.Add(plcDeviceTable);
-                        }
-
-                    }
+                        {1, rgv1AllowUnload},
+                        {2, rgv2AllowUnload},
+                        {3, rgv3AllowUnload},
+                        {4, rgv4AllowUnload},
+                        {5, rgv5AllowUnload},
+                        {6, rgv6AllowUnload}
+                    };
+                    LogHelper.Info($"S7鍗忚绗竴娆¤鍙栧弬鏁�{JsonConvert.SerializeObject(plcDeviceTables)}");
                 }
+                else
+                {
+                    var plcDeviceTable = new PlcDeviceTable();
+                    plcDeviceTable.requestTake1 = requestTake1;
+                    plcDeviceTable.requestPut1 = requestPut1;
+                    plcDeviceTable.requestTake2 = requestTake2;
+                    plcDeviceTable.requestPut2 = requestPut2;
+                    plcDeviceTable.RGVAllowUnload = new Dictionary<int, int>
+                    {
+                        {1, rgv1AllowUnload},
+                        {2, rgv2AllowUnload},
+                        {3, rgv3AllowUnload},
+                        {4, rgv4AllowUnload},
+                        {5, rgv5AllowUnload},
+                        {6, rgv6AllowUnload}
+                    };
+                    plcDeviceTables = plcDeviceTable;
+                    LogHelper.Info($"S7鍗忚璇诲彇鍙傛暟:{JsonConvert.SerializeObject(plcDeviceTable)}");
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine("ReadSsxPLc:" + ex.Message + ex.StackTrace);
+                LogHelper.Error("ReadSsxPLc:" + ex.Message, ex);
+                throw;
             }
 
 
         }
+        ///// <summary>
+        ///// 鑾峰彇杈撻�绾挎暟鎹�+        ///// </summary>
+        //public static void oldReadSsxPLc()
+        //{
+        //    //#region 娴嬭瘯鍐欏叆鏁版嵁
+        //    //List<S7Model> s7Models = new List<S7Model>();
+        //    //s7Models.Add(new S7Model() { addr = 0, value = "1", type = "Int", length = 2 });
+        //    //s7Models.Add(new S7Model() { addr = 2, value = "2", type = "Int", length = 2 });
+        //    //s7Models.Add(new S7Model() { addr = 4, value = "4", type = "Int", length = 2 });
+        //    //s7Models.Add(new S7Model() { addr = 18, value = "TP24121108", type = "String", length = 20 });
+        //    //var plcInfo = Settings.linePlcInfo.Where(a => (a.deviceNo == "2") && a.enable == 1).FirstOrDefault();
+        //    //Write(s7Models, 100, plcInfo);
+        //    //#endregion
 
+        //    var db = new SqlHelper<WCSTask>().GetInstance();
+        //    try
+        //    {
+        //        //涓や釜鎷嗘墭鏈�+        //        var linkplcs = Settings.linePlcInfos.FindAll(a => a.enable == 1).ToList();
+        //        foreach (var linkplc in linkplcs)
+        //        {
+        //            //鑾峰彇璁惧閰嶇疆鏂囦欢
+        //            var deviceInfos = Settings.ConveyorLinesInfos.Where(a => a.enable == 1 && a.deviceNo == linkplc.deviceNo).ToList();
+        //            if (deviceInfos.Count > 0)
+        //            {
+        //                int slen = int.Parse(deviceInfos.Min(a => a.readAddr).ToString());
+        //                int elen = int.Parse(deviceInfos.Max(a => a.readAddr).ToString());
+
+        //                //璇诲彇杈撻�绾挎暣涓亸绉婚噺鐨刡yte鏁扮粍 鏀惧唴瀛橀噷涓�捣瑙f瀽锛岄槻姝㈣繃搴﹁鍙�+        //                //PLCRead(linkplc.address, 8, slen, elen + 18, out Ssxbytes);
+
+        //                var plc = new Plc(CpuType.S71500, linkplc.address, 0, 1);
+        //                Link(plc);
+        //                //涓�釜鎷嗘墭鏈轰袱涓嚎浣�+        //                foreach (var device in deviceInfos)
+        //                {
+        //                    //int workMode = int.Parse(GetValue(int.Parse(device.readAddr.ToString()), VarType.Int, Ssxbytes));        //宸ヤ綔妯″紡
+        //                    //int lightAction = int.Parse(GetValue(int.Parse((device.readAddr + 2).ToString()), VarType.Int, Ssxbytes));     //鏄惁鏈夎揣锛屽厜鐢典俊鍙�+
+        //                    //int workMode = (short)plc.Read(DataType.DataBlock, 8, int.Parse(device.readAddr.ToString()), VarType.Int, 1, 0);
+        //                    //int lightAction = (short)plc.Read(DataType.DataBlock, 8, int.Parse((device.readAddr + 2).ToString()), VarType.Int, 1, 0);
+
+        //                    int requestTake1 = (short)plc.Read(DataType.DataBlock, 8, 230, VarType.Int, 1, 0);
+        //                    int requestPut1 = (short)plc.Read(DataType.DataBlock, 8, 230, VarType.Int, 1, 1);
+        //                    int requestTake2 = (short)plc.Read(DataType.DataBlock, 8, 230, VarType.Int, 1, 2);
+        //                    int requestPut2 = (short)plc.Read(DataType.DataBlock, 8, 230, VarType.Int, 1, 3);
+
+        //                    LogHelper.Info($"readbool2================={requestTake1}锛寋requestPut1}锛寋requestTake2}锛寋requestPut2}");
+        //                    //var requestTake = plc.Read("DB8.DBX" + device.readAddr + 16.0);//杈撻�绾胯姹傚彇妗�+        //                    //var requestPut = plc.Read("DB8.DBX" + device.readAddr + 16.1);//杈撻�绾垮厑璁告斁妗�+
+        //                    //瀛樺埌缂撳瓨
+        //                    //var task = plcDeviceTables.Find(a => a.DeviceNo == device.code);
+        //                    if (task != null)
+        //                    {
+        //                        task.DeviceNo = device.code;
+        //                        //task.workMode = workMode;
+        //                        //task.lightAction = lightAction;
+        //                        task.requestTake1 = requestTake1;
+        //                        task.requestPut1 = requestPut1;
+        //                        task.requestTake2 = requestTake2;
+        //                        task.requestPut2 = requestPut2;
+        //                        LogHelper.Info($"S7鍗忚绗竴娆¤鍙栧弬鏁�{JsonConvert.SerializeObject(task)}");
+        //                    }
+        //                    else
+        //                    {
+        //                        var plcDeviceTable = new PlcDeviceTable();
+        //                        plcDeviceTable.DeviceNo = device.code;
+        //                        //plcDeviceTable.workMode = workMode;
+        //                        //plcDeviceTable.lightAction = lightAction;
+        //                        plcDeviceTable.requestTake1 = requestTake1;
+        //                        plcDeviceTable.requestPut1 = requestPut1;
+        //                        plcDeviceTable.requestTake2 = requestTake2;
+        //                        plcDeviceTable.requestPut2 = requestPut2;
+        //                        plcDeviceTables.Add(plcDeviceTable);
+        //                        LogHelper.Info($"S7鍗忚璇诲彇鍙傛暟:{JsonConvert.SerializeObject(plcDeviceTable)}");
+        //                    }
+
+        //                }
+        //            }
+        //        }
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        Console.WriteLine("ReadSsxPLc:" + ex.Message + ex.StackTrace);
+        //        LogHelper.Error("ReadSsxPLc:" + ex.Message, ex);
+        //        throw;
+        //    }
+
+
+        //}
         ///// <summary>
         ///// 鎵归噺鍐欏叆鏂规硶
         ///// </summary>
@@ -669,7 +785,7 @@
             }
         }
 
-        internal static bool WriteDouble(string deviceNo,int db, double? byteAddr, int data)
+        internal static bool WriteDouble(string deviceNo, int db, int byteAddr, int offsetAddr, int data)
         {
             var result = false;
             try
@@ -679,22 +795,47 @@
                 Link(plc);
                 if (plc.IsConnected)
                 {
-                    if (byteAddr != 0) {
-                        plc.Write("DB9.DBX" + byteAddr, data);
-                        //plc.Write(DataType.DataBlock, db, byteAddr, data);
+                    if (byteAddr != 0)
+                    {
+                        plc.WriteBit(DataType.DataBlock, db, byteAddr, offsetAddr, true);
                         Console.WriteLine($"鍐欏叆plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} ");
                         LogHelper.Info($"鍐欏叆plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} ");
-                        if (result)
+                        //鐫′笁绉�濡傛灉杩樼户缁彂璇锋眰鐨勮瘽灏遍噸鍐欏叆 鍚﹀垯鍐欏叆false
+                        Thread.Sleep(3000);
+                        var plcDeviceTable = S7Helper.plcDeviceTables;
+                        if (plcDeviceTable != null)
                         {
-                            //鍐欏畬鍐嶈涓�纭
-                            //var readData = (short)plc.Read(DataType.DataBlock, db, byteAddr, VarType.Int, 1, 0);
-                            var readData = (short)plc.Read("DB9.DBX" + byteAddr);
-                            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;
+                            if ((offsetAddr == 0 && plcDeviceTable.requestPut1)
+                                || (offsetAddr == 1 && plcDeviceTable.requestTake1)
+                                || (offsetAddr == 2 && plcDeviceTable.requestPut2)
+                                || (offsetAddr == 3 && plcDeviceTable.requestTake2))
+                            {
+                                WriteDouble(deviceNo, db, byteAddr, offsetAddr, data);
+                            }
+                            else
+                            {
+                                plc.WriteBit(DataType.DataBlock, db, byteAddr, offsetAddr, false);
+                                LogHelper.Info($"S7鍙戦�澶嶄綅淇″彿");
+                            }
+
                         }
+
+                        //if (result)
+                        //{
+                        //    //鍐欏畬鍐嶈涓�纭
+                        //    //var readData = (short)plc.Read(DataType.DataBlock, db, byteAddr, VarType.Int, 1, 0);
+
+                        //    //byte data1 = (byte)plc.Read(DataType.DataBlock, db, byteAddr, VarType.Byte, 1);
+                        //    //// 鐒跺悗鎻愬彇鍚勪釜浣�+                        //    //bool requestPut1 = (data1 & 0x01) != 0;  // 230.0   1001
+
+                        //    var readData = (short)plc.Read("DB9.DBX" + byteAddr);
+                        //    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
                 {
@@ -829,7 +970,18 @@
             public string value { get; set; }
         }
 
-
+        //S7鍐欏叆淇″彿 娴嬭瘯鐢�+        internal static Results S7Write(Isusing offsetAddr)
+        {
+            //var linkplcs = Settings.linePlcInfos.Find(a => a.deviceNo == "1");
+            //var plc = new Plc(CpuType.S71200, linkplcs.address, 0, 1);
+            var linkplc = Settings.SafeInteractions.First();
+            var plc = new Plc(CpuType.S71200, linkplc.ip, 0, 1);
+            Link(plc);
+            S7Helper.WriteInt(50, offsetAddr.S_STATUS*2-2, (short)(offsetAddr.S_STATUS * 10 + int.Parse(offsetAddr.S_TYPE)));
+            //plc.WriteBit(DataType.DataBlock, 9, 182, offsetAddr, false);
+            return new Results() { Code = "0", Message = $"鍐欏叆鎴愬姛", Data = null };
+        }
 
         #region 鐢ㄤ簬妯℃嫙娴嬭瘯
         /// <summary>

--
Gitblit v1.9.1