/*
 * Show/Sets the mass of the vehicle
 */
static int cmd_dyno_mass(int argc, char **argv)
{
	if (argc > 1)
		dyno_set_mass(htoi(argv[1]));
	else
		printf("mass: %d kg\n", dyno_get_mass());
  
	return (0);
}
Ejemplo n.º 2
0
/*
 * Show/Sets the mass of the vehicle
 */
static int cmd_dyno_mass(int argc, char **argv)
{
	int mass=0;

	if (argc > 1)
		mass=htoi(argv[1]);

	if (mass > 0)
		dyno_set_mass(mass);
	else
		printf("mass: %d kg\n", dyno_get_mass());

	return 0;
}
Ejemplo n.º 3
0
static int cmd_dyno_run(UNUSED(int argc), UNUSED(char **argv)) {
	ecu_data *ep;

	int speed;						/* measured speed */
	int rpm;							/* measured rpm */
	int rpm_previous = 0; /* previous rpm */

	unsigned long tv0, tv;	/* measuring time */
	int elapsed; /* elapsed time (ms) */

	int i, length = 0; /* length of printed string */
	int nb = 0; /* number of measures */

	//make sure we're connected !
	if (global_l3_conn == NULL) {
		fprintf(stderr, FLFMT "No active L3 connection !\n", FL);
		return CMD_FAILED;
	}

	/* Check mass */
	if (dyno_get_mass() <= 0) {
		printf("The mass of the vehicle has not been set, please set the mass first\n");
		return CMD_OK;
	}

	/* Check mass */
	if (dyno_loss_done <= 0) {
		printf("The loss determination has not been done, please use command loss or setloss first\n");
		return CMD_OK;
	}

	/* Show instructions */
	printf("To proceed dyno, do a full-throttle acceleration run\n");
	printf("in a single gear from a rolling start.\n");
	printf("The run ends automatically when RPM begins to decrease.\n");
	printf("\n");
	wait_enter("Press ENTER when ready... ");
	printf("\n");

	/* Reset data */
	dyno_reset(); /* dyno data */
	reset_results();

	tv0=diag_os_getms();	/* initial time */
	ep = ecu_info; /* ECU data */

	/* Measures */
	while (1) {
		/* measure RPM */
		rpm = RUN_MEASURE_DATA(RPM_PID, ep);

		if (rpm < 0) {
			printf("invalid RPM !\n");
			break;
		}


		if (rpm_previous == 0) {
			/* this is the first measure */
			printf("Starting dyno (min rpm=%d)\n", rpm);
			printf("Number of measures : ");
		}

		/* if RPM starts decreasing, stop run */
		if (rpm < rpm_previous) {
			printf(" (max rpm=%d)\n", rpm_previous);
			break;
		}

		/* get elapsed time */
		tv=diag_os_getms();
		elapsed = (int) (tv - tv0);

		/* Add measure */
		dyno_add_measure(elapsed, rpm);

		/* Display number of measures */
		nb++;
		for (i = 0; i < length; i++) {
			printf("");
		}

		length = printf("%d (%d RPM) ", nb, rpm);
		fflush(stdout); /* force displaying now (may slow down dyno...) */

		rpm_previous = rpm;
	}

	/* measure gear ratio */
	rpm_previous = rpm;
	speed = RUN_MEASURE_DATA(SPEED_PID, ep); /* m/s * 1000 */
	rpm	 = RUN_MEASURE_DATA(RPM_PID, ep);

	if ((speed < 0) || (rpm < 0)) {
		printf("invalid RUN_MEASURE_DATA result !\n");
		return CMD_FAILED;
	}
	dyno_set_gear(speed, (rpm_previous + rpm) / 2);

	/* display dyno time */
	tv=diag_os_getms();
	elapsed = (int) (tv - tv0);
	printf("Dyno time : %ds.\n", (elapsed/1000));

	printf("\n");

	return CMD_OK;
}
Ejemplo n.º 4
0
static int cmd_dyno_loss(UNUSED(int argc), UNUSED(char **argv)) {
	ecu_data *ep;

	int speed;              /* measured speed */
	int speed_previous = 0; /* previous speed */

	unsigned long tv0, tv;
	int elapsed; /* elapsed time */

	int i, length; /* length of printed string */
	int nb = 0; /* number of measures */

	//make sure we have an L3 connection first !
	if (global_l3_conn == NULL) {
		fprintf(stderr, FLFMT "Error: there must be an active L3 connection!\n", FL);
		return CMD_FAILED;
	}

	/* Check mass */
	if (dyno_get_mass() <= 0) {
		printf("The mass of the vehicle has not been set, please set the mass first\n");
		return CMD_OK;
	}

	/* Show instructions */
	printf("To proceed loss determination, reach the maximum speed you will reach during\n");
	printf("dyno, then push in the clutch, leaving the car in gear. Allow the car to coast\n");
	printf("down to the lowest possible speed. Press ENTER when finished.\n");
	printf("\n");
	wait_enter("Press ENTER when ready... ");
	printf("\n");

	/* Reset data */
	dyno_loss_reset(); /* dyno data */
	reset_results();
	tv0=diag_os_getms(); /* initial time */
	ep = ecu_info; /* ECU data */

	/* exclude 1st measure */
	speed_previous = LOSS_MEASURE_DATA(SPEED_PID, ep); /* m/s * 1000 */
	if (speed_previous < 0) {
		printf("invalid speed !\n");
		return CMD_FAILED;
	}

	printf("Starting loss determination (max speed=%d km/h)\n", SPEED_ISO_TO_KMH(speed_previous));
	printf("Number of measures : 0");
	length = 1;

	/* loss measures */
	while (1) {
		/* measure speed */
		speed = LOSS_MEASURE_DATA(SPEED_PID, ep); /* m/s * 1000 */
		if (speed < 0) {
			printf("invalid speed !\n");
			break;
		}


		/* get elapsed time */

		tv=diag_os_getms();
		elapsed = (int) (tv - tv0);

		if (speed < speed_previous) {
			/* Add measure */
			dyno_loss_add_measure(elapsed, speed);
			nb++;

			speed_previous = speed;
		}

		if (pressed_enter() != 0) {
			/* ENTER pressed : stops */
			printf("Number of measures : %d (min speed=%d km/h)\n", nb, SPEED_ISO_TO_KMH(speed));
			break;
		}
		if (speed_previous == speed) { /* measure added: update display */
			/* erase previous measure */
			for (i = 0; i < length; i++) {
				printf("");
			}

			/* Display new measure */
			length = printf("%d (speed=%d km/h, d=%5.5f, f=%4.2f)\t ",
			nb, SPEED_ISO_TO_KMH(speed), dyno_loss_get_d(), dyno_loss_get_f());
			fflush(stdout); /* force displaying now (may slow down dyno...) */
		}
	}

	/* display dyno time */
	//elapsed = MILLIS(tv) - MILLIS(tv0);
	tv=diag_os_getms();
	elapsed= (int) (tv - tv0);
	printf("d=%5.5f, f=%4.2f\n", dyno_loss_get_d(), dyno_loss_get_f());
	printf("Loss determination time : %ds.\n", (elapsed/1000));

	printf("\n");

	/* now dyno loss has been done */
	dyno_loss_done = 1;

	return CMD_OK;
}