簡體   English   中英

庫卡機器人語言(KRL)中WAIT FOR語句的奇怪錯誤

[英]A strange error about the WAIT FOR statement in KUKA Robot Language(KRL)

當程序到達“WAIT FOR”(server.src,第 11 行)時,機器人停止。 並且必須按下“START”按鈕才能繼續運行。 當程序到達“WAIT FOR”時,我需要做什么來防止機器人停止? 我使用的是 EthernetKRL 包,源文件如下:

連接.xml:

<ETHERNETKRL>
  <CONFIGURATION>
    <EXTERNAL>
      <IP>172.31.55.5</IP>
      <PORT>60000</PORT>
      <TYPE>Client</TYPE>
    </EXTERNAL>
    <INTERNAL>
      <ENVIRONMENT>Program</ENVIRONMENT>
      <BUFFERING Mode="FIFO" Limit="10"/>
      <BUFFSIZE Limit="16384"/>
      <IP>172.31.55.6</IP>
      <PORT>54601</PORT>
      <PROTOCOL>TCP</PROTOCOL>
      <MESSAGES Logging="error" Display="disabled"/>
    </INTERNAL>
  </CONFIGURATION>
  <RECEIVE>
    <XML>
      <ELEMENT Tag="Robot/Pos/X" Type="REAL" />
      <ELEMENT Tag="Robot/Pos/Y" Type="REAL" />
      <ELEMENT Tag="Robot/Pos/Z" Type="REAL" />
      <ELEMENT Tag="Robot/Pos/A" Type="REAL" />
      <ELEMENT Tag="Robot/Pos/B" Type="REAL" />
      <ELEMENT Tag="Robot/Pos/C" Type="REAL" />
      <ELEMENT Tag="Robot/ready" Type="BOOL" />
      <ELEMENT Tag="Robot/chuck" Type="BOOL" />
      <ELEMENT Tag="Robot/readRobotStatus" Type="BOOL" Set_Out="14"/>
      <ELEMENT Tag="Robot/onlySetIO" Type="BOOL" Set_Out="15"/>
      <ELEMENT Tag="Robot" Set_Flag="14" />
    </XML>
  </RECEIVE>
  <SEND>
    <XML>
      <ELEMENT Tag="Robot/Pos/X" />
      <ELEMENT Tag="Robot/Pos/Y" />
      <ELEMENT Tag="Robot/Pos/Z" />
      <ELEMENT Tag="Robot/Pos/A" />
      <ELEMENT Tag="Robot/Pos/B" />
      <ELEMENT Tag="Robot/Pos/C" />
      <ELEMENT Tag="Robot/ready" />
      <ELEMENT Tag="Robot/chuck" />
      <ELEMENT Tag="Robot/readRobotStatus" />
      <ELEMENT Tag="Robot/onlySetIO" />
    </XML>
  </SEND>
</ETHERNETKRL>

服務器.src:

&ACCESS RVP
&REL 3
&PARAM DISKPATH = KRC:\R1\Program
DEF SERVER()

RET=EKI_Init("CONNECT")
RET=EKI_Open("CONNECT")

LOOP

WAIT FOR $OUT[14]==TRUE 
    
$OUT[14]=FALSE

$TOOL = tool_data[4]
$LOAD = load_data[4]
$BASE = base_data[4]

RET=EKI_GetBool("CONNECT","Robot/readRobotStatus",READROBOTSTATUS)

IF READROBOTSTATUS==TRUE THEN
RET=EKI_SetReal("CONNECT","Robot/Pos/X",$POS_ACT.X)
RET=EKI_SetReal("CONNECT","Robot/Pos/Y",$POS_ACT.Y)
RET=EKI_SetReal("CONNECT","Robot/Pos/Z",$POS_ACT.Z)
RET=EKI_SetReal("CONNECT","Robot/Pos/A",$POS_ACT.A)
RET=EKI_SetReal("CONNECT","Robot/Pos/B",$POS_ACT.B)
RET=EKI_SetReal("CONNECT","Robot/Pos/C",$POS_ACT.C)
RET=EKI_SetBool("CONNECT","Robot/chuck",$OUT[2])
RET=EKI_SetBool("CONNECT","Robot/ready",$OUT[1])
RET=EKI_Send("CONNECT","Robot")

ELSE
RET=EKI_GetBool("CONNECT","Robot/onlySetIO",ONLYSETIO)

IF ONLYSETIO==TRUE THEN
RET=EKI_GetBool("CONNECT","Robot/chuck",$OUT[2])
RET=EKI_Send("CONNECT","Robot")

ELSE
RET=EKI_GetReal("CONNECT","Robot/Pos/X",POS_FR.X)
RET=EKI_GetReal("CONNECT","Robot/Pos/Y",POS_FR.Y)
RET=EKI_GetReal("CONNECT","Robot/Pos/Z",POS_FR.Z)
RET=EKI_GetReal("CONNECT","Robot/Pos/A",POS_FR.A)
RET=EKI_GetReal("CONNECT","Robot/Pos/B",POS_FR.B)
RET=EKI_GetReal("CONNECT","Robot/Pos/C",POS_FR.C)

LIN POS_FR


RET=EKI_Send("CONNECT","Robot")
ENDIF

ENDIF

ENDLOOP

RET=EKI_Close("CONNECT")
RET=EKI_Clear("CONNECT")
END

服務器.dat:

&ACCESS RVP
&REL 3
&PARAM DISKPATH = KRC:\R1\Program
DEFDAT  server PUBLIC
DECL EKI_STATUS RET
DECL BOOL READROBOTSTATUS=TRUE
DECL BOOL ONLYSETIO=FALSE
;DECL REAL POS_X=100
;DECL REAL POS_Y=100
;DECL REAL POS_Z=100
;DECL REAL POS_A=100
;DECL REAL POS_B=100
;DECL REAL POS_C=100
DECL FRAME POS_FR={X 100.000,Y 100.000,Z 50.0000,A 0.0,B 50.0000,C 30.0000}
DECL BASIS_SUGG_T LAST_BASIS={POINT1[] "P0",POINT2[] "P0",CP_PARAMS[] "CPDAT0",PTP_PARAMS[] "PDAT0",CONT[] " ",CP_VEL[] "2.0",PTP_VEL[] " 100",SYNC_PARAMS[] "SYNCDAT",SPL_NAME[] "S0",A_PARAMS[] "ADAT0"}

DECL INT cnt

ENDDAT

我的目的是使用計算機作為客戶端,我希望機器人作為服務器。 當計算機向機器人發送數據時,$OUT[14]=TRUE,然后機器人將數據返回給計算機。 如果有人可以幫助我,我將不勝感激。

我相信這個問題與運行模式的“On Path”要求有關。

為了讓機器人真正進入自動模式,機器人必須處於“On Path”狀態。 您之前在運行程序時可能已經看到這一點,該程序會在消息橫幅中彈出一個提到“在路徑”的通知。 'On Path' 意味着機器人在一個編程的路徑上,而不是“漂浮在空間中”。 例如,可以在機器人處於某個隨機慢跑姿勢時啟動程序,並且機器人程序希望機器人在讓自動模式接管之前移動到編程姿勢。

我建議您的程序做的第一件事就是將機器人搬回家。 如果您不希望機器人在程序開始時移動到定義的位置,您可以使用以下代碼欺騙系統:

BAS(#INITMOV, 0) ;Initialize default motion parameters like acceleration and speed.
PTP $AXIS_ACT ;Move the robot to its current position.

$AXIS_ACT是一個全局 E6AXIS 變量,用於保存機器人當前位置,因此通過在程序開始時告訴機器人 PTP 在那里,它實際上是命令機器人移動到它已經所在的位置,從而使機器人“在路徑上” . 一旦它運行了那條線,你再次點擊 Go,那么它應該是全自動的,不再停止。

我會嘗試一下,看看它是否有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM