From e1a97fc8b29f063e96e3ebbae2f07ee95b276069 Mon Sep 17 00:00:00 2001
From: lss <Lss@HanInfo>
Date: 星期四, 05 六月 2025 17:25:31 +0800
Subject: [PATCH] 合肥佳通优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/S7Helper.cs |  330 +++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 251 insertions(+), 79 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/S7Helper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/S7Helper.cs
index daf817e..97eaf35 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/S7Helper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/S7Helper.cs
@@ -1,65 +1,85 @@
 锘縰sing HH.WCS.JiaTong.api;
+using Microsoft.Owin.BuilderProperties;
 using Newtonsoft.Json.Linq;
+using Opc.UaFx;
 using S7.Net;
 using S7.Net.Types;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
 using System.Web.Services.Description;
+using System.Web.UI.WebControls.WebParts;
 
-namespace HH.WCS.JiaTong.device {
+namespace HH.WCS.JiaTong.device
+{
 
     /// <summary>
     /// 瑗块棬瀛恜lc
     /// </summary>
-    public class S7Helper {
+    public class S7Helper
+    {
         private static bool debug = true;
         private static S7.Net.Plc plc = null;
-        static S7Helper() {
+     
+        static S7Helper()
+        {
             Init();
         }
         private static Dictionary<string, Plc> plcDic = new Dictionary<string, Plc>();
-        private static void Init() {
+        private static void Init()
+        {
             //閰嶇疆鏂囦欢璇诲彇鎵�湁鐨刾lc杩涜鍒濆鍖�-            try {
+            try
+            {
                 var plc1 = new Plc(CpuType.S71500, "", 0, 1);
                 plcDic.Add("plc1", plc1);
                 Link(plc1);
             }
-            catch (Exception ex) {
+            catch (Exception ex)
+            {
 
                 Console.WriteLine("S7Helper Init err=" + ex.Message);
             }
         }
-        private static Plc GetPlc(string plc) {
-            if (plcDic.ContainsKey(plc)) {
+        private static Plc GetPlc(string plc)
+        {
+            if (plcDic.ContainsKey(plc))
+            {
                 return plcDic[plc];
             }
-            else {
+            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");
-                }
+        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}");
+            catch (Exception ex)
+            {
+                // Console.WriteLine($"plc{plc.IP}杩炴帴澶辫触锛宔rr={ex.Message}");
+                LogHelper.Error($"Link Error plc{plc.IP}杩炴帴澶辫触锛宔rr={ex.Message}",ex);
                 //Init();
             }
 
@@ -67,56 +87,169 @@
         //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
 
+        private static object _lockdpj=new object();
+
+        /// <summary>
+        /// 鍚堣偉浣抽�璇诲彇鍙犵洏鏈�+        /// </summary>
+        /// <param name="startByte">鍋忕Щ閲忓湴鍧�vb2001</param>
+        ///  /// <param name="varType">鍊肩被鍨�/param>
+        /// <returns></returns>
+        public static int ReadDpj(string ip,int startByte, S7.Net.VarType varType)
+        {
+           // string ip = "10.68.9.15"; 
+            short port = 102;
+            lock (_lockdpj)
+            {
+                try
+                {
+                    var plc = new Plc(CpuType.S7200Smart, ip, port, 0, 0);
+                    LogHelper.Info($"閾炬帴鍙犵洏鏈猴紝ip锛歿ip}锛岀鍙o細{port}");
+                    S7Helper.Link(plc);
+                    int result = 0;
+                    if (varType == VarType.Int)
+                    {
+                        var value = (short)plc.Read(DataType.DataBlock, 1, startByte, VarType.Int, 1);
+                        LogHelper.Info($"閾炬帴鍙犵洏鏈猴紝ip锛歿ip}锛岀鍙o細{port},璇诲彇绫诲瀷{varType},璇诲彇鍊納value}");
+                        result = int.Parse(value.ToString());
+                    }
+                    else//鍚堣偉浣抽�闄や簡鏁伴噺锛屽叾浠栭兘鏄痓yte绫诲瀷
+                    {
+
+                        byte value = (byte)plc.Read(DataType.DataBlock, 1, startByte, VarType.Byte, 1);
+                        LogHelper.Info($"閾炬帴鍙犵洏鏈猴紝ip锛歿ip}锛岀鍙o細{port},璇诲彇绫诲瀷{varType},璇诲彇鍊納value}");
+                        result = value;
+                    }
+
+                    LogHelper.Info($"璇诲彇鍙犵洏鏈猴紝ip锛歿ip}锛岀鍙o細{port},鍦板潃锛歿startByte},璇诲彇鍊艰浆鎹�{result}");
+                    return result;
+                }
+                catch (Exception ex)
+                {
+                    LogHelper.Info($"鍙犵洏鏈�{ip}閾炬帴澶辫触");
+                    LogHelper.Error($"ReadDpj ip:{ip},startByte:{startByte} Error:{ex}", ex);
+                    throw;
+                }
+            }
+          
 
 
-        internal static short[] ReadInt(string device, int db, int byteAddr, int count) {
+        }
+        /// <summary>
+        /// 鍚堣偉浣抽�鍐欏叆鍙犵洏鏈�+        /// </summary>
+        /// <param name="startByte">鍋忕Щ閲忓湴鍧�/param>
+        /// <param name="value">鍐欏叆鍊�byte绫诲瀷鍙兘0 1</param>
+        /// <returns></returns>
+        public static bool WriteDpj(string ip,int startByte, byte value)
+        {
+            bool result = false;
+           // string ip = "10.68.9.15"; 
+            short port = 102;
+            lock (_lockdpj)
+            {
+                try
+                {
+                    var plc = new Plc(CpuType.S7200Smart, ip, port, 0, 0);
+
+                    LogHelper.Info($"閾炬帴鍙犵洏鏈猴紝ip锛歿ip}锛岀鍙o細{port}");
+                    S7Helper.Link(plc);
+                   // plc.Write($"VB{startByte}", value);
+                    Thread.Sleep(300);
+                    plc.Write(
+                       dataType: DataType.DataBlock,
+                       db: 1,
+                       startByteAdr: startByte,
+                       value: value
+                   );
+                    LogHelper.Info($"鍐欏叆鍙犵洏鏈猴紝ip锛歿ip}锛岀鍙o細{port},鍦板潃锛歿startByte},鍐欏叆鍊�{value}");
+                    Thread.Sleep(300);
+                    byte fdvalue = (byte)plc.Read(DataType.DataBlock, 1, startByte, VarType.Byte, 1);
+                    if (fdvalue == value)
+                    {
+                        result = true;
+                        LogHelper.Info($"鍙犵洏鏈哄啓鍏ユ垚鍔燂紝鍥炶鍊硷細{fdvalue}");
+                    }
+                    else
+                    {
+                        LogHelper.Info($"鍙犵洏鏈哄啓鍏ュけ璐ワ紝鍥炶鍊硷細{fdvalue}");
+                    }
+
+                        return result;
+                }
+                catch (Exception ex)
+                {
+                    LogHelper.Info($"WriteDpj Error{ex}");
+                    throw;
+                }
+            }
+           
+
+
+            // S7-200 Smart鐨刅鍖轰篃鏄犲皠涓篋B1
+
+
+
+        }
+        internal static short[] ReadInt(string device, int db, int byteAddr, int count)
+        {
             short[] result = null;
-            try {
-                if (debug) {
+            try
+            {
+                if (debug)
+                {
                     var s7Key = $"int_{db}_{byteAddr}_{count}";
-                    if (s7TestData.ContainsKey(s7Key)) {
+                    if (s7TestData.ContainsKey(s7Key))
+                    {
                         var data = s7TestData[s7Key].Split(',');
-                        if (data.Length == count) {
+                        if (data.Length == count)
+                        {
                             result = Array.ConvertAll(data, s => short.Parse(s));
                         }
-                        else {
+                        else
+                        {
                             result = new short[count];
                             s7TestData[s7Key] = string.Join(",", result);
                         }
                         Console.WriteLine($"璇诲彇plc {device}淇℃伅鎴愬姛锛� addr={byteAddr} data={string.Join(",", result)}");
                     }
                 }
-                else {
+                else
+                {
                     var plc = GetPlc(device);
-                    if (plc != null) {
-                        if (plc.IsConnected) {
+                    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) {
+                            if (result.Length == 0)
+                            {
                                 Console.WriteLine($"plc {device}鍑嗗閲嶆柊杩炴帴");
                                 Link(plc);
                             }
                         }
-                        else {
+                        else
+                        {
                             Console.WriteLine($"鍑嗗杩炴帴plc {device}");
                             Link(plc);
                         }
                     }
-                    else {
+                    else
+                    {
                         Console.WriteLine($"plc {device}涓嶅瓨鍦�);
                     }
 
                 }
 
             }
-            catch (Exception ex) {
+            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>
         /// 
@@ -125,14 +258,18 @@
         /// <param name="byteAddr"></param>
         /// <param name="data"></param>
         /// <returns></returns>
-        internal static bool WriteInt(int db, int byteAddr, short data) {
+        internal static bool WriteInt(int db, int byteAddr, short data)
+        {
             var result = false;
-            try {
-                if (plc.IsConnected) {
+            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) {
+                    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)}");
@@ -142,81 +279,104 @@
 
 
                 }
-                else {
+                else
+                {
                     Console.WriteLine("鍑嗗杩炴帴plc1");
                     Link(plc);
                 }
             }
-            catch (Exception ex) {
+            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) {
+        public static object ReadBit(string device, int db, int byteAddr, byte bitAddr)
+        {
             object result = null;
-            try {
-                if (debug) {
+            try
+            {
+                if (debug)
+                {
                     var s7Key = $"bit_{db}_{byteAddr}_{bitAddr}";
-                    if (s7TestData.ContainsKey(s7Key)) {
+                    if (s7TestData.ContainsKey(s7Key))
+                    {
                         var data = s7TestData[s7Key];
-                        if (data == "1") {
+                        if (data == "1")
+                        {
                             result = true;
                         }
                         else { result = false; }
                         Console.WriteLine($"璇诲彇plc {device}淇℃伅鎴愬姛锛� addr={byteAddr} data={result.ToString()}");
                     }
                 }
-                else {
+                else
+                {
                     var plc = GetPlc(device);
-                    if (plc != null) {
-                        if (plc.IsConnected) {
+                    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 {
+                        else
+                        {
                             Console.WriteLine($"鍑嗗杩炴帴plc {device}");
                             Link(plc);
                         }
                     }
-                    else {
+                    else
+                    {
                         Console.WriteLine($"plc {device}涓嶅瓨鍦�);
                     }
                 }
             }
-            catch (Exception ex) {
+            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) {
+        public static string ReadStr(string device, int db, int byteAddr, int count)
+        {
             string result = string.Empty;
-            try {
-                if (debug) {
+            try
+            {
+                if (debug)
+                {
                     var s7Key = $"str_{db}_{byteAddr}_{count}";
-                    if (s7TestData.ContainsKey(s7Key)) {
+                    if (s7TestData.ContainsKey(s7Key))
+                    {
                         var data = s7TestData[s7Key];
-                        if (data.Length == count) {
+                        if (data.Length == count)
+                        {
                             result = data;
                             Console.WriteLine($"ReadStr 鎴愬姛锛�addr={byteAddr}  res={result}");
                         }
                     }
                 }
-                else {
-                    if (plc.IsConnected) {
+                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) {
+                        if (result.Length == 0)
+                        {
                             Link(plc);
                         }
                     }
-                    else {
+                    else
+                    {
                         Console.WriteLine("鍑嗗杩炴帴plc");
                         Link(plc);
                     }
                 }
             }
-            catch (Exception ex) {
+            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);
             }
@@ -228,7 +388,8 @@
         /// <summary>
         /// short绫诲瀷锛屼竴涓崰2涓猙yte
         /// </summary>
-        public class DBWModel {
+        public class DBWModel
+        {
             public int db { get; set; }
             public int byteAddr { get; set; }
             /// <summary>
@@ -239,12 +400,14 @@
         /// <summary>
         /// 瀛楃涓茬被鍨嬶紝涓�釜鍗�涓猙yte
         /// </summary>
-        public class DBBModel {
+        public class DBBModel
+        {
             public int db { get; set; }
             public int byteAddr { get; set; }
             public string value { get; set; }
         }
-        public class DBXModel {
+        public class DBXModel
+        {
             public int db { get; set; }
             public int byteAddr { get; set; }
             public int bitAddr { get; set; }
@@ -253,34 +416,43 @@
             /// </summary>
             public int value { get; set; }
         }
-        public static void s7SetInt(DBWModel model) {
+        public static void s7SetInt(DBWModel model)
+        {
             var data = model.value.Replace(",", "");
             var s7Key = $"int_{model.db}_{model.byteAddr}_{data.Length}";
-            if (s7TestData.ContainsKey(s7Key)) {
+            if (s7TestData.ContainsKey(s7Key))
+            {
                 s7TestData[s7Key] = model.value;
             }
-            else {
+            else
+            {
                 s7TestData.Add(s7Key, model.value);
             }
         }
 
-        internal static void s7SetBit(DBXModel model) {
+        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)) {
+            if (s7TestData.ContainsKey(s7Key))
+            {
                 s7TestData[s7Key] = value;
             }
-            else {
+            else
+            {
                 s7TestData.Add(s7Key, value);
             }
         }
 
-        internal static void s7SetStr(DBBModel model) {
+        internal static void s7SetStr(DBBModel model)
+        {
             var s7Key = $"str_{model.db}_{model.byteAddr}_{model.value.Length}";
-            if (s7TestData.ContainsKey(s7Key)) {
+            if (s7TestData.ContainsKey(s7Key))
+            {
                 s7TestData[s7Key] = model.value;
             }
-            else {
+            else
+            {
                 s7TestData.Add(s7Key, model.value);
             }
         }

--
Gitblit v1.9.1