進階07:C#與通用OPC UA通信范例

本節目標:

1)安裝軟件,搭建虛擬OPC UA服務器;

2)使用UaExpert,讀取OPC UA服務器中的變量;

3)編寫Winform程序,讀寫服務器中變量值,創建訂閱觸發事件;

下圖是根據上面的要求最終的運行結果,可以讀寫PLC寄存器,OPC UA Simulation Server中的Trigger值變化會主動觸發一個顯示變化后值的彈窗。

1.1 環境配置

下載兩個軟件:OPC UA Simulation Server 和 UaExpert

Prosys OPC UA Simulation Server

OPC UA Clients?-?Unified Automation

1.1.1 OPC UA Simulation Server

1)安裝完成后,打開軟件OPC UA Simulation Server

選擇專家模式

2)新建變量Trigger

3)設置匿名登錄

設置完成后重啟軟件。

1.1.2 UaExpert使用

1)打開UaExpert,此為OPC客戶端,用于測試服務器

點擊加號

2)創建連接

輸入URL,這個是根據前面的虛擬服務器定的。

選擇匿名登錄

3)連接

4)將變量拉入到顯示界面處。

可以看到變量的值,同時也可以修改值。后面需要根據上面的Node Id來進行編程。

1.2 編程

新建Winform項目,OpcUaClient_example。

思維導圖如下:

1.2.1 界面設計

4個TextBox(txtServerUrl、txtNode、txtReadData、txtWriteData);

3個按鈕(btn_Connect、btn_Read、btn_Write);

5個Label(顯示狀態lblStatus);

1.2.2 程序設計

主界面的程序流程圖如下所示:

1)添加依賴包

項目->管理NuGet程序包,輸入OpcUaHelper,下載依賴包。

2)添加命名空間

using Opc.Ua; 
using Opc.Ua.Client; 
using OpcUaHelper;

3)變量

//實例化
OpcUaClient m_OpcUaClient = new OpcUaClient();

4)連接按鈕事件

private async void btnConnect_Click(object sender, EventArgs e)
{if (btn_Connect.Text == "Connect"){m_OpcUaClient.UserIdentity = new UserIdentity(new AnonymousIdentityToken());//匿名鏈接try{await m_OpcUaClient.ConnectServer(txtServerUrl.Text.ToString());//鏈接服務器m_OpcUaClient.AddSubscription("AA", "ns=3;s=Trigger", SubCallback);//訂閱節點,值變化即觸發事件lblStatus.Text = "連接成功!";}catch (Exception ex){ClientUtils.HandleException("Connected Failed", ex);}btn_Connect.Text = "Disconnect";}else{m_OpcUaClient.RemoveSubscription("AA");//取消訂閱m_OpcUaClient.Disconnect();//斷開連接lblStatus.Text = "斷開連接!";btn_Connect.Text = "Connect";}}

5)訂閱回調函數

private void SubCallback(string key, MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs args)
{if (InvokeRequired){Invoke(new Action<string, MonitoredItem, MonitoredItemNotificationEventArgs>(SubCallback), key, monitoredItem, args);return;}if (key == "AA"){// 如果有多個的訂閱值都關聯了當前的方法,可以通過key和monitoredItem來區分MonitoredItemNotification notification = args.NotificationValue as MonitoredItemNotification;if (notification != null){MessageBox.Show("Trigger變量值變化:"+notification.Value.WrappedValue.Value.ToString()); //獲取變化的值}}
}

6)讀取按鈕事件

private void btnRead_Click(object sender, EventArgs e)
{try{double value = m_OpcUaClient.ReadNode<double>(txtNode.Text);//讀取單個節點值txtReadData.Text = value.ToString();}catch (Exception ex){ClientUtils.HandleException(this.Text, ex);}
}

7)寫入按鈕事件

private void btnWrite_Click(object sender, EventArgs e)
{try{m_OpcUaClient.WriteNode(txtNode.Text, Convert.ToDouble(txtWriteData.Text));//寫入單個節點值}catch (Exception ex){ClientUtils.HandleException(this.Text, ex);}
}

1.3 運行

編譯完成后,運行程序。點擊Connect按鈕,連接OPC UA服務器完成。

分別點擊寫入和讀取按鈕,可以看到OPC UA Simulation Server的Random值在變化。

在OPC UA Simulation Server修改Trigger的值,winform程序會彈窗,顯示修改后的值。

該節展現的內容是通用OPC UA的連接、讀寫、事件訂閱等功能的展示,可以作為需要OPC通訊集成項目的參考。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93346.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大模型微調學習筆記(基于訊飛星辰MaaS速學版)

文章目錄參考資料說明大模型微調入門微調簡介微調步驟數據準備模型選擇訓練方式效果評估模型部署大模型微調&#xff08;基于訊飛星辰Maas&#xff09;構建數據集方法1&#xff1a;預置數據集方法2&#xff1a;創建數據集數據輔助工具數據集劃分模型微調數據配置參數配置模型部…

[CSS]讓overflow不用按shift可以滾輪水平滾動(純CSS)

前言 我不爽前端無法直接滾輪橫向滾動很久了 明明瀏覽器可以直接判斷 x滾動且y不滾動的時候滾輪事件可以直接操作橫向滾動 這個是我探究出來的方法,尤其適合這種很多很多小tag的情況解析 原理是將豎向排列的overflow旋轉成橫向,實際操作的還是豎向overflow.繼而實現鼠標滾輪不用…

截稿倒計時 TrustCom‘25大會即將召開

會議資訊IEEE TrustCom-2025&#xff08;第24屆IEEE計算與通信領域信任、安全與隱私國際會議&#xff09;是一個展示可信計算、通信、網絡和機器學習領域前沿成果的學術平臺。會議聚焦計算機系統、網絡及人工智能在信任、安全、隱私、可靠性、可依賴性、生存性、可用性和容錯性…

Day4.AndroidAudio初始化

1.AudioServer初始化 AudioServer 是 Android 音頻系統的核心服務&#xff0c;負責管理音頻硬件資源、音頻策略調度、跨進程音頻通信等核心功能。它由 Init 進程啟動&#xff0c;是系統核心服務之一&#xff0c;直接影響音頻播放、錄音、音效處理等功能的正常運行。 1.1AudioSe…

OSPF 協議(多區域)

1. OSPF 單區域存在的問題① LSDB龐大&#xff0c;占用內存大&#xff0c;SPF計算開銷大&#xff1b;② LSA洪泛范圍大&#xff0c;拓撲變化影響范圍大&#xff1b;③ 路由不能被匯總&#xff0c;路由表龐大&#xff0c;查找路由開銷大。2. OSPF 多區域優點① 每個區域獨立存儲…

R 語言繪制六種精美熱圖:轉錄組數據可視化實踐(基于 pheatmap 包)

在轉錄組 Bulk 測序數據分析中&#xff0c;熱圖是展示基因表達模式、樣本聚類關系的核心可視化工具。一張高質量的熱圖不僅能清晰呈現數據特征&#xff0c;更能提升研究成果的展示效果。本文基于 R 語言的pheatmap包&#xff0c;整理了六種適用于不同場景的熱圖繪制方法&#x…

圖片PDF識別工具:掃描PDF文件批量OCR區域圖識別改名,識別大量PDF區域內容一次性改名

以下是使用“咕嘎批量OCR識別圖片PDF多區域內容重命名導出表格系統”進行操作的具體步驟&#xff1a;1. 打開工具并獲取區域坐標打開軟件后&#xff0c;選擇“PDF識別模式”。導入一個PDF文件作為樣本&#xff0c;框選需要提取文字的區域&#xff0c;并保存區域坐標。如果有多個…

中國汽車能源消耗量(2010-2024年)

1419中國汽車能源消耗量&#xff08;2010-2024年&#xff09;發文主題分布數據來源中華人民共和國工業和信息化部-中國汽車能源消耗量查詢中國汽車能源消耗量查詢 (miit.gov.cn)時間跨度2010-2024年數據范圍全國汽車企業數據指標本數據集包含包含傳統汽車能源消耗量數據以及新能…

Python 實現服務器自動故障處理工具:從監控到自愈的完整方案

在服務器運維過程中,80% 的故障都是重復性的簡單問題(如磁盤空間不足、內存泄漏、服務進程掛掉等)。本文將介紹如何使用 Python 開發一款輕量級自動故障處理工具,通過狀態監控、異常診斷、自動修復三個核心模塊,實現服務器常見故障的無人值守處理。 核心依賴庫 psutil:跨…

圖片上傳 el+node后端+數據庫

模版部分&#xff1a;鼠標懸浮到頭像的部分就出現下拉框顯示可以修改頭像&#xff0c;el-upload是隱藏的&#xff0c;可能只是為了實現on-change函數和before-upload函數吧這塊做的確實有點馬虎了。<div class"r-content"><el-dropdown><span class&q…

[java 常用類API] 新手小白的編程字典

目錄 1.API 1.1定義: 2.Object類 2.1 toString() 方法 2.2 equals() 方法 3. Arrays 類 3.1 equals() 方法 3.2 sort() 方法 3.2.1排序 3.2.2 自定義對象排序 3.3 binarySearch() 方法 3.4 copyOf() 方法 3.5 fill() 方法 3.6 toString() 方法 4.基本數據類型包裝類 4.…

去除視頻字幕 2, 使用 PaddleOCR 選取圖片中的字幕區域, 根據像素大小 + 形狀輪廓

有人問我在搞什么&#xff1a;就是做這里的第2步。問題描述這里誤導&#xff0c;誤判&#xff0c;太嚴重了。如果我把這個區域當做是 mask ,那么真正的目標會被去除掉還有什么建議嗎&#xff1f;比如我能否根據這個mask 的大致形狀來判斷它是不是字幕&#xff0c; 如果不是細長…

Ubuntu 連接Visual SVN

Windows服務器上的svn倉庫為&#xff1a; https://ldw_online:8443/svn/OnlineRepository/LVC IP地址為192.168.8.8 4. 從 Ubuntu 測試連通性 在 Ubuntu 上可以用&#xff1a; bash 復制編輯 curl -vk https://192.168.8.8:8443/ 如果返回 HTTP 頭或 SSL 握手成功&#xff…

JAVA:Spring Boot 集成 Protobuf 的技術指南

?? 1、簡述 在分布式服務通信中,數據序列化與反序列化的效率對系統性能影響極大。Protocol Buffers(Protobuf) 是由 Google 提出的一種高效的結構化數據序列化協議,具有: ?? 高性能(遠優于 JSON/XML) ?? 跨語言支持 ?? 較小的體積 本篇將帶你了解如何在 Spring…

SQLServer內存釋放工具介紹:一款實用的數據庫性能優化助手

SQLServer內存釋放工具介紹&#xff1a;一款實用的數據庫性能優化助手 去發現同類優質開源項目:https://gitcode.com/ 在數據庫管理中&#xff0c;內存釋放是優化服務器性能的重要環節。本文將為您詳細介紹一款名為SQLServer內存釋放工具的開源項目&#xff0c;幫助您輕松管理…

《藍耘容器全棧技術指南:企業級云原生與異構計算實戰大全》

&#x1f31f; 嗨&#xff0c;我是Lethehong&#xff01;&#x1f31f; &#x1f30d; 立志在堅不欲說&#xff0c;成功在久不在速&#x1f30d; &#x1f680; 歡迎關注&#xff1a;&#x1f44d;點贊??留言收藏&#x1f680; &#x1f340;歡迎使用&#xff1a;小智初學計…

計算器3.0:實現用戶自定義組件

前言&#xff1a; 馬總給我提出計算器3.0新需求&#xff1a;可以在頁面上輸入一個組件&#xff0c;用戶的組件庫里面就多一個組件&#xff0c;用戶就可以使用 一、解決方法&#xff1a; 1. 新增成員變量和初始化 // 新增的輸入框 private InputBox newInputBox; // 新增的組…

PIG AI 全新升級:全新 MCP 能力加持,讓企業級 AI 開發效率翻倍!

你是否曾為 AI 應用的開發門檻而頭疼?調試代碼耗費數小時、集成外部工具需要復雜配置、想要快速構建智能系統卻不知從何下手…別擔心!PIG AI 最新版本帶來的 MCP(Model Context Protocol)能力,正為這些問題提供一站式解決方案。本文將帶你深入淺出地了解這一重磅升級,手把…

Springboot+vue超市管理系統的設計與實現

文章目錄前言詳細視頻演示具體實現截圖后端框架SpringBoot前端框架Vue持久層框架MyBaits成功系統案例&#xff1a;代碼參考數據庫源碼獲取前言 博主介紹:CSDN特邀作者、985高校計算機專業畢業、現任某互聯網大廠高級全棧開發工程師、Gitee/掘金/華為云/阿里云/GitHub等平臺持續…

一文快速了解Docker和命令詳解

本文讓你快速了解Docker是什么的東西&#xff0c;在我們程序開發的時候到底有什么作用&#xff0c;為什么需要去學習它。本文章只是做一個簡單的概述配套黑馬課程讓你快速了解、使用Docker。 一、什么是Docker&#xff1f; Docker是一個開源的容器化平臺&#xff0c;允許開發者…