Signal Manager(信号管理器)

⚠️

这是面向专业用户的功能,用于管理具有大量信号的大型仿真。

Signal Manager 用于自动将导入的信号链接到 realvirtual.io 项目中的特定 PLC 信号。此外,未链接的信号可以被删除或停用。根据您的自动连接规则,需要添加适当的脚本。Signal Manager 还提供了在 realvirtual.io 项目中自动创建信号的功能(如果在已存在和之前导入的信号中找不到合适的信号)。

ℹ️

如果您在导入信号后项目中有数千个未使用和未连接的信号,禁用或删除未连接的信号可以显著改善仿真的启动时间。

如何使用信号管理器

要使用 Signal Manager,必须将其作为组件添加到包含导入信号作为子组件(通常是接口本身)的游戏对象上。

要获取已连接和未连接信号数量的概览,可以选择 "Check Signals"。这将更新 Signal Manager 中显示的信息。

组件元素

AutoConnectLevels

在 "AutoConnectLevels" 列表中,您指定应对哪些游戏对象(及子对象)执行信号连接。这样可以避免检查和连接您不想执行自动信号创建或连接的仿真模型部分。

Check signals

更新信号信息。

Disable unconnected signals

禁用所有未连接的信号。

Enable Unconnected Signals

启用所有未连接的信号。

Delete Unconnected Signals

删除所有未连接的信号。

Delete automatically created signals

删除所有自动创建的信号,无论是否已连接。

Start and connect signal creation

启动信号的自动连接。未找到的信号将自动创建。要使用自动信号连接和创建,您需要定义自己的自定义用户脚本,实现您的连接和命名规则(见下文)。

用户脚本

信号管理器使用自定义脚本分配信号。此脚本必须为 "AutoConnectBase" 类型。在脚本中定义匹配方式。一种可能的方式是使用运动学组的定义,例如将信号分配给驱动或夹爪。使用 EditorUtility.SetDirty 是更新编辑器所必需的。以下是相应的代码示例:


 namespace realvirtual.io
{
    public partial class AutoConnectExample : AutoConnectBase
    {
        public override bool AutoConnect(BehaviorInterface component)
        {
            var connected = false;
            var signalname = "";
            Debug.Log($" Checking AutoConnect for " +component.name);

            /// Here you can define your connection rules, create signals and assign them to the behavior models
            Kinematic kin = component.GetComponent<Kinematic>();

            if (component.GetType() == typeof(Gripper))
            {
                signalname = kin.GroupName + "_Oeffnen";   // define Signal name based on custom rule
                var signal = GetOrCreateSignal<PLCOutputBool>(signalname);   // create the signal if not already there
                ((Gripper)component).OpenGripper = signal; // connect the signal to the behavior model
                EditorUtility.SetDirty(component);
                connected = true;

                signalname= kin.GroupName + "_Schliessen";   // define Signal name based on custom rule
                signal = GetOrCreateSignal<PLCOutputBool>(signalname);   // create the signal if not already there
                ((Gripper)component).CloseGripper = signal; // connect the signal to the behavior model
                EditorUtility.SetDirty(component);
                connected = true;
            }
            if (component.GetType() == typeof(Drive_FollowPosition))
            {
                signalname = kin.GroupName + "_Position";
                var drivesignal = GetOrCreateSignal<PLCOutputFloat>(signalname);
                ((Drive_FollowPosition)component).Position = drivesignal; // connect the signal to the behavior model
                EditorUtility.SetDirty(component);
                connected = true;
            }
            return connected;
        }
    }
}

导入和匹配后,您可以通过 "Check for unconnected Signals" 检查匹配情况。据此可以删除自动创建或未连接的信号。

© 2025 realvirtual GmbH https://realvirtual.io - 版权所有。未经出版商事先书面许可,不得以任何形式或任何方式(包括打印、保存、复印、录制或其他电子或机械方法)复制、分发或传播本出版物的任何部分。