РЕДАКТИРОВАТЬ: проблема решена! Извините, ребята, я чувствую себя глупо сейчас.
Итак, во-первых, я ошибся, увидев плохие данные, поступающие на последовательный порт. Я видел плохие данные, но на самом деле они были от 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;
}
Задача ещё не решена.
Других решений пока нет …