Skip to content

Commit 737eb40

Browse files
author
Gauthier
committed
L'interface continue à évolurt...
1 parent 15d78ab commit 737eb40

15 files changed

+4037
-2039
lines changed

cn5X.geany

+46-4
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,60 @@ long_line_behaviour=1
2828
long_line_column=72
2929

3030
[files]
31-
current_page=0
32-
FILE_NAME_0=5176;Python;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fcn5X%2Fcn5X.py;0;2
31+
current_page=52
32+
FILE_NAME_0=5222;Python;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fcn5X%2Fcn5X.py;0;2
3333
FILE_NAME_1=23;Python;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fcn5X%2Fmsgbox.py;0;2
3434
FILE_NAME_2=23;Python;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fcn5X%2FQtSerial.py;0;2
35-
FILE_NAME_3=1231;Python;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fcn5X%2FgrblDecode.py;0;2
35+
FILE_NAME_3=1643;Python;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fcn5X%2FgrblDecode.py;0;2
3636
FILE_NAME_4=1717;Python;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fcn5X%2FgrblError.py;0;2
3737
FILE_NAME_5=66;None;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fdoc%2Fcsv%2Ferror_codes_en_US.csv;0;2
3838
FILE_NAME_6=22;Python;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fcn5X%2FgrblAlarm.py;0;2
3939
FILE_NAME_7=1202;None;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fdoc%2Fcsv%2Falarm_codes_en_US.csv;0;2
4040
FILE_NAME_8=4973;None;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fdoc%2Fcsv%2Fsetting_codes_en_US.csv;0;2
4141
FILE_NAME_9=176;Python;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fcn5X%2FgrblSettings.py;0;2
42-
FILE_NAME_10=12975;XML;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fcn5X%2FmainWindow.ui;0;2
42+
FILE_NAME_10=25481;XML;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fcn5X%2FmainWindow.ui;0;2
43+
FILE_NAME_11=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fconfig.h;0;2
44+
FILE_NAME_12=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fcoolant_control.c;0;2
45+
FILE_NAME_13=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fcoolant_control.h;0;2
46+
FILE_NAME_14=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fcpu_map.h;0;2
47+
FILE_NAME_15=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fdefaults.h;0;2
48+
FILE_NAME_16=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Feeprom.c;0;2
49+
FILE_NAME_17=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Feeprom.h;0;2
50+
FILE_NAME_18=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fgcode.c;0;2
51+
FILE_NAME_19=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fgcode.h;0;2
52+
FILE_NAME_20=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fgrbl.h;0;2
53+
FILE_NAME_21=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fjog.c;0;2
54+
FILE_NAME_22=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fjog.h;0;2
55+
FILE_NAME_23=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Flimits.c;0;2
56+
FILE_NAME_24=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Flimits.h;0;2
57+
FILE_NAME_25=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fmain.c;0;2
58+
FILE_NAME_26=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fmotion_control.c;0;2
59+
FILE_NAME_27=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fmotion_control.h;0;2
60+
FILE_NAME_28=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fnuts_bolts.c;0;2
61+
FILE_NAME_29=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fnuts_bolts.h;0;2
62+
FILE_NAME_30=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fplanner.c;0;2
63+
FILE_NAME_31=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fplanner.h;0;2
64+
FILE_NAME_32=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fprint.c;0;2
65+
FILE_NAME_33=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fprint.h;0;2
66+
FILE_NAME_34=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fprobe.c;0;2
67+
FILE_NAME_35=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fprobe.h;0;2
68+
FILE_NAME_36=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fprotocol.c;0;2
69+
FILE_NAME_37=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fprotocol.h;0;2
70+
FILE_NAME_38=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Freport.c;0;2
71+
FILE_NAME_39=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Freport.h;0;2
72+
FILE_NAME_40=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fserial.c;0;2
73+
FILE_NAME_41=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fserial.h;0;2
74+
FILE_NAME_42=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fsettings.c;0;2
75+
FILE_NAME_43=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fsettings.h;0;2
76+
FILE_NAME_44=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fsleep.c;0;2
77+
FILE_NAME_45=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fsleep.h;0;2
78+
FILE_NAME_46=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fspindle_control.c;0;2
79+
FILE_NAME_47=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fspindle_control.h;0;2
80+
FILE_NAME_48=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fstepper.c;0;2
81+
FILE_NAME_49=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fstepper.h;0;2
82+
FILE_NAME_50=0;C;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fsystem.c;0;2
83+
FILE_NAME_51=0;C++;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fgrbl-Mega-5X%2Fgrbl%2Fsystem.h;0;2
84+
FILE_NAME_52=154;Python;0;EUTF-8;0;1;0;%2Fhome%2Fgauthier%2Fsrc%2Fcn5X%2FgrblQueryTimer.py;0;2
4385

4486
[VTE]
4587
last_dir=/home/gauthier

cn5X.py

+45-27
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from msgbox import *
88
from QtSerial import QSerialComm
99
from grblDecode import grblDecode
10+
from grblQueryTimer import grblQueryThread
1011

1112
defaultBaudRate = 115200
1213

@@ -19,6 +20,7 @@ def __init__(self, parent=None):
1920

2021
self.timerDblClic = QtCore.QTimer()
2122
self.decode = grblDecode(self.ui)
23+
self.grblQuery = grblQueryThread()
2224

2325
pathname = os.path.abspath(os.path.dirname(sys.argv[0]))
2426
print(pathname)
@@ -28,26 +30,7 @@ def __init__(self, parent=None):
2830
QtGui.QFontDatabase.addApplicationFont(pathname + "/fonts/LEDCalculator.ttf") # Chargement de la police des labels de status machine
2931
self.ui.btnConnect.setText("Connecter") # Label du bouton connect
3032
self.serial = QSerialComm() # Création Objet pour communications
31-
self.ui.cmbPort.addItem("") # On rempli la liste des ports série
32-
if len(QSerialComm.portsList()) > 0:
33-
for p in QSerialComm.portsList():
34-
self.ui.cmbPort.addItem(p.portName() + ' - ' + p.description())
35-
else:
36-
m = msgBox(
37-
title = "Attention !",
38-
text = "Aucun port de communication disponible !",
39-
info = sys.argv[0] + " n'a pas trouvé de port série permettant de communiquer avec grbl.",
40-
icon = msgIconList.Information,
41-
detail = "\nclass serialCom:\nL'appel de \"serial.tools.list_ports.comports()\" n'a renvoyé aucun port.",
42-
stdButton = msgButtonList.Close
43-
)
44-
m.afficheMsg()
45-
if self.ui.cmbPort.currentText() == "":
46-
self.ui.cmbBauds.setEnabled(False)
47-
self.ui.btnConnect.setEnabled(False)
48-
else:
49-
self.ui.cmbBauds.setEnabled(True)
50-
self.ui.btnConnect.setEnabled(True)
33+
self.populatePortList() # On rempli la liste des ports série
5134

5235
curIndex = -1 # On rempli la liste des vitesses
5336
for v in QSerialComm.baudRates():
@@ -64,11 +47,43 @@ def __init__(self, parent=None):
6447
self.ui.cmbPort.currentIndexChanged.connect(self.on_cmbPort_changed) # un clic sur un élément de la liste appellera la méthode 'on_item_changed'
6548
self.ui.mnuAppOuvrir.triggered.connect(self.on_mnuAppOuvrir) # Connexions des routines du menu application
6649
self.ui.mnuAppQuitter.triggered.connect(self.on_mnuAppQuitter)
50+
self.ui.btnRefresh.clicked.connect(self.populatePortList) # Refresh de la liste des ports serie
6751
self.ui.btnConnect.clicked.connect(self.action_btnConnect) # un clic sur le bouton "(De)Connecter" appellera la méthode 'action_btnConnect'
6852
self.ui.btnSend.pressed.connect(self.sendCmd) # Bouton d'envoi de commandes unitaires
6953
self.ui.txtGCode.returnPressed.connect(self.sendCmd) # Même fonction par la touche entrée
70-
self.serial.lePort.readyRead.connect(self.readSerial) # gestion du port série
54+
self.ui.txtGCode.textChanged.connect(self.txtGCode_on_Change) # Analyse du champ de saisie au fur et a mesure de son édition
55+
self.serial.lePort.readyRead.connect(self.readSerial) # gestion du port série
56+
57+
def populatePortList(self):
58+
''' Rempli la liste des ports série '''
59+
self.ui.cmbPort.clear()
60+
self.ui.cmbPort.addItem("")
61+
if len(QSerialComm.portsList()) > 0:
62+
for p in QSerialComm.portsList():
63+
self.ui.cmbPort.addItem(p.portName() + ' - ' + p.description())
64+
else:
65+
m = msgBox(
66+
title = "Attention !",
67+
text = "Aucun port de communication disponible !",
68+
info = sys.argv[0] + " n'a pas trouvé de port série permettant de communiquer avec grbl.",
69+
icon = msgIconList.Information,
70+
detail = "\nclass serialCom:\nL'appel de \"serial.tools.list_ports.comports()\" n'a renvoyé aucun port.",
71+
stdButton = msgButtonList.Close
72+
)
73+
m.afficheMsg()
74+
self.setConnectControlsStatus()
75+
76+
def setConnectControlsStatus(self):
77+
# Active ou désactive les contrôles en fonction de l'état de sélection du port
78+
if self.ui.cmbPort.currentText() == "":
79+
self.ui.cmbBauds.setEnabled(False)
80+
self.ui.btnConnect.setEnabled(False)
81+
else:
82+
self.ui.cmbBauds.setEnabled(True)
83+
self.ui.btnConnect.setEnabled(True)
7184

85+
def keyPressEvent(self, e):
86+
pass
7287

7388
def on_mnuAppOuvrir(self):
7489
pass
@@ -118,30 +133,33 @@ def action_btnConnect(self):
118133
self.ui.cmbPort.setEnabled(False)
119134
self.ui.cmbBauds.setEnabled(False)
120135
self.ui.btnConnect.setText("Déconnecter") # La prochaine action du bouton sera pour déconnecter
136+
if not self.grblQuery.isActif():
137+
self.grblQuery.run()
121138
else:
122139
print('Appui bouton Déconnecter.')
123140
self.serial.disconnect()
124141
self.ui.lblConnectStatus.setText("<Non Connecté>")
125142
self.ui.cmbPort.setEnabled(True)
126143
self.ui.cmbBauds.setEnabled(True)
127144
self.ui.btnConnect.setText("Connecter") # La prochaine action du bouton sera pour connecter
145+
if self.grblQuery.isActif():
146+
self.grblQuery.stop()
128147

129148
def on_cmbPort_changed(self):
130149
print(self.ui.cmbPort.currentIndex())
131150
print(self.ui.cmbPort.currentText())
132-
if self.ui.cmbPort.currentText() == "":
133-
self.ui.cmbBauds.setEnabled(False)
134-
self.ui.btnConnect.setEnabled(False)
135-
else:
136-
self.ui.cmbBauds.setEnabled(True)
137-
self.ui.btnConnect.setEnabled(True)
151+
self.setConnectControlsStatus()
138152

139153
def sendCmd(self):
140154
if self.ui.txtGCode.text() != "":
141155
buffWrite = bytes(self.ui.txtGCode.text() + "\n", sys.getdefaultencoding())
142156
self.serial.lePort.write(buffWrite)
143157
self.ui.txtGCode.setSelection(0,len(self.ui.txtGCode.text()))
144158

159+
def txtGCode_on_Change(self):
160+
if self.ui.txtGCode.text() == "?":
161+
self.sendCmd() # Envoi direct si ?
162+
145163
def readSerial(self):
146164
print("Lecture des données...")
147165
s = ''

grblDecode.py

+44-6
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
class grblDecode:
88
''' Classe de décodage des réponses de GRBL '''
99
def __init__(self, ui):
10-
lblPosX = ui.lblPosX
11-
lblPosX = ui.lblPosX
12-
lblPosX = ui.lblPosX
13-
lblPosX = ui.lblPosX
14-
lblPosX = ui.lblPosX
10+
self.lblPosX = ui.lblPosX
11+
self.lblPosY = ui.lblPosY
12+
self.lblPosZ = ui.lblPosZ
13+
self.lblPosA = ui.lblPosA
14+
self.lblPosB = ui.lblPosB
1515
self.ui = ui
1616
pass
1717

@@ -42,6 +42,44 @@ def setReply(self, grblOutput):
4242

4343
elif grblOutput[0] == "<" and grblOutput[-1] == ">":
4444
print("{" + grblOutput[1:-1] + "}")
45+
tblDecode = grblOutput[1:-1].split("|")
46+
for D in tblDecode:
47+
print("D = {" + D + "}")
48+
print("D[:5] = {" + D[:5] + "}")
49+
# Valid machin state : Idle, Run, Hold, Jog, Alarm, Door, Check, Home, Sleep
50+
if D == "Idle":
51+
print("Machine Idle")
52+
pass
53+
elif D == "Run":
54+
pass
55+
elif D == "Hold":
56+
#- `Hold:0` Hold complete. Ready to resume.
57+
#- `Hold:1` Hold in-progress. Reset will throw an alarm.
58+
pass
59+
elif D == "Jog":
60+
pass
61+
elif D == "Alarm":
62+
pass
63+
elif D == "Door":
64+
#- `Door:0` Door closed. Ready to resume.
65+
#- `Door:1` Machine stopped. Door still ajar. Can't resume until closed.
66+
#- `Door:2` Door opened. Hold (or parking retract) in-progress. Reset will throw an alarm.
67+
#- `Door:3` Door closed and resuming. Restoring from park, if applicable. Reset will throw an alarm.
68+
pass
69+
elif D == "Check":
70+
pass
71+
elif D == "Home":
72+
pass
73+
elif D == "Sleep":
74+
pass
75+
# Machine position
76+
elif D[:5] == "MPos:":
77+
print("Position machine trouvée")
78+
tblPos = D[5:].split(",")
79+
self.lblPosX.setText('{:+0.3f}'.format(float(tblPos[0])))
80+
self.lblPosY.setText('{:+0.3f}'.format(float(tblPos[1])))
81+
self.lblPosZ.setText('{:+0.3f}'.format(float(tblPos[2])))
82+
self.lblPosA.setText('{:+0.3f}'.format(float(tblPos[3])))
83+
self.lblPosB.setText('{:+0.3f}'.format(float(tblPos[4])))
4584

4685
return grblOutput
47-
pass

grblQueryTimer.py

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# -*- coding: UTF-8 -*-
2+
3+
from PyQt5.QtWidgets import *
4+
from PyQt5.QtCore import QThread, QTimer, QEventLoop, pyqtSignal
5+
6+
class grblQueryThread(QThread):
7+
8+
def __init__(self, *args, **kwargs):
9+
QThread.__init__(self, *args, **kwargs)
10+
self._Actif = False
11+
self.grblQueryTimer.moveToThread(self)
12+
self.grblQueryTimer.timeout.connect(self.grblSendQuery)
13+
14+
def run(self):
15+
self.grblQueryTimer.start(1000)
16+
self._Actif = True
17+
loop = QEventLoop()
18+
loop.exec_()
19+
20+
def stop(self):
21+
self.grblQueryTimer.stop()
22+
self._Actif = False
23+
24+
def isActif(self):
25+
return self._Actif
26+
27+
def grblSendQuery(self):
28+
print ("Sending query to Grbl")
29+

0 commit comments

Comments
 (0)