@@ -105,9 +105,6 @@ def __init__(self, parent=None):
105
105
self .logDebug .document ().setMaximumBlockCount (2000 ) # Limite la taille des logs a 2000 lignes
106
106
self .ui .qtabConsole .setCurrentIndex (CN5X_TAB_LOG ) # Active le tab de la log cn5X++
107
107
108
- self .__gcodeFile = gcodeFile (self .ui , self .ui .gcodeTable )
109
- self .__gcodeFile .sig_log .connect (self .on_sig_log )
110
-
111
108
self .timerDblClic = QtCore .QTimer ()
112
109
113
110
self .__grblCom = grblCom ()
@@ -127,23 +124,28 @@ def __init__(self, parent=None):
127
124
self .__grblCom .sig_serialLock .connect (self .on_sig_serialLock )
128
125
129
126
self .__beeper = cn5XBeeper ();
130
-
127
+
131
128
self .__arretUrgence = True
132
129
def arretUrgence ():
133
130
return self .__arretUrgence
134
131
135
132
self .__decode = grblDecode (self .ui , self .log , self .__grblCom , self .__beeper , arretUrgence )
136
133
self .__grblCom .setDecodeur (self .__decode )
137
134
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
+
138
142
self .__jog = grblJog (self .__grblCom )
139
143
self .ui .dsbJogSpeed .setValue (DEFAULT_JOG_SPEED )
140
144
self .ui .dsbJogSpeed .valueChanged .connect (self .on_dsbJogSpeed_valueChanged )
141
145
142
146
self .__probe = grblProbe (self .__grblCom )
143
147
self .__probe .sig_log .connect (self .on_sig_log )
144
148
self .__probeResult = None
145
- self .__initialToolLenght = False
146
- self .__initialProbeZ = False
147
149
148
150
self .__connectionStatus = False
149
151
self .__cycleRun = False
@@ -203,6 +205,11 @@ def arretUrgence():
203
205
# Flag pour unicité de la boite de dialogue Jog
204
206
self .dlgJog = None
205
207
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
+
206
213
'''---------- Connections des evennements de l'interface graphique ----------'''
207
214
208
215
self .ui .btnUrgence .pressed .connect (self .on_arretUrgence ) # Evenements du bouton d'arret d'urgence
@@ -369,6 +376,7 @@ def arretUrgence():
369
376
370
377
# Boutons de probe Z
371
378
self .ui .btnProbeZ .clicked .connect (self .on_btnProbeZ )
379
+ self .ui .btnSaveToolChangePosition .clicked .connect (self .on_btnSaveToolChangePosition )
372
380
self .ui .btnGoToSensor .clicked .connect (self .on_btnGoToSensor )
373
381
self .ui .btnG49 .clicked .connect (self .on_btnG49 )
374
382
self .ui .btnG43_1 .clicked .connect (self .on_btnG43_1 )
@@ -871,20 +879,12 @@ def on_dlgJogFinished(self):
871
879
872
880
def on_mnuToolChange (self ):
873
881
''' 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 ()
878
883
if RC == QtWidgets .QDialog .Accepted :
879
884
print ("Changement d'outil OK" )
880
885
else :
881
886
print ("Changement d'outil annulé" )
882
887
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
-
888
888
889
889
@pyqtSlot ()
890
890
def on_mnuPredefinedLocations (self ):
@@ -992,8 +992,9 @@ def on_qtabMain_currentChanged(self, tabIndex):
992
992
self .ui .rbtDefineOriginZ_G54 .setChecked (self .__settings .value ("Probe/DefineOriginZ_G54" , DEFAULT_PROBE_ORIGINE_G54_Z , type = bool ))
993
993
self .ui .rbtDefineOriginZ_G92 .setChecked (self .__settings .value ("Probe/DefineOriginZ_G92" , DEFAULT_PROBE_ORIGINE_G92_Z , type = bool ))
994
994
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 ))
997
998
998
999
999
1000
@pyqtSlot ()
@@ -1024,6 +1025,7 @@ def on_btnProbeZ(self):
1024
1025
self .__probeResult = self .__probe .g38 (P = 3 , F = probeSeekRate , Z = - probeDistance , g2p = False )
1025
1026
# On mémorise le résultat
1026
1027
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" ))))
1027
1029
# On retract d'une distance probePullOff
1028
1030
retractGCode = "G0Z{:+0.3f}" .format (probePullOff )
1029
1031
self .__grblCom .gcodePush (retractGCode )
@@ -1050,6 +1052,7 @@ def on_btnProbeZ(self):
1050
1052
self .__probeResult = self .__probe .g38 (P = 3 , F = probeFeedRate , Z = - fineProbeDistance , g2p = go2point )
1051
1053
# On mémorise le résultat précis
1052
1054
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" ))))
1053
1056
1054
1057
if self .ui .rbtRetractAfterZ .isChecked ():
1055
1058
# On retract d'une distance probeRetract
@@ -1082,9 +1085,9 @@ def on_btnProbeZ(self):
1082
1085
self .__grblCom .gcodePush (oldG90_91 )
1083
1086
1084
1087
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 ()
1088
1091
1089
1092
# Pour finir, on sauvegarde les derniers paramètres de probe dans les settings
1090
1093
self .__settings .setValue ("Probe/DistanceZ" , self .ui .dsbDistanceZ .value ())
@@ -1098,17 +1101,41 @@ def on_btnProbeZ(self):
1098
1101
self .__settings .setValue ("Probe/RetractDistanceZ" , self .ui .dsbRetractZ .value ())
1099
1102
1100
1103
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
+
1101
1120
@pyqtSlot ()
1102
1121
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 ()
1105
1128
posX = self .ui .dsbToolLengthSensorX .value ()
1106
1129
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 )
1109
1135
# 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 )
1112
1139
1113
1140
1114
1141
@pyqtSlot ()
@@ -1117,7 +1144,7 @@ def on_btnG49(self):
1117
1144
Mémorise le Z du point de contact initial de l'outil pour calculer les outils suivants
1118
1145
et envoi G49 pour réinitialiser une éventuelle longueur précédente.
1119
1146
'''
1120
- if not self .__initialProbeZ :
1147
+ ''' if not self.__dlgToolChange .__initialProbeZ:
1121
1148
self.log(logSeverity.error.value, self.tr("on_btnG49(): No initial Z probe result, can't get initial tool length probe!"))
1122
1149
m = msgBox(
1123
1150
title = self.tr("Error !"),
@@ -1132,18 +1159,20 @@ def on_btnG49(self):
1132
1159
1133
1160
# Initialise la longueur d'outil initiale
1134
1161
self.ui.lblInitToolLength.setText(self.ui.lblLastProbZ.text())
1162
+ self.__dlgToolChange.di.lblInitToolLength.setText(self.__dlgToolChange.di.lblLastProbZ.text())
1135
1163
self.__grblCom.gcodePush("G49")
1136
1164
1137
- self .__initialToolLenght = True
1138
-
1165
+ self.__dlgToolChange.__initialToolLenght = True
1166
+ '''
1167
+ self .__dlgToolChange .on_btnG49 ()
1139
1168
1140
1169
@pyqtSlot ()
1141
1170
def on_btnG43_1 (self ):
1142
1171
'''
1143
1172
Calcul de la correction de longueur d'outil par rapport à la valeur initiale mémorisée
1144
1173
et configure le "Tool Length Offset" dans Grbl à l'aide de G43.1
1145
1174
'''
1146
- if not self .__initialToolLenght :
1175
+ ''' if not self.__dlgToolChange .__initialToolLenght:
1147
1176
self.log(logSeverity.error.value, self.tr("on_btnG43_1(): No initial tool length, can't calculate length offset!"))
1148
1177
m = msgBox(
1149
1178
title = self.tr("Error !"),
@@ -1156,9 +1185,11 @@ def on_btnG43_1(self):
1156
1185
m.afficheMsg()
1157
1186
return
1158
1187
# Envoi de la correction de longueur d'outil
1159
- toolOffset = self .calculateToolOffset ()
1188
+ toolOffset = self.__dlgToolChange. calculateToolOffset()
1160
1189
toolOffsetGcode = "G43.1Z{}".format(toolOffset)
1161
1190
self.__grblCom.gcodePush(toolOffsetGcode)
1191
+ '''
1192
+ self .__dlgToolChange .on_btnG43_1 ()
1162
1193
1163
1194
1164
1195
@pyqtSlot ()
@@ -1810,16 +1841,6 @@ def on_chkSeekXY(self):
1810
1841
self .ui .dsbPullOffXY .setEnabled (False )
1811
1842
1812
1843
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
-
1823
1844
@pyqtSlot (str )
1824
1845
def on_sig_config_changed (self , data : str ):
1825
1846
self .log (logSeverity .info .value , self .tr ("Grbl configuration updated: {}" ).format (data ))
@@ -1925,10 +1946,15 @@ def on_spindleOverride(self, value: int):
1925
1946
1926
1947
@pyqtSlot ()
1927
1948
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 )
1932
1958
1933
1959
1934
1960
@pyqtSlot ()
@@ -2146,9 +2172,12 @@ def on_sig_log(self, severity: int, data: str):
2146
2172
self .logCn5X .append (time .strftime ("%Y-%m-%d %H:%M:%S" ) + " : Error : " + data )
2147
2173
if not self .ui .btnDebug .isChecked ():
2148
2174
self .ui .qtabConsole .setCurrentIndex (CN5X_TAB_LOG )
2175
+
2176
+
2149
2177
def log (self , severity : int , data : str ):
2150
2178
self .on_sig_log (severity , data )
2151
2179
2180
+
2152
2181
@pyqtSlot (str )
2153
2182
def on_sig_init (self , data : str ):
2154
2183
self .log (logSeverity .info .value , self .tr ("cn5X++ : Grbl initialized." ))
@@ -2219,14 +2248,15 @@ def on_sig_config(self, data: str):
2219
2248
if data [:5 ] == "[AXS:" :
2220
2249
self .__nbAxis = int (data [1 :- 1 ].split (':' )[1 ])
2221
2250
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 )
2222
2256
if len (self .__axisNames ) < self .__nbAxis :
2223
2257
# Il est posible qu'il y ait moins de lettres que le nombre d'axes si Grbl
2224
2258
# implémente l'option REPORT_VALUE_FOR_AXIS_NAME_ONCE
2225
2259
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 )
2230
2260
2231
2261
# Memorise les courses maxi pour calcul des jogs max.
2232
2262
elif data [:4 ] == "$130" :
0 commit comments