OpcUaHelper通讯过程简化应用

1、添加Nuget包

开源的项目github

 OpcUaHelper

<ItemGroup>
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua" Version="1.5.374.158" />
<PackageReference Include="OpcUaHelper" Version="2.2.0" />
</ItemGroup>

2、代码实现

        #region OpcUaHelper应用
        private static async void OpcUaHelperTest()
        {
            // 目的:
            // 连接(匿名、用户名密码、证书)、
            // 读取(同步、异步、订阅)、
            // 写入(同步、异步)、
            // 浏览节点
            OpcUaHelper.OpcUaClient client = new OpcUaHelper.OpcUaClient();
            //client.UserIdentity = new UserIdentity(new AnonymousIdentityToken());//匿名连接
            client.UserIdentity = new UserIdentity("User1", "123456");
            await client.ConnectServer("opc.tcp://127.0.0.1:49320");//必须等待连接成功,才能进行后续操作
            
            // 浏览节点
            BrowseDescriptionCollection bd = new BrowseDescriptionCollection();
            BrowseDescription bd1 = new BrowseDescription();
            bd1.NodeId = "ns=2;s=通道 2.设备 1";
            bd.Add(bd1);
            var collection = OpcUaHelper.FormUtils.Browse(client.Session, bd, false);
            foreach (var item in collection)
            {
                Console.WriteLine(item.NodeId);
            }

            // 读取
            ushort value = client.ReadNode<ushort>("ns=2;s=通道 2.设备 1.A");
            DataValue dataValue = client.ReadNode("ns=2;s=通道 2.设备 1.b");
            value = await client.ReadNodeAsync<ushort>("ns=2;s=通道 2.设备 1.b");

            List<NodeId> nodeIds = new List<NodeId>();
            nodeIds.Add("ns=2;s=通道 2.设备 1.A");
            nodeIds.Add("ns=2;s=通道 2.设备 1.b");
            var nodeIdsValues = client.ReadNodes(nodeIds.ToArray());



            // 写入
            bool state = client.WriteNode<ushort>("ns=2;s=通道 2.设备 1.A", 666);
            state = await client.WriteNodeAsync<ushort>("ns=2;s=通道 2.设备 1.b", 888);

            string[] nodes = new string[] { "ns=2;s=通道 2.设备 1.A", "ns=2;s=通道 2.设备 1.b" };
            object[] values = new object[] { (ushort)11, (ushort)22 };
            client.WriteNodes(nodes, values);

            //订阅
            client.AddSubscription("123", "ns=2;s=通道 2.设备 1.A", (key, mi, ea) =>
            {

            });
            client.RemoveSubscription("123");
            client.RemoveAllSubscription();

        }
        #endregion

 

服务器KEPServer EX不是免费的,一个月以内可以,之后不破解2小时断一次,可以使用AxiuOpcua.Server服务器demo

学习不破解也可以使用,不需要使用真实的协议

使用模拟的也可以

从OPC到设备才涉及到协议

 

posted on 2025-03-19 14:44  张彦山  阅读(126)  评论(0)    收藏  举报