最新电影在线观看,jrs低调看直播,avav天堂,囯产精品宾馆在线精品酒店,亚洲精品成人区在线观看

KUKA 機器人消息庫(MsgLib)程序詳解與調用指南

一、程序概述

該程序是一個基于 KUKA 機器人編程語言(KRL,KUKA Robot Language)的消息處理庫,用于在機器人程序運行過程中生成、管理各類交互消息(如通知、提示、錯誤、對話框等)。通過封裝標準化的消息處理邏輯,簡化了開發者與機器人用戶的交互設計,支持消息參數化、日志記錄、程序控制等功能。

二、核心接口與功能概覽

程序提供了 7 個核心全局子程序 / 函數,覆蓋不同類型的消息需求,具體如下:

三、通用參數解釋

各函數的參數存在共性,核心參數定義如下:

四、核心函數詳解

1. MsgNotify通知消息功能

生成非阻塞的通知消息,用于提示信息(如運行狀態、警告等),不暫停程序執行。

代碼邏輯

GLOBAL DEF MsgNotify(sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, nMsgNr:IN,MsgOpt:IN)
  ; 1. 處理MsgOpt默認值(若參數無效則設為默認:VL_Stop=TRUE, Clear_P_Reset=TRUE, Log_To_DB=FALSE)
  ; 2. 校驗并截斷消息文本(sText[]最大80字符,sModul[]最大24字符)
  ; 3. 處理參數插入:若nNumPar有效則替換%1為數值,否則替換為sTextPar[]文本
  ; 4. 調用系統函數Set_KrlMsg生成#NOTIFY類型消息
END

示例

MsgNotify("this is a notify message") ; 簡單通知
MsgNotify("this is a %1 notify message", "Tech", , "asd") ; 帶文本參數的通知(%1替換為"asd")

2. MsgQuit:退出消息

功能生成阻塞的退出消息,程序會暫停并等待消息被處理(如用戶確認)后再繼續執行。

代碼邏輯

GLOBAL DEF MsgQuit(sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, nMsgNr:IN,MsgOpt:IN)
  ; 1. 同MsgNotify的參數處理(默認值、文本截斷、參數插入)
  ; 2. 調用Set_KrlMsg生成#QUIT類型消息
  ; 3. 循環等待消息處理完成(通過Exists_KrlMsg檢查消息句柄是否存在)
  WHILE ( Exists_KrlMsg(nHandle) )
    WAIT sec 0.1
  ENDWHILE
END

示例

MsgQuit("this is a quit message", "myMod") ; 簡單退出消息
INT myInt=123
MsgQuit("this is the %1 quit message", "Module", myInt) ; 帶數值參數(%1替換為123)

3. MsgState:狀態消息

功能生成狀態類消息,返回消息句柄(nHandle),用于后續通過句柄管理消息(如更新、清除)。

代碼邏輯

GLOBAL DEF MsgState(nHandle:OUT, sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, nMsgNr:IN,MsgOpt:IN)
  ; 1. 同MsgNotify的參數處理
  ; 2. 調用Set_KrlMsg生成#STATE類型消息,返回句柄到nHandle
END

用途

適用于需要持續顯示并動態更新的狀態信息(如進度、實時數據),通過句柄可后續操作消息。

4. MsgLoop:循環消息

功能

生成持續顯示的循環消息(如 “運行中...”),發送空字符串可取消消息。

代碼邏輯

GLOBAL DEF MsgLoop(sText[]:IN,sModul[]:IN)
  ; 1. 截斷文本(sText[]最大80字符,sModul[]默認"Appl")
  ; 2. 若消息文本非空且含有效字符,調用MsgState生成循環消息
  ; 3. 若消息文本為空或僅空格,清除已有的循環消息(通過句柄lnHandle)
END

示例

MsgLoop("this is the loop message") ;

顯示循環消息MsgLoop(" "); 取消循環消息

5. MsgDialog:對話框消息

功能

生成帶軟鍵的交互式對話框,等待用戶選擇后返回結果(nAnswer),支持最多 7 個軟鍵選項。

代碼邏輯

GLOBAL DEF MsgDialog(nAnswer:OUT,sText[]:IN,...sDialogSK7[]:IN,NoBrakes:IN, nMsgNr:IN,MsgOpt:IN)
  ; 1. 處理MsgOpt默認值和文本截斷
  ; 2. 配置軟鍵(sDialogSK1到sDialogSK7),設置軟鍵文本(最大24字符)
  ; 3. 調用系統函數SET_KRLDLG生成對話框消息
  ; 4. 循環等待用戶選擇(通過Exists_KrlDlg檢查對話框狀態)
  ; 5. 若NoBrakes=TRUE,保持機器人剎車松開(不鎖軸)
END

示例

MsgDialog(DialogAnswer, "StartPTP", "CrossMeld", "Achse 3", "YES", "NO", "Cancel") ;

 對話框消息文本為"StartPTP",模塊"CrossMeld",參數"Achse 3",軟鍵為YES/NO/Cancel;

用戶選擇后,DialogAnswer返回對應軟鍵索引(如1=YES,2=NO)

6. MsgNotifyTextPar 與 MsgQuitTextPar:帶多文本參數的消息

功能

支持 2 個文本參數的通知 / 退出消息(%1和%2占位符),當nNumPar=0時啟用文本參數,nNumPar>0時啟用數值參數。

代碼邏輯

GLOBAL DEF MsgNotifyTextPar(...)
  ; 1. 同MsgNotify的參數處理
  ; 2. 若nNumPar=0,替換%1為sTextPar[],%2為sTextPar2[]
  ; 3. 若nNumPar>0,替換%1為數值nNumPar
  ; 4. 調用Set_KrlMsg生成#NOTIFY類型消息
END

示例

MsgNotifyTextPar("Error: %1 - %2", "CrossMeld", 0, "Sensor", "Disconnected", 511);

消息文本為"Error: Sensor - Disconnected",模塊"CrossMeld",編號511

7. CheckOfMsgOpt:消息選項校驗函數

功能

校驗MsgOpt結構體參數的有效性,為未定義或無效的成員設置默認值。

碼邏輯

DEFFCT KrlMsgOpt_TCheckOfMsgOpt(LocalMsgOpt:IN)
  ; 1. 檢查VL_Stop:無效則設為TRUE
  ; 2. 檢查Clear_P_Reset:無效則設為TRUE
  ; 3. 檢查Log_To_DB:無效則設為FALSE
  ; 4. 返回校驗后的MsgOpt
ENDFCT

作用確保所有消息選項有合理默認值,避免因參數缺失導致的程序錯誤。

五、關鍵技術細節

文本長度控制:所有文本參數(如sText[]、sModul[])均有長度限制,超過部分會被截斷(如sText[]最大 80 字符),避免消息顯示異常。

參數占位符:通過%1(單參數)或%1+%2(雙參數)在消息文本中插入動態內容,支持數值(nNumPar)或文本(sTextPar[])參數。

阻塞與非阻塞非阻塞:MsgNotifyMsgStateMsgLoop不暫停程序;阻塞:MsgQuitMsgDialog會等待消息處理完成后再繼續。

消息管理:通過句柄(nHandle)標識消息,可通過系統函數(如Exists_KrlMsg、Clear_KrlMsg)檢查或清除消息。

日志與控制MsgOpt.Log_To_DB控制消息是否記錄到系統日志;MsgOpt.VL_Stop控制是否觸發程序提前停止。

六、程序用途與優勢

標準化交互:統一消息格式和處理邏輯,簡化機器人程序的用戶交互設計。

靈活參數化:支持動態插入數值 / 文本參數,適應不同場景的消息需求(如錯誤詳情、狀態數據)。

程序控制:通過MsgOpt靈活配置消息是否阻塞、是否記錄日志、是否自動清除,平衡交互體驗與系統性能。

多場景支持:覆蓋通知、警告、錯誤、狀態顯示、用戶確認等多種交互場景,滿足機器人調試、運行、維護全流程需求。

七、消息函數調用指南

一、調用前的準備

確保消息庫已加載該消息庫(MsgLib)需作為子程序被主程序或其他模塊引用,通常通過 EXTERN 聲明或在程序頭文件中包含,確保機器人系統能識別這些全局函數。

參數格式要求

字符串參數(如 sText[]、sModul[])需用雙引號包裹(如 "Error")。

數值參數(如 nNumPar、nMsgNr)直接傳遞數字(如 123)。

可選參數可省略(用逗號分隔占位),系統會自動使用默認值。

二、常用函數調用

示例

1. MsgNotify:發送通知消息(非阻塞)

用途:提示運行狀態、警告等,不暫停程序。

示例:; 簡單通知(僅消息文本)

MsgNotify("系統啟動中...");

帶模塊名和數值參數(%1替換為數值)

INT temp = 35

MsgNotify("溫度警告:當前%1℃", "溫控模塊", temp)

; 帶文本參數(%1替換為文本)

MsgNotify("傳感器%1連接正常", "檢測模塊", , "A1")

2. MsgQuit:發送退出消息(阻塞)

用途:提示嚴重信息(如錯誤),程序暫停等待處理后再繼續。

示例:

; 簡單退出消息MsgQuit("程序執行完成", "主模塊"); 

帶消息編號和選項(不記錄日志)

KrlMsgOpt_T opt

opt.Log_To_DB = FALSE  ; 不寫入日志

MsgQuit("機械臂到達極限位置", "運動模塊", , , 5001, opt)

3. MsgDialog:顯示對話框(等待用戶選擇)

用途:需要用戶確認或選擇的場景(如確認啟動、選擇模式)。

示例:

INT answer  ; 存儲用戶選擇結果(1~7對應7個軟鍵)

; 帶3個軟鍵的對話框(YES/NO/Cancel)

MsgDialog(answer, "是否執行自動上料?", "上料模塊", , "YES", "NO", "Cancel");

根據用戶選擇執行不同邏輯

IF answer == 1 THEN  ; 用戶選擇第一個軟鍵"YES" 

PTP HOME

AUTO_LOAD()  ; 調用自動上料程序

ELSEIF answer == 2 THEN  ; 用戶選擇"NO"

MsgNotify("取消自動上料", "上料模塊")

ENDIF

4. MsgLoop:顯示循環消息(持續提示)

用途:程序運行中持續顯示狀態(如 “運行中”),完成后取消。

示例:

; 開始循環顯示"抓取中..."

MsgLoop("抓取中...", "抓取模塊")

; 執行抓取動作(耗時操作)

; 完成后取消循環消息(傳遞空字符串)

MsgLoop(" ", "抓取模塊")

5. MsgNotifyTextPar:帶多文本參數的通知

用途:

消息文本中需要插入 2 個文本參數(%1 和 %2)。

示例:

; %1替換為"傳送帶A",%2替換為"堵塞"

MsgNotifyTextPar("設備%1發生%2故障", "物流模塊", 0, "傳送帶A", "堵塞")

6. MsgState:生成狀態消息(返回句柄)

用途:

需要后續管理的狀態消息(如動態更新、手動清除)。

示例:

INT msg_handle  ; 消息句柄

; 生成狀態消息并獲取句柄

MsgState(msg_handle, "焊接進度:30%", "焊接模塊")

; (后續邏輯)更新進度后清除舊消息,顯示新消息

WAIT SEC 5

Clear_KrlMsg(msg_handle)  

; 清除舊消息MsgState(msg_handle, "焊接進度:60%", "焊接模塊")

三、參數傳遞技巧

省略可選參數

函數的可選參數(如 nMsgNr、MsgOpt)可省略,只需用逗號占位。例如:

; 省略nNumPar、sTextPar、nMsgNr,僅傳遞必要參數

MsgNotify("操作完成", "主模塊", , , , )

使用消息編號(nMsgNr)

為消息分配編號(如錯誤碼),便于日志檢索和問題定位:

MsgQuit("伺服電機故障", "驅動模塊", , , 1002)  ; 1002為自定義故障碼

配置消息選項(MsgOpt)

通過 MsgOpt 控制消息行為(如是否暫停、是否記錄日志):

KrlMsgOpt_T opt

opt.VL_Stop = FALSE  ; 不觸發程序提前停止

opt.Log_To_DB = TRUE  ; 寫入系統日志

MsgNotify("電量低", "電源模塊", , , , opt)

四、注意事項

文本長度限制

sText[] 最大 80 字符,sModul[] 最大 24 字符,超出部分會被截斷。

阻塞函數的影響

MsgQuit 和 MsgDialog 會暫停程序執行,直到消息被處理(如用戶確認),需合理安排調用時機,避免影響生產效率。

循環消息的取消

MsgLoop 必須通過傳遞空字符串(" ")取消,否則會一直顯示。

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 1
收藏 1
關注 26
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧