Здравствуйте!
Сегодня сломал две фрезы. Одну сломал, ибо цанга задела деревяшку. А вторую сломал, когда поменял фрезу и хотел запустить программу сначала, но у мача было иное мнение по этому вопросу. Как вы уже догадались, он втихаря стал продолжать незаконченную программу, даже не потрудившись включить шпиндель.
Так вот, об чём это я. Я тут подумал, что хватит это терпеть, и хорошо бы иметь макрос на кнопке cycle start, который бы проверял, находится ли программа в процессе исполнения, и спрашивал бы, действительно ли я хочу её продолжить, ещё и напоминал, что неплохо было бы включить шпиндель.
А также было бы неплохо, чтобы он спрашивал, хочу ли я сбросить g52, ибо порою я вырезаю много деталей за раз при помощи означенного кода, и ежели остановить программу посередине, начать другую и не сбросить таковой код, то это слегонца чревато.
Быть может, у вас уже есть означенные макросы? Или вы знаете, какие функции использовать?
И кстати говоря, ежели я заменю макрос на кнопке на экране, то будет ли он исполняться по нажатию соответствующей комбинации клавиш?
Заранее благодарен.
Макрос безопасности на кнопку cycle start
-
- Новичок
- Сообщения: 20
- Зарегистрирован: 03 сен 2019, 22:33
- Репутация: 0
- Контактная информация:
Re: Макрос безопасности на кнопку cycle start
Оказывается, у этой паскуды нельзя поменять кнопку cycle start. Точнее, можно, но только посредством редактора экрана. Произвёл означенную процедуру при помощи Mach3Screen.exe , теперь все экраны кривые, на кнопке cycle start ничего не написано, так ещё и оная кнопка отказывается работать, ежели загрузить г-код (причём до некоторого момента работало!) и не говорит ни одной ошибки, даже ежели соответствующий код запустить через редактор кода. Правда, на рабочей машине ещё не пробовал и screen4 также не пробовал.
Пока что вот такой код получается:
Пока что ничего не делает, чисто выводит координаты. Но уже эффект г52 налицо и строчка кода правильная показывается, что не может не радовать. Правда, непонятно, будет ли она соответствовать той строчке, которая на экране, или той, на которой прервалось исполнение.
Пока что вот такой код получается:
Код: Выделить всё
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)
-
- Новичок
- Сообщения: 20
- Зарегистрирован: 03 сен 2019, 22:33
- Репутация: 0
- Контактная информация:
Re: Макрос безопасности на кнопку cycle start
Вощем поборол (почти) мача при помощи screen4.
Вот такой получается скрипт:
Вроде работает, только одно маленькое но - оно не отличает ситуации "пожата кнопка стоп" от "всё уже завершено либо ещё не начиналось, а человек просто перемотал г-код в окошке". А вот мач ещё как означенные ситуации отличает и в первом случае втихаря продолжает с того же места без запуска шпинделя, и выливается это отличие в сломанную фрезу и испорченную заготовку. Я ещё вот такие индикаторы нашёл в древнем манускрипте:
, только вот они не помогли мне отличить означенные ситуации, хотя отличают ситуацию "процесс идёт" от "feed hold" и "стоп" (но вот два вышеуказанных вида стопа не отличают).
Ещё бы хорошо добавить проверку на вращение координат и иные смещения.
Также мне кажется слегонца подозрительным молчание в настоящем топике (и в гугле тоже, что характерно). Вроде полезная должна быть вещь, и наверняка должна была за эти десятилетия миллионам людей в голову прийти. Уж не означает ли это, что все, кроме меня, уже это попробовали, убедились, что это невозможно, а теперь запаслись попкорном и смотрят, как я буду наступать на грабли?
Вот такой получается скрипт:
Код: Выделить всё
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
Ещё бы хорошо добавить проверку на вращение координат и иные смещения.
Также мне кажется слегонца подозрительным молчание в настоящем топике (и в гугле тоже, что характерно). Вроде полезная должна быть вещь, и наверняка должна была за эти десятилетия миллионам людей в голову прийти. Уж не означает ли это, что все, кроме меня, уже это попробовали, убедились, что это невозможно, а теперь запаслись попкорном и смотрят, как я буду наступать на грабли?