時間:2020-11-27 16:01:31來源:正運動技術(shù)
眾所周知,Python作為一門面向?qū)ο蟮男屡d開發(fā)語言,具有完善的基礎(chǔ)代碼庫,實用性與代碼可讀性強,被越來越多的人應(yīng)用于智能裝備的運動控制。
今天正運動技術(shù)與大家分享一下運動控制卡應(yīng)用開發(fā)教程之Python。
在正式學(xué)習(xí)之前,我們先了解一下正運動技術(shù)的運動控制卡ECI2418和ECI2618。這兩款產(chǎn)品分別是4軸,6軸運動控制卡。
ECI2418支持4軸脈沖輸入與編碼器反饋,板載24點輸入,16點輸出,2AD,2DA,支持手輪接口,其中特定輸出支持高速PWM控制。
ECI2618支持6軸脈沖輸入與編碼器反饋,板載24點輸入,16點輸出,2AD,2DA,支持手輪接口,其中特定輸出支持高速PWM控制。
ECI2418,ECI2618均使用同一套API函數(shù),均支持C、C++、C#、LabView、Python、Delphi等開發(fā)語言,支持VC6.0、VB6.0、Qt、.Net等平臺,支持Windows、Linux、WinCE、iMac等操作系統(tǒng)。
以下是Python語言的開發(fā)流程。
1、新建項目。
打開Pycharm軟件進行操作,點擊Create New Project新建項目。
2、設(shè)置Python項目存放路徑。
此過程主要包含三步:
選擇Python項目→選擇Python項目將存放的路徑→創(chuàng)建Python項目。
3、新建Python文件。
在Python項目中新建Python文件,右鍵CratPython文件夾,選擇“New→PythonFile”,創(chuàng)建新的Python 文件。
選擇“New→Python File”
創(chuàng)建新的Python 文件
4、將Python動態(tài)庫復(fù)制到Python項目中。
5、模塊導(dǎo)入并加載動態(tài)鏈接庫。
首先把Python中的兩個模塊導(dǎo)入(platform和ctypes模塊),其中ctypes模塊提供和C語言兼容的數(shù)據(jù)類型,能夠很方便地調(diào)用動態(tài)鏈接庫中輸出的C接口函數(shù)。
importplatform
import ctypes
#運行環(huán)境判斷
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、通過加載導(dǎo)入的動態(tài)庫鏈接庫,調(diào)用ZMotion PC函數(shù)手冊中的函數(shù)。
1)使用操作。
首先根據(jù)控制器連接方式用連接函數(shù)連接控制器,輸出控制器句柄,利用控制器的句柄我們就可以對庫函數(shù)進行操作。
即“打開PC函數(shù)手冊→搜索想要的函數(shù)功能→查看函數(shù)說明→通過剛才加載的動態(tài)鏈接庫返回的zauxdll對象進行調(diào)用”。
2)通過ip連接函數(shù)接口返回的控制器句柄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)軸參數(shù)設(shè)置。
#####軸參數(shù)設(shè)置####
# 設(shè)置軸類型
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
# 設(shè)置脈沖當量
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
# 設(shè)置軸加速度
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
# 設(shè)置軸減速度
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
# 設(shè)置軸運行速度
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)軸參數(shù)讀取。
#####軸參數(shù)讀取####
# 讀取軸類型
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)單軸運動。
#####運動調(diào)用####
# 直線運動
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)運行程序,輸出結(jié)果。
調(diào)用封裝好的函數(shù)→運行→輸出程序運行結(jié)果。
#####功能使用####
zaux = ZMCWrapper()
# 連接控制器ip 默認192.168.0.11
zaux.connect( "192.168.0.11")
# 設(shè)置軸0參數(shù)
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參數(shù)
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
運行并輸出程序運行結(jié)果
正運動技術(shù)運動控制卡應(yīng)用開發(fā)教程之Python就分享到這里,更多精彩內(nèi)容,請關(guān)注我們的公眾號。
本文由正運動小助手原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國智能制造水平。文章版權(quán)歸正運動技術(shù)所有,如有轉(zhuǎn)載請注明文章來源。
中國傳動網(wǎng)版權(quán)與免責聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(m.u63ivq3.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責任。