TwinCAT HMI (Professional)

⚠️

此接口仅在 realvirtual.io Professional 中可用,并依赖于 BestWebsocketsBundle,必须从 Unity Asset Store 单独购买:Best Websockets Bundle

重要提示: 目前,该接口仅适用于 BestHTTP V2,该版本已不再在 Asset Store 上提供。购买后,请联系我们 或联系 BestHTTP 开发者以获取 BestHTTP V2。此外,在项目的 scripting define symbols 中,您需要添加 REALVIRTUAL_BESTHTTP(不含"3")以使用此版本。

此接口是 TwinCAT ADS 之外的另一个 Beckhoff PLC 接口。它需要 TwinCAT PLC 上的 HMI 许可证。此接口的优势在于它不依赖于运行仿真模型的设备上的安装。通信完全通过 WebSocket 进行。此接口可在任何类型的目标平台上工作,也可在 WebGL 构建中使用。

相比之下,TwinCAT ADS 需要在计算机上安装 ADS,因此仅限于 Windows 系统。

该接口可通过选择 Tools > realvirtual > Add Object > Interface > TwinCATHMI 添加到 realvirtual.io 场景中。

用于 realvirtual.io 的 TwinCAT HMI 接口(基于 Websocket)

前提条件

  • 需要 TE2000 许可证用于属性 (HMI) 配置。
  • TE2000 版本 1.12.758.8 及以上
  • 您的 PLC 上需要 TF2000 许可证
TwinCAT 中的 TF2000 许可证
  • 需要将 REALVIRTUAL_BESTHTTP3 添加到 Unity 项目的 Project Settings > Player > Script Compilation
  • 需要安装并可用 Newtonsoft.Json。在最新的标准 Unity 版本中已包含 Newtonsoft。要启用 Newtonsoft,还请在 Project Settings > Player > Script Compilation 的 Scripting Define Symbols 中添加 REALVIRTUAL_JSON。有关如何安装和获取的更多信息,请查看 Newtonsoft JSON 部分
Scripting Define Symbols 中的 BestHTTP 和 JSON

PLC 代码中的注解

在 TwinCAT PLC 源代码中,所有符号都需要使用 { attribute 'TcHmiSymbol.AddSymbol' } 进行注解,如果它们应该对 TwinCATHMI 接口可用的话。

接口属性

TwinCAT HMI Inspector 属性

IsConnected(只读)

如果接口已成功连接到 PLC,则为 True。

Server Adress

服务器地址(格式必须为 ws\://IP:Port

Status(只读)

WebSocket 的当前状态,连接活动时为"Open"。

IsConnecting(只读)

重新连接到服务器期间为 True。

DebugMode

如果设置为 true,则会将附加消息打印到 Unity 控制台。

Intervall Time

间隔时间(毫秒)。在间隔时间内,所有更新消息在 PLC 内收集为一条消息。

Subscribe Outputs

如果设置为 true,则订阅输出,仅在间隔时间内发送已更改的输出。

Poll Outputs

如果设置为 true,则在间隔时间内发送所有输出。

Symbol Table

可以从外部 CSV 文件导入所有符号。表格必须如下所示:

Security

如果您想使用安全功能并通过域、用户和密码登录 PLC,您需要将此设置为 true 并定义用户和密码。

EventSignalRead

当从接口读取信号时触发的事件。

复杂数据类型

只有浮点数、整数、布尔值等原始数据类型会自动转换为 realvirtual.io 的 PLCInput 和 PLCOutput 变量。

在复杂数据中读取原始类型

要读取复杂数据类型,您可以通过如下寻址来访问复杂数据类型中的原始数据:

使用 C# 脚本读取复杂数据

要订阅复杂数据类型,您应该创建一个 PLCOutputText 类型的变量。在此文本中,您将以 JSON 格式获取复杂数据。现在您可以在 C# 脚本中使用 JSON 反序列化将此 JSON 转换为 C# 数据类型。

使用 C# 脚本写入复杂数据

要写入复杂数据,您可以调用公共方法 WriteSymbol


public void WriteSymbol (string symbol, object signal)

这会将给定对象序列化为 JSON 并发送到 PLC。重要的是 C# 数据结构必须与 PLC 中的数据结构相同。

带写入确认的复杂数据写入

通常,使用 WriteSymbol 直接将符号写入 PLC 时,该函数是非阻塞的。您不会得到任何返回值,也不会在符号未写入时自动收到通知。在非常复杂和庞大的数据结构中,写入可能需要一些时间。

如果您想确保数据已写入,还有另一个写入命令:


public int WriteSymbolControlled (string symbol, object signal)

此函数返回一个 INT 类型的 id

在调用 WriteSymbolControlled 之前,您应该订阅此事件,该事件将在 PLC 发送回复时被调用。


EventSignalRead.AddListener(OnSymbolWritten);

您的事件代码应该类似于以下内容。您现在需要检查方法是否完全针对您的 WriteSymbolControlled id(在调用中返回的 id)被调用,以及是否有错误(error == false)。您还可以详细查看以完整 JSON 字符串形式在 reply 中给出的回复。


   private void OnSymbolWritten(int id, bool error, string reply)
        {
            // 在此处检查 error 是否为 false 且 id 是否与 WriteSymbolControlled 中返回的相同
        }

© 2025 realvirtual GmbH https://realvirtual.io - All rights reserved. No part of this publication may be reproduced, distributed, or transmitted in any form or by any means, including printing, saving, photocopying, recording, or other electronic or mechanical methods, without the prior written permission of the publisher.