Схема подключения двухшпиндельного станка с независимыми осями Z к контроллеру MSC-4ES

Схема подключения двухшпиндельного станка с независимыми осями Z к контроллеру MSC-6ES

Макрос автосмены для шпинделей с независимыми осями Z
Нажмите, чтобы показать код макроса
{
// Макрос для автоматического переключения между шпинделями с независимыми осями Z.
// В настройках исполнителя необходимо задать соответсвующий номер инструмента T.
// !!! В макросе настраивать только переменные из первой секции !!!
// Номера выходов, управляющих проключением сигнала управления шпинделем на i-ый исполнитель. 1-ый элемент в массиве соответствует 1-му исполнителю и т.д.
// Назначение: разрывать сигнал SPEN на частотник соответствующего шпинделя, чтобы надежно его отключать, когда исполнитель не активен.
var EXEC_SPEN_OUT_ID = [5, 6]
// Вертикальные оси исполнителей. 1-ый элемент в массиве соответствует 1-му исполнителю и т.д.
var EXEC_ZAXIS = ["Z", "A"]
// Координата безопасной высоты
var SAFE_Z_POS = 50
// Перемещение на безопасную высоту в абсолютных или относительных координатах.
// Если IS_INCREMENTAL_SAFE_Z_POS == 1, то SAFE_Z_POS задает относительно перемещение, и параметр IS_MACHINE_SAFE_Z_POS не используется.
// Если IS_INCREMENTAL_SAFE_Z_POS == 0, то SAFE_Z_POS задает абсолютную позицию, а машинная или рабочая определяется параметром IS_MACHINE_SAFE_Z_POS
var IS_INCREMENTAL_SAFE_Z_POS = 0
// Безопасная высота в рабочих или машинных координатах.
// Если IS_MACHINE_SAFE_Z_POS == 1, то SAFE_Z_POS в машинных координатах
var IS_MACHINE_SAFE_Z_POS = 0
// Задержка на раскрутку шпинделя после смены исполнителя, в секундах
var SPINUP_DELAY = 5
}
{
function enable_exec_spen(exec_id) {
var out_id = EXEC_SPEN_OUT_ID[exec_id]
var port_mask = Math.pow(2, out_id-1)
$.send("M64P" + String(port_mask))
}
function disable_exec_spen(exec_id) {
var out_id = EXEC_SPEN_OUT_ID[exec_id]
var port_mask = Math.pow(2, out_id-1)
$.send("M65P" + String(port_mask))
}
function move_to_safe_pos(exec_id) {
if (IS_INCREMENTAL_SAFE_Z_POS == 1) {
$.send("G91 G0 " + EXEC_ZAXIS[exec_id] + String(SAFE_Z_POS))
$.send("G90")
}
else {
if (IS_MACHINE_SAFE_Z_POS == 0) {
$.send("G90 G0 " + EXEC_ZAXIS[exec_id] + String(SAFE_Z_POS))
}
else {
$.send("G90 G53 G0 " + EXEC_ZAXIS[exec_id] + String(SAFE_Z_POS))
}
}
}
}
{
$.send("G4P0.1")
while ($.status != 1) {
$.wait()
}
// Индекс текущего исполнителя
var cur_exec_index = $.current_executor
if (cur_exec_index >= EXEC_SPEN_OUT_ID.length || cur_exec_index >= EXEC_ZAXIS.length) {
$.message("Индекс текущего исполнителя превышает максимально допустимое значение!")
$.tasklist.stop()
$.exit()
}
var cur_exec_tool_number = $.executors[cur_exec_index].gcode_tool_number
if (!$.executors[cur_exec_index].bind_gcode_tool_number)
cur_exec_tool_number = 0
var exec_len = $.executors.length
var next_tool = $.tn
if (cur_exec_tool_number == next_tool) {
$.message(["Следующий номер инструмента совпадает с номером инструмента текущего исполнителя!"])
$.executors[cur_exec_index].enable()
$.executors[cur_exec_index].profile_enable()
// Проключаем цепь сигнала управления шпинделем для нового исполнителя
enable_exec_spen(cur_exec_index)
// Активируем задержку на раскрутку шпинделя
$.send("G4P" + String(SPINUP_DELAY))
$.exit()
}
var next_executor_index = -1
for (var i = 0; i < exec_len; i++) {
if ($.executors[i].gcode_tool_number == next_tool && $.executors[i].bind_gcode_tool_number) {
next_executor_index = i;
}
}
// Поднимаем текущий исполнитель на безопасную высоту
move_to_safe_pos(cur_exec_index)
if (next_executor_index < 0) {
$.message(["Исполнитель, привязанный к номеру инструмента " + next_tool + ", не найден!"])
$.tasklist.stop()
$.exit()
}
else if (next_executor_index >= EXEC_SPEN_OUT_ID.length || next_executor_index >= EXEC_ZAXIS.length) {
$.message("Индекс следующего исполнителя превышает максимально допустимое значение!")
$.tasklist.stop()
$.exit()
}
// Разываем сигнал управления шпинделем для текущего исполнителя
disable_exec_spen(cur_exec_index)
// Переключаемся и активируем новый исполнитель
$.executors[next_executor_index].enable()
$.executors[next_executor_index].profile_enable()
$.send("T" + String($.executors[next_executor_index].gcode_tool_number))
// Проключаем цепь сигнала управления шпинделем для нового исполнителя
enable_exec_spen(next_executor_index)
// Активируем задержку на раскрутку шпинделя
$.send("G4P" + String(SPINUP_DELAY))
}
Схема подключения двухшпиндельного станка с управлением пневмоприводами к контроллеру MSC-4ES

Схема подключения двухшпиндельного станка с управлением пневмоприводами к контроллеру MSC-6ES

Макрос автосмены для шпинделей с пневмоприводом
Нажмите, чтобы показать код макроса
{
// Макрос для автоматического переключения между шпинделями с независимыми осями Z.
// В настройках исполнителя необходимо задать соответсвующий номер инструмента T.
// !!! В макросе настраивать только переменные из первой секции !!!
// Номера выходов, управляющих поднятием/опусканием шпинделя (4 - OUT4 (переопределенный FLD), 5 - OUT5 и т.д.). 1-ый элемент в массиве соответствует 1-му исполнителю и т.д.
var EXEC_ENA_OUT_ID = [4, 5]
// Если EXEC_ENA_IF_RLY_ON == 1, то активация (опускание) исполнителя осуществляется по замыканию (M64) соответствующего релейного выхода. Если 0, то по размыканию (M65)
var EXEC_ENA_IF_RLY_ON = 1
// Номера выходов (6 - OUT6, 7 - OUT7 и т.д.), управляющих проключением сигнала управления шпинделем на i-ый исполнитель. 1-ый элемент в массиве соответствует 1-му исполнителю и т.д.
// Назначение: разрывать сигнал SPEN на частотник соответствующего шпинделя, чтобы надежно его отключать, когда исполнитель не активен.
var EXEC_SPEN_OUT_ID = [6, 7]
// Задержка на раскрутку шпинделя после смены исполнителя, в секундах
var SPINUP_DELAY = 5
}
{
function activate_executor(exec_id) {
var out_id = EXEC_ENA_OUT_ID[exec_id]
var port_mask = Math.pow(2, out_id-1)
if (EXEC_ENA_IF_RLY_ON == 1) {
$.send("M64P" + String(port_mask))
}
else {
$.send("M65P" + String(port_mask))
}
}
function deactivate_executor(exec_id) {
var out_id = EXEC_ENA_OUT_ID[exec_id]
var port_mask = Math.pow(2, out_id-1)
if (EXEC_ENA_IF_RLY_ON == 1) {
$.send("M65P" + String(port_mask))
}
else {
$.send("M64P" + String(port_mask))
}
}
function enable_exec_spen(exec_id) {
var out_id = EXEC_SPEN_OUT_ID[exec_id]
var port_mask = Math.pow(2, out_id-1)
$.send("M64P" + String(port_mask))
}
function disable_exec_spen(exec_id) {
var out_id = EXEC_SPEN_OUT_ID[exec_id]
var port_mask = Math.pow(2, out_id-1)
$.send("M65P" + String(port_mask))
}
}
{
$.send("G4P0.1")
while ($.status != 1) {
$.wait()
}
// Индекс текущего исполнителя
var cur_exec_index = $.current_executor
if (cur_exec_index >= EXEC_ENA_OUT_ID.length || cur_exec_index >= EXEC_SPEN_OUT_ID.length) {
$.message("Индекс текущего исполнителя превышает максимально допустимое значение!")
$.tasklist.stop()
$.exit()
}
var cur_exec_tool_number = $.executors[cur_exec_index].gcode_tool_number
if (!$.executors[cur_exec_index].bind_gcode_tool_number)
cur_exec_tool_number = 0
var exec_len = $.executors.length
var next_tool = $.tn
if (cur_exec_tool_number == next_tool) {
$.message(["Следующий номер инструмента совпадает с номером инструмента текущего исполнителя!"])
$.exit()
}
var next_executor_index = -1
for (var i = 0; i < exec_len; i++) {
if ($.executors[i].gcode_tool_number == next_tool && $.executors[i].bind_gcode_tool_number) {
next_executor_index = i;
}
}
if (next_executor_index < 0) {
$.message(["Исполнитель, привязанный к номеру инструмента " + next_tool + ", не найден!"])
$.tasklist.stop()
$.exit()
}
else if (next_executor_index >= EXEC_ENA_OUT_ID.length || next_executor_index >= EXEC_SPEN_OUT_ID.length) {
$.message("Индекс следующего исполнителя превышает максимально допустимое значение!")
$.tasklist.stop()
$.exit()
}
// Поднимаем текущий исполнитель
deactivate_executor(cur_exec_index)
// Разываем сигнал управления шпинделем для текущего исполнителя
disable_exec_spen(cur_exec_index)
// Переключаемся и активируем новый исполнитель
$.executors[next_executor_index].enable()
$.executors[next_executor_index].profile_enable()
$.send("T" + String($.executors[next_executor_index].gcode_tool_number))
// Проключаем цепь сигнала управления шпинделем для нового исполнителя
enable_exec_spen(next_executor_index)
// Активируем задержку на раскрутку шпинделя
$.send("G4P" + String(SPINUP_DELAY))
// Опускаем новый исполнитель
activate_executor(next_executor_index)
}