Стартовая страница › Форумы › Взаимодействие с устройствами › Импорт из CVS файла
- В этой теме 26 ответов, 5 участников, последнее обновление 1 год, 3 месяца назад сделано
Mikhail.
-
АвторСообщения
-
12.02.2025 в 23:54 #36774
UterGroollУчастникФормат файла UTF-8, смотрел в notepad++.
Тег Position меняет значения при добавлении новой строки. Пробовал добавлять с разницей минута и минута в минуту. Значений нет…(X_X)
скрин 1.
https://cloud.mail.ru/public/9DoR/fZ75tAhhQ
скрин 2.
https://cloud.mail.ru/public/FASf/yWFcjkN8GМожет кто-нибудь на форуме попробовать тоже, и скинуть мне CVS файл и скрины настроек?
13.02.2025 в 14:26 #36788
MikhailМодераторВремя в файле должно быть UTC, то есть было бы не 23:40, а 20:40.
14.02.2025 в 00:04 #36795
UterGroollУчастника с UTC это прикол такой? Чисто поржать, да? …
Итак, для исследователей форума, Импорт из файла делается так:
Нужны данные в именно в таком формате:
Timestamp;Status;Uptime;Voltage;Current;Leak Current
2025-02-13 20:40:58;1;0007;308;157;0.00
2025-02-13 20:44:15;1;0007;308;157;0.00
2025-02-13 20:46:15;1;0007;308;157;0.00
https://cloud.mail.ru/public/Y4u3/oWja3TM5y
в Свойствах нужно указать: если у вас числа с запятой или точкой «.» как идет перечисление «;» в каком режиме идет опрос «RealTime» количество значение «5».
https://cloud.mail.ru/public/VcpA/jSFe62z18
на всякий случай проверяем notepad++ кодировку файла, чтобы был UTF-8 и самое !главное! Время у вас должно быть UTC. Тобишь как у меня московское 23:40 а в файле должно быть 20:40. С разницей в 3 часа.
В итоге все получилось. Спасибо за объяснения!Скажите еще вопросик, в конфигурационном файле есть возможность изменить как то считывание времени? чтобы не возиться с переводом?
14.02.2025 в 08:09 #36796
manjey73УчастникВот с переводом Сервера на время в UTC то там, то сям проявляются подложенные свиньи 😀
Привыкайте.Если драйвер открыт, можно конечно покопаться, добавить настройку и соответственно преобразовывать.
-
Ответ изменён 1 год, 3 месяца назад пользователем
manjey73.
14.02.2025 в 09:06 #36798
a80808УчастникГлупый (возможно) вопрос — а что за драйвер то?
Просто только что решал эту задачу для пятерки но формулами…14.02.2025 в 09:34 #36799
manjey73УчастникDrvCsvReader
Ну он открыт как бы, но надо потратить время чтобы разобраться что там и как и возможно ли менять время в самом драйвере на UTC, если в csv у человека локальное.
То есть надо в настройках задать смещение для конвертации времени и собственно саму конвертацию.Тут же возникает вопрос — а если эти csv приходят из разных источников, где разное локальное время?
Хотя если источники разные, можно на разных линиях со своими настройками запускать разное количество экземпляров. Ну или на одной линии делать несколько устройств.
14.02.2025 в 09:36 #36802
UterGroollУчастникИнтересная ситуация получилась, после наблюдений за чтением данных — считывателя. Тобишь данные от устройств или программ нужно настроить в UTC+3 чтобы скада их смогла прочесть, но в линии связи она выводит время последних данных в соответствии с настройками сервера/компьютера. Парадокс выходит. И настраивать ничего дополнительно не нужно.
По этому я просто в своей программе добавил еще одну функцию, чтобы создавался отдельно файлик с данными в UTC.
Либо совет для других напишите на пйтоне простой скрипт, который будет пересохранять ваш файл в соответствии с вашими требованиями и заводите его в скаду. Костыль, но рабочий.Примерно вот так мне посоветовал сделать ИИ:
Вот пример простого консольного скрипта на Python, который читает CSV-файл, преобразует время из локального (например, московское UTC+3) в UTC и сохраняет данные в новый файл.### Скрипт для преобразования времени в CSV-файле
`python
import pandas as pd
from datetime import datetime, timedelta# Укажите путь к вашему CSV-файлу
input_file = ‘input.csv’ # Ваш исходный файл
output_file = ‘output.csv’ # Файл с преобразованным временем# Чтение CSV-файла
df = pd.read_csv(input_file, delimiter=’;’)# Преобразование времени из локального в UTC
# Для московского времени (UTC+3) используем разницу в 3 часа
df[‘Timestamp’] = pd.to_datetime(df[‘Timestamp’]) — timedelta(hours=3)# Сохранение обратно в CSV
df.to_csv(output_file, index=False, sep=’;’)print(f»Файл успешно преобразован и сохранен как {output_file}»)
`
—
### Как использовать:
1. Установите Python (если еще не установлен): [python.org](https://www.python.org/).
2. Установите библиотекуpandas, если она не установлена. Для этого выполните в командной строке:
`bash
pip install pandas
`
3. Создайте CSV-файл (input.csv) с вашими данными. Пример:
`
Timestamp;Status;Uptime;Voltage;Current;Leak Current
2025-02-13 23:40:58;1;0007;308;157;0.00
2025-02-13 23:44:15;1;0007;308;157;0.00
2025-02-13 23:46:15;1;0007;308;157;0.00
`
4. Поместите файлinput.csvв ту же папку, где находится скрипт.
5. Запустите скрипт:
`bash
python convert_time.py
`
6. В результате будет создан файлoutput.csvс преобразованным временем:
`
Timestamp;Status;Uptime;Voltage;Current;Leak Current
2025-02-13 20:40:58;1;0007;308;157;0.00
2025-02-13 20:44:15;1;0007;308;157;0.00
2025-02-13 20:46:15;1;0007;308;157;0.00
`
—### Примечания:
— Если у вас другой часовой пояс (не UTC+3), измените значениеtimedelta(hours=3)на соответствующее.
— Скрипт предполагает, что время в исходном файле указано в локальном времени.
— Если в вашем CSV-файле другой разделитель (например, запятая), измените параметрdelimiterвpd.read_csvиdf.to_csv.-
Ответ изменён 1 год, 3 месяца назад пользователем
UterGrooll.
14.02.2025 в 09:44 #36804
a80808УчастникА «на лету» формулами нельзя разве время конвертировать?
14.02.2025 в 12:02 #36805
manjey73Участникподозреваю, что драйвер, видя старую или будущую дату, просто не воспринимает это значение как новое и никуда ничего не отправляет. Какие же тут формулы?
14.02.2025 в 12:24 #36807
a80808УчастникНу там вроде есть привязка к каналам (только она не сделана) — по идее должен в канал писать?
14.02.2025 в 12:33 #36809
manjey73Участниктак если драйвер изначально не может понять время, как поступление новых данных, то даже с привязкой он ничего не оправляет в канал. Вот о чем речь. нет данных в канале, не к чему применять формулу.
и если правильно понимаю, само время не является данными.
14.02.2025 в 13:43 #36813
MikhailМодераторВ журнала выводится локальное время, потому что они предназначены для чтения человеком. В БД и архивах используется время UTC, т.к. оно интерпретируется системой однозначно и вычисления на его основе работают быстрее.
-
Ответ изменён 1 год, 3 месяца назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.