[西门子] KUKA机器人KRL :实现变量、常量、信号及用户自定义数据类型的全局可用性

[复制链接]
查看59 | 回复0 | 2025-3-30 15:08:18 | 显示全部楼层 |阅读模式
>

实现变量、常量、信号及用户自定义数据类型的全局可用性

在编程中,若需使‌变量、常量、信号‌和‌用户自定义数据类型‌在全局范围内可访问(例如跨函数、模块或程序使用),需通过以下方式声明:

  1. 全局声明语法‌:

    textCopy Code

    DECL GLOBAL <数据类型> <名称> = <初始值>   ; 变量/常量  
    DECL GLOBAL SIGNAL <信号名称>              ; 信号  
    DEKLARIERE GLOBAL <自定义类型名称>         ; 用户自定义类型(示例)  

  2. 应用场景‌:

    • 变量/常量‌:需在多线程或子程序中共享数据时(如机器人轴参数)。
    • 信号‌:跨程序模块控制硬件I/O或状态同步(如传感器信号)。
    • 用户自定义类型‌:统一复杂数据结构(如机器人位姿或工具配置)。
  3. 注意事项‌:

    • 全局变量需谨慎使用,避免命名冲突或意外修改。
    • KUKA机器人编程中,全局信号需在配置文件中预先定义。

通过数据列表实现对象的全局可用性

  1. 在程序头的数据列表中添加关键字 PUBLIC

    textCopy Code

    DEFDAT MY_PROG PUBLIC  ; 定义名为 MY_PROG 的公共数据列表  

  2. 声明时使用关键字 GLOBAL
    示例(变量声明):

    textCopy Code

    DEFDAT MY_PROG PUBLIC  
    EXTERNAL DECLARATIONS      ; 外部声明  
    DECL GLOBAL INT counter    ; 声明全局整型变量 counter  
    ...  
    ENDDAT  


关键规则说明

  • GLOBAL 的作用范围‌:
    仅当变量、信号或用户自定义类型在数据列表中声明时,才能使用 GLOBAL 关键字将其设为全局可用。

  • PUBLIC 的用途‌:
    PUBLIC 必须与 GLOBAL 结合使用,‌仅用于在数据列表中声明全局数据对象‌。单独使用 PUBLIC 无实际效果。

$CONFIG.DAT 

在 $CONFIG.DAT 文件的 USER GLOBALS 部分声明对象

  • 方法‌:
    在 $CONFIG.DAT 文件的 USER GLOBALS(用户全局变量)段中直接声明对象。
    无需且不可使用 GLOBAL 关键字‌。

  • 示例‌:


    ; $CONFIG.DAT  
    USER GLOBALS  
    INT global_counter = 0  ; 自动全局可用  
    REAL position_offset    ; 无需 GLOBAL 关键字  
    ...  


规则说明

  1. USER GLOBALS 的特殊性‌:

    • 在 $CONFIG.DAT 文件的此部分声明的变量、信号或类型‌自动全局可见‌。
    • 禁止使用 GLOBAL 关键字‌,否则会导致语法错误。
  2. 适用场景‌:

    • 适用于系统级全局配置(如机器人坐标系偏移、默认参数)。

术语对照

  • $CONFIG.DAT
     → (KUKA 机器人标准配置文件)。
  • USER GLOBALS
     → (用户全局变量声明段)。

数据类型使用限制

若在数据列表中通过 GLOBAL 关键字定义的数据类型(如枚举、结构体),‌不可在 $CONFIG.DAT 文件中使用‌,否则编译器会报错 Typ unbekannt(类型未知)。


示例分析

  1. 在数据列表 PROG() 中定义全局枚举类型‌:


    DEFDAT PROG()  
    GLOBAL ENUM SWITCH_TYP ON, OFF  ; 定义全局枚举类型  
    ...  

  2. 尝试在 $CONFIG.DAT 中使用该类型‌:


    DEFDAT $CONFIG  
    DECL SWITCH_TYP MY_VAR          ; 错误:SWITCH_TYP 在此处未定义  

    编译器报错‌:Typ unbekannt: SWITCH_TYP


根本原因

  • 作用域隔离‌:
    $CONFIG.DAT 文件与普通数据列表(如 PROG())‌属于不同的作用域‌,无法直接共享通过 GLOBAL 定义的类型。

  • 编译依赖‌:
    全局类型仅在定义它的数据列表及其关联程序中可见,$CONFIG.DAT 无法自动跨文件引用这些类型。


解决方案

若需在 $CONFIG.DAT 中使用自定义类型,需直接在 $CONFIG.DAT 的 USER GLOBALS 段中定义该类型:

textCopy Code

DEFDAT $CONFIG  
USER GLOBALS  
ENUM SWITCH_TYP ON, OFF  ; 在 $CONFIG.DAT 中定义类型  
DECL SWITCH_TYP MY_VAR   ; 正常声明变量  


关键规则

  • 避免跨文件类型引用‌:
    在数据列表中通过 GLOBAL 定义的类型仅适用于当前程序或关联模块,‌不可用于系统级配置文件(如 $CONFIG.DAT‌。

  • 全局类型统一管理‌:
    系统级配置的公共类型应直接在 $CONFIG.DAT 中声明。




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则