C# 使用OPC UA通讯如何读取西门子PLC中的结构体数据

我刚刚摸到门槛 2020-04-01 03:17:32
客户端环境:
系统 :win10 .net framework4.6.1
API: 从 OPC UA 基金会 下载的 UAClientHelperAPI

我这边的客户端实现一个简单的读写功能(读取的地址,格式为:ns=3; s ="块名.变量名" )
目前opcua通讯可以读取基本类型(string、int等)变量。
也能读取结构体中的某个变量 (读取的地址,格式为:ns=3; s ="块名.结构体.变量名")
如下:
/* PLC中的结构体
* 定义为:块名.结构体 (该结构体为数组型结构体)
* T20Station_DB.awCy
* 包含变量:
* {
* int a;
* bool b;
* string c;
* }
*
* 测试:
* T20Station_DB.awCy 读取失败
* T20Station_DB.awCy[0] 读取失败
* T20Station_DB.awCy[0].a 读取成功
* /

但是无法读取整个结构体。
请各位大神指点下,opcua该如何读取这个结构体?
...全文
3520 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
星辰幽梦 2022-07-25
  • 打赏
  • 举报
回复

我这两天试了一下结构体读出来不是UA_TYPES_STRUCTURETYPE类型的,而是一种EXTENSIONOBJECT类型,对应的是类型宏UA_DATAYPEKIND_EXTENSIONOBJECT,所以用struct类型变量来写入内存是只能得到1,真的奇怪这么高频使用的变量类型居然不支持结构体的整体读取

路丶人 2022-07-19
  • 打赏
  • 举报
回复

大佬,你读出来了结构体了吗?

weixin_46116129 2021-07-02
  • 打赏
  • 举报
回复

兄弟,结构体读出来了吗?

ArmStronger 2021-04-14
  • 打赏
  • 举报
回复
最近用的UA也遇到了这个问题,楼主解决了吗?
  • 打赏
  • 举报
回复
引用 1 楼 mingcsharp 的回复:
1:他的结构体你可以用类试试,包括传递方式,
2:还有就是引用的类型 你要注意,
3:还有就是数据类型的对应关系,网上有很多,可以去看看


我试试
mingcsharp 2020-04-01
  • 打赏
  • 举报
回复
1:他的结构体你可以用类试试,包括传递方式, 2:还有就是引用的类型 你要注意, 3:还有就是数据类型的对应关系,网上有很多,可以去看看

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧