diff --git a/Software/COSI_Measure/cosi_gui_testbed.py b/Software/COSI_Measure/cosi_gui_testbed.py new file mode 100644 index 0000000000000000000000000000000000000000..6b1540eba0558dda65585bb386c9fa7d6bafb9a9 --- /dev/null +++ b/Software/COSI_Measure/cosi_gui_testbed.py @@ -0,0 +1,538 @@ +# import os + +# os.system('ifconfig eth0 192.168.101.253') +# print('IP changed to 192.168.101.253') + +import sys +from socket import * +import time +import atexit +#import serial +import binascii +#import threading +from PyQt4 import QtGui, QtCore +from PyQt4.QtCore import Qt +#import struct +#from binascii import hexlify +#from binascii import unhexlify +sock = socket(AF_UNIX, SOCK_STREAM) +BUFFER_SIZE = 256 +packet_size = 30 +#serPort = serial.Serial( +# port='/dev/ttyUSB0', +# baudrate=9600, +# parity=serial.PARITY_ODD, +# stopbits=serial.STOPBITS_ONE, +# bytesize=serial.SEVENBITS +#) + + +class Container(QtGui.QX11EmbedContainer): + + def __init__(self): + QtGui.QX11EmbedContainer.__init__(self) + + def sizeHint(self): + size = QtCore.QSize(400, 500) + return size.expandedTo(QtGui.QApplication.globalStrut()) + +class ExeMeasureThread(QtCore.QThread): + + signalCom = QtCore.pyqtSignal(object) + + def __init__(self, filename): + QtCore.QThread.__init__(self) + self.filename = filename + + def run(self): + num_lines = sum(1 for line in open(self.filename)) + fin_lines = 0.0 + with open(self.filename) as coordinates: + for line in coordinates: + self.move_to(line) + self.wait_for_completion() + value = self.read_gaussmeter() + fin_lines += 1 + self.signalCom.emit(((fin_lines/num_lines)*100, value)) + + def wait_for_completion(self): + sock.send("check_status" + ("\0" * (packet_size-len("check_status")))) + msg = sock.recv(50) + #print msg + while msg == "busy": + sock.send("check_status" + ("\0" * (packet_size-len("check_status")))) + msg = sock.recv(50) + #print msg + time.sleep(0.1) + + def move_to(self, coordinates): + G_CMD = "G0" + coordinates + "\n" + sock.send(G_CMD + ("\0" * (packet_size-len(G_CMD)))) + + def read_gaussmeter(self): + #serPort.write("ALLF?") + value = '' + time.sleep(0.2) + #while serPort.inWaiting() > 0: + #value += serPort.read(1) + #if value != '': + # print ">>" + value + return value +#class ExeMeasureThreadRemote(QtCore.QThread): Implement this if you have GUI-Remote connection problems + +class Main(QtGui.QMainWindow): + + def __init__(self): + super(Main, self).__init__() + self.initUI() + + def initUI(self): + self.frameSysIni = QtGui.QFrame() + self.frameSysIni.setFrameShape(QtGui.QFrame.StyledPanel) + self.frameHoming = QtGui.QFrame() + self.frameHoming.setFrameShape(QtGui.QFrame.StyledPanel) + self.frameMoving = QtGui.QFrame() + self.frameMoving.setFrameShape(QtGui.QFrame.StyledPanel) + self.frameMeasure = QtGui.QFrame() + self.frameMeasure.setFrameShape(QtGui.QFrame.StyledPanel) + self.frameConsole = QtGui.QFrame() + self.frameConsole.setFrameShape(QtGui.QFrame.StyledPanel) + self.outputText = QtGui.QTextEdit() + #self.frameOutput = QtGui.QFrame() + #self.frameOutput.setFrameShape(QtGui.QFrame.StyledPanel) + + ##############Berk##################### + #self.bleAdapterConnect = QtGui.QFrame() + #self.bleAdapterConnect.setFrameShape(QtGui.QFrame.StyledPanel) + ##############Berk##################### + self.splitterVLeft = QtGui.QSplitter(Qt.Vertical) + self.splitterVLeft.addWidget(self.frameSysIni) + self.splitterVLeft.addWidget(self.frameHoming) + self.splitterVLeft.addWidget(self.frameMoving) + self.splitterVLeft.addWidget(self.frameMeasure) + self.splitterVLeft.setSizes([200,150,150,300]) + self.splitterVRight = QtGui.QSplitter(Qt.Vertical) + self.splitterVRight.addWidget(self.frameConsole) + #self.splitterVRight.addWidget(self.frameOutput) + self.splitterVRight.addWidget(self.outputText) + self.splitterVRight.setSizes([400,400]) + self.splitterH = QtGui.QSplitter(Qt.Horizontal) + self.splitterH.addWidget(self.splitterVLeft) + self.splitterH.addWidget(self.splitterVRight) + self.splitterH.setSizes([500,500]) + self.setCentralWidget(self.splitterH) + QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks')) + + font11 = QtGui.QFont() + font11.setPointSize(11) + font11.setBold(True) + font11.setUnderline(True) + font11.setWeight(75) + font10 = QtGui.QFont() + font10.setPointSize(10) + + + self.bleAdapterConnect = QtGui.QPushButton('Enable Connect') + self.bleAdapterConnect.setGeometry(QtCore.QRect(30, 80, 70, 30)) + self.bleAdapterDConnect = QtGui.QPushButton('Connect external PC') + self.bleAdapterDConnect.setGeometry(QtCore.QRect(30, 80, 70, 30)) + self.bleIniButton = QtGui.QPushButton('Init BLE Functions') + self.bleIniButton.setGeometry(QtCore.QRect(30, 80, 70, 30)) + + self.lableIni = QtGui.QLabel('System Initialization') + self.lableIni.setGeometry(QtCore.QRect(10, 10, 150, 20)) + self.lableIni.setFont(font11) + self.lableStatusController = QtGui.QLabel('Movement controller') + self.lableStatusController.setGeometry(QtCore.QRect(310, 50, 20, 20)) + self.lableStatusController.setFont(font10) + self.lableStatusSerial = QtGui.QLabel('BLE') + self.lableStatusSerial.setGeometry(QtCore.QRect(30, 80, 100, 30)) + self.lableStatusSerial.setFont(font10) + self.pushButtonIni = QtGui.QPushButton('Initialize') + self.pushButtonIni.setGeometry(QtCore.QRect(30, 80, 100, 30)) + self.frameStatusController = QtGui.QFrame() + self.frameStatusController.setFrameShape(QtGui.QFrame.StyledPanel) + self.frameStatusController.setFrameShadow(QtGui.QFrame.Raised) + self.frameStatusSerial = QtGui.QFrame() + self.frameStatusSerial.setFrameShape(QtGui.QFrame.StyledPanel) + self.frameStatusSerial.setFrameShadow(QtGui.QFrame.Raised) + self.gridLayoutSysIni = QtGui.QGridLayout() + self.gridLayoutSysIni.addWidget(self.lableIni, 0, 0, 1, 3) + self.gridLayoutSysIni.addWidget(self.lableStatusController, 1, 2, 1, 1) + self.gridLayoutSysIni.addWidget(self.lableStatusSerial, 2, 2, 1, 1) + self.gridLayoutSysIni.addWidget(self.frameStatusSerial, 2, 4, 1, 1) + self.gridLayoutSysIni.addWidget(self.frameStatusController, 1, 4, 1, 1) + self.gridLayoutSysIni.addWidget(self.pushButtonIni, 2, 0, 1, 1) + self.gridLayoutSysIni.addWidget(self.bleAdapterConnect, 3, 0, 1, 1) + self.gridLayoutSysIni.addWidget(self.bleAdapterDConnect, 3, 1, 1, 1) + self.gridLayoutSysIni.addWidget(self.bleIniButton, 3, 2, 1, 1) + self.frameSysIni.setLayout(self.gridLayoutSysIni) + + self.pushButtonIni.clicked.connect(self.sys_ini) + self.bleAdapterConnect.clicked.connect(self.connectDongle) + self.bleAdapterDConnect.clicked.connect(self.dConnectDongle) + self.bleIniButton.clicked.connect(self.initBLEfuctions) + + self.homigXminButton = QtGui.QPushButton('Home X-') + self.homigYminButton = QtGui.QPushButton('Home Y-') + self.homigZminButton = QtGui.QPushButton('Home Z-') + self.homigXplsButton = QtGui.QPushButton('Home X+') + self.homigYplsButton = QtGui.QPushButton('Home Y+') + self.homigZplsButton = QtGui.QPushButton('Home Z+') + + self.lableHoming = QtGui.QLabel('Homing') + self.lableHoming.setFont(font11) + self.lableHomingStatus = QtGui.QLabel('Homing status') + self.lableHomingStatus.setFont(font10) + self.pushButtonHoming = QtGui.QPushButton('Home') + self.frameStatusHoming = QtGui.QFrame() + self.frameStatusHoming.resize(20,20) + self.frameStatusHoming.setFrameShape(QtGui.QFrame.StyledPanel) + self.frameStatusHoming.setFrameShadow(QtGui.QFrame.Raised) + self.spacerItem1 = QtGui.QSpacerItem(379, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.spacerItem2 = QtGui.QSpacerItem(20, 48, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayoutHoming = QtGui.QGridLayout() + self.gridLayoutHoming.addWidget(self.lableHoming, 0, 0, 1, 1) + self.gridLayoutHoming.addWidget(self.lableHomingStatus, 3, 2, 1, 1) + self.gridLayoutHoming.addWidget(self.pushButtonHoming, 3, 0, 1, 1) + self.gridLayoutHoming.addWidget(self.frameStatusHoming, 3, 3, 1, 1) + self.gridLayoutHoming.addWidget(self.pushButtonHoming, 3, 0, 1, 1) + self.gridLayoutHoming.addWidget(self.homigXminButton, 2, 0, 1, 1) + self.gridLayoutHoming.addWidget(self.homigYminButton, 2, 1, 1, 1) + self.gridLayoutHoming.addWidget(self.homigZminButton, 2, 2, 1, 1) + self.gridLayoutHoming.addWidget(self.homigXplsButton, 1, 0, 1, 1) + self.gridLayoutHoming.addWidget(self.homigYplsButton, 1, 1, 1, 1) + self.gridLayoutHoming.addWidget(self.homigZplsButton, 1, 2, 1, 1) + self.gridLayoutHoming.addItem(self.spacerItem1, 1, 0, 2, 4) + self.gridLayoutHoming.addItem(self.spacerItem2, 2, 1, 2, 1) + self.frameHoming.setLayout(self.gridLayoutHoming) + + self.pushButtonHoming.clicked.connect(self.homing) + self.homigXminButton.clicked.connect(self.homingXminus) + self.homigYminButton.clicked.connect(self.homingYminus) + self.homigZminButton.clicked.connect(self.homingZminus) + self.homigXplsButton.clicked.connect(self.homingXplus) + self.homigYplsButton.clicked.connect(self.homingYplus) + self.homigZplsButton.clicked.connect(self.homingZplus) + + self.lableMove = QtGui.QLabel('Move to a point and measure') + self.lableMove.setFont(font11) + self.lableMoveTo = QtGui.QLabel('Move to:') + self.lableMoveTo.setFont(font10) + self.lineEditCoordinates = QtGui.QLineEdit() + self.pushButtonExeMove = QtGui.QPushButton('Execute') + self.spacerItem3 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.spacerItem4 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayoutMove = QtGui.QGridLayout() + self.gridLayoutMove.addWidget(self.lableMove, 0, 0, 1, 2) + self.gridLayoutMove.addWidget(self.lableMoveTo, 2, 0, 1, 1) + self.gridLayoutMove.addWidget(self.lineEditCoordinates, 2, 1, 1, 1) + self.gridLayoutMove.addWidget(self.pushButtonExeMove, 2, 3, 1, 1) + self.gridLayoutMove.addItem(self.spacerItem3, 2, 2, 1, 1) + self.gridLayoutMove.addItem(self.spacerItem4, 1, 0, 1, 1) + self.frameMoving.setLayout(self.gridLayoutMove) + + self.pushButtonExeMove.clicked.connect(self.ExeMove) + + + self.lableMeasure = QtGui.QLabel('Move along a path and measure') + self.lableMeasure.setFont(font11) + self.lableLoadFile = QtGui.QLabel('Load path file:') + self.lableLoadFile.setFont(font10) + self.lableSaveFile = QtGui.QLabel('Save data as:') + self.lableSaveFile.setFont(font10) + self.lableFileName1 = QtGui.QLabel('') + self.lableFileName1.setFont(font10) + self.lableFileName2 = QtGui.QLabel('') + self.lableFileName2.setFont(font10) + iconOpenFile = QtGui.QIcon() + iconOpenFile.addPixmap(QtGui.QPixmap('open.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.pushButtonOpenFile = QtGui.QPushButton('') + self.pushButtonOpenFile.setIcon(iconOpenFile) + self.pushButtonSaveFile = QtGui.QPushButton('') + self.pushButtonSaveFile.setIcon(iconOpenFile) + self.pushButtonExeMeasure = QtGui.QPushButton('Execute') + self.pushButtonStopMeasure = QtGui.QPushButton('Stop') + self.progressBar = QtGui.QProgressBar() + self.progressBar.setProperty("value", 0) + self.spacerItem5 = QtGui.QSpacerItem(127, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.spacerItem6 = QtGui.QSpacerItem(81, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.spacerItem7 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Maximum) + self.spacerItem8 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Preferred) + self.spacerItem9 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) + self.spacerItem10 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) + #spacerItem11 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayoutMeasure = QtGui.QGridLayout() + self.gridLayoutMeasure.addWidget(self.lableMeasure, 0, 0, 1, 2) + self.gridLayoutMeasure.addItem(self.spacerItem8, 1, 0, 1, 1) + self.gridLayoutMeasure.addWidget(self.lableLoadFile, 2, 0, 1, 1) + self.gridLayoutMeasure.addWidget(self.pushButtonOpenFile, 2, 1, 1, 1) + self.gridLayoutMeasure.addWidget(self.lableFileName1, 2, 2, 1, 1) + self.gridLayoutMeasure.addWidget(self.lableSaveFile, 3, 0, 1, 1) + self.gridLayoutMeasure.addWidget(self.pushButtonSaveFile, 3, 1, 1, 1) + self.gridLayoutMeasure.addWidget(self.lableFileName2, 3, 2, 1, 1) + self.gridLayoutMeasure.addWidget(self.pushButtonExeMeasure, 4, 0, 1, 1) + self.gridLayoutMeasure.addWidget(self.pushButtonStopMeasure, 4, 1, 1, 1) + self.gridLayoutMeasure.addItem(self.spacerItem6, 4, 2, 1, 1) + self.gridLayoutMeasure.addItem(self.spacerItem5, 4, 3, 1, 1) + self.gridLayoutMeasure.addItem(self.spacerItem7, 5, 0, 1, 1) + self.gridLayoutMeasure.addWidget(self.progressBar, 6, 0, 1, 4) + self.gridLayoutMeasure.addItem(self.spacerItem9, 7, 0, 1, 1) + #self.gridLayoutMeasure.addItem(self.spacerItem10, 3, 0, 1, 1) + #gridLayoutMeasure.addItem(spacerItem11, 2, 3, 1, 2) + self.frameMeasure.setLayout(self.gridLayoutMeasure) + + self.pushButtonOpenFile.clicked.connect(self.getOpenFileName) + self.pushButtonSaveFile.clicked.connect(self.getSaveFileName) + self.pushButtonExeMeasure.clicked.connect(self.ExeMeasure) + self.pushButtonExeMeasure.clicked.connect(self.StopMeasure) + + self.console = Container() + self.hbox = QtGui.QHBoxLayout() + self.hbox.addWidget(self.console) + self.vbox = QtGui.QVBoxLayout() + self.vbox.addStretch(1) + self.vbox.addLayout(self.hbox) + self.frameConsole.setLayout(self.vbox) + + self.setGeometry(100,100,1000,800) + self.setWindowTitle("COSI-Measure") + self.show() + #Individual homing for indivudial axis. + #This is useful in case some probe or holder is hard to remove. + #For example: x0y0z0 is just above the frame. Single button homing will break if something is attached. + #You can manually home x and y first. Then, complete z homing at x,y max position (other corner)(Check height with probe or attachment ofc.) + def homingXplus(self): + sock.send("G162X\n" + ("\0" * (packet_size-len("G162X\n")))) + sock.send("G162X\n" + ("\0" * (packet_size-len("G162X\n")))) + self.wait_for_completion() + def homingYplus(self): + sock.send("G162Y\n" + ("\0" * (packet_size-len("G161Y\n")))) + sock.send("G162Y\n" + ("\0" * (packet_size-len("G161Y\n")))) + self.wait_for_completion() + def homingZplus(self): + sock.send("G162Z\n" + ("\0" * (packet_size-len("G161Z\n")))) + sock.send("G162Z\n" + ("\0" * (packet_size-len("G161Z\n")))) + self.wait_for_completion() + def homingXminus(self): + sock.send("G161X\n" + ("\0" * (packet_size-len("G162X\n")))) + sock.send("G161X\n" + ("\0" * (packet_size-len("G162X\n")))) + self.wait_for_completion() + def homingYminus(self): + sock.send("G161Y\n" + ("\0" * (packet_size-len("G162Y\n")))) + sock.send("G161Y\n" + ("\0" * (packet_size-len("G162Y\n")))) + self.wait_for_completion() + def homingZminus(self): + sock.send("G161Z\n" + ("\0" * (packet_size-len("G162Z\n")))) + sock.send("G161Z\n" + ("\0" * (packet_size-len("G162Z\n")))) + self.wait_for_completion() + + #This enables a local connection from an external device using a TCP_IP protocol. + #The handshake is manual, I fixed some keywords please feel free to implement yours. + #The main drawback: there is no access to the GUI anymore. + #The remote part should send a disconnect message ("CLOSECONN") to break the loop. + #If pipe is broken due to some kind of error, the TCP connection should manually closed from another terminal. (Not to close whole GUI which resets the homing settings) + #This part should definetely be improved and can be customized for different applications. + #Manual termination of TCP Example: + #Find the offending process: netstat -np + #Find the socket file descriptor: lsof -np $PID + #Debug the process: gdb -p $PID + #Close the socket: call close($FD) + #Close the debugger: quit Source: https://www.scm.keele.ac.uk/staff/stan/2016/05/16/closing-sockets-without-killing-processes/ + #Unfortunately the debian is limited. Some functions may not be found but the idea should be implementable. + def dConnectDongle(self): + self.remoteSocket = socket(AF_INET, SOCK_STREAM) + self.remoteSocket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) + self.TCP_IP = "192.168.101.253" + self.TCP_PORT = 7001 + self.remoteSocket.bind((self.TCP_IP,self.TCP_PORT)) + self.remoteSocket.listen(1) + self.conn, self.addr = self.remoteSocket.accept() + self.connectDongle() + print("Connection address: ",self.addr) + #self.adapter.stop() + def connectDongle(self): + print("Full software control is on the Remote Machine. Click close from the otherside to make gui effective again.") + while True: + self.remoteData = self.conn.recv(BUFFER_SIZE) #receive the data + if(str(self.remoteData) == "CLOSECONN"): # Close connection keyword + self.conn.send("Closing Connection") # Acknowledge command. + time.sleep(2) + self.conn.close() + self.remoteSocket.close() + break #Activate the GUI again + elif(str(self.remoteData[0:3]) == "MOV"): #I always send starting with a MOV command to make it consistent. + if len(self.remoteData) == 18: #For submillimeter resolution. + #Remote data structure is (MOVXXXxxYYYyyZZZzz). + #The submillimeter precision is 2, first 3 digits are the coordinates in mm for xyz. + #E.g.: command example MOV + #Please pad with zeros. i.e. 58.23 is 05823 + print('recv data is:', self.remoteData, 'length:', len(self.remoteData)) + self.xRem = (str(self.remoteData[3:8])) + self.yRem = (str(self.remoteData[8:13])) + self.zRem = (str(self.remoteData[13:18])) + print('x: ',self.xRem) + print('y: ',self.yRem) + print('z: ',self.zRem) + X = str("x")+str(self.xRem[:3])+'.'+str(self.xRem[3:5]) + Y = str("y")+str(self.yRem[:3])+'.'+str(self.yRem[3:5]) + Z = str("z")+str(self.zRem[:3])+'.'+str(self.zRem[3:5]) + coordinates = X + Y + Z + print(coordinates) + elif len(self.remoteData) == 12: # For milimeter resolution + #Remote data structure is (MOVXXXYYYZZZ) xxxs + print('recv data is:', self.remoteData, 'length:', len(self.remoteData)) + self.xRem = (str(self.remoteData[3:6])) + self.yRem = (str(self.remoteData[6:9])) + self.zRem = (str(self.remoteData[9:12])) + print('x: ',self.xRem) + print('y: ',self.yRem) + print('z: ',self.zRem) + coordinates = str("x")+str(self.xRem)+str("y")+str(self.yRem)+str("z")+str(self.zRem) + else: + print('Unknown format') + self.conn.close() + self.remoteSocket.close() + break + self.move_to(coordinates) + self.wait_for_completion() + self.conn.send("MOVOK") + elif(str(self.remoteData) == "OK"): + print("movok: ") + self.conn.send("MOVOK") + def initBLEfuctions(self): + print("N/A") + + def sys_ini(self): + def coordinatesCB(handle,value): + print(value) + self.ReceivedIntArray = struct.unpack('<BBBBBBBBBBBBBBBBBBBB', value) + print(self.ReceivedIntArray) + self.xBLE = (self.ReceivedIntArray[0]-48)*100 + (self.ReceivedIntArray[1]-48)*10 + (self.ReceivedIntArray[2]-48) + self.yBLE = (self.ReceivedIntArray[3]-48)*100 + (self.ReceivedIntArray[4]-48)*10 + (self.ReceivedIntArray[5]-48) + self.zBLE = (self.ReceivedIntArray[6]-48)*100 + (self.ReceivedIntArray[7]-48)*10 + (self.ReceivedIntArray[8]-48) + print('x: ',self.xBLE) + print('y: ',self.yBLE) + print('z: ',self.zBLE) + coordinates = str("x")+str(self.xBLE)+str("y")+str(self.yBLE)+str("z")+str(self.zBLE) + self.move_to(coordinates) + self.wait_for_completion() + #time.sleep(0.2) + self.thr.start() + #valueX = self.read_gaussmeter() + #valueX = 'a' + #cursor = self.outputText.textCursor() + #cursor.insertText(valueX) + + def ServerOkService (handle, value): + self.ReceivedIntArray = struct.unpack('<BB', value) + print(self.ReceivedIntArray) + if(self.ReceivedIntArray[0]==107): + coordinates = str("x450y450z450") + self.move_to(coordinates) + self.wait_for_completion() + valueX = self.read_gaussmeter() + valueX = 'a' + cursor = self.outputText.textCursor() + cursor.insertText(valueX) + wid=QtCore.QString.number(self.console.winId()) + self.process = QtCore.QProcess(self) + args = [ + "-into", + wid, + "-bc", + "-e", + "\"./mendel.elf\"", + ] + self.process.start("xterm", args) + time.sleep(7) + socketStatus = sock.connect_ex("/tmp/socket") + if socketStatus == 0: + self.frameStatusController.setStyleSheet("QWidget { background-color: %s }" % QtGui.QColor(0, 255, 0).name()) + else: + self.frameStatusController.setStyleSheet("QWidget { background-color: %s }" % QtGui.QColor(255, 0, 0).name()) + #if(serPort.isOpen() == False): + #self.frameStatusSerial.setStyleSheet("QWidget { background-color: %s }" % QtGui.QColor(255, 0, 0).name()) + #else: + self.frameStatusSerial.setStyleSheet("QWidget { background-color: %s }" % QtGui.QColor(0, 255, 0).name()) + def homing(self): + sock.send("G161XYZ\n" + ("\0" * (packet_size-len("G161XYZ\n")))) + sock.send("G161XYZ\n" + ("\0" * (packet_size-len("G161XYZ\n")))) + sock.send("G162XYZ\n" + ("\0" * (packet_size-len("G162XYZ\n")))) + sock.send("G162XYZ\n" + ("\0" * (packet_size-len("G162XYZ\n")))) + self.wait_for_completion() + self.frameStatusHoming.setStyleSheet("QWidget { background-color: %s }" % QtGui.QColor(0, 255, 0).name()) + + def wait_for_completion(self): + sock.send("check_status" + ("\0" * (packet_size-len("check_status")))) + msg = sock.recv(50) + #print msg + while msg == "busy": + sock.send("check_status" + ("\0" * (packet_size-len("check_status")))) + msg = sock.recv(50) + #print msg + time.sleep(1) + + def ExeMove(self): + coordinates = str(self.lineEditCoordinates.text()) + self.move_to(coordinates) + self.wait_for_completion() + #value = self.read_gaussmeter() + value = "a" + cursor = self.outputText.textCursor() + cursor.insertText(value) + + def move_to(self, coordinates): + G_CMD = "G0" + coordinates + "\n" + sock.send(G_CMD + ("\0" * (packet_size-len(G_CMD)))) + + def read_gaussmeter(self): + #serPort.write("ALLF?") + value = '' + #time.sleep(1) + self.device.char_write(myids.COSI_READY_CHAR ,bytearray([1, 0]), wait_for_response=False) #,0) + self.thr = threading.Thread(name='a test thread',target=self.read_gaussmeter) + #while serPort.inWaiting() > 0: + #value += serPort.read(1) + if value != '': + print ">>" + value + return value + + def getOpenFileName(self): + self.filenameOpen = QtGui.QFileDialog.getOpenFileName(self, 'Open File',".","(*.path)") + self.lableFileName1.setText(self.filenameOpen) + + def getSaveFileName(self): + self.filenameSave = QtGui.QFileDialog.getSaveFileName(self, 'Save File') + self.lableFileName2.setText(self.filenameSave) + + def ExeMeasure(self): + worker = ExeMeasureThread(self.filenameOpen) + worker.signalCom.connect(self.onDataReady) + self.threads = [] + self.threads.append(worker) + worker.start() + + + def onDataReady(self, value): + cursor = self.outputText.textCursor() + cursor.insertText(value[1]) + with open(self.filenameSave,"a") as dataFile: + dataFile.write(value[1]) + self.progressBar.setValue(value[0]) + + def StopMeasure(self): + pass + + def finish(self): + sock.send("quit"+ ("\0" * (packet_size-len("quit")))) + sock.close() + print 'finished\n' + +def main(): + app = QtGui.QApplication(sys.argv) + main = Main() + sys.exit(app.exec_()) + +if __name__ == "__main__": + main()