逻辑程序

描述

PolyScope X 的应用程序可以包含一个 逻辑程序 ,该程序可在后台持续运行,且独立于主机器人程序。 这对于以下任务非常有用:当机械臂断电、主程序暂停或停止,或者操作员进入安全防护区域时,这些任务仍需继续运行。


典型应用包括维护现场总线通信(Modbus、Ethernet/IP、PROFINET、Socket、XmlRPC)、响应外部传感器输入、向生产PLC报告机器人状态,以及在主程序停止时控制外部设备。

逻辑程序不能使用直接移动机械臂、更改有效载荷或修改TCP参数的功能。

逻辑程序的应用示例

  1. 当机器人处于停止模式(例如安全保护停止、保护性停止或紧急停止)且主程序处于暂停或停止状态时,或在机械臂通电之前,对外部传感器输入做出主动响应。

  2. 即使机械臂断电且程序未运行,现场总线通信(Modbus、Ethernet/IP、PROFINET、Socket、XmlRPC)仍会保持连接。

  3. 当主程序被操作员中断时,单元逻辑仍可继续运行。

  4. 机器人状态报告,该报告将传输至生产控制软件(生产PLC)。

  5. 当主程序停止或暂停时,可控制外部设备(如焊接机、输送机、点胶机)停止运行。

  6. 在程序启动前,系统会捕获操作员的输入。

  7. 根据故障情况进行定制化恢复。 操作员可以在恢复主程序后决定下一步操作。

  8. 在小型机器人单元中更换外部PLC控制器。

许可证

逻辑程序需要许可证,可通过客户门户购买。

 

控制逻辑程序

在“程序”页面中,从侧边栏中选择 “逻辑程序”。 展开的侧边栏显示了用于导航逻辑程序不同部分的控件。 它还允许您启动、暂停、停止和重置程序。

 

“运行程序”按钮会根据逻辑程序的状态,显示为“ 运行程序 ”或 “停止程序”。 它作为“逻辑程序”上下文菜单中可用程序控制操作的快捷方式。

四个 逻辑程序指示器 显示程序的当前状态。 它们还会显示该程序是否已配置为在加载应用程序时自动启动。

 

逻辑程序结构

逻辑程序与主程序具有相同的结构部分:

  • 主程序主体——将持续运行,直到被手动停止、执行停止指令或因运行时错误而终止。
  • 启动 前 — 逻辑程序启动时执行一次。
  • 模块 — 函数和线程,其组织方式与主程序相同。 默认情况下,线程函数仅执行一次;启用循环选项可使线程持续运行。

机器人程序和逻辑程序各自拥有独立的全局变量集、独立的线程池以及独立的执行生命周期。 启动、停止或出现故障的某个程序不会导致其他程序停止运行。 “ 停止 ”或 “暂停 ”指令仅对执行该指令的程序产生影响。

 

 

在“ 开始 前”部分,您只能执行该程序一次。

在“ 模块 ”部分,您可以查看该程序可用的函数和线程列表。

 

与机器人程序交换数据

机器人程序与逻辑程序之间进行通信的主要方式是通过 应用程序变量 。 变量既可以在机器人端设置,也可以在逻辑程序中读取。

本示例统计进入机器人工作单元输入缓冲区的物品数量,并将计数结果显示给机器人程序。 即使在机械臂断电的情况下,计数器仍会继续递增。

 

读取机器人状态

可通过内置的 RTDE 变量 获取机器人状态。 可以使用脚本函数 get_rtde_value() 读取这些变量。 有关可用 RTDE 字段的完整列表,请参阅《 RTDE 指南》。

以下示例演示了如何检查“安全停止”功能是否处于激活状态:


safety_status = get_rtde_value("safety_status")
# 检查是否处于安全防护停止状态及自动模式下的安全防护停止状态
is_safeguard_stop_active = (safety_status == 5 or safety_status == 12)

 

以下示例用于检查机器人程序是否处于暂停状态:

is_program_paused = get_rtde_value("runtime_state") == 4

URScript 控制 API 也封装了此功能。

 

自动启动逻辑程序

您可以选择在加载应用程序时自动启动某个程序。 当您选择“ 自动 启动”选项时,应用程序加载完成后,逻辑程序将立即启动。

您还可以设置在机器人控制器通电且加载了上一个应用程序时,自动启动逻辑程序。

自动 启动”功能无论在何种运行模式下,无论机械臂处于何种状态,均可正常工作。 当加载时触发“自动启动”功能,系统会显示一条Snackbar通知,确认逻辑程序已启动。

 

 

逻辑程序”图标 上的侧边栏图标始终显示程序的当前状态,无论是正在运行还是已停止。

您有责任确保在机器人通电以及加载不同应用程序时,逻辑程序是安全的。

逻辑程序可通过有线或PLC连接(Modbus、PROFINET、Ethernet/IP、Socket、直接输出或其他接口)来启用和停用外部设备。

 

模块和线程

逻辑程序的功能可以组织成各个函数。 其工作原理与机器人程序中的操作方式相同。

每个功能都可以标记为一个 “线程”。 默认情况下,线程仅执行一次。 选中线程功能上的“ 循环 ”复选框,以使线程持续运行。

 

资源共享

虽然机器人程序和逻辑程序是独立执行的,各自拥有独立的线程池和变量池,但它们共享相同的硬件资源。 这会带来一些限制,程序员应予以注意:

  • 逻辑程序线程与机器人程序在同一 CPU 上执行。 所有逻辑程序线程的执行时间将累加到所有机器人程序线程的执行时间中。 在极端情况下,这可能会导致“运行时滞后过多”的违规情况。

  • 某些通信资源(如 Modbus 信号或通用寄存器)属于共享资源。 同时向同一寄存器写入数据将导致意外结果。 此外,随着底层实现的优化,当前观察到的行为在未来可能会发生变化。

  • Modbus — 共享一个 Modbus 客户端。 在任一程序中创建的信号在另一个程序中均可看到。

  • Ethernet/IP 灵活适配器 — 每个程序都会针对同一实例打开自己的读取或写入句柄。 处理程序不得写入相同的数据字段。

 

限制

  • 在逻辑程序中,仅支持部分 URScript 指令。

  • 逻辑程序不支持程序执行指示符和基于断点的调试。

  • 逻辑程序不支持解释器模式。 不过,在逻辑程序运行期间,仍可在机器人程序中启动解释器模式。