opc da 的环境配置

这里是配置方法

如何配置OPC DCOM - (siemens.com.cn)

这里是要安装的文件包

Members (opcfoundation.org)

文档

网络OPC-DA-DCOM配置步骤.docx-制造文档类资源-CSDN下载

opoda 数据类型说明(Canonical Data Types)

Canonical Data Types for OPC (kepware.com)

或者这里canonical-data-types.pdf-制造文档类资源-CSDN下载

这里是Da的开发文档,但是要付费会员哦

Members (opcfoundation.org)

//几个属性id和他们对应的含义

---Properties 1 PropertyID 1, Description Item Canonical Data Type, PropertyValues 5
---Properties 2 PropertyID 2, Description Item Value, PropertyValues 3.88790704366214E-200
---Properties 3 PropertyID 3, Description Item Quality, PropertyValues 192
---Properties 4 PropertyID 4, Description Item Timestamp, PropertyValues 2021/10/29 12:14:11
---Properties 5 PropertyID 5, Description Item Access Rights, PropertyValues 3

显示服务和目录的一个例子

OPCTagsBrowser/Program.cs at master · denxc/OPCTagsBrowser (github.com)

namespace OPCBrowser
{
    using System;
    using System.Runtime.InteropServices;
    using OPCAutomation;

    class Program
    {        
        static void Main(string[] args)
        {
            switch (args.Length) {
                case 0:
                    ShowOpcServerNames("localhost");
                    break;
                case 1:
                    ShowOpcServerNames(args[0]);
                    break;
                default:
                    ShowOpcTagsList(args[0], args[1]);
                    break;
            }
        }

        /// <summary>
        /// Показывает все доступные OPC-сервера на хосте.
        /// </summary>
        /// <param name="aHost">Хост.</param>
        private static void ShowOpcServerNames(string aHost)
        {            
            try {                
                var serversNames = new OPCServer().GetOPCServers(aHost) as Array;
                if (serversNames != null && serversNames.Length > 0) {
                    Console.WriteLine("Список всех OPC-серверов по адресу {0}:", aHost);
                    for (var i = 1; i <= serversNames.Length; ++i) {
                        Console.WriteLine("{0} {1}", i, serversNames.GetValue(i));
                    }
                }
                else {
                    Console.WriteLine("OPC-серверов по адресу {0} не найдено.", aHost);
                }
            }
            catch (COMException ex) {
                Console.WriteLine("COM-ошибка при просмотре списка OPC-серверов: " + ex.Message);                
            } 
        }

        /// <summary>
        /// Подключается к OPC-серверу и запускает рекурсивный обход его содержимого.
        /// </summary>
        /// <param name="aHost">Хост.</param>
        /// <param name="aOpcServerName">Имя OPC-сервера.</param>
        private static void ShowOpcTagsList(string aHost, string aOpcServerName)
        {            
            var opcServer = new OPCServer();
            try {
                opcServer.Connect(aOpcServerName, aHost);
            }
            catch (COMException ex) {
                Console.WriteLine("Не удалось подключиться к OPC-серверу по адресу {0}. Ошибка: {1}.",
                    aHost, ex.Message);
                return;
            }

            ShowOpcTagsRecurcive(opcServer.CreateBrowser());
        }

        /// <summary>
        /// Рекурсивно обходит содержимое OPC-сервера.
        /// </summary>
        /// <param name="aBrowser">Браузер OPC-сервера.</param>
        /// <param name="aPrefix">Префикс для построения дерева.</param>
        private static void ShowOpcTagsRecurcive(OPCBrowser aBrowser, string aPrefix = "")
        {
            var isError = false;
            try {
                aBrowser.ShowBranches();
            }
            catch (Exception ex) {
                Console.WriteLine("Ошибка при отображении ветки.");
                isError = true;
            }

            if (!isError) {
                foreach (var item in aBrowser) {
                    Console.WriteLine(aPrefix + "Ветвь: " + item);
                    aBrowser.MoveDown(item.ToString());
                    ShowOpcTagsRecurcive(aBrowser, aPrefix + "-");
                    aBrowser.MoveUp();
                }
            }

            isError = false;
            try {
                aBrowser.ShowLeafs();
            }
            catch (Exception ex) {
                Console.WriteLine("Ошибка при отображении листа.");
                isError = true;
            }

            if (!isError) {
                foreach (var item in aBrowser) {
                    Console.WriteLine(aPrefix + "Лист:" + item);
                }
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值