コード例 #1
0
ファイル: macros.c プロジェクト: ustropo/MT01
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);
}
コード例 #2
0
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
}
コード例 #3
0
ファイル: cycle_homing.cpp プロジェクト: ADTL/g2
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
}
コード例 #4
0
ファイル: macros.c プロジェクト: ustropo/MT01
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);
}