You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用UAExpert导出OPC UA告警为CSV及开发C# CNC告警邮件客户端

解决方案

一、通过UAExpert导出告警到本地文件

UAExpert自带事件导出功能,具体操作步骤:

  • 打开UAExpert并连接到Sinumerik ONE的OPC UA服务器,切换到Event View面板
  • 在事件列表中,选中需要导出的告警条目(按Ctrl+A可全选所有告警)
  • 右键点击选中的条目,选择Export选项
  • 在弹出的窗口中,选择桌面作为保存路径,导出格式推荐CSV(便于C#程序读取),点击Save完成导出

注意:UAExpert仅支持手动导出,若需要定时自动获取告警,这种方式局限性较大,更推荐直接开发专属OPC UA客户端。

二、开发C#专属OPC UA客户端读取告警

这是更高效、自动化的方案,借助OPC Foundation官方的.NET库实现:

1. 安装依赖包

在Visual Studio中,通过NuGet安装以下包:

Install-Package Opc.Ua.Core
Install-Package Opc.Ua.Client

2. 核心实现步骤

  • 建立服务器连接:配置服务器端点(Sinumerik ONE的OPC UA地址一般为opc.tcp://<CNC_IP>:4840),根据服务器配置处理安全认证(默认可能允许匿名访问,若有认证需添加用户名密码)
  • 订阅事件节点:Sinumerik ONE的告警事件通常位于特定地址空间节点下(可通过UAExpert浏览找到准确节点,例如ns=2;s=Machine/Events/Alarms)
  • 处理事件回调:当服务器推送告警事件时,在回调方法中解析告警信息(如代码、描述、触发时间),直接用于邮件发送

3. 简化代码示例

using Opc.Ua;
using Opc.Ua.Client;
using System.Threading.Tasks;

// 初始化OPC UA客户端
var client = new Session();
var endpoint = new EndpointDescription("opc.tcp://[CNC_IP]:4840");
var config = new ConfiguredEndpoint(null, endpoint, EndpointConfiguration.Create());

// 建立连接(匿名访问示例,有认证需修改)
await client.CreateSessionAsync(config, false, "C# Alarm Client", 60000, null, null);

// 创建事件订阅
var subscription = new Subscription(client.DefaultSubscription)
{
    PublishingInterval = 1000, // 每秒轮询一次
    Enabled = true
};
client.AddSubscription(subscription);

// 添加告警事件监控项(替换为实际节点ID)
var alarmNodeId = new NodeId("ns=2;s=Machine/Events/Alarms");
var eventFilter = new EventFilter(null, new SimpleAttributeOperand[]
{
    new SimpleAttributeOperand { TypeDefinitionId = ObjectTypeIds.BaseEventType, BrowsePath = new[] { BrowseNames.Message } },
    new SimpleAttributeOperand { TypeDefinitionId = ObjectTypeIds.BaseEventType, BrowsePath = new[] { BrowseNames.Time } },
    new SimpleAttributeOperand { TypeDefinitionId = ObjectTypeIds.BaseEventType, BrowsePath = new[] { BrowseNames.Severity } }
});
var monitorItem = new MonitoredItem(subscription.DefaultItem)
{
    StartNodeId = alarmNodeId,
    AttributeId = Attributes.EventNotifier,
    MonitoringMode = MonitoringMode.Reporting,
    Parameter = eventFilter
};
monitorItem.Notification += OnAlarmReceived;
subscription.AddItem(monitorItem);

// 激活订阅
await subscription.ApplyChangesAsync();

// 告警事件回调方法
void OnAlarmReceived(object sender, MonitoredItemNotificationEventArgs e)
{
    foreach (var notification in e.Notifications)
    {
        if (notification is EventNotificationList eventList)
        {
            foreach (var fieldList in eventList.Events)
            {
                // 解析告警信息
                var alarmMsg = fieldList.Fields[0].Value as string;
                var alarmTime = fieldList.Fields[1].Value as DateTime?;
                var alarmSeverity = fieldList.Fields[2].Value as ushort?;

                // 调用邮件发送逻辑
                SendAlarmEmail(alarmMsg, alarmTime, alarmSeverity);
            }
        }
    }
}

// 邮件发送方法(需自行实现SMTP逻辑)
void SendAlarmEmail(string msg, DateTime? time, ushort? severity)
{
    // 示例:使用System.Net.Mail发送邮件
    // var smtpClient = new SmtpClient("smtp.example.com");
    // // 配置发件人、收件人、邮件内容等
}

注意:请替换代码中的[CNC_IP]和告警节点ID为实际值;若服务器启用安全策略,需在连接时配置对应的安全模式和证书。

内容的提问来源于stack exchange,提问作者Rishi Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:02:36