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

UA 编译和建模入门教程(zhanzhi学习笔记)

  • 一、使用SIOME免费工具建模

        从西门子官网下载软件SIOS,需要注册登录,下载安装版就行。下载后直接安装就可以用了,如图:

      安装完成后打开,开始建模,如图左上角有新建模型的按钮。

      新建了新工程后,需要添加命名空间,在右边Namespaces的位置,点击Add New Namespace,比如要创建一个Boiler的命名空间,则输入:http://opcfoundation.org/UA/Boiler

      有了命名空间之后就要创建对象,但是创建对象之前需要先创建ObjectType,在左侧Types->ObjectTypes->BaseObjectType,右键Add New ObjectType添加对象类型,输入名称和选择命名空间就可以了,如图:

       在BoilerType下面添加Child可以添加变量和方法,如图,DataType双击后,可以选择数据类型。NodeClass可以选择变量还是方法:

        有了ObjectType后,就可以添加对象了,回到最上面的Objects节点,右键选中Add Instance。TypeDefinition需要双击后选择之前创建的类型。

以上完成后,保存,文件名为:Boiler.NodeSet2.xml

参考教程:https://blog.csdn.net/whahu1989/article/details/105079566

二、配置模型编译工具

        从网站上下载https://github.com/OPCFoundation/UA-ModelCompiler源码,如果网站打不开直接用下载链接:https://codeload.github.com/OPCFoundation/UA-ModelCompiler/zip/refs/heads/master,下载后用visual studio打开如图:

这里需要用Release编译,编译后进入的运行文件路径下,然后将需要生成的xml拷贝过来(为了方便输入路径)。如图,xml的放置在Boiler中:

  

打开cmd,然后使用命令编译:

Opc.Ua.ModelCompiler.exe compile -d2 ./Boiler/Boiler.NodeSet2.xml -cg Boiler.csv -o2 NewBoiler -version v105

其中./Boiler/Boiler.NodeSet2.xml是需要被编译的xml,Boiler.csv有没有的没关系,NewBoiler是输出的文件夹。结果如下:

这里要注意,生成后的文件夹中包含了一个同名的xml。而我们一般使用的是uanodes二进制文件(因为直接使用xml,程序容易出现读取截断,字符无法识别等各种问题)。二进制文件我们不能直接使用,所以要判定生成的文件对不对,就使用生成后的xml。最简单的办法就是把生成后的xml重新导入到建模软件中查看。

参考教程链接:UA-ModelCompiler 使用教程 - GitCode博客

三、导入服务器验证

3.1 导入编译后的节点信息

   需要从官网下载C#源代码,或者从开源网站下载C++源代码。这里先以C#为例子。下载地址:

https://github.com/OPCFoundation/UA-.NETStandard/

  

   其中ConsoleReferenceServer就是示例服务器,可以直接用。服务器的地址空间配置放在Quickstarts.Servers工程中,其中Boiler文件夹是默认给的模型示例。我们需要做的事情就是仿照其中的BoilerNodeManager.cs写一个文件。

    在UA-.NETStandard-master\Applications\Quickstarts.Servers路径下,创建NewBoiler文件夹,并把ModelCompiler编译工具生成的文件拷贝到文件夹中,然后导入到C#工程中,导入的方法是点击解决方案的显示所有文件按钮,然后找到新增的文件夹,右键包括到项目中。注意:记得新建一个BoilerNodeManager.cs文件。如图所示:

3.2 修改NodeManage代码

从示例代码中把nodeManage文件拷贝过来后,首先需要修改命名空间。打开文件Opc.Ua.Boiler.DataTypes.cs,可以看到ModelCompiler生成的命名空间:Opc.Ua.Boiler。在BoilerNodeManager文件中,涉及到命名空间的地方都需要修改,如图:

根据第一章我们创建的对象信息,我们没有创建Boilers以及相关的操作,所以示例程序中CreateBoiler这种函数都是不需要的。我们需要关注的是LoadPredefinedNodes函数,通过断点调试可以查看从二进制文件中加载进来的节点。其中LoadFromBinaryResource需要填写二进制文件所在的位置。如图所示,Boiler需要改成NewBoiler。把"Quickstarts.Servers.Boiler.Boiler.PredefinedNodes.uanodes"改成"Quickstarts.Servers\\NewBoiler\\Opc.Ua.Boiler.PredefinedNodes.uanodes"

这里必须注意,程序运行的时候,读取资源文件是以可执行文件所在的位置做相对位置的,所以还需要把二进制文件(最好是整个文件夹)拷贝到执行目录下。这就是LoadFromBinaryResource读取的真实路径。

如下图,正确读取二进制文件后,断点调试可以看到读取的3个节点就是我们用西门子软件创建的3个节点。

四、使用客户端查看服务器信息

      这里我们下在免费的UaExpert。下载和使用参考教程:使用UaExpert - 水滴大海 - 博客园。

点击加号添加服务后,可以看到我们新增的boiler1和变量var。也可以看到示例程序原来就有的Boilers。

http://www.xdnf.cn/news/538543.html

相关文章:

  • 基于大模型的脑出血全流程预测系统技术方案大纲
  • 物联网安全技术的最新进展与挑战
  • 深入理解pip:Python包管理的核心工具与实战指南
  • (1-5)Java 常用工具类、包装类、StringStringBuilderString
  • 计算机存储与数据单位的核心定义及换算逻辑
  • 学习黑客 PowerShell 详解
  • 相机Camera日志分析之十五:高通相机Camx 基于预览1帧的ConfigureStreams Usecase完整过程日志分析详解
  • 辅助驾驶平权与出海,Mobileye的双重助力
  • Cursor 模型深度分析:区别、优缺点及适用场景
  • IOS 创建多环境Target,配置多环境
  • GK的作用是什么?
  • C语言指针深入详解(三):数组名理解、指针访问数组、一维数组传参的本质、冒泡排序、二级指针、指针数组、指针数组模拟二维数组
  • opencascade如何保存选中的面到本地
  • 使用MCP驱动IDA pro分析样本
  • DV SSL证书管理主要有哪些功能?
  • C语言—字符函数和字符串函数
  • 如何实现从网页一键启动你的 Electron 桌面应用(zxjapp://)
  • pcie phy电气层(PCS)详解gen1、2 (rx)
  • 北斗卫星通讯终端的技术原理是什么
  • 2025-05-19 学习记录--Python-简易用户登录系统 + 计算天数
  • RAG策略
  • 第二章、IMU(Inertial Measurement Unit 惯性测量单元)
  • 包装可靠性测试【二】
  • C++寻位映射的奇幻密码:哈希
  • AtomicReference 和 volatile 的比较
  • C++--综合应用-演讲比赛项目
  • 让数据驱动增长更简单! ClkLog用户行为分析系统正式入驻GitCode
  • 【随手记】 Event Bus vs. Event Loop
  • 01、java方法
  • 【Python训练营打卡】day30 @浙大疏锦行