Skip to content

Commit c5daf84

Browse files
committed
première version avec boite de dialogue toolChange alpha
1 parent f6fe40b commit c5daf84

17 files changed

+95740
-94389
lines changed

cn5X.py

+79-49
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,6 @@ def __init__(self, parent=None):
105105
self.logDebug.document().setMaximumBlockCount(2000) # Limite la taille des logs a 2000 lignes
106106
self.ui.qtabConsole.setCurrentIndex(CN5X_TAB_LOG) # Active le tab de la log cn5X++
107107

108-
self.__gcodeFile = gcodeFile(self.ui, self.ui.gcodeTable)
109-
self.__gcodeFile.sig_log.connect(self.on_sig_log)
110-
111108
self.timerDblClic = QtCore.QTimer()
112109

113110
self.__grblCom = grblCom()
@@ -127,23 +124,28 @@ def __init__(self, parent=None):
127124
self.__grblCom.sig_serialLock.connect(self.on_sig_serialLock)
128125

129126
self.__beeper = cn5XBeeper();
130-
127+
131128
self.__arretUrgence = True
132129
def arretUrgence():
133130
return self.__arretUrgence
134131

135132
self.__decode = grblDecode(self.ui, self.log, self.__grblCom, self.__beeper, arretUrgence)
136133
self.__grblCom.setDecodeur(self.__decode)
137134

135+
# Boite de dialogue de changement d'outils
136+
self.__dlgToolChange = dlgToolChange(self, self.__grblCom, self.__decode, DEFAULT_NB_AXIS, DEFAULT_AXIS_NAMES)
137+
self.__dlgToolChange.setParent(self)
138+
139+
self.__gcodeFile = gcodeFile(self.ui, self.ui.gcodeTable, self.__dlgToolChange)
140+
self.__gcodeFile.sig_log.connect(self.on_sig_log)
141+
138142
self.__jog = grblJog(self.__grblCom)
139143
self.ui.dsbJogSpeed.setValue(DEFAULT_JOG_SPEED)
140144
self.ui.dsbJogSpeed.valueChanged.connect(self.on_dsbJogSpeed_valueChanged)
141145

142146
self.__probe = grblProbe(self.__grblCom)
143147
self.__probe.sig_log.connect(self.on_sig_log)
144148
self.__probeResult = None
145-
self.__initialToolLenght = False
146-
self.__initialProbeZ = False
147149

148150
self.__connectionStatus = False
149151
self.__cycleRun = False
@@ -203,6 +205,11 @@ def arretUrgence():
203205
# Flag pour unicité de la boite de dialogue Jog
204206
self.dlgJog = None
205207

208+
self.iconLinkOn = QtGui.QIcon()
209+
self.iconLinkOff = QtGui.QIcon()
210+
self.iconLinkOn.addPixmap(QtGui.QPixmap(":/cn5X/images/btnLinkOn.svg"), QtGui.QIcon.Normal, QtGui.QIcon.On)
211+
self.iconLinkOff.addPixmap(QtGui.QPixmap(":/cn5X/images/btnLinkOff.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
212+
206213
'''---------- Connections des evennements de l'interface graphique ----------'''
207214

208215
self.ui.btnUrgence.pressed.connect(self.on_arretUrgence) # Evenements du bouton d'arret d'urgence
@@ -369,6 +376,7 @@ def arretUrgence():
369376

370377
# Boutons de probe Z
371378
self.ui.btnProbeZ.clicked.connect(self.on_btnProbeZ)
379+
self.ui.btnSaveToolChangePosition.clicked.connect(self.on_btnSaveToolChangePosition)
372380
self.ui.btnGoToSensor.clicked.connect(self.on_btnGoToSensor)
373381
self.ui.btnG49.clicked.connect(self.on_btnG49)
374382
self.ui.btnG43_1.clicked.connect(self.on_btnG43_1)
@@ -871,20 +879,12 @@ def on_dlgJogFinished(self):
871879

872880
def on_mnuToolChange(self):
873881
''' Appel de la boite de dialogue de changement d'outils '''
874-
self.dlgToolChange = dlgToolChange(self.__grblCom, self.__decode, self.__nbAxis, self.__axisNames)
875-
self.dlgToolChange.setParent(self)
876-
self.dlgToolChange.sig_close.connect(self.on_dlgToolChangeFinished)
877-
RC = self.dlgToolChange.showDialog()
882+
RC = self.__dlgToolChange.showDialog()
878883
if RC == QtWidgets.QDialog.Accepted:
879884
print("Changement d'outil OK")
880885
else:
881886
print("Changement d'outil annulé")
882887

883-
def on_dlgToolChangeFinished(self):
884-
''' Supression de la boite de dialogue après fermeture '''
885-
self.dlgToolChange.sig_close.disconnect(self.on_dlgToolChangeFinished)
886-
self.dlgToolChange = None
887-
888888

889889
@pyqtSlot()
890890
def on_mnuPredefinedLocations(self):
@@ -992,8 +992,9 @@ def on_qtabMain_currentChanged(self, tabIndex):
992992
self.ui.rbtDefineOriginZ_G54.setChecked(self.__settings.value("Probe/DefineOriginZ_G54", DEFAULT_PROBE_ORIGINE_G54_Z, type=bool))
993993
self.ui.rbtDefineOriginZ_G92.setChecked(self.__settings.value("Probe/DefineOriginZ_G92", DEFAULT_PROBE_ORIGINE_G92_Z, type=bool))
994994
self.ui.dsbOriginOffsetZ.setValue(self.__settings.value("Probe/OriginOffsetZ", DEFAULT_PROBE_ORIGINE_OFFSET_Z, type=float))
995-
self.ui.dsbToolLengthSensorX.setValue(self.__settings.value("Probe/ToolSensorPositionX", DEFAULT_TOOLSENSOR_POSITION_X, type=float))
996-
self.ui.dsbToolLengthSensorY.setValue(self.__settings.value("Probe/ToolSensorPositionY", DEFAULT_TOOLSENSOR_POSITION_Y, type=float))
995+
self.ui.dsbToolLengthSensorZ.setValue(self.__settings.value("Probe/ToolChangePositionZ", DEFAULT_TOOLCHANGE_POSITION_Z, type=float))
996+
self.ui.dsbToolLengthSensorX.setValue(self.__settings.value("Probe/ToolChangePositionX", DEFAULT_TOOLCHANGE_POSITION_X, type=float))
997+
self.ui.dsbToolLengthSensorY.setValue(self.__settings.value("Probe/ToolChangePositionY", DEFAULT_TOOLCHANGE_POSITION_Y, type=float))
997998

998999

9991000
@pyqtSlot()
@@ -1024,6 +1025,7 @@ def on_btnProbeZ(self):
10241025
self.__probeResult = self.__probe.g38(P=3, F=probeSeekRate, Z=-probeDistance, g2p=False)
10251026
# On mémorise le résultat
10261027
self.ui.lblLastProbZ.setText('{:+0.3f}'.format(float(self.__probeResult.getAxisByName("Z"))))
1028+
self.__dlgToolChange.di.lblLastProbZ.setText('{:+0.3f}'.format(float(self.__probeResult.getAxisByName("Z"))))
10271029
# On retract d'une distance probePullOff
10281030
retractGCode = "G0Z{:+0.3f}".format(probePullOff)
10291031
self.__grblCom.gcodePush(retractGCode)
@@ -1050,6 +1052,7 @@ def on_btnProbeZ(self):
10501052
self.__probeResult = self.__probe.g38(P=3, F=probeFeedRate, Z=-fineProbeDistance, g2p=go2point)
10511053
# On mémorise le résultat précis
10521054
self.ui.lblLastProbZ.setText('{:+0.3f}'.format(float(self.__probeResult.getAxisByName("Z"))))
1055+
self.__dlgToolChange.di.lblLastProbZ.setText('{:+0.3f}'.format(float(self.__probeResult.getAxisByName("Z"))))
10531056

10541057
if self.ui.rbtRetractAfterZ.isChecked():
10551058
# On retract d'une distance probeRetract
@@ -1082,9 +1085,9 @@ def on_btnProbeZ(self):
10821085
self.__grblCom.gcodePush(oldG90_91)
10831086

10841087
if (self.__probeResult is not None) and (self.__probeResult.isProbeOK()):
1085-
self.__initialProbeZ = True
1086-
if self.__initialToolLenght:
1087-
self.calculateToolOffset()
1088+
self.__dlgToolChange.setInitialProbeZ(True)
1089+
if self.__dlgToolChange.initialToolLenght():
1090+
self.__dlgToolChange.calculateToolOffset()
10881091

10891092
# Pour finir, on sauvegarde les derniers paramètres de probe dans les settings
10901093
self.__settings.setValue("Probe/DistanceZ", self.ui.dsbDistanceZ.value())
@@ -1098,17 +1101,41 @@ def on_btnProbeZ(self):
10981101
self.__settings.setValue("Probe/RetractDistanceZ", self.ui.dsbRetractZ.value())
10991102

11001103

1104+
@pyqtSlot()
1105+
def on_btnSaveToolChangePosition(self):
1106+
'''
1107+
Déplacement rapide du palpeur de longueur d'outil vers les coordonnées machine :
1108+
Z d'abord pour dégager, puis X, Y.
1109+
'''
1110+
# Recupération des coordonnées Z, X & Y du point
1111+
posZ = self.ui.dsbToolLengthSensorZ.value()
1112+
posX = self.ui.dsbToolLengthSensorX.value()
1113+
posY = self.ui.dsbToolLengthSensorY.value()
1114+
# Memorise la position dans les settings
1115+
self.__settings.setValue("Probe/ToolChangePositionZ", posZ)
1116+
self.__settings.setValue("Probe/ToolChangePositionX", posX)
1117+
self.__settings.setValue("Probe/ToolChangePositionY", posY)
1118+
1119+
11011120
@pyqtSlot()
11021121
def on_btnGoToSensor(self):
1103-
''' Déplacement vers les coordonnées machine X, Y du palpeur de longueur d'outil'''
1104-
# Recupération des coordonnées X & Y du point
1122+
'''
1123+
Déplacement rapide du palpeur de longueur d'outil vers les coordonnées machine :
1124+
Z d'abord pour dégager, puis X, Y.
1125+
'''
1126+
# Recupération des coordonnées Z, X & Y du point
1127+
posZ = self.ui.dsbToolLengthSensorZ.value()
11051128
posX = self.ui.dsbToolLengthSensorX.value()
11061129
posY = self.ui.dsbToolLengthSensorY.value()
1107-
deplacementGCode = "G53G0X{}Y{}".format(posX, posY)
1108-
self.__grblCom.gcodePush(deplacementGCode)
1130+
# Effectue les déplacements
1131+
deplacementGCodeZ = "G53G0Z{}".format(posZ)
1132+
deplacementGCodeXY = "G53G0X{}Y{}".format(posX, posY)
1133+
self.__grblCom.gcodePush(deplacementGCodeZ)
1134+
self.__grblCom.gcodePush(deplacementGCodeXY)
11091135
# Memorise la position dans les settings
1110-
self.__settings.setValue("Probe/ToolSensorPositionX", posX)
1111-
self.__settings.setValue("Probe/ToolSensorPositionY", posY)
1136+
self.__settings.setValue("Probe/ToolChangePositionZ", posZ)
1137+
self.__settings.setValue("Probe/ToolChangePositionX", posX)
1138+
self.__settings.setValue("Probe/ToolChangePositionY", posY)
11121139

11131140

11141141
@pyqtSlot()
@@ -1117,7 +1144,7 @@ def on_btnG49(self):
11171144
Mémorise le Z du point de contact initial de l'outil pour calculer les outils suivants
11181145
et envoi G49 pour réinitialiser une éventuelle longueur précédente.
11191146
'''
1120-
if not self.__initialProbeZ:
1147+
'''if not self.__dlgToolChange.__initialProbeZ:
11211148
self.log(logSeverity.error.value, self.tr("on_btnG49(): No initial Z probe result, can't get initial tool length probe!"))
11221149
m = msgBox(
11231150
title = self.tr("Error !"),
@@ -1132,18 +1159,20 @@ def on_btnG49(self):
11321159
11331160
# Initialise la longueur d'outil initiale
11341161
self.ui.lblInitToolLength.setText(self.ui.lblLastProbZ.text())
1162+
self.__dlgToolChange.di.lblInitToolLength.setText(self.__dlgToolChange.di.lblLastProbZ.text())
11351163
self.__grblCom.gcodePush("G49")
11361164
1137-
self.__initialToolLenght = True
1138-
1165+
self.__dlgToolChange.__initialToolLenght = True
1166+
'''
1167+
self.__dlgToolChange.on_btnG49()
11391168

11401169
@pyqtSlot()
11411170
def on_btnG43_1(self):
11421171
'''
11431172
Calcul de la correction de longueur d'outil par rapport à la valeur initiale mémorisée
11441173
et configure le "Tool Length Offset" dans Grbl à l'aide de G43.1
11451174
'''
1146-
if not self.__initialToolLenght:
1175+
'''if not self.__dlgToolChange.__initialToolLenght:
11471176
self.log(logSeverity.error.value, self.tr("on_btnG43_1(): No initial tool length, can't calculate length offset!"))
11481177
m = msgBox(
11491178
title = self.tr("Error !"),
@@ -1156,9 +1185,11 @@ def on_btnG43_1(self):
11561185
m.afficheMsg()
11571186
return
11581187
# Envoi de la correction de longueur d'outil
1159-
toolOffset = self.calculateToolOffset()
1188+
toolOffset = self.__dlgToolChange.calculateToolOffset()
11601189
toolOffsetGcode = "G43.1Z{}".format(toolOffset)
11611190
self.__grblCom.gcodePush(toolOffsetGcode)
1191+
'''
1192+
self.__dlgToolChange.on_btnG43_1()
11621193

11631194

11641195
@pyqtSlot()
@@ -1810,16 +1841,6 @@ def on_chkSeekXY(self):
18101841
self.ui.dsbPullOffXY.setEnabled(False)
18111842

18121843

1813-
@pyqtSlot()
1814-
def calculateToolOffset(self):
1815-
# Traitement de la correction de longueur d'outil.
1816-
lastProbe = float(self.ui.lblLastProbZ.text().replace(' ', ''))
1817-
initialToolLength = float(self.ui.lblInitToolLength.text().replace(' ', ''))
1818-
toolOffset = lastProbe - initialToolLength
1819-
self.ui.lblToolOffset.setText('{:+0.3f}'.format(toolOffset))
1820-
return toolOffset
1821-
1822-
18231844
@pyqtSlot(str)
18241845
def on_sig_config_changed(self, data: str):
18251846
self.log(logSeverity.info.value, self.tr("Grbl configuration updated: {}").format(data))
@@ -1925,10 +1946,15 @@ def on_spindleOverride(self, value: int):
19251946

19261947
@pyqtSlot()
19271948
def on_btnLinkOverride(self):
1928-
if self.ui.btnLinkOverride.isChecked() and (self.ui.dialAvance.value() != self.ui.dialBroche.value()):
1929-
newValue = (self.ui.dialAvance.value() + self.ui.dialBroche.value()) / 2
1930-
self.ui.dialBroche.setValue(newValue)
1931-
self.ui.dialAvance.setValue(newValue)
1949+
if (self.ui.btnLinkOverride.isChecked()):
1950+
self.ui.btnLinkOverride.setIcon(self.iconLinkOn)
1951+
if (self.ui.dialAvance.value() != self.ui.dialBroche.value()):
1952+
# On force comme valeur la moyenne des 2
1953+
newValue = int((self.ui.dialAvance.value() + self.ui.dialBroche.value()) / 2)
1954+
self.ui.dialBroche.setValue(newValue)
1955+
self.ui.dialAvance.setValue(newValue)
1956+
else: # Bouton non checked
1957+
self.ui.btnLinkOverride.setIcon(self.iconLinkOff)
19321958

19331959

19341960
@pyqtSlot()
@@ -2146,9 +2172,12 @@ def on_sig_log(self, severity: int, data: str):
21462172
self.logCn5X.append(time.strftime("%Y-%m-%d %H:%M:%S") + " : Error : " + data)
21472173
if not self.ui.btnDebug.isChecked():
21482174
self.ui.qtabConsole.setCurrentIndex(CN5X_TAB_LOG)
2175+
2176+
21492177
def log(self, severity: int, data: str):
21502178
self.on_sig_log(severity, data)
21512179

2180+
21522181
@pyqtSlot(str)
21532182
def on_sig_init(self, data: str):
21542183
self.log(logSeverity.info.value, self.tr("cn5X++ : Grbl initialized."))
@@ -2219,14 +2248,15 @@ def on_sig_config(self, data: str):
22192248
if data[:5] == "[AXS:":
22202249
self.__nbAxis = int(data[1:-1].split(':')[1])
22212250
self.__axisNames = list(data[1:-1].split(':')[2])
2251+
# Mise à jour classe grblProbe
2252+
self.__probe.setAxisNames(self.__axisNames)
2253+
# Mise à jour classe dlgToolChange
2254+
self.__dlgToolChange.setAxisNumber(self.__nbAxis)
2255+
self.__dlgToolChange.setAxisNames(self.__axisNames)
22222256
if len(self.__axisNames) < self.__nbAxis:
22232257
# Il est posible qu'il y ait moins de lettres que le nombre d'axes si Grbl
22242258
# implémente l'option REPORT_VALUE_FOR_AXIS_NAME_ONCE
22252259
self.__nbAxis = len(self.__axisNames);
2226-
'''self.updateAxisNumber()
2227-
self.__decode.setNbAxis(self.__nbAxis)'''
2228-
# Mise à jour classe grblProbe
2229-
self.__probe.setAxisNames(self.__axisNames)
22302260

22312261
# Memorise les courses maxi pour calcul des jogs max.
22322262
elif data[:4] == "$130":

cn5X.qrc

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@
6666
<file>images/ledRougeAlumee.svg</file>
6767
<file>images/ledRougeEteinte.svg</file>
6868
<file>images/btnKillAlarm.svg</file>
69-
<file>images/btnLink.svg</file>
70-
<file>images/btnLinkOff.svg</file>
7169
<file>images/btnResetSpeed.svg</file>
70+
<file>images/btnLinkOff.svg</file>
71+
<file>images/btnLinkOn.svg</file>
7272
<file>images/btnPause.svg</file>
7373
<file>images/btnPause_down.svg</file>
7474
<file>images/btnPause_light.svg</file>

cn5X_config.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
ORG_NAME = "fra589"
2828
APP_NAME = "cn5X++"
29-
APP_VERSION_STRING = "0.8.9"
29+
APP_VERSION_STRING = "0.8.10"
3030
APP_VERSION_DATE = "20220509"
3131

3232
DEFAULT_NB_AXIS = 3 # Laisser 3 permet de gerer un Grbl original a 3 axes
@@ -148,8 +148,9 @@ class logSeverity(Enum):
148148
DEFAULT_PROBE_ORIGINE_G54_Z = True
149149
DEFAULT_PROBE_ORIGINE_G92_Z = False
150150
DEFAULT_PROBE_ORIGINE_OFFSET_Z = 0.0
151-
DEFAULT_TOOLSENSOR_POSITION_X = -5
152-
DEFAULT_TOOLSENSOR_POSITION_Y = -5
151+
DEFAULT_TOOLCHANGE_POSITION_Z = -5
152+
DEFAULT_TOOLCHANGE_POSITION_X = -5
153+
DEFAULT_TOOLCHANGE_POSITION_Y = -5
153154

154155
''' Valeurs renvoyées par grblDecode.waitForGrblReply() et grblDecode.waitForGrblProbe() '''
155156
SIG_OK = 0

cn5X_gcodeFile.py

+4-11
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,14 @@ class gcodeFile(QObject):
4949

5050
sig_log = pyqtSignal(int, str) # Message de fonctionnement du composant
5151

52-
def __init__(self, ui, gcodeFileUi: QListView):
52+
def __init__(self, ui, gcodeFileUi: QListView, dialogToolChange: dlgToolChange):
5353
super().__init__()
5454
self.__filePath = ""
5555
self.__ui = ui
5656
self.__gcodeFileUi = gcodeFileUi
5757
self.__gcodeFileUiModel = QStandardItemModel(self.__gcodeFileUi)
5858
self.__gcodeFileUiModel.itemChanged.connect(self.on_gcodeChanged)
59+
self.__dlgToolChange = dialogToolChange
5960

6061
self.__gcodeCharge = False
6162
self.__gcodeChanged = False
@@ -268,13 +269,9 @@ def setGcodeChanged(self, value:bool):
268269
self.__gcodeChanged = value
269270

270271

271-
def showToolChange(self):
272+
def toolChange(self):
272273
''' Appel de la boite de dialogue de changement d'outils '''
273-
self.dlgToolChange = dlgToolChange(self.__grblCom, self.__decode, self.__nbAxis, self.__axisNames)
274-
self.dlgToolChange.setParent(self)
275-
self.dlgToolChange.sig_close.connect(self.on_dlgToolChangeFinished)
276-
277-
RC = self.dlgToolChange.showDialog()
274+
RC = self.__dlgToolChange.showDialog()
278275
if RC == QtWidgets.QDialog.Accepted:
279276
print("Changement d'outil OK")
280277
return True
@@ -283,9 +280,5 @@ def showToolChange(self):
283280
return False
284281

285282

286-
def on_dlgToolChangeFinished(self):
287-
''' Supression de la boite de dialogue après fermeture '''
288-
self.dlgToolChange.sig_close.disconnect(self.on_dlgToolChangeFinished)
289-
self.dlgToolChange = None
290283

291284

0 commit comments

Comments
 (0)