import platform import ctypes # Operating environment judgment systype = platform.system() if systype == 'Windows': if platform.architecture()[0] == '64bit': zauxdll = ctypes.WinDLL('./zauxdll64.dll') print('Windows x64') else: zauxdll = ctypes.WinDLL('./zauxdll.dll') print('Windows x86') elif systype == 'Darwin': zmcdll = ctypes.CDLL('./zmotion.dylib') print("macOS") elif systype == 'Linux': zmcdll = ctypes.CDLL('./zmotion.so') print("Linux") else: print("OS Not Supported!!") class ZMCWrapper: # Initialization parameters def __init__(self): self.handle = ctypes.c_void_p() self.sys_ip = "" self.sys_info = "" self.is_connected = False ###############################Controller connection################################################ def connect(self, ip, console=[]): if self.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" if ret == 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) return ret # Disconnect def disconnect(self): ret = zauxdll.ZAux_Close(self.handle) self.is_connected = False return ret ###############################Axis parameter settings################################################ # set axis type def set_atype(self, iaxis, iValue): ret = zauxdll.ZAux_Direct_SetAtype(self.handle, iaxis, iValue) if ret == 0: print("Set Axis (", iaxis, ") Atype:", iValue) else: print("Set Axis (", iaxis, ") Atype fail!") return ret # Set the pulse equivalent 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!") return ret # Set axis acceleration def set_accel(self, iaxis, iValue): ret = zauxdll.ZAux_Direct_SetAccel(self.handle, iaxis, ctypes.c_float(iValue)) if ret == 0: print("Set Axis (", iaxis, ") Accel:", iValue) else: print("Set Accel (", iaxis, ") Accel fail!") return ret # Set axis deceleration def set_decel(self, iaxis, iValue): ret = zauxdll.ZAux_Direct_SetDecel(self.handle, iaxis, ctypes.c_float(iValue)) if ret == 0: print("Set Axis (", iaxis, ") Decel:", iValue) else: print("Set Axis (", iaxis, ") Decel fail!") return ret # Set the axis running speed def set_speed(self, iaxis, iValue): ret = zauxdll.ZAux_Direct_SetAccel(self.handle, iaxis, ctypes.c_float(iValue)) if ret == 0: print("Set Axis (", iaxis, ") Speed:", iValue) else: print("Set Axis (", iaxis, ") Speed fail!") return ret ###############################Axis parameter read################################################ # read axis type def get_atype(self, iaxis): iValue = (ctypes.c_int)() ret = zauxdll.ZAux_Direct_GetAtype(self.handle, iaxis, ctypes.byref(iValue)) if ret == 0: print("Get Axis (", iaxis, ") Atype:", iValue.value) else: print("Get Axis (", iaxis, ") Atype fail!") return ret # Read the shaft pulse equivalent 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!") return ret # Read axis acceleration def get_accel(self, iaxis): iValue = (ctypes.c_float)() ret = zauxdll.ZAux_Direct_GetAccel(self.handle, iaxis, ctypes.byref(iValue)) if ret == 0: print("Get Axis (", iaxis, ") Accel:", iValue.value) else: print("Get Axis (", iaxis, ") Accel fail!") return ret # Read axis deceleration 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!") return ret # Read axis speed def get_speed(self, iaxis): iValue = (ctypes.c_float)() ret = zauxdll.ZAux_Direct_GetSpeed(self.handle, iaxis, ctypes.byref(iValue)) if ret == 0: print("Get Axis (", iaxis, ") Speed:", iValue.value) else: print("Get Axis (", iaxis, ") Speed fail!") return ret ###############################Exercise call#################################################### # Linear motion def move(self, iaxis, iValue): ret = zauxdll.ZAux_Direct_Single_Move(self.handle, iaxis, ctypes.c_float(iValue)) if ret == 0: print("Axis (", iaxis, ") Move:", iValue) else: print("Axis (", iaxis, ") Move Fail") return ret # Continuous exercise def vmove(self, iaxis, idir): ret = zauxdll.ZAux_Direct_Single_Vmove(self.handle, iaxis, idir) if ret == 0: print("axis (", iaxis, ")Vmoving!") else: print("Vmoving fail!") return ret ################################Function usage###################################################### zaux = ZMCWrapper() # Connection controller ip default 192.168.0.25 zaux.connect("192.168.0.25") # Set axis 0 parameters 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) # Get axis 0 parameters zaux.get_atype(0) zaux.get_untis(0) zaux.get_accel(0) zaux.get_decel(0) zaux.get_speed(0) # Move zaux.move(0, 100) # Axis 0 linear motion move 100