Страница 1 из 1
					
				Макрос безопасности на кнопку cycle start
				Добавлено: 24 май 2024, 16:56
				 wormball
				Здравствуйте!
Сегодня сломал две фрезы. Одну сломал, ибо цанга задела деревяшку. А вторую сломал, когда поменял фрезу и хотел запустить программу сначала, но у мача было иное мнение по этому вопросу. Как вы уже догадались, он втихаря стал продолжать незаконченную программу, даже не потрудившись включить шпиндель.
Так вот, об чём это я. Я тут подумал, что хватит это терпеть, и хорошо бы иметь макрос на кнопке cycle start, который бы проверял, находится ли программа в процессе исполнения, и спрашивал бы, действительно ли я хочу её продолжить, ещё и напоминал, что неплохо было бы включить шпиндель.
А также было бы неплохо, чтобы он спрашивал, хочу ли я сбросить g52, ибо порою я вырезаю много деталей за раз при помощи означенного кода, и ежели остановить программу посередине, начать другую и не сбросить таковой код, то это слегонца чревато.
Быть может, у вас уже есть означенные макросы? Или вы знаете, какие функции использовать?
И кстати говоря, ежели я заменю макрос на кнопке на экране, то будет ли он исполняться по нажатию соответствующей комбинации клавиш?
Заранее благодарен.
			 
			
					
				Re: Макрос безопасности на кнопку cycle start
				Добавлено: 27 май 2024, 18:02
				 wormball
				Оказывается, у этой паскуды нельзя поменять кнопку cycle start. Точнее, можно, но только посредством редактора экрана. Произвёл означенную процедуру при помощи Mach3Screen.exe , теперь все экраны кривые, на кнопке cycle start ничего не написано, так ещё и оная кнопка отказывается работать, ежели загрузить г-код (причём до некоторого момента работало!) и не говорит ни одной ошибки, даже ежели соответствующий код запустить через редактор кода. Правда, на рабочей машине ещё не пробовал и screen4 также не пробовал.
Пока что вот такой код получается:
Код: Выделить всё
is_g52 = GetOemLed(10)
is_offset = GetOemLed(75)
g52_x = GetOEMDRO(184)
g52_y = GetOEMDRO(185)
g52_z = GetOEMDRO(186)
g52_a = GetOEMDRO(187)
g52_b = GetOEMDRO(188)
g52_c = GetOEMDRO(189)
off_x = GetOEMDRO(830)
off_y = GetOEMDRO(831)
off_z = GetOEMDRO(832)
off_a = GetOEMDRO(833)
off_b = GetOEMDRO(834)
off_c = GetOEMDRO(835)
current_line = GetOEMDRO(816)
' MachMsg( "G52 offsets: " & vbNewLine & g52_x & vbNewLine & g52_y & vbNewLine & g52_z & vbNewLine & " Fixture offsets: " & vbNewLine & off_x & vbNewLine & off_y & vbNewLine & off_z & vbNewLine  & " Current line of code: " & current_line, "Start", 2)
MachMsg( "G52 offsets: " & " " & g52_x & " " & g52_y & " " & g52_z & " " & " Fixture offsets: " & " " & off_x & " " & off_y & " " & off_z & " "  & " Current line of code: " & current_line, "Start", 2)
 
DoOemButton(1000)
Пока что ничего не делает, чисто выводит координаты. Но уже эффект г52 налицо и строчка кода правильная показывается, что не может не радовать. Правда, непонятно, будет ли она соответствовать той строчке, которая на экране, или той, на которой прервалось исполнение.
 
			 
			
					
				Re: Макрос безопасности на кнопку cycle start
				Добавлено: 29 май 2024, 17:40
				 wormball
				Вощем поборол (почти) мача при помощи screen4.
Вот такой получается скрипт:
Код: Выделить всё
vbCrLf = Chr(13) & Chr(10) 
vbNewLine = vbCrLf
' Define some constants for MachMsg dialog types
MachMsgTypeOK = 0
MachMsgTypeOKCancel = 1
MachMsgTypeAbortRetryIgnore = 2
MachMsgTypeYesNoCancel = 3
MachMsgTypeYesNo = 4
MachMsgTypeRetryCancel = 5
MachMsgTypeCancelTryAgainContinue = 6
' Define some constants for MachMsg return codes
MachMsgReturnOK = 1
MachMsgReturnCancel = 2
MachMsgReturnAbort = 3
MachMsgReturnRetry = 4
MachMsgReturnIgnore = 5
MachMsgReturnYes = 6
MachMsgReturnNo = 7
MachMsgReturnTryAgain = 10
MachMsgReturnContinue = 11 
OEM_Button_Start = 1000 
is_offset  = GetOemLed(75)  ' OEM LED Offset In Effect 75
is_running = GetOemLed(804) ' OEM LED Start
is_paused  = GetOemLed(805) ' OEM LED Pause Feed Hold
g52_x = GetOEMDRO(184)
g52_y = GetOEMDRO(185)
g52_z = GetOEMDRO(186)
g52_a = GetOEMDRO(187)
g52_b = GetOEMDRO(188)
g52_c = GetOEMDRO(189)
work_x = GetOEMDRO(178)
work_y = GetOEMDRO(179)
work_z = GetOEMDRO(180)
work_a = GetOEMDRO(181)
work_b = GetOEMDRO(182)
work_c = GetOEMDRO(183)
dif_x = work_x - g52_x
dif_y = work_y - g52_y
dif_z = work_z - g52_z
dif_a = work_a - g52_a
dif_b = work_b - g52_b
dif_c = work_c - g52_c
zero_dif = (dif_x = 0) and (dif_y = 0) and (dif_z = 0) and (dif_a = 0) and (dif_b = 0) and (dif_c = 0)
current_line = GetOEMDRO(816)
resume_ans = MachMsgReturnOK
g52_ans = MachMsgReturnOK
If is_offset or (not zero_dif) Then
    g52_ans = MsgBox ("Nonzero G52 offsets detected: " _
	& vbNewLine & vbNewLine & "X: " & Format(dif_x, "0.00") & vbNewLine & "Y: " & Format(dif_y, "0.00") & vbNewLine & "Z: " & Format(dif_z, "0.00") _
	& vbNewLine & "A: " & Format(dif_a, "0.00") & vbNewLine & "B: " & Format(dif_b, "0.00") & vbNewLine & "C: " & Format(dif_c, "0.00") _
	& vbNewLine & vbNewLine & "If you are not resuming interrupted work " & vbNewLine & "or not sure the coordinates are perfectly correct, " _
	& vbNewLine & "this will lead to unwanted results." & vbNewLine _
	& vbNewLine & "Issue G52x0y0z0a0b0c0 and set zero coordinates again" _
	& vbNewLine & "or push OK if you know what you are doing." _
	, 1, "This is dangerous")
End If
If (not (current_line = 0)) and (g52_ans = MachMsgReturnOK) Then
    resume_ans = MsgBox ("The mach3 said the current line is " & current_line & " ." _
	& vbNewLine & "It may mean you are about to resume the job at this line." _
	& vbNewLine & "However it can mean you simply scrolled the program," _
	& vbNewLine & "and the execution will start at line 0." _
	& vbNewLine & "Do you want to proceed?" _
	& vbNewLine & vbNewLine & "Do not forget to start the spindle!", 1, "This is dangerous!")
End If
If (resume_ans = MachMsgReturnOK) and (g52_ans = MachMsgReturnOK) Then
    ' MsgBox "Starting!"
    DoOemButton(OEM_Button_Start)
Else
    ' MsgBox "Not starting!"
End If
Вроде работает, только одно маленькое но - оно не отличает ситуации "пожата кнопка стоп" от "всё уже завершено либо ещё не начиналось, а человек просто перемотал г-код в окошке". А вот мач ещё как означенные ситуации отличает и в первом случае втихаря продолжает с того же места без запуска шпинделя, и выливается это отличие в сломанную фрезу и испорченную заготовку. Я ещё вот такие индикаторы нашёл в древнем манускрипте:
Код: Выделить всё
OEM LED Start 804
OEM LED Pause Feed Hold 805
OEM LED Optional Stop 65 
OEM LED Pause 80
, только вот они не помогли мне отличить означенные ситуации, хотя отличают ситуацию "процесс идёт" от "feed hold" и "стоп" (но вот два вышеуказанных вида стопа не отличают).
Ещё бы хорошо добавить проверку на вращение координат и иные смещения.
Также мне кажется слегонца подозрительным молчание в настоящем топике (и в гугле тоже, что характерно). Вроде полезная должна быть вещь, и наверняка должна была за эти десятилетия миллионам людей в голову прийти. Уж не означает ли это, что все, кроме меня, уже это попробовали, убедились, что это невозможно, а теперь запаслись попкорном и смотрят, как я буду наступать на грабли?
 
			 
			
					
				Re: Макрос безопасности на кнопку cycle start
				Добавлено: 15 май 2025, 11:48
				 wormball
				Мне открылась ещё одна Великая Тайна Мача. Кто имеет ум, тот сочти число ДРО истинной следующей исполняемой строчки г-кода, ибо это число человеческое; число это двести сорок.
			 
			
					
				Re: Макрос безопасности на кнопку cycle start
				Добавлено: 15 май 2025, 22:41
				 AlanDerby
				Вообще не понял в чем проблема. Вы забываете нажали "стоп" или нет?
wormball писал(а): ↑
Мне открылась ещё одна Великая Тайна Мача. Кто имеет ум, тот сочти число ДРО истинной следующей исполняемой строчки г-кода, ибо это число человеческое; число это двести сорок.
 
А это что за поток сознания? Видимо я не имею ума 

 
			 
			
					
				Re: Макрос безопасности на кнопку cycle start
				Добавлено: 16 май 2025, 10:28
				 wormball
				
			 
			
					
				Re: Макрос безопасности на кнопку cycle start
				Добавлено: 16 май 2025, 11:42
				 vtgmfg
				это не классика а мракобесие
			 
			
					
				Re: Макрос безопасности на кнопку cycle start
				Добавлено: 16 май 2025, 12:18
				 wormball
				Одно другому не мешает!