Импорт из CVS файла

Просмотр 15 сообщений - с 1 по 15 (из 27 всего)
  • Автор
    Сообщения
  • #36685
    sentinel
    Участник

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

    #36707
    UterGrooll
    Участник

    Тоже интересно, поискал по документации на сайте объяснений нет.

    #36709
    a80808
    Участник

    Сейчас занимаюсь этим. Получить не проблема, проблема правильно распихать по каналам — преобразования в данные канала не всегда получаются корректно.
    Ну к примеру вот такой файл .csv:
    № датчика;Serial #;Тип;Дата поверки;Дата сл. Поверки
    1;2561000016;ВИТ-ЭЛ;10.05.2024;10.05.2025
    2;2561000069;ВИТ-ЭЛ;10.05.2024;10.05.2025
    3;2561000024;ВИТ-ЭЛ;10.05.2024;10.05.2025
    4;2561000097;ВИТ-ЭЛ;10.05.2024;10.05.2025

    Первую строку разумеется игнорируем, это для справки

    Первый и второй параметры без проблем. Третий превращаю в 1, 2 .3….чтобы потом текстом перечислений вывести нужное значение. А вот дальше затык — никак не могу корректно дату перевести в double…

    Читается в массив. Пока работа только с одной строкой, потом в цикле сделаю
    =============

    double ReadCSV()
    {

    string pathRet = @»c:\VER\verificant.csv»;

    string[] result = System.IO.File.ReadAllLines(pathRet, Encoding.UTF8);
    string T1 = result [1];

    string[] tail = T1.Split(new char[] { ‘;’ });

    T1 = tail [0];

    SetVal(60001, Convert.ToDouble(T1));

    T1 = tail [1];
    SetVal(60002, Convert.ToDouble(T1));

    double tres = 0;
    T1 = tail [2];

    switch (T1)
    {
    case «ВИТ-ЭЛ»:
    tres = 1;
    break;
    case «ДТС»:
    tres = 2;
    break;
    case «ДТВ (IP65)»:
    tres = 3;
    break;
    default:
    tres = 0;
    break;
    }
    SetVal(60003, tres);

    T1 = tail [3];

    double rdd = rdt.ToOADate();
    SetVal(60004, rdd);

    T1 = tail [4];

    double rdd = rdt.ToOADate();
    SetVal(60005, rdd);

    return 0;

    }

    #36710
    manjey73
    Участник

    Пирсинг даты в DateTime проходит?
    Потом DateTime.ToOADate()

    Только я не понял, где вы получаете rtd?

    • Ответ изменён 1 год, 4 месяца назад пользователем manjey73.
    #36712
    manjey73
    Участник

    DateTime.TryParse смотрите.
    Вам элемент массива надо запросить в DateTime или выставить по умолчанию какую-то дату, если паркинг не пройдет.

    #36715
    a80808
    Участник

    Спасибо, попробую. Там убрано лишнее (отладка), может случайно и присвоение прибил )))

    #36716
    manjey73
    Участник

    d Краткий формат даты. Например, 17.07.2015

    Parse должен сработать. Но лучше применять TryParse предварительно создав DateTime как new, а потом проверять, чтобы дата не была равна 1899 году или какой там при new создается.

    #36717
    UterGrooll
    Участник

    Приветствую, что я делаю не так ? Написал простую программу которая ходит по telnet и копирует от туда необходимые данные, далее создает CVS файл и записывает данные: в таком формате
    RPSU Status;RPSU Uptime (Hours);Voltage (V);Current (mA);Leak Current (mA);Timestamp
    1;0059;308;157;-0.02;2025-02-08 23:36:45
    1;0059;308;156;-0.02;2025-02-08 23:37:58
    1;0059;308;156;-0.02;2025-02-08 23:39:11
    1;0059;308;156;-0.02;2025-02-08 23:40:24
    1;0059;309;156;-0.02;2025-02-08 23:41:37
    1;0059;309;157;-0.02;2025-02-08 23:42:50
    1;0059;307;156;-0.02;2025-02-08 23:44:03

    в настройках скады я указал файл и выставил настройки:
    Параметр Значение
    DecimalSeparator .
    DemoPeriod OneHour
    FieldDelimiter ;
    FileName device_data.csv
    ReadMode RealTime
    TagCount 6
    Итого Статус: норма
    в Статистики линии: Новых данных нет. (хотя программа пишет каждую минуту)
    Таg — создались, а в графе «Значения» пусто…
    Может я не совсем понял логику программы. Объясните, пожалуйста.

    • Ответ изменён 1 год, 4 месяца назад пользователем UterGrooll.
    #36725
    Mikhail
    Модератор

    Добрый день!
    Время должно идти в начале строки. Посмотрите файл примера.

    • Ответ изменён 1 год, 4 месяца назад пользователем Mikhail.
    #36728
    UterGrooll
    Участник

    В таблице текущие данные вижу что подхватил мои названия:
    (формат файла такой)
    Timestamp;Uptime;Voltage;Current;Leak Current
    2025-02-10 16:13:57;0101;307;156;0.02
    2025-02-10 16:15:10;0101;307;156;0.02
    2025-02-10 16:26:33;0102;308;157;0.02

    Текущие данные
    +——-+————+—————+———-+——-+
    | Номер | Код | Наименование | Значение | Канал |
    +——-+————+—————+———-+——-+
    | ******************** Main Data ******************** |
    +——-+————+—————+———-+——-+
    | 1 | Tag1 | Uptime | — | 148 |
    +——-+————+—————+———-+——-+
    | 2 | Tag2 | Voltage | — | 149 |
    +——-+————+—————+———-+——-+
    | 3 | Tag3 | Current | — | 150 |
    +——-+————+—————+———-+——-+
    | 4 | Tag4 | Leak Current | — | 151 |
    +——-+————+—————+———-+——-+
    | ***************** Reading Status ****************** |
    +——-+————+—————+———-+——-+
    | 5 | Timestamp | Timestamp | — | |
    +——-+————+—————+———-+——-+
    | 6 | Position | Position | 359 | |
    +——-+————+—————+———-+——-+

    А значения все равно не приходят.
    В свойствах Misc прописан «.» OneHour «;» «имя_файла.cvs» «demo» «4»

    В реалм тайме тоже пробовал, не выходит, где еще что то не доделал?

    #36740
    Mikhail
    Модератор

    Сделайте, пожалуйста, следующее:
    1. Выберите один режим: Demo или RealTime, чтобы пробовать на чём-то одном.
    2. Приложите ссылку скриншот свойств устройства.
    3. Приложите журнал линии связи. Добавьте новую строку в CSV файл, в журнале должна появиться запись при её добавлении.

    #36741
    Mikhail
    Модератор

    Режимы работают по-разному, поэтому выбирайте тот, который планируется использовать.

    #36746
    UterGrooll
    Участник

    Создал устройство -> создал линию связи -> добавил в линию связи устройство.
    Создал тестовый файл по вашему примеру test.cvs
    в нем ваши значения:
    Timestamp,TagA,TagB,TagC
    2023-11-04 00:00:00,1.1,1,0
    2023-11-04 00:01:00,1.2,0,1
    2023-11-04 00:02:00,1.3,1,0
    Положил файл по адресу: C:\Program Files\SCADA\ScadaComm\Storage
    Добавил в свойствах: имя файла указав «.» «,» «RealTime» «3» tag
    Свойства скрин
    https://cloud.mail.ru/public/A7ws/tGy8utGmA
    Линия активна, в журнале пишет новых данных нет. Статус норма.
    Открываю файл, вношу новые данные, сохранил, вышел:
    журнал линии
    https://cloud.mail.ru/public/tvo5/uBQKsdE7L
    Ничего не происходит. Пробовал и с режимом Demo.
    Данные вносил целой строкой, где менял по-разному: данные, время и значения, только время, только значения.
    Версия Rapid SCADA 6.4.0

    • Ответ изменён 1 год, 3 месяца назад пользователем UterGrooll.
    #36748
    manjey73
    Участник

    Формат файла какой? Utf-8 или ещё какой-то?

    #36761
    Mikhail
    Модератор

    Там ещё такой момент, что в режиме RealTime данные должны быть свежими. По-моему, допускается отличие на 1 минуту от текущего времени. Попробуйте ввести с другой меткой времени.
    Тег Position указывает на позицию чтения в файле. Можно проверить, меняется ли он при добавлении данных в файл.

Просмотр 15 сообщений - с 1 по 15 (из 27 всего)
  • Для ответа в этой теме необходимо авторизоваться.