Logicsteps

LogicSteps 提供了一个可视化的、基于组件的系统,用于在没有 PLC 或编程的情况下创建自动化序列。您可以通过预定义的逻辑组件控制驱动器、传感器和信号,这些组件按顺序执行。

运行中的 LogicSteps 系统,显示顺序执行流程和实时状态更新
Unity Inspector 中的 LogicSteps 容器配置,显示并行和顺序执行选项

概述

LogicSteps 使自动化工程师能够使用 Unity 的 Inspector 界面创建复杂的生产序列。每个步骤是附加到 GameObject 的一个组件,组件顺序决定执行序列。系统通过容器组件支持顺序和并行执行模式。

ℹ️

LogicSteps 的主要优势在于无需编程或额外安装软件即可定义操作序列和条件。

当前版本新功能:现在包含了并行和串行容器组件,用于改进 LogicSteps 工作流的可视化结构和组织。这些容器提供更清晰的层次结构可视化和更好的执行流管理。

LogicSteps 自动处理执行流、进度可视化和状态管理。阻塞步骤在完成前暂停执行,而非阻塞步骤立即执行。

LogicSteps Inspector 界面

属性

基础 LogicStep 属性

所有 LogicStep 组件继承以下通用属性:

Name(名称)

逻辑步骤的唯一标识符。

  • 类型:String
  • 默认值:空
  • 用途:跳转操作和序列调试所必需

State(状态)

阻塞操作的进度指示器。

  • 类型:Float(0-100)
  • 默认值:0
  • 用途:步骤完成进度的可视化反馈(非阻塞步骤隐藏)

Step Active(步骤激活)

指示当前正在执行的步骤。

  • 类型:Boolean(只读)
  • 用途:运行时调试和监控

容器组件

Serial Container(串行容器)

按顺序执行子 LogicSteps。

Debug Mode(调试模式)

启用详细的执行日志记录。

  • 类型:Boolean
  • 默认值:false
  • 用途:排查序列执行问题

Active Logic Step(当前逻辑步骤)

当前执行步骤的索引。

  • 类型:Integer(只读)
  • 用途:监控当前执行位置

Number Logic Steps(逻辑步骤数量)

子步骤的总数。

  • 类型:Integer(只读)
  • 用途:序列概览和验证

Parallel Container(并行容器)

同时执行子 LogicSteps。

Debug Mode(调试模式)

启用详细的执行日志记录。

  • 类型:Boolean
  • 默认值:false
  • 用途:排查并行执行问题

可用的 LogicStep 类型

Delay(延迟)

暂停执行指定的时长。

Duration(时长)

等待的秒数。

  • 类型:Float
  • 默认值:1.0
  • 范围:0.1 到 3600.0
  • 用途:生产序列中的定时延迟
Delay LogicStep 配置

Drive To(驱动到位置)

将驱动器移动到指定位置并等待完成。

Drive(驱动器)

要控制的目标驱动器组件。

  • 类型:Drive 引用
  • 默认值:无
  • 用途:连接到您要定位的驱动器

Destination(目标位置)

目标位置,以毫米或度为单位。

  • 类型:Float
  • 默认值:0
  • 用途:设置绝对或相对目标位置

Destination From PLC Output(来自 PLC 输出的目标位置)

来自 PLC 接口的替代位置来源。

  • 类型:PLCOutputFloat 引用
  • 默认值:无
  • 用途:来自外部控制系统的动态定位

Relative(相对)

将目标位置视为相对于当前位置的偏移量。

  • 类型:Boolean
  • 默认值:false
  • 用途:相对于当前位置的增量移动

Live Edit(实时编辑)

允许在运行时实时调整参数。

  • 类型:Boolean
  • 默认值:false
  • 用途:运行时调整和调试
Drive To LogicStep 配置

Start Drive To(启动驱动到位置)

ℹ️

在 realvirtual 6.3 中更新,增加了相对移动支持。

启动驱动器移动但不等待完成(非阻塞)。执行立即继续到下一步,同时驱动器在后台移动。

当您希望同时启动多个驱动器或在驱动器移动时继续执行其他逻辑时,此功能非常有用。要等待驱动器完成,请使用监控驱动器 AtPosition 信号的 Wait for Signal Bool 步骤。

Drive(驱动器)

要控制的目标驱动器组件。

  • 类型:Drive 引用
  • 默认值:无

Destination(目标位置)

目标位置,以毫米或度为单位。

  • 类型:Float
  • 默认值:0

Direction(方向)

移动方向。

  • 类型:Enum(Automatic / Forward / Backward)
  • 默认值:Automatic

Relative(相对)

将目标位置视为相对于当前位置的偏移量。

  • 类型:Boolean
  • 默认值:false
  • 用途:相对于当前位置的增量移动

Live Edit(实时编辑)

允许在运行时实时调整参数。

  • 类型:Boolean
  • 默认值:false

使用模式:

Start Drive To LogicStep 配置

1. Start Drive To(位置 500,非阻塞)
2. Set Signal Bool(在驱动器移动时激活某物)
3. Wait for Signal Bool(驱动器 AtPosition = true

Start Drive Speed(启动驱动器速度)

设置驱动器速度以进行连续运动。

Drive(驱动器)

要控制的目标驱动器组件。

  • 类型:Drive 引用
  • 默认值:无
  • 用途:连接到您要控制的驱动器

Speed(速度)

移动速度,以 mm/s 或 deg/s 为单位。

  • 类型:Float
  • 默认值:100
  • 范围:-1000 到 1000
  • 用途:正值前进,负值后退,零值停止
Start Drive Speed LogicStep 配置

Wait for Drives at Target(等待驱动器到达目标)

暂停执行直到指定的驱动器到达其目标位置。

Drives(驱动器列表)

要监控的驱动器列表。

  • 类型:Drive 数组
  • 默认值:空
  • 用途:同步多个驱动器移动
Wait for Drives at Target LogicStep 配置

Wait for Sensor(等待传感器)

暂停执行直到传感器达到指定状态。

Sensor(传感器)

要监控的目标传感器组件。

  • 类型:Sensor 引用
  • 默认值:无
  • 用途:连接到接近、视觉或其他传感器类型

Wait for Occupied(等待占用)

确定哪个传感器状态触发继续。

  • 类型:Boolean
  • 默认值:true
  • 用途:true 等待占用,false 等待非占用
Wait for Sensor LogicStep 配置

Wait for Signal Bool(等待布尔信号)

暂停执行直到布尔信号达到指定状态。

Signal(信号)

要监控的目标信号。

  • 类型:Signal 引用
  • 默认值:无
  • 用途:连接到 PLC 或内部布尔信号

Wait for True(等待 True)

确定哪个信号状态触发继续。

  • 类型:Boolean
  • 默认值:true
  • 用途:true 等待信号为 true,false 等待信号为 false

Set Signal Bool(设置布尔信号)

将布尔信号设置为 true 或 false。

Signal(信号)

要修改的目标信号。

  • 类型:Signal 引用
  • 默认值:无
  • 用途:控制 PLC 输出或内部标志

Set to True(设置为 true)

分配给信号的值。

  • 类型:Boolean
  • 默认值:true
  • 用途:true 设置信号为高,false 设置信号为低
Set Signal Bool LogicStep 配置

Wait for Signal Float(等待浮点信号)

ℹ️

此功能在 realvirtual 6.0.10(Professional 和 Starter)中添加

暂停执行直到浮点信号满足指定条件。支持五种比较运算符,并提供可配置的容差用于相等性检查。适用于等待模拟值,如温度、压力或位置反馈。

Signal(信号)

要监控的目标浮点信号。

  • 类型:Signal 引用
  • 默认值:无
  • 用途:连接到任何浮点类型信号(PLCOutputFloat、PLCInputFloat 等)

Comparison(比较)

用于评估信号值与目标值的比较运算符。

  • 类型:ComparisonType(下拉菜单)
  • 默认值:GreaterOrEqual(>=)
  • 选项:GreaterThan (>), LessThan (<), Equals (==), GreaterOrEqual (>=), LessOrEqual (<=)
  • 用途:选择在继续之前必须满足的条件

Value(值)

要与信号进行比较的目标值。

  • 类型:Float
  • 默认值:0
  • 用途:以信号单位设置阈值或目标值

Tolerance(容差)

用于相等性比较的容差,以处理浮点精度问题。

  • 类型:Float
  • 默认值:0.01
  • 最小值:0.0001
  • 用途:仅在 Comparison 设置为 Equals 时适用。容差为 0.01 表示在目标值 ±0.01 范围内的值被视为相等

Set Signal Float(设置浮点信号)

ℹ️

此功能在 realvirtual 6.0.10(Professional 和 Starter)中添加

将浮点信号设置为指定值并立即进入下一步。此非阻塞步骤通常用于设置速度值、位置目标或模拟控制输出。

Signal(信号)

要修改的目标浮点信号。

  • 类型:Signal 引用
  • 默认值:无
  • 用途:连接到任何浮点类型信号(PLCInputFloat、PLCOutputFloat 等)

Value(值)

分配给信号的浮点值。

  • 类型:Float
  • 默认值:0
  • 用途:以信号单位设置所需值(例如,速度 mm/s,温度 °C)

Jump on Signal(信号跳转)

根据信号状态有条件地跳转到命名步骤。

Jump to Step(跳转至步骤)

要跳转到的目标 LogicStep 名称。

  • 类型:String
  • 默认值:空
  • 用途:必须与目标步骤的 Name 属性完全匹配

Signal(信号)

用于跳转条件评估的信号。

  • 类型:Signal 引用
  • 默认值:无
  • 用途:连接到布尔信号进行条件逻辑

Jump On(跳转条件)

触发跳转的信号状态。

  • 类型:Boolean
  • 默认值:true
  • 用途:true 当信号为高时跳转,false 当信号为低时跳转
Jump on Signal LogicStep 配置

Enable(启用/禁用)

控制 GameObject 的激活状态。

GameObject

要启用或禁用的目标 GameObject。

  • 类型:GameObject 引用
  • 默认值:无
  • 用途:显示/隐藏对象或启用/禁用组件

Enable(启用)

GameObject 的所需激活状态。

  • 类型:Boolean
  • 默认值:true
  • 用途:true 激活 GameObject,false 停用它

Cinemachine Camera(Cinemachine 摄像机)

控制用于场景可视化的虚拟摄像机激活。

Virtual Camera(虚拟摄像机)

目标 Cinemachine 虚拟摄像机。

  • 类型:CinemachineVirtualCamera 引用
  • 默认值:无
  • 用途:在自动化序列期间切换摄像机视图

Grip Pick(Grip 抓取)

ℹ️

此步骤在 realvirtual 6.3(Professional)中添加。

触发 Grip 组件来拾取 MU。

Grip

目标 Grip 组件。

  • 类型:Grip 引用
  • 默认值:无

Blocking(阻塞)

如果为 true,则在继续之前最多等待 10 秒以成功抓取 MU。

  • 类型:Boolean
  • 默认值:false
  • 用途:当后续步骤依赖于 MU 被拾取时启用。如果只想触发拾取并继续,请保持禁用。

Grip Place(Grip 放置)

ℹ️

此步骤在 realvirtual 6.3(Professional)中添加。

触发 Grip 组件来放置(释放)所有当前持有的 MU。

Grip

目标 Grip 组件。

  • 类型:Grip 引用
  • 默认值:无

Blocking(阻塞)

如果为 true,则在继续之前最多等待 10 秒以成功放置所有 MU。

  • 类型:Boolean
  • 默认值:false
  • 用途:当后续步骤依赖于 MU 被放置在其目标位置时启用。

Set Active Only(设置仅活动)

ℹ️

此步骤在 realvirtual 6.3(Professional)中添加。

在一个或多个 realvirtualBehavior 组件上设置 ActiveOnly 属性。此非阻塞步骤允许您在序列期间启用或禁用特定行为,而不影响其他组件。

Behaviors(行为列表)

要修改的 realvirtualBehavior 组件列表。

  • 类型:realvirtualBehavior 引用列表
  • 默认值:空

Set To Always(设置为始终)

如果为 true,则将 ActiveOnly 设置为 Always(活动)。如果为 false,则设置为 Never(非活动)。

  • 类型:Boolean
  • 默认值:true
  • 用途:在序列阶段临时禁用驱动器或行为

统计 LogicSteps

Stat Start Cycle(统计周期开始)

标记生产周期的开始以进行统计。

Stat End Cycle(统计周期结束)

标记生产周期的结束以进行统计。

Stat State(统计状态)

记录状态信息以进行性能分析。

Stat Output(统计输出)

生成统计输出数据。

使用示例

基本序列设置

  1. 为序列创建一个空的 GameObject
  2. 按所需执行顺序添加 LogicStep 组件
  3. 在 Inspector 中配置每个步骤的属性
  4. 为跳转引用的步骤使用 Name 属性
  5. 运行场景以执行序列

顺序流程示例


1. Start Drive Speed(传送带前进)
2. Wait for Sensor(检测到零件)
3. Delay(稳定时间)
4. Drive To(定位执行器)
5. Set Signal Bool(激活夹爪)
6. Set Signal Float(设置压力为 5.0 bar)
7. Wait for Signal Float(等待压力 >= 4.5 bar)
8. Drive To(执行器返回)
9. Start Drive Speed(传送带继续)

并行执行

  1. 添加 Parallel Container 组件
  2. 添加应同时执行的子 LogicSteps
  3. 每个子步骤独立运行
  4. 当所有子步骤完成时容器完成

条件逻辑

  1. 使用 Jump on Signal 进行分支逻辑
  2. 为决策点设置信号监控
  3. 为跳转目标创建命名的目标步骤
  4. 使用条件跳转实现错误处理

编辑器工具

添加 LogicSteps

  • 场景菜单:附加 LogicStep 组件时右键单击
  • 组件菜单:Component > realvirtual > Add Component > LogicStep
  • 快速访问:覆盖菜单出现并显示所有可用步骤
LogicStep 选择覆盖层

序列管理

  • 拖放:重新排列组件以更改执行顺序
  • 进度条:阻塞操作的可视化反馈
  • 实时编辑:运行时参数调整以进行调试
  • 调试模式:详细的日志记录用于故障排查
LogicSteps 基本概念

自定义 LogicStep 开发

创建自定义步骤

  1. 在 LogicSteps 文件夹中创建新脚本
  2. LogicStep 基类继承
  3. 实现必需的方法:
    • NonBlocking():非阻塞步骤返回 true
    • OnStarted():执行步骤逻辑
    • 在步骤完成时调用 NextStep()

实现示例


public class LogicStep_StartDriveSpeed : LogicStep
{
    public Drive drive;
    public float Speed;
    
    protected new bool NonBlocking()
    {
        return true;
    }

    protected override void OnStarted()
    {
        if (drive != null)
        {
            drive.TargetSpeed = Mathf.Abs(Speed);
            if (Speed > 0)
            {
                drive.JogForward = true;
                drive.JogBackward = false;
            }
            else if (Speed == 0)
            {
                drive.JogForward = false;
                drive.JogBackward = false;
            }
            else if (Speed < 0)
            {
                drive.JogForward = false;
                drive.JogBackward = true;
            }
        }
        NextStep(); 
    } 
}

基类方法

  • protected void NextStep():前进到序列中的下一步
  • protected void NextStep(string stepName):跳转到命名步骤
  • public void StartStep():初始化步骤执行
  • protected void Start():在运行时开始序列

必须实现的方法

  • protected new bool NonBlocking():定义步骤执行类型
  • protected override void OnStarted():实现步骤行为
提示
当您的自定义步骤完成时始终调用 NextStep() 以确保正确的序列流程。

另请参见


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