Twincat Eventlogger 多语言“源”名称的可能性

问题描述

Roald 为 Twincat Eventlogger 编写了出色的指南。

https://roald87.github.io/twincat/2020/11/03/twincat-eventlogger-plc-part.html https://roald87.github.io/twincat/2021/01/20/twincat-eventlogger-hmi-part.html

对我们来说,这正是我们想要的,但是我还没有弄清楚一件事。如何在人机界面中获取多种语言的报警源名称params::sourceName 给出了软件中的路径(例如:MAIN.fbConveyor1.Cylinder1) 该路径可以在初始化警报时自定义(如 Roald 所示)。这在我的情况下不起作用,因为我想定义一个多次实例化的通用警报(例如:“Cilinder 未在最长时间内收回”)。

我正在考虑使用源作为向操作员显示警报发生位置的一种方式。我们已经使用这种方式(路径)来保存机器设置等。我们制造的机器安装在世界各地,所以多语言是必须的。

Beckhoff 确实支持多语言警报名称(定义时),但源未定义,而是动态生成

有人知道如何解决这个问题吗?

解决方法

如果我正确理解您的问题,那么能够使用问题来源的信息参数化事件文本应该对您有所帮助。

如果您将事件文本定义为 Cylinder {0} has not retracted in time.,那么您可以在运行时添加该文本的参数。

IF bRaiseAlarm THEN
    bRaiseAlarm := FALSE;
    fbAlarm.ipArguments.Clear().AddString('Alice');
    fbAlarm.Raise(0);
END_IF

但是,由于这在您提到的文章中也有说明,我不确定这是否能解决您的问题。

本例中的“Alice”可能难以本地化。我想到了以下选项。

  1. 字符串可以基于 ENUM。枚举可以有文本列表支持,所以如果你在那里添加你的翻译,那应该允许多语言输出。但是……这确实需要进行大量设置,将翻译放入您的代码中,并确保 PLC 应用程序知道参数应使用的语言。

  2. 使用标签来标记源设备,因为标签可以是语言不变的。这不是最用户友好的方法,但它可以为您工作。它会变成这样:“气缸 'AA.1123' 没有及时缩回。”。 'AA.1123' 作为标签必须作为字符串存储在您的 PLC 代码中。您必须相信您的运营商可以将标签与实际来源联系起来。

希望这有帮助,否则请帮助我更好地理解问题。