当前位置: 首页 > 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。

相关文章:

  • LLM最后怎么输出值 解码语言模型:从权重到概率的奥秘
  • 手机怎么查看网络ip地址?安卓/iOS设备查询指南
  • 【QT】类A和类B共用类C
  • python实现pdf转图片(针对每一页)
  • React Contxt详解
  • 【计算机主板架构】ITX架构
  • 企业标准信息公共服务平台已开放标准通编辑器访问入口
  • 苹果的人工智能领域慢热
  • 计算机视觉设计开发工程师学习路线
  • 展锐Android14及更新版本split_build编译方法
  • 【android bluetooth 协议分析 01】【HCI 层介绍 9】【ReadLocalSupportedCommands命令介绍】
  • C语言实现android/linux按键模拟
  • Linux动静态库制作与原理
  • 汇编:电子计数器
  • Linux问题排查-找到偷偷写文件的进程
  • 服务器的基础知识
  • 软件设计师完整性约束考点分析——求三连
  • AIGC与文本生成:人工智能写作的新纪元
  • Go语言测试用例的执行与分析
  • Git基础面试题
  • 无人机考证热背后:掏空年轻人钱包,养肥培训机构
  • 欧洲观察室|欧盟对华战略或在中欧建交50年时“低开高走”
  • 从《缶翁的世界》开始,看吴昌硕等湖州籍书画家对海派的影响
  • 中国首艘海洋级智能科考船“同济”号试航成功,可搭载水下遥控机器人
  • 上海145家博物馆、73家美术馆将减免费开放
  • 中国-拉共体论坛第四届部长级会议北京宣言