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


Экспорт из Lcard

Вы не вошли.

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

Сергей
03.12.2009 16:16:27
#1

Гость

Экспорт из Lcard

Здравствуйте! Есть модуль Е14-440. В руководстве написано, что файл .dat содержит последовательность отсчетов (покадрово) в бинарном виде. Т.е., если 3 канала, то  123123....? Если так, то может подскажите, как разделить исходный файл .dat c тремя каналами на 3 бинарных файла, в каждом из которых по одному каналу? Есть ли такая возможность в Lcard?

03.12.2009 16:28:31
#2

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

Re: Экспорт из Lcard

Если пользуетесь LGraph2, то такая возможность есть в новой версии. Выбираете режим экспорта в бинарный файл и помечаете тот канал, который надо выделить в отдельный файл. Вот только при экспорте будет создан двоичный файл не двухбайтных целых, а float или double (код АЦП, переведенный в вольты с учетом диапазона и калибровок).
Новая версия (пока неофициальная) лежит на ftp.lcard.ru/pub/lgraph2

03.12.2009 17:45:41
#3

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

Re: Экспорт из Lcard

#include <stdio.h>

#define NUMCHAN 3
#define BUFSIZE 0x8000
typedef short datatype;

size_t split
    (
    const datatype* indata,
    size_t incount,
    datatype* const outdata[NUMCHAN]
    )
    {
    size_t ch = 0;
    size_t k = 0;
    while (incount--)
        {
        outdata[ch][k] = *indata++;
        if (++ch >= NUMCHAN)
            {
            ch = 0;
            k++;
            }
        }
    return ch;
    }

int main(int argc, char* argv[])
    {
    FILE* fin;
    FILE* fout[NUMCHAN];
    datatype* inbuf;
    datatype* outbuf[NUMCHAN];
    size_t i;
    if (argc != 2 + NUMCHAN)
        {
        printf("usage: split <infile> <outfile1> ... <outfile%d>//n", NUMCHAN);
        exit(-1);
        }
    fin = fopen(argv[1], "rb");
    inbuf = malloc(sizeof(datatype) * BUFSIZE * NUMCHAN);
    if (!fin || !inbuf) exit(-1);
    for (i = 0; i < NUMCHAN; i++)
        {
        fout[i] = fopen(argv[2 + i], "wb");
        outbuf[i] = malloc(sizeof(datatype) * BUFSIZE);
        if (!fout[i] || !outbuf[i]) exit(-1);
        }
    while (!feof(fin))
        {
        size_t tail;
        size_t numread = fread(inbuf, sizeof(datatype), BUFSIZE * NUMCHAN, fin);
        if (!numread) break;
        tail = split(inbuf, numread, outbuf);
        for (i = 0; i < NUMCHAN; i++)
            {
            printf("write %d to %d//n", numread / NUMCHAN + (tail > i), i);
            fwrite(outbuf[i], sizeof(datatype), numread / NUMCHAN + (tail > i), fout[i]);
            }
        }
    }