時間:2020-11-27 16:01:31來æºï¼šæ£é‹å‹•技術
  眾所周知,Python作為一門é¢å‘å°è±¡çš„æ–°èˆˆé–‹ç™¼èªžè¨€ï¼Œå…·æœ‰å®Œå–„的基礎代碼庫,實用性與代碼å¯è®€æ€§å¼·ï¼Œè¢«è¶Šä¾†è¶Šå¤šçš„人應用于智能è£å‚™çš„é‹å‹•控制。
  今天æ£é‹å‹•技術與大家分享一下é‹å‹•æŽ§åˆ¶å¡æ‡‰ç”¨é–‹ç™¼æ•™ç¨‹ä¹‹Python。
  在æ£å¼å¸ç¿’之å‰ï¼Œæˆ‘們先了解一下æ£é‹å‹•技術的é‹å‹•控制å¡ECI2418å’ŒECI2618。這兩款產å“分別是4軸,6軸é‹å‹•控制å¡ã€‚
  
  
  
  ECI2418支æŒ4軸脈沖輸入與編碼器å饋,æ¿è¼‰24點輸入,16點輸出,2AD,2DAï¼Œæ”¯æŒæ‰‹è¼ªæŽ¥å£ï¼Œå…¶ä¸ç‰¹å®šè¼¸å‡ºæ”¯æŒé«˜é€ŸPWM控制。
  
  
  
  ECI2618支æŒ6軸脈沖輸入與編碼器å饋,æ¿è¼‰24點輸入,16點輸出,2AD,2DAï¼Œæ”¯æŒæ‰‹è¼ªæŽ¥å£ï¼Œå…¶ä¸ç‰¹å®šè¼¸å‡ºæ”¯æŒé«˜é€ŸPWM控制。
  
  
  
  ECI2418,ECI2618å‡ä½¿ç”¨åŒä¸€å¥—APIå‡½æ•¸ï¼Œå‡æ”¯æŒCã€C++ã€C#ã€LabViewã€Pythonã€Delphiç‰é–‹ç™¼èªžè¨€ï¼Œæ”¯æŒVC6.0ã€VB6.0ã€Qtã€.Netç‰å¹³è‡ºï¼Œæ”¯æŒWindowsã€Linuxã€WinCEã€iMacç‰æ“作系統。
   以下是Python語言的開發æµç¨‹ã€‚
   1ã€æ–°å»ºé …目。
  打開Pycharm軟件進行æ“作,點擊Create New Projectæ–°å»ºé …ç›®ã€‚
  
  
  
   2ã€è¨ç½®Pythoné …ç›®å˜æ”¾è·¯å¾‘。
  æ¤éŽç¨‹ä¸»è¦åŒ…å«ä¸‰æ¥ï¼š
ã€€ã€€é¸æ“‡Pythoné …ç›®â†’é¸æ“‡Pythoné …ç›®å°‡å˜æ”¾çš„路徑→創建Pythoné …ç›®ã€‚
  
  
  
  3ã€æ–°å»ºPython文件。
  在Pythoné …ç›®ä¸æ–°å»ºPython文件,å³éµCratPythonæ–‡ä»¶å¤¾ï¼Œé¸æ“‡â€œNew→PythonFileâ€ï¼Œå‰µå»ºæ–°çš„Python 文件。
  
  
  
ã€€ã€€é¸æ“‡â€œNew→Python Fileâ€
  創建新的Python 文件
   4ã€å°‡Python動態庫復制到Pythoné …ç›®ä¸ã€‚
  
  
  
   5ã€æ¨¡å¡Šå°Žå…¥å¹¶åŠ è¼‰å‹•æ…‹éˆæŽ¥åº«ã€‚
  首先把Pythonä¸çš„兩個模塊導入(platformå’Œctypes模塊),其ä¸ctypes模塊æä¾›å’ŒC語言兼容的數據類型,èƒ½å¤ å¾ˆæ–¹ä¾¿åœ°èª¿ç”¨å‹•æ…‹éˆæŽ¥åº«ä¸è¼¸å‡ºçš„C接å£å‡½æ•¸ã€‚
   importplatform
   import ctypes
   #é‹è¡Œç’°å¢ƒåˆ¤æ–·
  systype = platform.system()
   ifsystype == 'Windows':
    ifplatform.architecture()[0] == '64bit':
   zauxdll = ctypes.WinDLL( './zauxdll64.dll')
   print( 'Windows x64')
   else:
   zauxdll = ctypes.WinDLL( './zauxdll.dll')
   print( 'Windows x86')
   elifsystype == 'Darwin':
   zmcdll = ctypes.CDLL( './zmotion.dylib')
   print( "macOS")
   elif systype == 'Linux':
   zmcdll = ctypes.CDLL( './libzmotion.so')
   print( "Linux")
   else:
  print( "Not Supported!!")
   6ã€é€šéŽåŠ è¼‰å°Žå…¥çš„å‹•æ…‹åº«éˆæŽ¥åº«ï¼Œèª¿ç”¨ZMotion PC函數手冊ä¸çš„函數。
  1)使用æ“作。
ã€€ã€€é¦–å…ˆæ ¹æ“šæŽ§åˆ¶å™¨é€£æŽ¥æ–¹å¼ç”¨é€£æŽ¥å‡½æ•¸é€£æŽ¥æŽ§åˆ¶å™¨ï¼Œè¼¸å‡ºæŽ§åˆ¶å™¨å¥æŸ„ï¼Œåˆ©ç”¨æŽ§åˆ¶å™¨çš„å¥æŸ„我們就å¯ä»¥å°åº«å‡½æ•¸é€²è¡Œæ“作。
  å³â€œæ‰“é–‹PC函數手冊→æœç´¢æƒ³è¦çš„函數功能→查看函數說明→通éŽå‰›æ‰åŠ è¼‰çš„å‹•æ…‹éˆæŽ¥åº«è¿”å›žçš„zauxdllå°è±¡é€²è¡Œèª¿ç”¨â€ã€‚
  
  
  
  2)通éŽip連接函數接å£è¿”å›žçš„æŽ§åˆ¶å™¨å¥æŸ„handleï¼Œå°æŽ§åˆ¶å™¨çš„å¥æŸ„handleæ“作。
  
  
  
  #####控制器連接#####
   def connect(self, ip, console=[]):
    ifself.handle.value is not None:
   self.disconnect()
  ip_bytes = ip.encode( 'utf-8')
  p_ip = ctypes.c_char_p(ip_bytes)
   print( "Connecting to", ip, "...")
   ret = zauxdll.ZAux_OpenEth(p_ip, ctypes.pointer(self.handle))
   msg = "Connected"
    ifret == 0:
   msg = ip + " Connected"
   self.sys_ip = ip
   self.is_connected = True
    else:
   msg = "Connection Failed, Error " + str(ret)
   self.is_connected = False
   console.append(msg)
   console.append(self.sys_info)
   
returnret
   # 斷開連接
   def disconnect(self):
  ret = zauxdll.ZAux_Close(self.handle)
  self.is_connected = False
  
return ret
  3)è»¸åƒæ•¸è¨ç½®ã€‚
   #####è»¸åƒæ•¸è¨ç½®####
  # è¨ç½®è»¸é¡žåž‹
   def set_atype(self, iaxis, iValue):
   ret = zauxdll.ZAux_Direct_SetAtype(self.handle, iaxis, iValue)
   ifret == 0:
   print( "Set Axis (", iaxis, ") Atype:", iValue)
    else:
   print( "Set Axis (", iaxis, ") Atype fail!")
    returnret
   # è¨ç½®è„ˆæ²–ç•¶é‡
   def set_units(self, iaxis, iValue):
   ret = zauxdll.ZAux_Direct_SetUnits(self.handle, iaxis, ctypes.c_float(iValue))
    if ret == 0:
   print( "Set Axis (", iaxis, ") Units:", iValue)
    else:
   print( "Set Axis (", iaxis, ") Units fail!")
    returnret
  # è¨ç½®è»¸åŠ é€Ÿåº¦
   def set_accel(self, iaxis, iValue):
   ret = zauxdll.ZAux_Direct_SetAccel(self.handle, iaxis, ctypes.c_float(iValue))
    ifret == 0:
   print( "Set Axis (", iaxis, ") Accel:", iValue)
    else:
   print( "Set Accel (", iaxis, ") Accel fail!")
    returnret
   # è¨ç½®è»¸æ¸›é€Ÿåº¦
   def set_decel(self, iaxis, iValue):
   ret = zauxdll.ZAux_Direct_SetDecel(self.handle, iaxis, ctypes.c_float(iValue))
    ifret == 0:
   print( "Set Axis (", iaxis, ") Decel:", iValue)
   else:
   print( "Set Axis (", iaxis, ") Decel fail!")
    returnret
   # è¨ç½®è»¸é‹è¡Œé€Ÿåº¦
   def set_speed(self, iaxis, iValue):
   ret = zauxdll.ZAux_Direct_SetAccel(self.handle, iaxis, ctypes.c_float(iValue))
    ifret == 0:
   print( "Set Axis (", iaxis, ") Speed:", iValue)
    else:
   print( "Set Axis (", iaxis, ") Speed fail!")
    returnret
  4)è»¸åƒæ•¸è®€å–。
  #####è»¸åƒæ•¸è®€å–####
  # 讀å–軸類型
   def get_atype(self, iaxis):
   iValue = (ctypes.c_int)()
   ret = zauxdll.ZAux_Direct_GetAtype(self.handle, iaxis, ctypes.byref(iValue))
   ifret == 0:
   print( "Get Axis (", iaxis, ") Atype:", iValue.value)
    else:
   print( "Get Axis (", iaxis, ") Atype fail!")
    return ret
   # 讀å–軸脈沖當é‡
   def get_units(self, iaxis):
   iValue = (ctypes.c_float)()
   ret = zauxdll.ZAux_Direct_GetUnits(self.handle, iaxis, ctypes.byref(iValue))
    if ret == 0:
   print( "Get Axis (", iaxis, ") Units:", iValue.value)
    else:
   print( "Get Axis (", iaxis, ") Units fail!")
    returnret
   # 讀å–è»¸åŠ é€Ÿåº¦
   def get_accel(self, iaxis):
   iValue = (ctypes.c_float)()
   ret = zauxdll.ZAux_Direct_GetAccel(self.handle, iaxis, ctypes.byref(iValue))
    ifret == 0:
   print( "Get Axis (", iaxis, ") Accel:", iValue.value)
   else:
   print( "Get Axis (", iaxis, ") Accel fail!")
   returnret
   # 讀å–軸減速度
   def get_decel(self, iaxis):
   iValue = (ctypes.c_float)()
   ret = zauxdll.ZAux_Direct_GetDecel(self.handle, iaxis, ctypes.byref(iValue))
   if ret == 0:
   print( "Get Axis (", iaxis, ") Decel:", iValue.value)
   else:
   print( "Get Axis (", iaxis, ") Decel fail!")
    returnret
   # 讀å–軸é‹è¡Œé€Ÿåº¦
   def get_speed(self, iaxis):
   iValue = (ctypes.c_float)()
   ret = zauxdll.ZAux_Direct_GetSpeed(self.handle, iaxis, ctypes.byref(iValue))
    ifret == 0:
   print( "Get Axis (", iaxis, ") Speed:", iValue.value)
    else:
   print( "Get Axis (", iaxis, ") Speed fail!")
    returnret
  5)單軸é‹å‹•。
  #####é‹å‹•調用####
  # ç›´ç·šé‹å‹•
   def move(self, iaxis, iValue):
   ret = zauxdll.ZAux_Direct_Single_Move(self.handle, iaxis, iValue)
    ifret == 0:
   print( "Axis (", iaxis, ") Move:",iValue)
    else:
   print( "Axis (", iaxis, ") Move Fail")
    returnret
  6)é‹è¡Œç¨‹åºï¼Œè¼¸å‡ºçµæžœã€‚
  調用å°è£å¥½çš„函數→é‹è¡Œâ†’輸出程åºé‹è¡Œçµæžœã€‚
   #####功能使用####
  zaux = ZMCWrapper()
   # 連接控制器ip 默èª192.168.0.11
  zaux.connect( "192.168.0.11")
   # è¨ç½®è»¸0åƒæ•¸
  zaux.set_atype(0, 1)
  zaux.set_units(0, 100)
  zaux.set_accel(0, 1000)
  zaux.set_decel(0, 1000)
  zaux.set_speed(0, 1000)
   # ç²å–軸0åƒæ•¸
  zaux.get_atype(0)
  zaux.get_units(0)
  zaux.get_accel(0)
  zaux.get_decel(0)
  zaux.get_speed(0)
   # é‹å‹•
  zaux.move(0, 100) # 軸0ç›´ç·šé‹å‹•移動100
  
  
  
  é‹è¡Œå¹¶è¼¸å‡ºç¨‹åºé‹è¡Œçµæžœ
  æ£é‹å‹•技術é‹å‹•æŽ§åˆ¶å¡æ‡‰ç”¨é–‹ç™¼æ•™ç¨‹ä¹‹Python就分享到這里,更多精彩內容,請關注我們的公眾號。
  本文由æ£é‹å‹•å°åŠ©æ‰‹åŽŸå‰µï¼Œæ¡è¿Žå¤§å®¶è½‰è¼‰ï¼Œå…±åŒå¸ç¿’,一起æé«˜ä¸åœ‹æ™ºèƒ½åˆ¶é€ æ°´å¹³ã€‚æ–‡ç« ç‰ˆæ¬Šæ¸æ£é‹å‹•æŠ€è¡“æ‰€æœ‰ï¼Œå¦‚æœ‰è½‰è¼‰è«‹æ³¨æ˜Žæ–‡ç« ä¾†æºã€‚
  
  
上一篇:æ£é‹å‹•技術丨高精度硬件比較...
下一篇:é‹å‹•æŽ§åˆ¶å¡æ‡‰ç”¨é–‹ç™¼æ•™ç¨‹ä¹‹C++
ä¸åœ‹å‚³å‹•網版權與å…è²¬è²æ˜Žï¼šå‡¡æœ¬ç¶²æ³¨æ˜Ž[來æºï¼šä¸åœ‹å‚³å‹•ç¶²]的所有文å—ã€åœ–片ã€éŸ³è¦–å’Œè¦–é »æ–‡ä»¶ï¼Œç‰ˆæ¬Šå‡ç‚ºä¸åœ‹å‚³å‹•ç¶²(www.siyutn.com)ç¨å®¶æ‰€æœ‰ã€‚如需轉載請與0755-82949061è¯ç³»ã€‚任何媒體ã€ç¶²ç«™æˆ–å€‹äººè½‰è¼‰ä½¿ç”¨æ™‚é ˆæ³¨æ˜Žä¾†æºâ€œä¸åœ‹å‚³å‹•ç¶²â€ï¼Œé•å者本網將追究其法律責任。
本網轉載并注明其他來æºçš„稿件,å‡ä¾†è‡ªäº’è¯ç¶²æˆ–æ¥å…§æŠ•稿人士,版權屬于原版權人。轉載請ä¿ç•™ç¨¿ä»¶ä¾†æºåŠä½œè€…ï¼Œç¦æ¢æ“…自篡改,é•è€…è‡ªè² ç‰ˆæ¬Šæ³•å¾‹è²¬ä»»ã€‚
相關資訊