这里是配置方法
如何配置OPC DCOM - (siemens.com.cn)
这里是要安装的文件包
文档
网络OPC-DA-DCOM配置步骤.docx-制造文档类资源-CSDN下载
opoda 数据类型说明(Canonical Data Types)
Canonical Data Types for OPC (kepware.com)
或者这里canonical-data-types.pdf-制造文档类资源-CSDN下载
这里是Da的开发文档,但是要付费会员哦
//几个属性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);
}
}
}
}
}