@@ -42,9 +42,9 @@ def __init__(self, parent=None):
42
42
self .__grblCom .sig_data_debug .connect (self .on_communicator_debug ) # Tous les messages de Grbl
43
43
44
44
self .__connectionStatus = False
45
+ self .__arretUrgence = True
45
46
46
47
pathname = os .path .abspath (os .path .dirname (sys .argv [0 ]))
47
- print (pathname )
48
48
os .chdir (pathname )
49
49
50
50
"""---------- Préparation de l'interface ----------"""
@@ -64,8 +64,11 @@ def __init__(self, parent=None):
64
64
# on affiche une chaine vide texte en bas de la fenêtre (status bar)
65
65
self .ui .statusBar .showMessage ("" )
66
66
67
+ # Positionne l'état d'activation des contrôles
68
+ self .setEnableDisableGroupes ()
69
+
67
70
"""---------- Connections des évennements traités ----------"""
68
- self .ui .btnUrgence .pressed .connect (self .arretUrgence ) # Evenements du bouton d'arrêt d'urgence
71
+ self .ui .btnUrgence .pressed .connect (self .on_arretUrgence ) # Evenements du bouton d'arrêt d'urgence
69
72
self .ui .cmbPort .currentIndexChanged .connect (self .on_cmbPort_changed ) # un clic sur un élément de la liste appellera la méthode 'on_cmbPort_changed'
70
73
self .ui .mnuAppOuvrir .triggered .connect (self .on_mnuAppOuvrir ) # Connexions des routines du menu application
71
74
self .ui .mnuAppQuitter .triggered .connect (self .on_mnuAppQuitter )
@@ -80,6 +83,9 @@ def __init__(self, parent=None):
80
83
self .ui .btnStartTimer .clicked .connect (self .startTimer )
81
84
self .ui .btnStopTimer .clicked .connect (self .stopTimer )
82
85
self .ui .btnClearDebug .clicked .connect (self .clearDebug )
86
+ self .ui .btnFloodM7 .clicked .connect (self .on_btnFloodM7 )
87
+ self .ui .btnFloodM8 .clicked .connect (self .on_btnFloodM8 )
88
+ self .ui .btnFloodM9 .clicked .connect (self .on_btnFloodM9 )
83
89
84
90
def populatePortList (self ):
85
91
''' Rempli la liste des ports série '''
@@ -102,18 +108,58 @@ def populatePortList(self):
102
108
if len (QSerialPortInfo .availablePorts ()) == 1 :
103
109
self .ui .cmbPort .setCurrentIndex (1 )
104
110
105
- self .setConnectControlsStatus ()
111
+ self .setEnableDisableConnectControls ()
106
112
107
- def setConnectControlsStatus (self ):
113
+ def setEnableDisableConnectControls (self ):
108
114
'''
109
- Active ou désactive les contrôles de connexion en fonction de l'état de sélection du port
115
+ Active ou désactive les contrôles de connexion en fonction de
116
+ l'état de connection et de sélection du port
110
117
'''
111
- if self .ui .cmbPort .currentText () == "" :
118
+ if self .__connectionStatus :
119
+ self .ui .cmbPort .setEnabled (False )
112
120
self .ui .cmbBauds .setEnabled (False )
113
- self .ui .btnConnect .setEnabled (False )
114
- else :
115
- self .ui .cmbBauds .setEnabled (True )
116
121
self .ui .btnConnect .setEnabled (True )
122
+ else :
123
+ self .ui .cmbPort .setEnabled (True )
124
+ if self .ui .cmbPort .currentText () == "" :
125
+ self .ui .cmbBauds .setEnabled (False )
126
+ self .ui .btnConnect .setEnabled (False )
127
+ else :
128
+ self .ui .cmbBauds .setEnabled (True )
129
+ self .ui .btnConnect .setEnabled (True )
130
+
131
+ def setEnableDisableGroupes (self ):
132
+ '''
133
+ Détermine l'état Enable/Disable des différents groupes de contrôles
134
+ en fonction de l'état de connexion et de l'état du bouton d'arrêt d'urgence.
135
+ '''
136
+ if not self .__connectionStatus :
137
+ # Pas connecté, tout doit être désactivé et l'arrêt d'urgence enfoncé
138
+ self .ui .btnUrgence .setIcon (QtGui .QIcon ('images/btnUrgenceOff.svg' ))
139
+ self .ui .btnUrgence .setToolTip ("Double clic pour\n dévérouiller l'arrêt d'urgence" )
140
+ self .ui .frmArretUrgence .setEnabled (False )
141
+ self .ui .frmControleVitesse .setEnabled (False )
142
+ self .ui .grpJog .setEnabled (False )
143
+ self .ui .frmGcodeInput .setEnabled (False )
144
+ self .ui .frmBoutons .setEnabled (False )
145
+ elif self .__arretUrgence :
146
+ # Connecté mais sous arrêt d'urgence : Tout est désactivé sauf l'arrêt d'urgence
147
+ self .ui .btnUrgence .setIcon (QtGui .QIcon ('images/btnUrgenceOff.svg' ))
148
+ self .ui .btnUrgence .setToolTip ("Double clic pour\n dévérouiller l'arrêt d'urgence" )
149
+ self .ui .frmArretUrgence .setEnabled (True )
150
+ self .ui .frmControleVitesse .setEnabled (False )
151
+ self .ui .grpJog .setEnabled (False )
152
+ self .ui .frmGcodeInput .setEnabled (False )
153
+ self .ui .frmBoutons .setEnabled (False )
154
+ else :
155
+ # Tout est en ordre, on active tout
156
+ self .ui .btnUrgence .setIcon (QtGui .QIcon ('images/btnUrgence.svg' ))
157
+ self .ui .btnUrgence .setToolTip ("Arrêt d'urgence" )
158
+ self .ui .frmArretUrgence .setEnabled (True )
159
+ self .ui .frmControleVitesse .setEnabled (True )
160
+ self .ui .grpJog .setEnabled (True )
161
+ self .ui .frmGcodeInput .setEnabled (True )
162
+ self .ui .frmBoutons .setEnabled (True )
117
163
118
164
@pyqtSlot ()
119
165
def on_mnuAppOuvrir (self ):
@@ -133,72 +179,94 @@ def closeEvent(self, event):
133
179
event .accept () # let the window close
134
180
135
181
def on_mnu_MPos (self , check ):
136
- print ("Le menu est : " , check )
182
+ if check :
183
+ param10 = 255 # Le bit 1 est à 1
184
+ self .__grblCom .sendLine ("$10=" + str (param10 ))
137
185
pass
138
186
139
187
def on_mnu_WPos (self , check ):
140
- print ("Le menu est : " , check )
188
+ if check :
189
+ param10 = 255 ^ 1 # Met le bit 1 à 0
190
+ self .__grblCom .sendLine ("$10=" + str (param10 ))
141
191
pass
142
192
143
- def arretUrgence (self ):
144
- print ("Arrêt d'urgence détecté !" )
145
- if not (self .ui .btnUrgence .isChecked ()):
146
- print ("STOP !!!" )
147
- self .ui .btnUrgence .setIcon (QtGui .QIcon ('images/btnUrgenceOff.svg' ))
148
- self .ui .btnStart .setEnabled (False )
149
- self .ui .btnStop .setEnabled (False )
150
- self .ui .btnUrgence .setToolTip ("Double clic pour\n dévérouiller l'arrêt d'urgence" )
151
- else :
193
+ def on_arretUrgence (self ):
194
+ if self .__arretUrgence :
195
+ # L'arrêt d'urgence est actif, on doit faire un double click pour le désactiver
152
196
if not self .timerDblClic .isActive ():
153
197
# On est pas dans le timer du double click,
154
- # c'est donc un simple click qui ne suffit pas à déverrouiller le bouton d'arrêt d'urgence.
198
+ # c'est donc un simple click qui ne suffit pas à déverrouiller le bouton d'arrêt d'urgence,
199
+ # C'est le premier click, On active le timer pour voir le le 2ème sera dans le temp imparti
155
200
self .timerDblClic .setSingleShot (True )
156
201
self .timerDblClic .start (QtWidgets .QApplication .instance ().doubleClickInterval ())
157
- self .ui .btnUrgence .setChecked (False )
158
202
else :
159
- print ("Double click détecté," )
160
- print (self .timerDblClic .remainingTime ()) # Double clic détecté
203
+ # self.timerDblClic.remainingTime() > 0 # Double clic détecté
161
204
self .timerDblClic .stop ()
162
- print ("On relance :-)" )
163
- self .ui .btnUrgence .setIcon (QtGui .QIcon ('images/btnUrgence.svg' ))
164
- self .ui .btnStart .setEnabled (True )
165
- self .ui .btnStop .setEnabled (True )
166
- self .ui .btnUrgence .setToolTip ("Arrêt d'urgence" )
205
+ self .__arretUrgence = False
206
+ else :
207
+ self .__grblCom .sendData (chr (0x18 )) # Envoi direct Ctrl+X.
208
+ self .__arretUrgence = True
209
+ print ("Arrêt d'urgence STOP !!!" )
210
+
211
+ # Actualise l'état actif/inactif des groupes de contrôles de pilotage de Grbl
212
+ self .setEnableDisableGroupes ()
167
213
168
214
def action_btnConnect (self ):
169
215
if self .ui .btnConnect .text () == "Connecter" :
170
- print ('Appui bouton Connecter.' )
171
216
# Recupère les coordonnées et paramètres du port à connecter
172
217
serialDevice = self .ui .cmbPort .currentText ()
173
218
serialDevice = serialDevice .split ("-" )
174
219
serialDevice = serialDevice [0 ].strip ()
175
220
baudRate = int (self .ui .cmbBauds .currentText ())
176
- print ( " Démarrage du communicator" )
221
+ # Démarrage du communicator
177
222
self .__grblCom .startCommunicator (serialDevice , baudRate )
178
- self .__connectionStatus = True
179
-
223
+ # Mise à jour de l'interface
180
224
self .ui .lblConnectStatus .setText ("Connecté à " + serialDevice )
181
- self .ui .cmbPort .setEnabled (False )
182
- self .ui .cmbBauds .setEnabled (False )
183
225
self .ui .btnConnect .setText ("Déconnecter" ) # La prochaine action du bouton sera pour déconnecter
226
+ self .setEnableDisableConnectControls ()
227
+ self .__connectionStatus = True
228
+ # Active les groupes de contrôles de pilotage de Grbl
229
+ self .setEnableDisableGroupes ()
230
+
184
231
else :
185
- print ( 'Appui bouton Déconnecter.' )
232
+ # Arret du comunicator
186
233
self .__grblCom .stopCommunicator ()
187
234
self .__connectionStatus = False
188
-
189
- self .ui .statusBar .showMessage ("" )
235
+ # Mise à jour de l'interface
190
236
self .ui .lblConnectStatus .setText ("<Non Connecté>" )
191
- self .ui .cmbPort .setEnabled (True )
192
- self .ui .cmbBauds .setEnabled (True )
193
237
self .ui .btnConnect .setText ("Connecter" ) # La prochaine action du bouton sera pour connecter
238
+ self .ui .statusBar .showMessage ("" )
239
+ self .setEnableDisableConnectControls ()
240
+ # Force la position de l'arrêt d'urgence
241
+ self .__arretUrgence = True
242
+ # Active les groupes de contrôles de pilotage de Grbl
243
+ self .setEnableDisableGroupes ()
194
244
195
245
def on_cmbPort_changed (self ):
196
- self .setConnectControlsStatus ()
246
+ self .setEnableDisableConnectControls ()
247
+
248
+ def on_btnFloodM7 (self ):
249
+ if self .decode .get_etatArrosage () != "M7" and self .decode .get_etatArrosage () != "M78" :
250
+ # Envoi "Real Time Command" plutôt que self.__grblCom.enQueue("M7")
251
+ self .__grblCom .sendData (chr (0xA1 ))
252
+
253
+ def on_btnFloodM8 (self ):
254
+ if self .decode .get_etatArrosage () != "M8" and self .decode .get_etatArrosage () != "M78" :
255
+ # Envoi "Real Time Command" plutôt que self.__grblCom.enQueue("M8")
256
+ self .__grblCom .sendData (chr (0xA0 ))
257
+
258
+ def on_btnFloodM9 (self ):
259
+ if self .decode .get_etatArrosage () == "M7" or self .decode .get_etatArrosage () == "M78" :
260
+ # Envoi "Real Time Command"
261
+ self .__grblCom .sendData (chr (0xA1 ))
262
+ if self .decode .get_etatArrosage () == "M8" or self .decode .get_etatArrosage () == "M78" :
263
+ # Envoi "Real Time Command" plutôt que self.__grblCom.enQueue("M9")
264
+ self .__grblCom .sendData (chr (0xA0 ))
197
265
198
266
def sendCmd (self ):
199
267
if self .ui .txtGCode .text () != "" :
200
268
self .logGrbl .append (self .ui .txtGCode .text ().upper ())
201
- self .__grblCom .sendLine (self .ui .txtGCode .text ())
269
+ self .__grblCom .enQueue (self .ui .txtGCode .text ())
202
270
self .ui .txtGCode .setSelection (0 ,len (self .ui .txtGCode .text ()))
203
271
self .ui .txtGCode .setFocus ()
204
272
@@ -248,7 +316,7 @@ def on_communicator_status(self, data: str):
248
316
def on_communicator_data (self , data : str ):
249
317
retour = self .decode .decodeGrblData (data )
250
318
if retour is not None and retour != "" :
251
- self .logGrbl .append (">" + retour )
319
+ self .logGrbl .append (retour )
252
320
253
321
@pyqtSlot (str )
254
322
def on_communicator_debug (self , data : str ):
0 commit comments