Static Double меняет значение при передаче в метод?

РЕДАКТИРОВАТЬ: проблема решена! Извините, ребята, я чувствую себя глупо сейчас.

Итак, во-первых, я ошибся, увидев плохие данные, поступающие на последовательный порт. Я видел плохие данные, но на самом деле они были от INTEGER, а не от удвоений. Затем, выполнив еще несколько тестов, я заметил, что неверные данные из целого числа на самом деле не случайные, а на самом деле правильные данные в научной нотации.

Вернулся в класс для xAxis и понял, что у меня нет перегруженного метода для целочисленного типа, поэтому я пытался протолкнуть квадратный колышек через круглое отверстие.


Этот сводит меня с ума весь день. По сути, у меня есть набор статических двойников, которые меняются в значении, когда они передаются определенному методу.

Метод в вопросе

long DriveController::GoToPositionX(
int pos, double accel, double decel, double velocity)
{
xAxis.ClearQue();

xAxis.AppendCmd(xAxisDriveId, "RS");
xAxis.AppendCmd(xAxisDriveId, "SP");
xAxis.AppendCmd(xAxisDriveId, "AC", accel);
xAxis.AppendCmd(xAxisDriveId, "DE", decel);
xAxis.AppendCmd(xAxisDriveId, "VE", velocity);
xAxis.AppendCmd(xAxisDriveId, "FP", pos);
xAxis.AppendCmd(xAxisDriveId, "IP");
xAxis.AppendCmd(xAxisDriveId, "IP");

return xAxis.ContinueQue();
}

Переменные объявления:

long lLastError = ERROR_SUCCESS;

static double accel, decel, velocity, jogAccel, jogDecel, jogVelocity;

static int absPosMAHI, absPosSAGNAC, absPosSutter, absPosHICO;

char portNum[16] = {NULL};

static DriveController driveController;
static INIReadWrite configIni;

Звоните в функцию:

case IDB_FP_MAHI:
driveController.GoToPositionX(absPosMAHI, accel, decel, velocity);
SetFocus(hwnd); //Return focus to the parent window. Without this, focus will be stuck on the button
return 0;

Таким образом, в основном, я устанавливаю точку останова при вызове метода, другой внутри метода, а во второй точке останова значения — это какое-то абсурдное число, часто раз денормализованное число. Однако, если я передаю константу (goToPositionX (var, 5.0, 3.0 и т. Д.)), Все проходит нормально. Передача в качестве ссылки тоже не помогает.

Я также могу подтвердить это, потому что код предназначен для связи с драйвером шагового двигателя, и если я смотрю последовательный порт, я вижу, как проходят неопределенные значения.

У меня такое ощущение, что это что-то тривиальное, но я в тупике.

РЕДАКТИРОВАТЬ: Я должен также указать, что целое число проходит через хорошо. Только двойники идут дурацкие.

РЕДАКТИРОВАТЬ: определения переменных:

 int InitCfgParams(
INIReadWrite * configIni,
double * jogAccel, double * jogDecel, double * jogVelocity,
double * accel, double * decel, double * velocity,
char portNum[],
int * preset1, int * preset2, int * preset3, int * preset4)
{
char absPos[] = "ABS_POS";
char moveParam[] = "MOVE_PARAMS";

//...
//a bunch of things are defined in here that don't pertain to this question
//...

*accel = configIni->LoadDouble(moveParam, "accel");
if(accel == NULL){
return 1;
}

*decel = configIni->LoadDouble(moveParam, "decel");
if(decel == NULL){
return 1;
}

*velocity = configIni->LoadDouble(moveParam, "velocity");
if(velocity == NULL){
return 1;
}

configIni->LoadChar("SETUP", "com", portNum);
if(portNum == NULL){
return 1;
}

return 0;
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]