halui.cc

来自「CNC 的开放码,EMC2 V2.2.8版」· CC 代码 · 共 1,793 行 · 第 1/5 页

CC
1,793
字号
	    maxSpindleOverride =  d;	}	else {    	    // error-- no value provided, use 100% as max	    maxSpindleOverride =  1.0;	}    }    else {	// no line at all        maxSpindleOverride =  1.0;    }        if (NULL != (inistring = inifile.Find("AXES", "TRAJ"))) {	if (1 == sscanf(inistring, "%d", &i) && i > 0) {	    num_axes =  i;	}	else {    	    // error-- no value provided, use 100% as max	    num_axes =  0;	}    }    else {	// no line at all        num_axes =  0;    }    if (NULL != (inistring = inifile.Find("LINEAR_UNITS", "DISPLAY"))) {	if (!strcmp(inistring, "AUTO")) {	    linearUnitConversion = LINEAR_UNITS_AUTO;	} else if (!strcmp(inistring, "INCH")) {	    linearUnitConversion = LINEAR_UNITS_INCH;	} else if (!strcmp(inistring, "MM")) {	    linearUnitConversion = LINEAR_UNITS_MM;	} else if (!strcmp(inistring, "CM")) {	    linearUnitConversion = LINEAR_UNITS_CM;	}    } else {	// not found, leave default alone    }    if (NULL != (inistring = inifile.Find("ANGULAR_UNITS", "DISPLAY"))) {	if (!strcmp(inistring, "AUTO")) {	    angularUnitConversion = ANGULAR_UNITS_AUTO;	} else if (!strcmp(inistring, "DEG")) {	    angularUnitConversion = ANGULAR_UNITS_DEG;	} else if (!strcmp(inistring, "RAD")) {	    angularUnitConversion = ANGULAR_UNITS_RAD;	} else if (!strcmp(inistring, "GRAD")) {	    angularUnitConversion = ANGULAR_UNITS_GRAD;	}    } else {	// not found, leave default alone    }    const char *mc;    while(num_mdi_commands < MDI_MAX && (mc = inifile.Find("MDI_COMMAND", "HALUI", num_mdi_commands+1))) {        mdi_commands[num_mdi_commands++] = strdup(mc);        printf("halui found mdi command: %s\n", mc);    }    // close it    inifile.Close();    return 0;}static void hal_init_pins(){    int joint;    old_halui_data.machine_on = *(halui_data->machine_on) = 0;    old_halui_data.machine_off = *(halui_data->machine_off) = 0;    old_halui_data.estop_activate = *(halui_data->estop_activate) = 0;    old_halui_data.estop_reset = *(halui_data->estop_reset) = 0;        for (joint=0; joint < num_axes; joint++) {	*(halui_data->joint_home[joint]) = old_halui_data.joint_home[joint] = 0;	*(halui_data->joint_nr_select[joint]) = old_halui_data.joint_nr_select[joint] = 0;	*(halui_data->jog_minus[joint]) = old_halui_data.jog_minus[joint] = 0;	*(halui_data->jog_plus[joint]) = old_halui_data.jog_plus[joint] = 0;	*(halui_data->jog_analog[joint]) = old_halui_data.jog_analog[joint] = 0;    }    *(halui_data->joint_home[num_axes]) = old_halui_data.joint_home[num_axes] = 0;    *(halui_data->jog_minus[num_axes]) = old_halui_data.jog_minus[num_axes] = 0;    *(halui_data->jog_plus[num_axes]) = old_halui_data.jog_plus[num_axes] = 0;    *(halui_data->jog_deadband) = 0.2;    *(halui_data->jog_speed) = 0;    *(halui_data->joint_selected) = 0; // select joint 0 by default        *(halui_data->fo_scale) = old_halui_data.fo_scale = 0.1; //sane default    *(halui_data->so_scale) = old_halui_data.so_scale = 0.1; //sane default}static int check_bit_changed(hal_bit_t *halpin, hal_bit_t *oldpin) {    hal_bit_t bit;        bit = *(halpin);    if (bit != *(oldpin)) {	*(oldpin) = bit;	if (bit != 0) //if transition to 1	    return 1;    }    return 0;}// this function looks if any of the hal pins has changed// and sends appropiate messages if sostatic void check_hal_changes(){    hal_s32_t counts;    int select_changed, joint;    hal_bit_t bit, js;    hal_float_t floatt;        //check if machine_on pin has changed (the rest work exactly the same)    if (check_bit_changed(halui_data->machine_on, &(old_halui_data.machine_on)) != 0)	sendMachineOn();                //send MachineOn NML command        if (check_bit_changed(halui_data->machine_off, &(old_halui_data.machine_off)) != 0)	sendMachineOff();    if (check_bit_changed(halui_data->estop_activate, &(old_halui_data.estop_activate)) != 0)	sendEstop();    if (check_bit_changed(halui_data->estop_reset, &(old_halui_data.estop_reset)) != 0)	sendEstopReset();    if (check_bit_changed(halui_data->mode_manual, &(old_halui_data.mode_manual)) != 0)	sendManual();    if (check_bit_changed(halui_data->mode_auto, &(old_halui_data.mode_auto)) != 0)	sendAuto();    if (check_bit_changed(halui_data->mode_mdi, &(old_halui_data.mode_mdi)) != 0)	sendMdi();    if (check_bit_changed(halui_data->mode_teleop, &(old_halui_data.mode_teleop)) != 0)	sendTeleop();    if (check_bit_changed(halui_data->mode_joint, &(old_halui_data.mode_joint)) != 0)	sendJoint();    if (check_bit_changed(halui_data->mist_on, &(old_halui_data.mist_on)) != 0)	sendMistOn();    if (check_bit_changed(halui_data->mist_off, &(old_halui_data.mist_off)) != 0)	sendMistOff();    if (check_bit_changed(halui_data->flood_on, &(old_halui_data.flood_on)) != 0)	sendFloodOn();    if (check_bit_changed(halui_data->flood_off, &(old_halui_data.flood_off)) != 0)	sendFloodOff();    if (check_bit_changed(halui_data->lube_on, &(old_halui_data.lube_on)) != 0)	sendLubeOn();    if (check_bit_changed(halui_data->lube_off, &(old_halui_data.lube_off)) != 0)	sendLubeOff();    if (check_bit_changed(halui_data->program_run, &(old_halui_data.program_run)) != 0)	sendProgramRun(0);    if (check_bit_changed(halui_data->program_pause, &(old_halui_data.program_pause)) != 0)	sendProgramPause();    if (check_bit_changed(halui_data->program_os_on, &(old_halui_data.program_os_on)) != 0)	sendSetOptionalStop(ON);    if (check_bit_changed(halui_data->program_os_off, &(old_halui_data.program_os_off)) != 0)	sendSetOptionalStop(OFF);    if (check_bit_changed(halui_data->program_bd_on, &(old_halui_data.program_bd_on)) != 0)	sendSetBlockDelete(ON);    if (check_bit_changed(halui_data->program_bd_off, &(old_halui_data.program_bd_off)) != 0)	sendSetBlockDelete(OFF);    if (check_bit_changed(halui_data->program_resume, &(old_halui_data.program_resume)) != 0)	sendProgramResume();    if (check_bit_changed(halui_data->program_step, &(old_halui_data.program_step)) != 0)	sendProgramStep();    if (check_bit_changed(halui_data->program_stop, &(old_halui_data.program_stop)) != 0)	sendAbort();    //feed-override stuff    counts = *halui_data->fo_counts;    if(counts != old_halui_data.fo_counts) {        sendFeedOverride( *halui_data->fo_value + (counts - old_halui_data.fo_counts) *                *halui_data->fo_scale);        old_halui_data.fo_counts = counts;    }    //spindle-override stuff    counts = *halui_data->so_counts;    if(counts != old_halui_data.so_counts) {        sendSpindleOverride( *halui_data->so_value + (counts - old_halui_data.so_counts) *                *halui_data->so_scale);        old_halui_data.so_counts = counts;    }        if (check_bit_changed(halui_data->fo_increase, &(old_halui_data.fo_increase)) != 0)        sendFeedOverride(*halui_data->fo_value + *halui_data->fo_scale);    if (check_bit_changed(halui_data->fo_decrease, &(old_halui_data.fo_decrease)) != 0)        sendFeedOverride(*halui_data->fo_value - *halui_data->fo_scale);    if (check_bit_changed(halui_data->so_increase, &(old_halui_data.so_increase)) != 0)        sendSpindleOverride(*halui_data->so_value + *halui_data->so_scale);    if (check_bit_changed(halui_data->so_decrease, &(old_halui_data.so_decrease)) != 0)        sendSpindleOverride(*halui_data->so_value - *halui_data->so_scale);//spindle stuff    if (check_bit_changed(halui_data->spindle_start, &(old_halui_data.spindle_start)) != 0)	sendSpindleForward();    if (check_bit_changed(halui_data->spindle_stop, &(old_halui_data.spindle_stop)) != 0)	sendSpindleOff();    if (check_bit_changed(halui_data->spindle_forward, &(old_halui_data.spindle_forward)) != 0)	sendSpindleForward();    if (check_bit_changed(halui_data->spindle_reverse, &(old_halui_data.spindle_reverse)) != 0)	sendSpindleReverse();    bit = *(halui_data->spindle_increase);    if (bit != old_halui_data.spindle_increase) {	if (bit != 0)	    sendSpindleIncrease();	if (bit == 0)	    sendSpindleConstant();	old_halui_data.spindle_increase = bit;    }    bit = *(halui_data->spindle_decrease);    if (bit != old_halui_data.spindle_decrease) {	if (bit != 0)	    sendSpindleDecrease();	if (bit == 0)	    sendSpindleConstant();	old_halui_data.spindle_decrease = bit;    }    if (check_bit_changed(halui_data->spindle_brake_on, &(old_halui_data.spindle_brake_on)) != 0)	sendBrakeEngage();    if (check_bit_changed(halui_data->spindle_brake_off, &(old_halui_data.spindle_brake_off)) != 0)	sendBrakeRelease();        if (check_bit_changed(halui_data->abort, &(old_halui_data.abort)) != 0)	sendAbort();    // joint stuff (selection, homing..)    select_changed = -1; // flag to see if the selected joint changed        for (joint=0; joint < num_axes; joint++) {	if (check_bit_changed(halui_data->joint_home[joint], &(old_halui_data.joint_home[joint])) != 0)	    sendHome(joint);	bit = *(halui_data->jog_minus[joint]);	if (bit != old_halui_data.jog_minus[joint]) {	    if (bit != 0)		sendJogCont(joint,-*(halui_data->jog_speed));	    else		sendJogStop(joint);	    old_halui_data.jog_minus[joint] = bit;	}	bit = *(halui_data->jog_plus[joint]);	if (bit != old_halui_data.jog_plus[joint]) {	    if (bit != 0)		sendJogCont(joint,*(halui_data->jog_speed));	    else		sendJogStop(joint);	    old_halui_data.jog_plus[joint] = bit;	}	floatt = *(halui_data->jog_analog[joint]);	if (floatt != old_halui_data.jog_analog[joint]) {	    if (fabs(floatt) > *(halui_data->jog_deadband))		sendJogCont(joint,*(halui_data->jog_speed) * *(halui_data->jog_analog[joint]));	    else		sendJogStop(joint);	    old_halui_data.jog_analog[joint] = floatt;	}		// check to see if another joint has been selected	bit = *(halui_data->joint_nr_select[joint]);	if (bit != old_halui_data.joint_nr_select[joint]) {	    if (bit != 0) {		*(halui_data->joint_selected) = joint;		select_changed = joint; // flag that we changed the selected joint	    } 	    old_halui_data.joint_home[joint] = bit;	}    }        if (select_changed >= 0) {	for (joint = 0; joint < num_axes; joint++) {	    if (joint != select_changed) {		*(halui_data->joint_is_selected[joint]) = 0;    	    } else {		*(halui_data->joint_is_selected[joint]) = 1;	    }	}    }    if (check_bit_changed(halui_data->joint_home[num_axes], &(old_halui_data.joint_home[num_axes])) != 0)	sendHome(*(halui_data->joint_selected));    bit = *(halui_data->jog_minus[num_axes]);    js = *(halui_data->joint_selected);    if (bit != old_halui_data.jog_minus[num_axes]) {        if (bit != 0)	    sendJogCont(js, -*(halui_data->jog_speed));	else	    sendJogStop(js);	old_halui_data.jog_minus[num_axes] = bit;    }    bit = *(halui_data->jog_plus[num_axes]);    js = *(halui_data->joint_selected);    if (bit != old_halui_data.jog_plus[num_axes]) {        if (bit != 0)    	    sendJogCont(js,*(halui_data->jog_speed));	else	    sendJogStop(js);	old_halui_data.jog_plus[num_axes] = bit;    }    for(int n = 0; n < num_mdi_commands; n++) {        if (check_bit_changed(halui_data->mdi_commands[n], &(old_halui_data.mdi_commands[n])) != 0)            sendMdiCommand(n);    }}// this function looks at the received NML status message// and modifies the appropiate HAL pinsstatic void modify_hal_pins(){    int joint;        if (emcStatus->task.state == EMC_TASK_STATE_ON) {	*(halui_data->machine_is_on)=1;    } else {	*(halui_data->machine_is_on)=0;    }    if (emcStatus->task.state == EMC_TASK_STATE_ESTOP) {	*(halui_data->estop_is_activated)=1;    } else {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?