فهرست منبع

同步opc ua通讯

KWD 2 ماه پیش
والد
کامیت
ca3d47c186
2فایلهای تغییر یافته به همراه18 افزوده شده و 21 حذف شده
  1. 16 0
      TeamAAS-VM/Core/Management.cs
  2. 2 21
      TeamAAS-VM/Core/PLCs/OPCuaClientPLC.cs

+ 16 - 0
TeamAAS-VM/Core/Management.cs

@@ -1098,7 +1098,23 @@ namespace TeamAAS_VP.Core
                 monitorNodeIds.Add(string.Format(addressConfig.In_WorkDone.Address, i));
             }
             //订阅PLC地址变化
+            //plc.SubscribeNodes("AutoSensor", monitorNodeIds, PlcCommandTrigger, OpcUaSubscriptionMode.CustomPolling);
+            // 1. 初始订阅(使用原生模式)
             plc.SubscribeNodes("AutoSensor", monitorNodeIds, PlcCommandTrigger, OpcUaSubscriptionMode.CustomPolling);
+
+            // 2. 监听重连事件,重连成功后自动重新订阅
+            plc.ConnectChangedEvent -= Plc_ConnectChanged; // 防止重复注册
+            plc.ConnectChangedEvent += Plc_ConnectChanged;
+
+            // 定义重连处理方法(写在同一个类里即可)
+            void Plc_ConnectChanged(object sender, bool isConnected)
+            {
+                if (isConnected)
+                {
+                    // 重连成功后,重新订阅节点
+                    plc.SubscribeNodes("AutoSensor", monitorNodeIds, PlcCommandTrigger, OpcUaSubscriptionMode.CustomPolling);
+                }
+            }
         }
 
         /// <summary>

+ 2 - 21
TeamAAS-VM/Core/PLCs/OPCuaClientPLC.cs

@@ -45,7 +45,7 @@ namespace TeamAAS_VP.Core.PLCs
         /// 仅在 <see cref="Mode"/> 为 <see cref="OpcUaSubscriptionMode.CustomPolling"/> 时生效。
         /// 默认值为 50。
         /// </summary>
-        public int PollingInterval { get; set; } = 50;
+        public int PollingInterval { get; set; } = 25;
 
         /// <summary>
         /// 获取或设置首次扫描时是否立即通知当前值。
@@ -90,7 +90,7 @@ namespace TeamAAS_VP.Core.PLCs
         /// 仅当默认订阅模式或实际订阅选项使用自定义轮询时生效。
         /// 默认值为 `100`。
         /// </summary>
-        public int DefaultSubscriptionPollingInterval { get; set; } = 50;
+        public int DefaultSubscriptionPollingInterval { get; set; } = 25;
 
         /// <summary>
         /// 获取或设置在默认轮询订阅模式下,首次扫描节点时是否立即触发一次数据变更通知。
@@ -284,25 +284,6 @@ namespace TeamAAS_VP.Core.PLCs
             return result;
         }
 
-        /// <summary>
-        /// 读取单个PLC Bool布尔节点值
-        /// </summary>
-        /// <param name="nodeId">Excel里PLC变量名 Stop.XXX</param>
-        /// <returns>bool类型真实状态</returns>
-        public bool ReadBoolNode(string nodeId)
-        {
-            string readNodeId = nodeId;
-            if (!nodeId.StartsWith(NodeHeader))
-            {
-                readNodeId = NodeHeader + nodeId;
-            }
-
-            var value = OpcUaClient.ReadNode(new NodeId(readNodeId));
-            // 安全转换为布尔类型
-            return Convert.ToBoolean(value.Value);
-        }
-
-
         /// <summary>
         /// 读取单个节点的值
         /// </summary>