当前位置: 首页 > news >正文

Labview进阶04:Labview与OPC UA设备通信(dll版)

本节目标:

1)本节区别于进阶01内容,使用c#编写的dll进行OpcUa通信,不需要安装(Labview OPC UA工具包),该工具包需要下载收费,可以减少开发成本;

2)安装软件,搭建虚拟OPC UA服务器;

3)使用UaExpert,读取OPC UA服务器中的变量;

4)使用C#编写用于OpcUa通信的dll;

5)编写Labview程序,读写服务器中变量值,创建订阅触发事件;

下图是根据上面的要求最终的运行结果,可以读写模拟服务器中的寄存器,OPC UA Simulation Server中的Trigger值变化会主动触发一个显示变化后值的弹窗。

运行配置:

Labview 2020(32位)

1.1 OPC服务器模拟

1)下载两个软件:OPC UA Simulation Server 和 UaExpert

Prosys OPC UA Simulation Server

OPC UA Clients - Unified Automation

2)安装完成后,打开软件OPC UA Simulation Server

选择专家模式

3)新建变量Trigger

3)设置匿名登录

设置完成后重启软件。

4)打开UaExpert,此为OPC客户端,用于测试服务器

点击加号

输入URL

选择匿名登录

连接

将变量拉入到显示界面处。

可以看到变量的值,同时也可以修改值。

1.2 创建OPC UA通信dll

1)新建项目

2)现在依赖包

下载OpcUaHelper,用于OpcUa通信。

下载Costura.Fody包,可以将多个dll合并到一个dll中,让文件变得更加简洁。

3)添加程序

OpcUaConnector.cs中如下;

具体讲解可以参考博文:进阶01:Labview与OPC UA设备通信_labview opc ua-CSDN博客

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpcUaHelper;
using Opc.Ua;
using Opc.Ua.Client;namespace OpcUaDll
{public class OpcUaConnector{private string ServerUrl;private OpcUaClient m_OpcUaClient;public event EventHandler<TEventArgs> OnSubscription;public struct TEventArgs{public string key;public object value;}public OpcUaConnector(string url){ServerUrl = url;m_OpcUaClient = new OpcUaClient();}public bool Connect(){m_OpcUaClient.UserIdentity = new UserIdentity(new AnonymousIdentityToken());//匿名链接try{m_OpcUaClient.ConnectServer(ServerUrl);//链接服务器               }catch (Exception ex){Console.WriteLine("Connect failed!!");return false;}return true;}public object ReadTag(string tag){object val;try{val = m_OpcUaClient.ReadNode<object>(tag);}catch{return false;}            return val;}public object[] ReadTags(string[] tags){List<object> val1 = m_OpcUaClient.ReadNodes<object>(tags);object[] result = new object[val1.Count];int i = 0;foreach(object obj in val1){result[i] = obj;i++;}return result;}public bool WriteTag(string tag, object val){try{var var1 = m_OpcUaClient.WriteNode<object>(tag, val);}catch(Exception ex){Console.WriteLine("Write failed!!");return false;}return true;}public bool WriteTags(string[] tags, object[] vals){try{var var1 = m_OpcUaClient.WriteNodes(tags, vals);}catch (Exception ex){Console.WriteLine("Write failed!!");return false;}return true;}public bool AddSubscription(string key,string tag){if (m_OpcUaClient.Connected){m_OpcUaClient.AddSubscription(key, tag, SubCallback);return true;}elsereturn false;}public bool AddSubscriptions(string[] keys, string[] tags){if (m_OpcUaClient.Connected){for (int i = 0; i < tags.Length;i++ )m_OpcUaClient.AddSubscription(keys[i], tags[i], SubCallback);return true;}elsereturn false;}private void SubCallback(string key, MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs args){MonitoredItemNotification notification = args.NotificationValue as MonitoredItemNotification;//notification.Value.WrappedValue.Value;TEventArgs ww = new TEventArgs();ww.key = key;ww.value = notification.Value.WrappedValue.Value;OnSubscription.Invoke(this, ww);}public bool RemoveSubscription(string key){if (m_OpcUaClient.Connected){m_OpcUaClient.RemoveSubscription(key);return true;}elsereturn false;}public bool RemoveAllSubscription(){if (m_OpcUaClient.Connected){try{m_OpcUaClient.RemoveAllSubscription();}catch{return false;}return true;}elsereturn false;}public bool Disconnect(){if (m_OpcUaClient.Connected){m_OpcUaClient.RemoveAllSubscription();m_OpcUaClient.Disconnect();}return true;}}
}

程序编辑完成后,编译,可在debug文件夹中生成dll文件。

1.3 Labvie程序

1.3.1 新建OpcUaHelper类

新建OpcUaHelper类如下,在类中新建多个子vi,该类用于集成OpcUa的通信。

将OpcUaDll.dll拷贝到类的文件夹OpcUaDll下。

1)新建OpcUaConnect.vi

用于连接OpcUa服务器;

其中,构造器中内容如下;

2)新建OpcUaDisconnect.vi

用于断开OpcUa通信,同时可以将订阅等关掉;

3)新建OpcUaReadNode.vi

读取一个节点的变量值;

4)新建OpcUaReadNodes.vi

用于读取多个节点的值;

5)新建OpcUaWriteNode.vi

用于写入单个节点的值;

6)新建OpcUaWriteNodes.vi

用于写入多个节点的值;

7)新建OpcUaAddSubscription.vi

用于添加多个订阅;

回调SubCallback.vi

8)新建OpcUaRemoveSubscription.vi

去除单个节点订阅;

1.3.2 调用OpcUaHelper类

1)新建OpcUaClient_example,前面板如下

2)程序框图

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

3)连接事件

4)读取事件

5)写入事件

6)停止按钮

7)用户事件

1.3.3 运行

点击连接,可以连接到OPC服务器,使用写入和读取按钮也可以很好的进行读写操作,修改Trigger的值,就会弹出对话框显示修改后的值,订阅功能没有问题。

本节区别于进阶01内容,使用c#编写的dll进行OpcUa通信,不需要安装Labview OPC UA工具包,因为该工具包需要下载收费,这样可以减少开发成本,直接将上面的OpcUaHelper.lvclass拷贝到开发程序中就可以使用。

http://www.dtcms.com/a/602687.html

相关文章:

  • 江苏网站建设wordpress域名配置
  • 德州市建设街小学网站首页wordpress的文章多重筛选
  • 加密货币均线策略与传统MACD(介绍下回测框架的择时功能)
  • 青海建设厅报名网站软件工程课程设计题目
  • 网站制作 牛商网中文域名到期对网站的影响
  • 《雷电模拟器9》 [9.1.76.0][x64] [绿色纯净版] 下载
  • 网站建设要点自助建站推广
  • 开发网站的基本流程网站制作怎么做框架
  • 【经典书籍】《代码整洁之道》第十三章“并发编程”精华讲解
  • 绵阳成套配电柜厂家
  • 反向海淘独立站技术架构深度解析:从搭建到优化的全链路实践
  • 做外贸用什么网站比较好济宁网站
  • C语言程序在线编译 | 让编程更便捷,提高开发效率
  • 2025下半年软考高级系统架构设计师考试流水账
  • 微信网站平台建设表白网站制作
  • 高级边界扫描 --1-- IEEE标准1149.6
  • 【C++】STL -- list 的使用与模拟实现
  • 百度认证官方网站怎么制作网站布局
  • 劲松网站建设专门做dm单的网站
  • Go语言编译器 | 探索Go语言编译过程与优化技巧
  • 在线监测系统:农药精细化工的“安全锁”与“效率引擎”
  • Python 爬虫教程 | 豆瓣 TOP250 数据抓取与分析实战
  • 专门做创意桌椅的网站访问中国建设银行网站
  • 搭建外文网站计算机网络课程设计
  • 长沙美容网站建设百度广告优化
  • 网站建设全过程seo发外链网站
  • 《C++ Primer》和《Effective C++》哪个更难?
  • 织梦网站联系我们的地图怎么做设计室内装修的软件
  • 电影数据可视化分析系统的设计与实现
  • 显存占用、kvcache和并发学习笔记