Форум: Техническая поддержка

Тема: LTR27 забор данных.

Вы не вошли.

 Поиск | Регистрация | Вход 

Д_Олег
24.06.2019 11:51:47
#1

Гость

LTR27 забор данных.

Здравствуйте! Разрабатываем приложение, в котором необходимо использовать данные с LTR27. Почему - то после выполнения команд LTR27_Recv() и LTR27_ProcessData() возвращается массив нулей. В то же время, LTR27 metr отображает наличие ненулевого сигнала. В чем может быть причина?

#include "include/LTR27.h"
#include <iostream>

void LTR27::openConnection(JNIEnv *env, const char *crateSN, int slotNumber) {
    error = LTR27_Init(&hltr27);
    checkError(env, error);

    WORD slot;
    switch (slotNumber) {
        case 1:
            slot = CC_MODULE1;
            break;
        case 2:
            slot = CC_MODULE2;
            break;
        case 3:
            slot = CC_MODULE3;
            break;
        case 4:
            slot = CC_MODULE4;
            break;
        case 5:
            slot = CC_MODULE5;
            break;
        case 6:
            slot = CC_MODULE6;
            break;
        case 7:
            slot = CC_MODULE7;
            break;
        case 8:
            slot = CC_MODULE8;
            break;
        case 9:
            slot = CC_MODULE9;
            break;
        case 10:
            slot = CC_MODULE10;
            break;
        case 11:
            slot = CC_MODULE11;
            break;
        case 12:
            slot = CC_MODULE12;
            break;
        case 13:
            slot = CC_MODULE13;
            break;
        case 14:
            slot = CC_MODULE14;
            break;
        case 15:
            slot = CC_MODULE15;
            break;
        case 16:
            slot = CC_MODULE16;
            break;
        default:
            slot = CC_MODULE1;
    }

    if (!error) {
        error = LTR27_Open(&hltr27, SADDR_DEFAULT, LTRD_PORT_DEFAULT, crateSN, slot);
        checkError(env, error);
    }
}

void LTR27::checkConnection(JNIEnv *env) {
    error = LTR27_IsOpened(&hltr27);
    checkError(env, error);
}

void LTR27::initialize(JNIEnv *env, int *moduleSettings) {
    error = LTR27_GetConfig(&hltr27);
    checkError(env, error);

    if (!error) {
        error = LTR27_GetDescription(&hltr27, LTR27_ALL_DESCRIPTION);
        initializeModule(moduleSettings);
    }

    if (!error) {
        error = LTR27_SetConfig(&hltr27);
        checkError(env, error);
    }
}

void LTR27::initializeModule(int *moduleSettings) {
    hltr27.FrequencyDivisor = moduleSettings[0];

    // Copy calibration coefficients
    for (int i = 0; i < LTR27_MEZZANINE_NUMBER; i++) {
        for (int j = 0; j < 4; j++) {
            hltr27.Mezzanine[i].CalibrCoeff[j] = hltr27.ModuleInfo.Mezzanine[i].Calibration[j];
        }
    }
}

void LTR27::getFrequency(JNIEnv *env, jobject obj) {
    double frequency = defineFrequency();
    jclass jcls = (*env).GetObjectClass(obj);
    jfieldID fid = (*env).GetFieldID(jcls, "frequency", "D");
    (*env).SetDoubleField(obj, fid, frequency);
}

int LTR27::defineFrequency() {
    double maxFrequency = 1000;
    double frequency = maxFrequency / (double) (hltr27.FrequencyDivisor + 1);
    return frequency;
}

void LTR27::start(JNIEnv *env) {
    error = LTR27_ADCStart(&hltr27);
    checkError(env, error);
}

void LTR27::write(JNIEnv *env, jdoubleArray data, jdoubleArray timeMarks) {
    int dataLength = (*env).GetArrayLength(data);
    rawData = (DWORD *) malloc(dataLength * sizeof(DWORD));
    tMarks = (DWORD *) malloc(dataLength * sizeof(DWORD));
    tout = 1000;

    jdouble *pData = (*env).GetDoubleArrayElements(data, 0);
    jdouble *pTimeMarks = (*env).GetDoubleArrayElements(timeMarks, 0);

    DWORD received = LTR27_Recv(&hltr27, rawData, tMarks, size, tout);
    error = LTR27_ProcessData(&hltr27, rawData, pData, &received, 1, 1);

    for (int i = 0; i < dataLength; i++) {
        std::cout << "data[ " << i << "] value: " << pData[i] << std::endl;
    }


    (*env).ReleaseDoubleArrayElements(data, pData, 0);
    (*env).ReleaseDoubleArrayElements(timeMarks, pTimeMarks, 0);

    std::free(rawData);
    std::free(tMarks);
}

void LTR27::stop(JNIEnv *env) {
    error = LTR27_ADCStop(&hltr27);
    checkError(env, error);
}

void LTR27::closeConnection(JNIEnv *env) {
    error = LTR27_Close(&hltr27);
    checkError(env, error);
}

void LTR27::checkError(JNIEnv *env, int error) {
    if (error) {
        const char *errorString = LTR27_GetErrorString(error);
        status = (*env).NewStringUTF(errorString);
    } else {
        status = (*env).NewStringUTF("Операция успешно выполнена");
    }
}
Д_Олег
24.06.2019 12:30:06
#2

Гость

Re: LTR27 забор данных.

Код оказался верным, нужно было дождаться ненулевого сигнала.

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25
Факс: +7 (495) 785-95-14

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск