之後的 V-rep模擬Printer都整理於本文章中
透過Tkinter介面及remote api 控制printer參數
程式碼
from tkinter import * import serial import sys import numpy as np from matplotlib import pyplot, rcParams import vrep import math class printer(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.grid() self.createWidgets() def createWidgets(self): Label(pri, text="Axis").grid(column=0, row=0) Label(pri, text="").grid(column=0, row=1) Label(pri, text="X").grid(column=0, row=2) Label(pri, text="").grid(column=0, row=3) Label(pri, text="Y").grid(column=0, row=4) Label(pri, text="").grid(column=0, row=5) Label(pri, text="Z").grid(column=0, row=6) Label(pri, text="Position").grid(column=1, row=0) Label(pri, text="-125<=X<=125").grid(column=1, row=1) Label(pri, text="-125<=Y<=125").grid(column=1, row=3) Label(pri, text="0<=Z<=400").grid(column=1, row=5) a = Entry(pri, width=12, justify=RIGHT) b = Entry(pri, width=12, justify=RIGHT) c = Entry(pri, width=12, justify=RIGHT) #x.delete(0,END) #y.delete(0,END) a.grid(row=2, column=1) b.grid(row=4, column=1) c.grid(row=6, column=1) def show_entry_fields(): deg = math.pi/180 x = a.get() y = b.get() z = c.get() if x =='' or y==''or z =='': x = 0 y = 0 z = 0 print("Error") else: x = float(a.get()) y = float(b.get()) z = float(c.get()) if float(x) >= 125: x = 125 print("X_axis is out of range") if float(y) >= 125: y = 125 print("Y_axis is out of range") if float(z) >= 400: z = 400 print("Z_axis is out of range") if float(x) <= -125: x = -125 print("X_axis is out of range") if float(y) <= -125: y = -125 print("Y_axis is out of range") if float(z) < 0: z = 0 print("Z_axis is out of range") if (float(x) <= -125*math.sin(30*deg)) & (float(y) >= 125*math.cos(30*deg)): x = -125*math.sin(30*deg) y = 125*math.cos(30*deg) if (float(x) <= -125*math.sin(30*deg)) & (float(y) <= -125*math.cos(30*deg)): x = -125*math.sin(30*deg) y = -125*math.cos(30*deg) if (float(x) >= 125*math.sin(30*deg)) & (float(y) >= 125*math.cos(30*deg)): x = 125*math.sin(30*deg) y = 125*math.cos(30*deg) if (float(x) >= -125*math.sin(30*deg)) & (float(y) <= -125*math.cos(30*deg)): x = 125*math.sin(30*deg) y = -125*math.cos(30*deg) e=x/1000 r=y/1000 t=z/889 if t <= 0.11656: t = t+0.11656 vrep.simxFinish(-1) clientID = vrep.simxStart('127.0.0.1', 19999, True, True, 5000, 5) if clientID!= -1: print("Connected to remote server") else: print('Connection not successful') sys.exit('Could not connect') errorCode,plate=vrep.simxGetObjectHandle(clientID,'plate',vrep.simx_opmode_oneshot_wait) if errorCode == -1: print('Can not find left or right motor') sys.exit() errorCode=vrep.simxSetObjectPosition(clientID,plate,-1,[e,r,t], vrep.simx_opmode_oneshot) print(x,y,z) #print("%s,%s,%s" % (x, y, z)) Button(pri, text='Quit', width=5, command=pri.quit).grid(row=8, column=2, sticky=W, pady=4) Button(pri, text='Go', width=5, command=show_entry_fields).grid(row=8, column=0, sticky=W, pady=4) if __name__ == '__main__': pri = Tk() pri.title("Printer") pri.geometry('180x220'); #設定視窗大小 pri.resizable(0, 0) #鎖定視窗大小 app = printer(master=pri) app.mainloop() #print(x,y,z)
Comments
comments powered by Disqus