0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

KUKA機器人socket通訊配置方法

指南車機器人科技 ? 來源:不知名網(wǎng)友i ? 2024-10-31 10:27 ? 次閱讀

以下文章來源于不知名網(wǎng)友i,作者不知名網(wǎng)友i

軟件支持

庫卡軟件包支持:

需要KUKA.Ethernet KRL,具體小版本根據(jù)系統(tǒng)而定。

測試環(huán)境:

虛擬機:VM17Pro

示教器:Officelite v8.6.7

編程:Workvisual v6.3.0

電腦:w11 python(測試) socketTool(測試)

配置方法

庫卡 socket 一切關于 socket 配置的操作,都基于一個或多個 xml 文件。

7ffd310e-966b-11ef-a511-92fbcf53809c.png

軟件安裝后自帶的一些 demo 和文檔,本文不過多概述。

關于 xml 文件的參數(shù)解析:

基于VST_Ethernet_KRL_31_zh,文中未提及的皆為可選參數(shù),具體請參閱手冊

連接

8017b376-966b-11ef-a511-92fbcf53809c.png



Server
 


 

 
192.1.10.20
 
54600
 
TCP



接收數(shù)據(jù)
















 




發(fā)送數(shù)據(jù)



 












實戰(zhàn)起!

我的 xml 文件,作用:接收位置數(shù)據(jù)并只回復狀態(tài)。




192.168.0.1
59152














802c4dea-966b-11ef-a511-92fbcf53809c.png

關于EKI的一些函數(shù)

程序說明:

1、接收上位機發(fā)送的 xyz 位置變量,歐拉角使用當前自身位置,得到后賦值到位置變量數(shù)組。DECL FRAME POS_DATA[1000]位置變量聲明于 config 中。

803113d4-966b-11ef-a511-92fbcf53809c.png

SRC

80360362-966b-11ef-a511-92fbcf53809c.png

DAT

&ACCESS RVP
DEF  RECE_MAIN ( )

   ;FOLD INI;%{PE}
      ;FOLD BASISTECH INI
         GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
         INTERRUPT ON 3
         BAS (#INITMOV,0 )
      ;ENDFOLD (BASISTECH INI)
      ;FOLD USER INI
         ;Make your modifications here

      ;ENDFOLD (USER INI)
   ;ENDFOLD (INI)

   ;FOLD SPTP HOME Vel=100 % DEFAULT ;%{PE}
      ;FOLD Parameters ;%{h}
         ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=HOME; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=DEFAULT; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP
      ;ENDFOLD
      SPTP XHOME WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FHOME), $BASE = SBASE(FHOME.BASE_NO), $IPO_MODE = SIPO_MODE(FHOME.IPO_FRAME), $LOAD = SLOAD(FHOME.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PDEFAULT), $APO = SAPO_PTP(PDEFAULT), $GEAR_JERK[1] = SGEAR_JERK(PDEFAULT), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0)
   ;ENDFOLD
   ACT_POS = $POS_ACT
   INIT_DATA()
   GET_DATA()
   ;wait until data read

   RET=EKI_Close("XmlCallBack")
   RET=EKI_Clear("XmlCallBack")

   RUN_ROBOT()
END

DEF INIT_DATA()
   RET=EKI_Init("XmlCallBack")
   RET=EKI_Open("XmlCallBack")
   RET = EKI_SEND("XmlCallBack", "Status 200")

   ; INIT
   save_index = 1
   FOR i=1 TO (1000)
      POS_DATA[i]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0}
   ENDFOR
   valueFrame={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0}
END

DEF GET_DATA()

   LOOP

      Wait for $Flag[1]
      ;SET_VALUE
      RET=EKI_GetFrame("XmlCallBack","Sensor/Read/xyzabc",valueFrame)
      IF (valueFrame.X <> 666.666) and (valueFrame.Y <> 666.666) THEN
         POS_DATA[save_index] = valueFrame
         POS_DATA[save_index].A = ACT_POS.A
         POS_DATA[save_index].B = ACT_POS.B
         POS_DATA[save_index].C = ACT_POS.C
         save_index = save_index + 1
         $Flag[1]=False
      ELSE
         EXIT
      ENDIF
      RET = EKI_SEND("XmlCallBack", "Status 200")
   ENDLOOP

END

DEF RUN_ROBOT()
   DECL FRAME XMOVE_POS
   LOOP
      FOR i=1 TO (1000)
         XMOVE_POS = POS_DATA[i]

         ;FOLD SLIN MOVE_POS Vel=2 m/s CPDAT1 Tool[1] Base[0] ;%{PE}
            ;FOLD Parameters ;%{h}
               ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=MOVE_POS; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT1; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN
            ;ENDFOLD
            SLIN XMOVE_POS WITH $VEL = SVEL_CP(2.0, , LCPDAT1), $TOOL = STOOL2(FMOVE_POS), $BASE = SBASE(FMOVE_POS.BASE_NO), $IPO_MODE = SIPO_MODE(FMOVE_POS.IPO_FRAME), $LOAD = SLOAD(FMOVE_POS.TOOL_NO), $ACC = SACC_CP(LCPDAT1), $ORI_TYPE = SORI_TYP(LCPDAT1), $APO = SAPO(LCPDAT1), $JERK = SJERK(LCPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0)
         ;ENDFOLD
         IF (POS_DATA[i + 1].X == 0) AND (POS_DATA[i + 1].Y == 0) THEN
            EXIT
         ENDIF
      ENDFOR
   ENDLOOP
END
&ACCESS RVP
DEFDAT rece_main
   ;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P
   ;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P
   EXT  BAS (BAS_COMMAND  :IN,REAL  :IN )
   DECL INT SUCCESS
   ;ENDFOLD (BASISTECH EXT)
   ;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P
   ;Make your modifications here

   ;ENDFOLD (USER EXT)
   ;ENDFOLD (EXTERNAL DECLARATIONS)
   INT i, save_index
   DECL EKI_STATUS RET
   FRAME ValueFrame
   DECL E6POS ACT_POS
   DECL MODULEPARAM_T LAST_TP_PARAMS = {PARAMS[] "Kuka.VelocityFieldEnabled=False; Kuka.ColDetectFieldEnabled=False; Kuka.MovementParameterFieldEnabled=False; Kuka.IsAngleEnabled=False; Kuka.PointName=MOVE_POS; Kuka.FrameData.base_no=0; Kuka.FrameData.tool_no=1; Kuka.FrameData.ipo_frame=#BASE; Kuka.isglobalpoint=False; Kuka.MoveDataName=CPDAT1; Kuka.MovementData.cb={AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}; Kuka.MovementData.apo_fac=50; Kuka.MovementData.apo_dist=500; Kuka.MovementData.axis_acc=100; Kuka.MovementData.axis_vel=100; Kuka.MovementData.circ_typ=#BASE; Kuka.MovementData.jerk_fac=50; Kuka.MovementData.ori_typ=#VAR; Kuka.MovementData.vel=2; Kuka.MovementData.acc=100; Kuka.MovementData.exax_ign=0; Kuka.VelocityPath=2; Kuka.BlendingEnabled=False; Kuka.APXEnabled=False; Kuka.CurrentCDSetIndex=0"}
   DECL LDAT LCPDAT1 = {CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}},APO_FAC 50.0,APO_DIST 500,AXIS_ACC 100.0,AXIS_VEL 100.0,CIRC_TYP #BASE,JERK_FAC 50.0,ORI_TYP #VAR,VEL 2,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0}
   DECL FDAT FMOVE_POS = {BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "}
ENDDAT

程序關鍵點說明

1、xml 文件編輯完成后必須放置在C:KRCROBOTERConfigUserCommonEthernetKRL中

80499ef4-966b-11ef-a511-92fbcf53809c.png

并且程序中EKI函數(shù)傳參時傳入的為 xml 文件名。

2、必須聲明EKI函數(shù) DECL EKI_STATUS RET

805f2e7c-966b-11ef-a511-92fbcf53809c.png

在正確的位置使用相關函數(shù),初始化、連接、發(fā)送等

3、使用正確的 GETSET 函數(shù)

8072b8d4-966b-11ef-a511-92fbcf53809c.png

例如我是需要獲取位置變量,那么我直接是使用了GetFrame函數(shù),如果是字符串則是GETSTRING,整數(shù)、實數(shù)、布爾等同理。

4、如果你是接收或發(fā)送的字符串,注意庫卡中并沒有 String 類型變量,需要使用的字符數(shù)組char[],并且字符數(shù)組下標從 1 開始。

DECLCHARTEST_STR[20]聲明了長度為20的字符數(shù)組
DECLCHARTEST_STR1[1]

TEST_STR="ABC"
TEST_STR1[1]=TEST_STR[2]
這樣賦值到,TEST_STR1[1]值為B

5、合理使用 flag 標志,像我的代碼中我只使用了接收到信息的標志,這是不對的,現(xiàn)在代碼在創(chuàng)建連接后會直接發(fā)送信息,但是可能會出現(xiàn)上位機并未運行等情況,所以需要正確的使用標志位

8085b830-966b-11ef-a511-92fbcf53809c.png




192.168.0.1
59152















6、更多信息請參閱文檔。

python 發(fā)送 xml 完成通訊

importsocket
importtime


#創(chuàng)建Socket服務器
defstart_server():
#創(chuàng)建一個IPv4(AF_INET)和TCP(SOCK_STREAM)的socket對象
server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#綁定服務器地址和端口
server_address=('0.0.0.0',59152)
print(f"啟動服務器,監(jiān)聽地址:{server_address[0]}:{server_address[1]}")
server_socket.bind(server_address)

#監(jiān)聽客戶端連接,最大連接數(shù)為1
server_socket.listen(1)

print("等待客戶端連接...")
#接受客戶端連接
client_socket,client_address=server_socket.accept()
try:
print(f"客戶端連接成功:{client_address}")

foriinrange(1000):
send_data(client_socket,i+1,i-1)
print(client_socket.recv(1024),i)
#time.sleep(3)
send_data(client_socket,666.666,666.666)

finally:
#關閉客戶端連接
client_socket.close()
print(f"已斷開客戶端:{client_address}")

defsend_data(socket_client,x,y):
#定義XML數(shù)據(jù)
xml_data=f'''



'''

#發(fā)送XML數(shù)據(jù)到客戶端
socket_client.sendall(xml_data.encode('utf-8'))
print(f"已發(fā)送數(shù)據(jù):
{xml_data}")



#啟動服務器
if__name__=="__main__":
start_time=time.time()
start_server()
end_time=time.time()

print(f'耗時:{end_time-start_time}')

發(fā)送 xml 格式,注意格式,否則無法解析。






測試

809e255a-966b-11ef-a511-92fbcf53809c.png

80bf4a46-966b-11ef-a511-92fbcf53809c.png

80ca6ba6-966b-11ef-a511-92fbcf53809c.png

80e68796-966b-11ef-a511-92fbcf53809c.png

80fc0e90-966b-11ef-a511-92fbcf53809c.png

這種寫法肯定不是最優(yōu)解,但是在 50 秒內(nèi)解析并保存完成了 1000 組位置數(shù)據(jù),歡迎大佬們有更好的方案一起討論,不喜勿噴。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器人
    +關注

    關注

    210

    文章

    28079

    瀏覽量

    205779
  • 電腦
    +關注

    關注

    15

    文章

    1676

    瀏覽量

    68591
  • 虛擬機
    +關注

    關注

    1

    文章

    903

    瀏覽量

    28014
  • KUKA
    +關注

    關注

    3

    文章

    217

    瀏覽量

    16469

原文標題:KUKA機器人socket通訊配置方法

文章出處:【微信號:指南車機器人科技,微信公眾號:指南車機器人科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    KUKA重型機器人

    這個是KUKA重型機器人處理和測量混凝土軌枕的視頻。處理得相當精細。真心值得愛好機器者和愛國者研究研究。
    發(fā)表于 02-03 15:18

    KUKA機器人控制柜三維模型

    尋求KUKA機器人控制柜三維模型,做方案有時需要用到,大家誰有可以給我發(fā)一份嗎?先謝謝了
    發(fā)表于 04-18 16:05

    KUKA機器人問題解答

    1 開機坐標系無效 世界坐標系是以槍頭為基點,在這種坐標系中機器人所有的動作都是按照以槍頭為頂點來完成移動,XYZ方向切割槍方向不改變,如果機器人在世界坐標系中移動,槍頭也隨著改變方向,那就是我們在
    發(fā)表于 07-15 07:48

    庫卡KUKA機器人四種啟動方式介紹

    庫卡KUKA機器人四種啟動方式1)自動運行說明 庫卡機器人處于自動運行時,先要在手動狀態(tài)時候選擇需要運行的程序,然后通過鑰匙開關切換機器人到自動運行狀態(tài),給
    發(fā)表于 09-04 15:45

    KUKA庫卡機器人伺服驅動器相關型號舉例

    KUKA庫卡機器人伺服驅動器(Servo Drive)是KUKA運動控制的重要組成部分,被普遍應用于工業(yè)機器人及數(shù)控加工中心等自動化設備中。是用來控制伺服電機的一種控制器,其作用類似于
    發(fā)表于 09-08 16:30

    KUKA焊接機器人伺服電機常見故障及維修處理

    KUKA焊接機器人伺服電機常見故障及維修處理1、庫卡機器人伺服電機的基本檢查由于庫卡機器人伺服電機內(nèi)含有精密檢測器,因此,當發(fā)生碰撞、沖擊時可能會引起故障,在對庫卡
    發(fā)表于 09-26 16:51

    工業(yè)機器人組成結構相關資料分享

    工業(yè)機器人是近兩年機械行業(yè)最熱的字眼,隨著企業(yè)工業(yè)機器人的增多,很多機械工程師對于工業(yè)機器人充滿了好奇。作為機器人四大家族之一的KUKA,已
    發(fā)表于 07-05 06:44

    庫卡機器人MGV電源模塊維修

    KUKA庫卡機器人MGV電源模塊維修PH1013-2840MGV電源維修 庫卡電源模塊維修 機器人電源模塊維修 庫卡控制器維修 KUKA電源維修KU
    發(fā)表于 09-08 07:30

    KUKA機器人伺服驅動模塊維修

    KUKA庫卡C4機器人驅動器故障報警維修庫卡機器人維修內(nèi)容包括庫卡機器人示教器維修,KUKA伺服驅動模塊維修,庫卡
    發(fā)表于 09-17 07:09

    沒有有前輩用LabVIEW控制kuka機器人c2的經(jīng)驗?通訊是怎么做到的?

    我看NI有Robotics Toolkit for KUKA KR C2的附加包,這個怎么用啊?如何和kuka機器人建立通訊???是Tcp接口嗎?
    發(fā)表于 10-21 20:59

    ABB機器人如何與相機詳細方法通訊圖文講解

    ABB機器人如何與相機通訊1)機器人與相機一般采用socket通訊(TCP/IP)。所以機器人
    的頭像 發(fā)表于 01-27 09:09 ?1.7w次閱讀
    ABB<b class='flag-5'>機器人</b>如何與相機詳細<b class='flag-5'>方法</b><b class='flag-5'>通訊</b>圖文講解

    KUKA機器人PN系統(tǒng)網(wǎng)絡故障的判斷方法

    KUKA機器人PN系統(tǒng)網(wǎng)絡故障的判斷方法說明。
    的頭像 發(fā)表于 03-11 10:08 ?3855次閱讀

    ?KUKA機器人固定焊鉗的銑削控制

    KUKA機器人固定焊鉗的銑削控制
    的頭像 發(fā)表于 04-13 11:36 ?796次閱讀

    KUKA工業(yè)機器人與S7-1200PLC實現(xiàn)Profinet通訊的步驟

    本次內(nèi)容來簡單談一談KUKA工業(yè)機器人與S7-1200PLC實現(xiàn)Profinet通訊的步驟。
    的頭像 發(fā)表于 07-05 10:10 ?6087次閱讀
    <b class='flag-5'>KUKA</b>工業(yè)<b class='flag-5'>機器人</b>與S7-1200PLC實現(xiàn)Profinet<b class='flag-5'>通訊</b>的步驟

    Kuka機器人配置Profinet通訊網(wǎng)關HT3S-PNS-ECS

    Kuka機器人配置Profinet通訊網(wǎng)關HT3S-PNS-ECS
    的頭像 發(fā)表于 06-13 15:52 ?611次閱讀
    <b class='flag-5'>Kuka</b><b class='flag-5'>機器人</b><b class='flag-5'>配置</b>Profinet<b class='flag-5'>通訊</b>網(wǎng)關HT3S-PNS-ECS