Создание файлов COMTRADE в C# при помощи GSF.Comtrade

290
18 августа 2017, 23:19

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

Итак, имеется пара COMTRADE файлов (описание *.cfg и данные *.dat). Передо мной стоит задача взять все данные из этой пары и создать новую пару с теми же данными (для простоты примера).

Используя фреймворк GSF читаю файлы так:

    Parser comParser;
    private void openComtradeDatFile()
    {
        OpenFileDialog od = new OpenFileDialog();
        DialogResult dialogRes = od.ShowDialog();
        if (dialogRes == DialogResult.OK)
        {
            comParser = new Parser();
            if (File.Exists( od.FileName ))
            {
                comParser.FileName = od.FileName;
                ComtradeToChart();
            }
        }
    }
    private void ComtradeToChart()
    {
        // (Пере)Открыть файлы
        comParser.CloseFiles();
        comParser.OpenFiles();
        string cfgFileName = Path.ChangeExtension( comParser.FileName, "cfg" );
        comParser.Schema = new Schema( cfgFileName );
        // Номер канала
        int channelNumber = (int)numericUpDownChannel.Value;
        // Построение осциллограммы для текущего канала
        chartMain.Series[0].Points.Clear();
        while (comParser.ReadNext() == true)
        {
            chartMain.Series[0].Points.AddXY(
                comParser.Timestamp,
                comParser.PrimaryValues[channelNumber]
            );
        }
    }

Все работает и строится осциллограмма на чарте. Ок.

Пробую записать данные в новый файл (*.dat, ибо *.cfg в данном случае тот же):

private void экспортToolStripMenuItem_Click(object sender, EventArgs e)
    {     
        // Открываем окно сохранения
        SaveFileDialog saveFileDlg = new SaveFileDialog();
        if (saveFileDlg.ShowDialog() == DialogResult.OK) {
            FileStream outFile = File.Create( saveFileDlg.FileName );
            StreamWriter sw = new StreamWriter(outFile);
            // Читаем и Пишем:
            comParser.CloseFiles();
            Schema outSchema = comParser.Schema;
            comParser.OpenFiles();
            GSF.Ticks timestamp = 0;
            while (comParser.ReadNext()==true) {
                double[] vals = comParser.SecondaryValues;
                uint sample = 1;
                Writer.WriteNextRecordBinary( sw.BaseStream, outSchema, timestamp, vals,sample,false);
                timestamp = comParser.Timestamp;
            }
            outFile.Close();
        }

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

Как решить правильно данную задачу? Есть ли тут люди, работавшие с данным фреймворком(GSF.Comtrade)? Или возможно стоить обратить внимание на другие библиотеки/фреймворки?

READ ALSO
Конструктор классов

Конструктор классов

Например есть такой класс(к примеру)

238
DualListbox js как очищать

DualListbox js как очищать

как очищать DualListbox перед каждым открытием модального окна? у меня мои данные накапливаются сейчас

339
альтернатива метода find js?

альтернатива метода find js?

что можно использовать в качестве альтернативы метода find js?

331