Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


Linux E-140 Формат *par или тестовый пример

Вы не вошли.

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

Mrak
12.01.2013 19:03:33
#1

Гость

Linux E-140 Формат *par или тестовый пример

Добрый день. Использую тестовый пример без изменений. По умолчаю дата собирается с первых четырех каналов. У меня распайка идет на каналы 1й или еще другие 3 идущие не подряд. На первый канал подключаю 10В напряжение, другие 3 вообще не трогаю. Программа работает нормально, формирует файл. Но при загрузке его в PowerGraph или Matlab отображается одна и таже дата на всех четырех каналах. С форматом *par почти разобрался, не трогал только масштабные коэффициенты и смещения что пишутся в конце, но а так задавал все в соответствии: 4 канала, 32 цикла записи (которые потом пересчитал на время), сформировал массивы где пишутся активные каналы, число каналов, число фреймов, семплов, все легко считается. Все номера каналов, частоты, программа правильно определяет при загрузке (и Матлаб и Граф), но данные которые поступали с 1 канала, пишутся 1 в 1 и на остальные 3.

Вот код формирования *par файла который я использую

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
// Через параметры при запуске указываю номера каналов, которые хочу использовать.
int length = 32; // это количество циклов записи в тестовом примере (там переменная multi);
    char Code[21] = "2571090,7859525     ";
    char PlateName[18] = "E140             ";
    char TimeString[27] = "Dont care! I/'ll do it     ";
    WORD ChannelsMax = 32;
    WORD RealChannelsQuantity = argc - 1;
    double TotalTime = double(131072) * length / 200000;
    int frames = TotalTime * 100000 / RealChannelsQuantity;
    int samples = TotalTime * 100000;
    float AdcRate = 100.0 / RealChannelsQuantity;
    float InterkardDelay = 0.01;
    float ChannelRate = 100.0 / RealChannelsQuantity;
    bool ActiveAdcChannelArray[32] = {false};
    for (int a = 1; a < argc; a++)
        ActiveAdcChannelArray[_wtoi(argv[a]) - 1] = true;
    BYTE AdcChannelArray[32];
    BYTE AdcGainArray[32];
    BYTE IsSignalArray[32];
for (int a = 0; a < 32; a++)
    {
        AdcChannelArray[a] = a;
        AdcGainArray[a] = 0;
        IsSignalArray[a] = 0;
    }
...
Т.е. по количеству введенный в параметрах при запуске этой программы параметровы ввысчитываются все переменные. В чем может быть проблема?

14.01.2013 09:48:52
#2

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Linux E-140 Формат *par или тестовый пример

все каналы висящие в воздухе должно быть заземлены.

Mrak
10.02.2013 22:04:24
#3

Гость

Re: Linux E-140 Формат *par или тестовый пример

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

11.02.2013 10:29:24
#4

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Linux E-140 Формат *par или тестовый пример

или заземлены или не должны опрашиваться.

11.02.2013 14:47:12
#5

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: Linux E-140 Формат *par или тестовый пример

> данные, которые поступали с 1 канала, пишутся 1 в 1 и на остальные 3.

Вы говорите о визуальных графиках или о числовых значених? Если данные *численно точно совпадают* (бит в бит), то более вероятно, что где-то ошибка при обработке или интерпретации.
А если "приблизительно", то это коммутационная помеха от неправильного подключения... или еще один вариант - неправильное разделение на каналы (скажем, если одноканальный низкочастотный сигнал скормить программе, думающей, что это четырехканальные кадры, то получится 4 "похожих" кривых с частотой дискретизации в 4 раза меньше реальной.
Последние два случая легко различить, если подать периодический сигнал с известным периодом и подсчитать количество отсчетов на период.