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