Стартовая страница › Форумы › Взаимодействие с устройствами › Импорт из CVS файла
- В этой теме 26 ответов, 5 участников, последнее обновление 1 год, 3 месяца назад сделано
Mikhail.
-
АвторСообщения
-
07.02.2025 в 12:57 #36685
sentinel
УчастникПодскажите не могу понять как прикрутить файл, чтобы получать данные из csv файла
07.02.2025 в 21:06 #36707
UterGroollУчастникТоже интересно, поискал по документации на сайте объяснений нет.
08.02.2025 в 10:45 #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;
}
08.02.2025 в 11:00 #36710
manjey73УчастникПирсинг даты в DateTime проходит?
Потом DateTime.ToOADate()Только я не понял, где вы получаете rtd?
-
Ответ изменён 1 год, 4 месяца назад пользователем
manjey73.
08.02.2025 в 11:04 #36712
manjey73УчастникDateTime.TryParse смотрите.
Вам элемент массива надо запросить в DateTime или выставить по умолчанию какую-то дату, если паркинг не пройдет.08.02.2025 в 22:44 #36715
a80808УчастникСпасибо, попробую. Там убрано лишнее (отладка), может случайно и присвоение прибил )))
08.02.2025 в 22:52 #36716
manjey73Участникd Краткий формат даты. Например, 17.07.2015
Parse должен сработать. Но лучше применять TryParse предварительно создав DateTime как new, а потом проверять, чтобы дата не была равна 1899 году или какой там при new создается.
08.02.2025 в 23:56 #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.
10.02.2025 в 13:28 #36725
MikhailМодератор10.02.2025 в 16:52 #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»В реалм тайме тоже пробовал, не выходит, где еще что то не доделал?
11.02.2025 в 15:42 #36740
MikhailМодераторСделайте, пожалуйста, следующее:
1. Выберите один режим: Demo или RealTime, чтобы пробовать на чём-то одном.
2. Приложите ссылку скриншот свойств устройства.
3. Приложите журнал линии связи. Добавьте новую строку в CSV файл, в журнале должна появиться запись при её добавлении.11.02.2025 в 15:44 #36741
MikhailМодераторРежимы работают по-разному, поэтому выбирайте тот, который планируется использовать.
12.02.2025 в 00:09 #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.
12.02.2025 в 06:42 #36748
manjey73УчастникФормат файла какой? Utf-8 или ещё какой-то?
12.02.2025 в 14:12 #36761
MikhailМодераторТам ещё такой момент, что в режиме RealTime данные должны быть свежими. По-моему, допускается отличие на 1 минуту от текущего времени. Попробуйте ввести с другой меткой времени.
Тег Position указывает на позицию чтения в файле. Можно проверить, меняется ли он при добавлении данных в файл. -
Ответ изменён 1 год, 4 месяца назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.