stat_t M5_Macro(void) { if(configFlags[MODOMAQUINA] == MODO_PLASMA) { /* A macro não pode acorrer até que o buffer seja esvaziado, para que ações durante o corte tenham efeito imediato*/ if (cm_get_runtime_busy() == true ) { return (STAT_EAGAIN);} // sync to planner move ends altura_perfuracao = configVarPl[PL_CONFIG_ALTURA_PERFURACAO]; altura_deslocamento = configVarMaq[CFG_MAQUINA_ALT_DESLOCAMENTO]; altura_corte = configVarPl[PL_CONFIG_ALTURA_CORTE]; vel_corte = configVarPl[PL_CONFIG_VELOC_CORTE]; tempo_perfuracao = configVarPl[PL_CONFIG_TEMPO_PERFURACAO]; tempo_aquecimento = 0; } else { /* A macro não pode acorrer até que o buffer seja esvaziado, para que ações durante o corte tenham efeito imediato*/ if (cm_get_runtime_busy() == true || lstop == true) { return (STAT_EAGAIN);} // sync to planner move ends altura_perfuracao = configVarOx[OX_CONFIG_ALTURA_PERFURACAO]; altura_deslocamento = configVarMaq[CFG_MAQUINA_ALT_DESLOCAMENTO]; altura_corte = configVarOx[OX_CONFIG_ALTURA_CORTE]; vel_corte = configVarOx[OX_CONFIG_VELOC_CORTE]; tempo_perfuracao = configVarOx[OX_CONFIG_TEMPO_PERFURACAO]; tempo_aquecimento = configVarOx[OX_CONFIG_TEMPO_AQUECIMENTO]; } // set initial state for new move memset(&gp, 0, sizeof(gp)); // clear all parser values memset(&cm.gf, 0, sizeof(GCodeInput_t)); // clear all next-state flags memset(&cm.gn, 0, sizeof(GCodeInput_t)); // clear all next-state values cm.gn.motion_mode = cm_get_motion_mode(MODEL); // get motion mode from previous block switch (state) { case 0: SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_MODAL_MACRO (MODAL_GROUP_M7, spindle_mode, SPINDLE_OFF); state++; break; case 1: SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_MODAL_MACRO (MODAL_GROUP_G1, motion_mode, MOTION_MODE_STRAIGHT_TRAVERSE); SET_NON_MODAL_MACRO(target[AXIS_Z], altura_deslocamento); state++; break; default:state = 0; macro_func_ptr = _command_dispatch; return (STAT_OK); } _execute_gcode_block(); return (STAT_OK); }
uint8_t cm_probing_cycle_callback(void) { if ((cm.cycle_state != CYCLE_PROBE) && (cm.probe_state != PROBE_WAITING)) { return (STAT_NOOP); // exit if not in a probe cycle or waiting for one } if (cm_get_runtime_busy()) return (STAT_EAGAIN); // sync to planner move ends return (pb.func()); // execute the current probing move }
stat_t cm_homing_callback(void) { if (cm.cycle_state != CYCLE_HOMING) { return (STAT_NOOP);} // exit if not in a homing cycle if (cm_get_runtime_busy() == true) { return (STAT_EAGAIN);} // sync to planner move ends return (hm.func(hm.axis)); // execute the current homing move }
stat_t M3_Macro(void) { float tempo; /* A macro não pode acorrer até que o buffer seja esvaziado, para que ações durante o corte tenham efeito imediato*/ if (cm_get_runtime_busy() == true) { return (STAT_EAGAIN);} // sync to planner move ends macro_buffer = M3_Macro; // set initial state for new move memset(&gp, 0, sizeof(gp)); // clear all parser values memset(&cm.gf, 0, sizeof(GCodeInput_t)); // clear all next-state flags memset(&cm.gn, 0, sizeof(GCodeInput_t)); // clear all next-state values cm.gn.motion_mode = cm_get_motion_mode(MODEL); // get motion mode from previous block /* A macro não pode acorrer até que o buffer seja esvaziado, para que ações durante o corte tenham efeito imediato*/ if (cm_get_runtime_busy() == true) { return (STAT_EAGAIN);} // sync to planner move ends if(configFlags[MODOMAQUINA] == MODO_PLASMA) { altura_perfuracao = configVarPl[PL_CONFIG_ALTURA_PERFURACAO]; altura_deslocamento = configVarMaq[CFG_MAQUINA_ALT_DESLOCAMENTO]; altura_corte = configVarPl[PL_CONFIG_ALTURA_CORTE]; vel_corte = configVarPl[PL_CONFIG_VELOC_CORTE]; tempo_perfuracao = configVarPl[PL_CONFIG_TEMPO_PERFURACAO]; tempo_aquecimento = 0; switch (state) { /* 1- Procura chapa. G38.2 -50 COM FEEDRATE DE 800MM/MIN */ case 0: SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_NON_MODAL_MACRO (next_action, NEXT_ACTION_STRAIGHT_PROBE); SET_NON_MODAL_MACRO(target[AXIS_Z], -50); SET_NON_MODAL_MACRO (feed_rate, 800); state++; break; /* 2- Zera o eixo Z com G28.3 Z0*/ case 1: SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_NON_MODAL_MACRO(next_action, NEXT_ACTION_SET_ABSOLUTE_ORIGIN); SET_NON_MODAL_MACRO(target[AXIS_Z], 0); state++; break; /* 3- Posiciona o eixo Z para "ALTURA DE PERFURAÇÃO" */ case 2: SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_MODAL_MACRO (MODAL_GROUP_G1, motion_mode, MOTION_MODE_STRAIGHT_TRAVERSE); SET_NON_MODAL_MACRO(target[AXIS_Z], altura_perfuracao); state++; break; /* 4- CHECA SE O ESTÁ EM MODO SIMULAÇÃO, SE SIM, PULAR PARA PASSO 8. SE ESTIVER EM MODO OXICORTE, CONTINUA. 4 -Dispara a tocha */ case 3: SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_MODAL_MACRO (MODAL_GROUP_M7, spindle_mode, SPINDLE_CW); state++; break; /* 5 -Espera o arco OK */ case 4: if(!sim) { uint32_t lRet = pdFALSE; pl_arcook_start(); lRet = xSemaphoreTake( xArcoOkSync, pdMS_TO_TICKS(3000) ); if (lRet == pdFALSE) { uint32_t qSend = ARCO_OK_FAILED; xQueueSend( qKeyboard, &qSend, 0 ); macro_func_ptr = command_idle; return (STAT_OK); } else { // isCuttingSet(true); } } state++; break; /*6- Dwell do "TEMPO DE PERFURAÇÃO" */ case 5: if (tempo_perfuracao > 0){ SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_NON_MODAL_MACRO (next_action, NEXT_ACTION_DWELL); SET_NON_MODAL_MACRO (parameter, tempo_perfuracao*1000); } else { delay_thcStartStop(true); } state++; break; /*7- Desce para a "ALTURA DE CORTE" com feedrate de 800*/ case 6: SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_MODAL_MACRO (MODAL_GROUP_G1, motion_mode, MOTION_MODE_STRAIGHT_FEED); SET_NON_MODAL_MACRO(target[AXIS_Z], altura_corte); SET_NON_MODAL_MACRO (feed_rate, 800); state++; break; /*8- Seta o sistema com o feedrate de corte "VELOC. DE CORTE" */ case 7: SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_NON_MODAL_MACRO (feed_rate, vel_corte); state++; break; default: state = 0; macro_func_ptr = _command_dispatch; return (STAT_OK); } } else { altura_perfuracao = configVarOx[OX_CONFIG_ALTURA_PERFURACAO]; altura_deslocamento = configVarMaq[CFG_MAQUINA_ALT_DESLOCAMENTO]; altura_corte = configVarOx[OX_CONFIG_ALTURA_CORTE]; vel_corte = configVarOx[OX_CONFIG_VELOC_CORTE]; tempo_perfuracao = configVarOx[OX_CONFIG_TEMPO_PERFURACAO]; tempo_aquecimento = configVarOx[OX_CONFIG_TEMPO_AQUECIMENTO]; switch (state) { /* 1- Posiciona o eixo Z para "ALTURA DE AQUECIMENTO = ALTURA DE CORTE" */ case 0: SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_MODAL_MACRO (MODAL_GROUP_G1, motion_mode, MOTION_MODE_STRAIGHT_TRAVERSE); SET_NON_MODAL_MACRO(target[AXIS_Z], altura_corte); state++; break; /*2- Dwell do "TEMPO DE AQUECIMENTO". Pula se estiver em simulação */ case 1: if(!sim) { tempo = tempo_aquecimento; } else { tempo = 0; } if (tempo > 0){ SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_NON_MODAL_MACRO (next_action, NEXT_ACTION_DWELL); SET_NON_MODAL_MACRO (parameter, tempo*1000); } else { delay_thcStartStop(true); } state++; break; /*3- Sobe para "ALTURA DE PERFURAÇÃO" */ case 2: SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_MODAL_MACRO (MODAL_GROUP_G1, motion_mode, MOTION_MODE_STRAIGHT_TRAVERSE); SET_NON_MODAL_MACRO(target[AXIS_Z], altura_perfuracao); state++; break; /*4- Liga a tocha */ case 3: if(configFlags[MODOMAQUINA] == MODO_OXICORTE){ SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_MODAL_MACRO (MODAL_GROUP_M7, spindle_mode, SPINDLE_CW); } state++; break; /*5- Dwell do "TEMPO DE PERFURAÇÃO" */ case 4: if(configFlags[MODOMAQUINA] == MODO_OXICORTE){ if(tempo_perfuracao > 0){ SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_NON_MODAL_MACRO (next_action, NEXT_ACTION_DWELL); SET_NON_MODAL_MACRO (parameter, tempo_perfuracao*1000); } else { delay_thcStartStop(true); } } state++; break; /*6- Desce para a "ALTURA DE CORTE" com feedrate de 800*/ case 5: SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_MODAL_MACRO (MODAL_GROUP_G1, motion_mode, MOTION_MODE_STRAIGHT_FEED); SET_NON_MODAL_MACRO(target[AXIS_Z], altura_corte); SET_NON_MODAL_MACRO (feed_rate, 800); state++; break; /*7- Seta o sistema com o feedrate de corte "VELOC. DE CORTE" */ case 6: SET_NON_MODAL_MACRO (linenum,(uint32_t)linenumMacro); SET_NON_MODAL_MACRO (feed_rate, vel_corte); state++; break; default: state = 0; macro_func_ptr = _command_dispatch; return (STAT_OK); } } _execute_gcode_block(); return (STAT_OK); }