课程 A3 ·基础

读、写、调用

承担绝大部分工作的三个动词,以及它们共同围绕的 DataValue。本课程涵盖属性、Variant 类型、认真读取返回的状态码而不是忽略它、在不引发类型不匹配的前提下写入,以及方法调用。

课时9
时间约 66 分钟
先修要求A2
成本免费:文字课程开放,视频和实验需要免费账号

学完你将能够做到

  • 你能够读取任何节点的任何属性,而不只是它的 Value。
  • 你能说清 DataValue 除了数字之外还携带什么。
  • 你能写入一个值而不触发类型或访问级别故障。
  • 你能够调用服务器方法并处理其输出参数。

课程大纲

  1. 1
    读取 Value 属性之外的内容

    DataType、ValueRank、AccessLevel、EURange、EngineeringUnits。这些属性告诉你该如何对待即将读取的数值。

    Asset 来自一台真实服务器的一个模拟量变量的完整属性转储

    8 分钟
  2. 2
    拆解一个 DataValue

    Value、StatusCode、SourceTimestamp、ServerTimestamp。四个字段,其中三个经常被客户端代码丢弃,而后它便无法解释自己的数据。

    Asset 展示全部四个字段的原始 DataValue 输出,其中一条状态不是 Good

    8 分钟
  3. 3
    读取状态码,而不是忽略它

    Good、Uncertain 和 Bad 是一份契约。在 UncertainLastUsableValue 悄悄污染一个平均值之前,该拿它怎么办。

    资料 一次返回 UncertainLastUsableValue 的读取,以及忽略它会得出的错误平均值

    7 分钟
  4. 4
    选择你信任的时间戳

    SourceTimestamp 与 ServerTimestamp、TimestampsToReturn,以及当 PLC 只填充其中一个时该怎么办。

    资料 同一个订阅同时记录两个时间戳,展示它们之间的漂移

    7 分钟
  5. 5
    写入一个数值而不出现类型不匹配

    Int16 不是 Int32,标量不是单元素数组,ValueRank 也很重要。为什么大多数第一次写入都会失败,以及如何让第二次成功。

    交付物 四次失败的写入及各自产生的确切状态码,以及修正后的调用

    7 分钟
  6. 6
    写入之前先遵守 AccessLevel

    只读节点、只写节点,以及接受写入却把它丢弃的服务器:umati sample server 就是故意这么做的。

    Asset 一次对 umati 服务器的写入,返回 Good 却什么都没改变,并用回读加以证明

    6 分钟
  7. 7
    读写数组和数组范围

    IndexRange、数组的部分写入,以及那个让索引范围看起来像服务器缺陷的差一错误。

    资料 用三种不同 IndexRange 表达式做的数组读取及其结果

    7 分钟
  8. 8
    调用一个方法

    输入和输出参数、Executable 属性,以及方法失败与调用失败有何不同。

    Asset 一次对 Milo 演示服务器的方法调用,并打印其输入和输出参数

    8 分钟
  9. 9
    批量操作而不触及上限

    读和写都接受数组。服务器对每次调用的操作数有限制,以及为什么一个大请求胜过一千个小请求:直到它不再如此为止。

    交付物 一次 500 个节点的批量读取与 500 次单独读取的对比,附两者耗时和服务器的限值

    8 分钟

实验

需要免费账户

用一条命令启动一个本地服务器,向它写入一个值,再读回来,然后故意制造一次类型不匹配和一次不可写失败,好让你认得这两种情况。

解锁实验 →
规范背景

最后核对日期 2026 年 9 月 7 日,对照 OPC UA 1.05.07。OPC UA Connect 是教育资源,与 OPC Foundation 无隶属关系。

免费下载
OPC UA 服务器验收测试包
一份 40 项检查的验收测试,在投运签收前对厂商的服务器执行。带加权评分、三个硬性门槛,以及供供应商会议使用的一页结论。
获取免费测试包 →
免费,无需课程,无需登录