Skip to content

Commit 7e97a2c

Browse files
committed
Tool change beta to verify
1 parent c5daf84 commit 7e97a2c

19 files changed

+89374
-88964
lines changed

Plaque01.ngc

-587
This file was deleted.

cn5X.py

+90-29
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,9 @@ def arretUrgence():
226226
self.ui.mnuConfirm_Go_to_G30.triggered.connect(self.on_mnuConfirm_Go_to_G30)
227227
self.ui.mnuConfirm_define_G28.triggered.connect(self.on_mnuConfirm_define_G28)
228228
self.ui.mnuConfirm_define_G30.triggered.connect(self.on_mnuConfirm_define_G30)
229-
229+
self.ui.mnuPrefToolChange.triggered.connect(self.on_mnuPrefToolChange)
230+
self.ui.mnuIgnoreFirstToolChange.triggered.connect(self.on_mnuIgnoreFirstToolChange)
231+
230232
self.ui.mnuAppQuitter.triggered.connect(self.on_mnuAppQuitter)
231233

232234
self.ui.mnu_GrblConfig.triggered.connect(self.on_mnu_GrblConfig)
@@ -245,7 +247,7 @@ def arretUrgence():
245247
self.ui.mnuSaveG92.triggered.connect(self.on_mnuSaveG92)
246248
self.ui.mnuRestoreG92.triggered.connect(self.on_mnuRestoreG92)
247249
self.ui.mnuG92_1.triggered.connect(self.on_mnuG92_1)
248-
250+
249251
self.ui.mnuJog_to.triggered.connect(self.on_mnuJog_to)
250252
self.ui.mnuToolChange.triggered.connect(self.on_mnuToolChange)
251253

@@ -383,6 +385,7 @@ def arretUrgence():
383385
self.ui.btnSetOriginZ.clicked.connect(self.on_btnSetOriginZ)
384386
self.ui.chkSeekZ.clicked.connect(self.on_chkSeekZ)
385387
self.ui.chkSeekXY.clicked.connect(self.on_chkSeekXY)
388+
self.ui.chkInvertProbePinZ.clicked.connect(self.on_chkInvertProbePinZ)
386389

387390
# Onglet probe XY
388391
self.ui.dsbToolDiameter.valueChanged.connect(self.on_dsbToolDiameterValueChanged)
@@ -405,6 +408,7 @@ def arretUrgence():
405408
self.ui.btnHomePlusX.clicked.connect(lambda: self.on_btnHomeXY("plusX"))
406409
self.ui.btnHomePlusY.clicked.connect(lambda: self.on_btnHomeXY("plusY"))
407410
self.ui.btnResetResults.clicked.connect(self.resetProbeResults)
411+
self.ui.chkInvertProbePinXY.clicked.connect(self.on_chkInvertProbePinXY)
408412

409413
#--------------------------------------------------------------------------------------
410414
# Traitement des arguments de la ligne de commande
@@ -438,15 +442,16 @@ def arretUrgence():
438442

439443
# Initialise la boite de progression d'un fichier programme GCode
440444
self.__pBox = qwProgressBox(self)
441-
self.__pBoxArmee = False
445+
self.__pBox.setDecoder(self.__decode)
442446

443447
# Restore le curseur souris sablier en fin d'initialisation
444448
QtWidgets.QApplication.restoreOverrideCursor()
445449

446450
### GBGB tests ###
447451
###print(locale.getlocale(locale.LC_TIME))
448452
###print(datetime.now().strftime("%A %x %H:%M:%S"))
449-
### Pour debug de qwProgressBox ### self.__pBox.start()
453+
### Pour debug de qwProgressBox
454+
###self.__pBox.start()
450455

451456

452457
def populatePortList(self):
@@ -679,6 +684,8 @@ def on_mnuPreferences(self):
679684
self.ui.mnuConfirm_Go_to_G30.setChecked(not self.__settings.value("dontConfirmG30", False, type=bool))
680685
self.ui.mnuConfirm_define_G28.setChecked(not self.__settings.value("dontConfirmG28.1", False, type=bool))
681686
self.ui.mnuConfirm_define_G30.setChecked(not self.__settings.value("dontConfirmG30.1", False, type=bool))
687+
self.ui.mnuPrefToolChange.setChecked(self.__settings.value("useToolChange", True, type=bool))
688+
self.ui.mnuIgnoreFirstToolChange.setChecked(self.__settings.value("ignoreFirstToolChange", False, type=bool))
682689

683690

684691
@pyqtSlot()
@@ -701,6 +708,16 @@ def on_mnuConfirm_define_G30(self):
701708
self.__settings.setValue("dontConfirmG30.1", not self.ui.mnuConfirm_define_G30.isChecked())
702709

703710

711+
@pyqtSlot()
712+
def on_mnuPrefToolChange(self):
713+
self.__settings.setValue("useToolChange", self.ui.mnuPrefToolChange.isChecked())
714+
715+
716+
@pyqtSlot()
717+
def on_mnuIgnoreFirstToolChange(self):
718+
self.__settings.setValue("ignoreFirstToolChange", self.ui.mnuIgnoreFirstToolChange.isChecked())
719+
720+
704721
@pyqtSlot()
705722
def on_mnuAppQuitter(self):
706723
self.close()
@@ -880,10 +897,6 @@ def on_dlgJogFinished(self):
880897
def on_mnuToolChange(self):
881898
''' Appel de la boite de dialogue de changement d'outils '''
882899
RC = self.__dlgToolChange.showDialog()
883-
if RC == QtWidgets.QDialog.Accepted:
884-
print("Changement d'outil OK")
885-
else:
886-
print("Changement d'outil annulé")
887900

888901

889902
@pyqtSlot()
@@ -977,6 +990,9 @@ def on_qtabMain_currentChanged(self, tabIndex):
977990
self.ui.rbtMove2PointAfterXY.setChecked(self.__settings.value("Probe/go2PointXY", DEFAULT_PROBE_GO_2_POINT_AFTER_XY, type=bool))
978991
self.ui.rbtRetractAfterXY.setChecked(self.__settings.value("Probe/RetractAfterXY", DEFAULT_PROBE_RETRACT_AFTER_XY, type=bool))
979992
self.ui.dsbRetractXY.setValue(self.__settings.value("Probe/RetractDistanceXY", DEFAULT_PROBE_RETRACT_DISTANCE_AFTER_XY, type=float))
993+
# case a cocher invert probe pin
994+
if self.__decode.getGrblSetting(6) is not None:
995+
self.ui.chkInvertProbePinXY.setChecked((int(self.__decode.getGrblSetting(6)) == 1))
980996

981997
elif tabIndex == CN5X_TAB_PROBE_Z:
982998
self.ui.dsbDistanceZ.setValue(self.__settings.value("Probe/DistanceZ", DEFAULT_PROBE_DISTANCE, type=float))
@@ -995,6 +1011,9 @@ def on_qtabMain_currentChanged(self, tabIndex):
9951011
self.ui.dsbToolLengthSensorZ.setValue(self.__settings.value("Probe/ToolChangePositionZ", DEFAULT_TOOLCHANGE_POSITION_Z, type=float))
9961012
self.ui.dsbToolLengthSensorX.setValue(self.__settings.value("Probe/ToolChangePositionX", DEFAULT_TOOLCHANGE_POSITION_X, type=float))
9971013
self.ui.dsbToolLengthSensorY.setValue(self.__settings.value("Probe/ToolChangePositionY", DEFAULT_TOOLCHANGE_POSITION_Y, type=float))
1014+
# case a cocher invert probe pin
1015+
if self.__decode.getGrblSetting(6) is not None:
1016+
self.ui.chkInvertProbePinZ.setChecked((int(self.__decode.getGrblSetting(6)) == 1))
9981017

9991018

10001019
@pyqtSlot()
@@ -1841,6 +1860,26 @@ def on_chkSeekXY(self):
18411860
self.ui.dsbPullOffXY.setEnabled(False)
18421861

18431862

1863+
@pyqtSlot()
1864+
def on_chkInvertProbePinZ(self):
1865+
if self.ui.chkInvertProbePinZ.isChecked():
1866+
self.__grblCom.gcodePush("$6=1")
1867+
self.__grblCom.gcodePush(CMD_GRBL_GET_SETTINGS)
1868+
else:
1869+
self.__grblCom.gcodePush("$6=0")
1870+
self.__grblCom.gcodePush(CMD_GRBL_GET_SETTINGS)
1871+
1872+
1873+
@pyqtSlot()
1874+
def on_chkInvertProbePinXY(self):
1875+
if self.ui.chkInvertProbePinXY.isChecked():
1876+
self.__grblCom.gcodePush("$6=1")
1877+
self.__grblCom.gcodePush(CMD_GRBL_GET_SETTINGS)
1878+
else:
1879+
self.__grblCom.gcodePush("$6=0")
1880+
self.__grblCom.gcodePush(CMD_GRBL_GET_SETTINGS)
1881+
1882+
18441883
@pyqtSlot(str)
18451884
def on_sig_config_changed(self, data: str):
18461885
self.log(logSeverity.info.value, self.tr("Grbl configuration updated: {}").format(data))
@@ -2205,8 +2244,11 @@ def on_sig_error(self, errNum: int):
22052244
self.__cycleRun = False
22062245
self.__cyclePause = False
22072246
# Masque de la boite de progression
2208-
if self.__pBox.isVisible():
2209-
self.__pBox.stop()
2247+
if self.__pBox.isVisible():
2248+
if self.__pBox.autoClose():
2249+
self.__pBox.stop()
2250+
else:
2251+
self.__pBox.enableClose()
22102252

22112253

22122254
@pyqtSlot(int)
@@ -2217,22 +2259,19 @@ def on_sig_alarm(self, alarmNum: int):
22172259
self.__grblCom.clearCom() # Vide la file d'attente de communication
22182260
self.__cycleRun = False
22192261
self.__cyclePause = False
2220-
# Masque de la boite de progression
2221-
if self.__pBox.isVisible():
2222-
self.__pBox.stop()
2262+
# Masque de la boite de progression
2263+
if self.__pBox.isVisible():
2264+
if self.__pBox.autoClose():
2265+
self.__pBox.stop()
2266+
else:
2267+
self.__pBox.enableClose()
22232268

22242269

22252270
@pyqtSlot(str)
22262271
def on_sig_status(self, data: str):
22272272
retour = self.__decode.decodeGrblStatus(data)
22282273
if retour != "":
22292274
self.logGrbl.append(retour)
2230-
if self.__cycleRun and self.__decode.get_etatMachine() == GRBL_STATUS_RUN:
2231-
self.__pBoxArmee = True
2232-
# Masque de la boite de progression
2233-
if (self.__decode.get_etatMachine() == GRBL_STATUS_IDLE) and self.__pBox.isVisible() and self.__pBoxArmee:
2234-
#print(self.__decode.get_etatMachine())
2235-
self.__pBox.stop()
22362275

22372276

22382277
@pyqtSlot(str)
@@ -2282,6 +2321,7 @@ def on_sig_config(self, data: str):
22822321

22832322
@pyqtSlot(str)
22842323
def on_sig_emit(self, data: str):
2324+
trouve = False
22852325
if data != "":
22862326
self.logGrbl.append(data)
22872327
if self.__cycleRun:
@@ -2291,15 +2331,17 @@ def on_sig_emit(self, data: str):
22912331
idx = self.ui.gcodeTable.model().index(ligne, 0, QModelIndex())
22922332
if self.ui.gcodeTable.model().data(idx) == data:
22932333
self.__gcodeFile.selectGCodeFileLine(ligne)
2334+
trouve = True
22942335
break
22952336
else:
22962337
ligne += 1
22972338
# Mise à jour de la progressBox
2298-
self.__pBox.setValue(ligne + 1)
2339+
if trouve:
2340+
self.__pBox.setValue(ligne + 1)
2341+
# On affiche le dernier commentaire rencontré dans la progressBox
22992342
if data[:1] == '(' and data[-1:] == ")":
23002343
self.__pBox.setComment(data)
23012344

2302-
23032345
@pyqtSlot(str)
23042346
def on_sig_recu(self, data: str):
23052347
pass
@@ -2383,7 +2425,6 @@ def clearDebug(self):
23832425

23842426

23852427
def startCycle(self, startFrom: int = 0):
2386-
23872428

23882429
if self.ui.gcodeTable.model().rowCount()<=0:
23892430
self.log(logSeverity.warning.value, self.tr("Attempt to start an empty cycle..."))
@@ -2392,18 +2433,34 @@ def startCycle(self, startFrom: int = 0):
23922433

23932434
# Affichage de la boite de progression
23942435
self.__pBox.setRange(startFrom, self.ui.gcodeTable.model().rowCount())
2395-
self.__pBoxArmee = False
23962436
self.__pBox.start()
23972437

23982438
self.__gcodeFile.selectGCodeFileLine(0)
23992439
self.__cycleRun = True
24002440
self.__cyclePause = False
2401-
2441+
24022442
self.__gcodeFile.enQueue(self.__grblCom, startFrom)
2403-
2404-
self.ui.btnStart.setButtonStatus(True)
2443+
2444+
# Attente de la fin du traitement par Grbl
2445+
tDebut = time.time()
2446+
while (time.time() - tDebut) * 1000 < 2 * GRBL_QUERY_DELAY:
2447+
QCoreApplication.processEvents()
2448+
while self.__decode.get_etatMachine() != GRBL_STATUS_IDLE:
2449+
QCoreApplication.processEvents()
2450+
2451+
self.log(logSeverity.info.value, self.tr("Cycle completed."))
2452+
2453+
self.__pBox.setComment(self.tr("GCode finished at: {}").format(datetime.now().strftime("%A %x %H:%M:%S")))
2454+
2455+
self.ui.btnStart.setButtonStatus(False)
24052456
self.ui.btnPause.setButtonStatus(False)
2406-
self.ui.btnStop.setButtonStatus(False)
2457+
self.ui.btnStop.setButtonStatus(True)
2458+
2459+
if self.__pBox.isVisible():
2460+
if self.__pBox.autoClose():
2461+
self.__pBox.stop()
2462+
else:
2463+
self.__pBox.enableClose()
24072464

24082465

24092466
def pauseCycle(self):
@@ -2454,11 +2511,15 @@ def stopCycle(self):
24542511
self.__cycleRun = False
24552512
self.__cyclePause = False
24562513
# Masque de la boite de progression
2457-
self.__pBox.stop()
2514+
if self.__pBox.isVisible():
2515+
if self.__pBox.autoClose():
2516+
self.__pBox.stop()
2517+
else:
2518+
self.__pBox.enableClose()
24582519
self.ui.btnStart.setButtonStatus(False)
24592520
self.ui.btnPause.setButtonStatus(False)
24602521
self.ui.btnStop.setButtonStatus(True)
2461-
self.log(logSeverity.info.value, self.tr("Cycle completed."))
2522+
self.log(logSeverity.info.value, self.tr("Cycle stopped."))
24622523

24632524

24642525
def on_gcodeTableContextMenu(self, event):

cn5X.qrc

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<RCC>
22
<qresource prefix="cn5X">
3+
<file>images/btnClose.svg</file>
34
<file>images/ledVerteAlumee.svg</file>
45
<file>images/btnGo.svg</file>
56
<file>images/fraise.svg</file>

cn5X_config.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
' '
55
' Copyright 2018-2022 Gauthier Brière (gauthier.briere "at" gmail.com) '
66
' '
7-
' This file is part of cn5X++ '
7+
' This file: cn5X_config.py is part of cn5X++ '
88
' '
99
' cn5X++ is free software: you can redistribute it and/or modify it '
1010
' under the terms of the GNU General Public License as published by '
@@ -43,6 +43,9 @@ class logSeverity(Enum):
4343
warning = 1
4444
error = 2
4545

46+
''' Mots GCode valides (cf. http://linuxcnc.org/docs/html/gcode/overview_fr.html) '''
47+
VALIDES_GCODE_WORDS = "ABCDFGHIJKMNPQRSTUVWXYZ"
48+
4649
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
4750
' '
4851
' Definition des commandes de GRBL '

0 commit comments

Comments
 (0)