Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: База данных MS4D PostgreSQL -таблицы

  1. #1

    По умолчанию База данных MS4D PostgreSQL -таблицы

    Здравствуйте!

    Стоит задача в устоявшийся отчёт excel затянуть часовые данные по датчику давления.
    Столкнулся с тем, что все данные (показания датчиков) дублируются 2 раза с одними и
    теми же значениями метки времени(source_time) и показаниями (value) таблицы data_raw.
    Отличаются эти записи полем layer соответственно 0,1,2.
    Не подскажете что это за поле layer в таблице data_raw и зачем дублирование?

  2. #2

    По умолчанию

    Из руководства
    2025-07-08_10-58-45.png

  3. #3

    По умолчанию

    У нас проблема с разрастанием БД -более 200 ГБ т.к. тэгов много и пользователи хотят видеть тренды и таблицы за месяц.
    При этом начинает тормозить среда разработки MS4D-может проект компилироваться час.
    У основного архива данных есть параметр "количество потоков записи". Я так понимаю это и есть слои.
    Было настроено 3 потока и было в БД для каждого параметра 3 записи с одинаковой меткой времени но с разными layer(0,1,2),
    настроили 1 поток-записей стало меньше записей для каждого параметра с одинаковой меткой времени(source_time в таблице data_raw).
    Видно, что теперь меньше записей с меткой layer2, хотя они остались. Т.к. проект рабочий , завязан на тех процесс,
    хотелось бы понять чем грозит уменьшение параметра "количество потоков записи" до 0.
    Цель- сохранить диапазон записи месяц , но уменьшить основной архив данных.

  4. #4
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    12,986

    По умолчанию

    layer
    ID слоя данных:
    0 - базовый слой
    1- минутный слой
    2- часовой слой

    Вполне естественно, что 0-вая метка часа совпадет и в минутном и в часовом архиве. Тут больше вопрос, а что еще у вас пишется в часовой? а так же в базовый слой? Если посмотреть средствами администрирования БД ?
    По идее, в слое 2 должны быть записи только на начало часа, и никак иначе, минутных там быть не должно.

  5. #5

    По умолчанию

    Да честно говоря раньше на эту настройку "количество потоков записи" внимания не обращали
    и только вот выяснили что все записи в 3-х экземплярах(как сейчас уточняем-не все в 3-х, вероятно в 3-х те датчики
    где измерения редко меняются из-за дельты записи) и уменьшили её , сделав 1.
    Вроде количество записей с layer=2 уменьшилось в разы и пока проблем нет со СКАДой и возник вопрос
    а можно ли ещё уменьшить эту настройку до 0 и к чему это приведёт. MS4D Версия: 1.3.7.23610(1.3.7_20250316.1).
    С учётом длинной очереди на чтение по Modbus TCP для нас что слой 0 что 1 это практически одно и тоже-редко
    какя запись встречается с layer 0 без дублирования с layer 1

  6. #6
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    12,986

    По умолчанию

    Количество потоков записи
    DINT Определяет какое количество потоков будет использоваться для работы с базой данных. По умолчанию 1 (в случае если установили значение 0, используется также 1). Если указано больше, то создается заданное число потоков, в каждом отдельное подключение к БД, через которое идет запись данных.
    Для Sqlite не поддерживается.
    Блин, честно не понимаю, если речь идет о потоках, то первые 1000 записей например пишутся одним потоком, следующие 1000 в следующем потоке и так далее, потом новый круг. При чем тут дублирование записей? Оно чего, каждым потоком пишет те же самые записи, которые сохранил предыдущим потоком ? Это косяк какой-то

  7. #7
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    12,986

    По умолчанию

    Максимальное количество одновременных подключений
    DINT Определяет количество подключений к БД, которые создаются средой исполнения. Если установлено значение 0, то используется стандартное значение в зависимости от типа БД (1 для SQLITE, 3 для остальных). Для SQLITE вся работа между средой исполнения и базой данных идет из одного потока, через одно подключение. Для остальных БД по умолчанию выделяется как минимум 3 потока (каждый со своим подключением):
    •Чтение (если указано > 3 потоков, то чтение может выполняться одновременно из нескольких потоков)
    •Запись
    •Удаление старых записей
    И далее то же про потоки

  8. #8

    По умолчанию

    Стоит задача в устоявшийся отчёт excel затянуть часовые данные по датчику давления.
    могу сделать запрос в microsoft query и затянуть среднее за час значение , типа
    SELECT AVG(value) FROM public.data_raw where archive_itemid=6841 and source_time between 133958088000000000 and 133958124000000000 and value>0 ;
    Но не могу понять как задать дату из excel для этого запроса (то что between....), чтобы пользователь мог посмотреть отчёт за требуемую дату.
    Планировал таких запросов 24 на каждый час и внедрить ответы в файл excel в нужные ячейки, но пока получается всё вручную
    (вызываю файл запроса *.dqy, в нём вручную меняю время и вручную указываю куда записать, а передать параметр(дату, а часовые сдвиги легко сделать)
    в запрос из excel не получается)

  9. #9

    По умолчанию

    Казалось бы если могу сделать вручную, то можно включить запись макроса в excel и проблема решена,
    но как только в макрос включаю вызов micosoft query он перестаёт воспроизводится (run time error invalid procedure call
    or argument). Может кто подскажет что делаю не так?

  10. #10

    По умолчанию

    В конце концов пришёл к выводу , что нужно использовать VB для excel.
    Но опять проблема - не могу передать в запрос SQL в VB параметр
    Dim sqlQuery As String
    sqlQuery = "SELECT AVG(value) FROM public.data_raw " & _
    "WHERE archive_itemid = 6841 " & _
    "AND source_time BETWEEN " & hstart & " AND " & hend & ";"
    rs.Open sqlQuery, conn, adOpenStatic, adLockReadOnly
    т.е. компилируется без ошибок но не выполняется-макрос прерывается с ошибкой.
    Всё дело оказалось в длине bigint поля source_time. В БД это тип bigint и значения в microsoft file-format.
    Это с 1 января 1601 г. в 100 нс интервалах, в результате значение сейчас около 133958016000000000 т.е. 18 знаков.
    И если задать тип Long и значение меньше 2147483647(10 знаков) то макрос(с амперсандами который)
    не уходит в ошибку ,но понятно возвращает пустоту. Тип LongLong отсутствует в VB -вероятно VB 32 разрядный, хотя система 64-х.
    (Не нашёл где найти разрядность VB Microsoft Visual Basic for Applications 7.1, Microsoft Office 2013).
    Как обойти сей момент пока нет мыслей-установить VB 64-х, вроде очевидно но кто заплатит за лицензию.
    Может кто подскажет другое решение

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. MS4D 1.2.16 => Таблица данных => Скрывать строки
    от pavel.migdalev в разделе Master SCADA 4D
    Ответов: 6
    Последнее сообщение: 19.01.2024, 15:30
  2. как взять данные с таблицы отображения данных?
    от delta8 в разделе Панели оператора (HMI)
    Ответов: 0
    Последнее сообщение: 15.01.2024, 11:33
  3. masterscada4d и postgresql
    от voyva в разделе ПЛК (среда MasterSCADA 4D)
    Ответов: 2
    Последнее сообщение: 15.12.2022, 15:46
  4. ТРМ202 и база данных mssql
    от valkv в разделе Помощь Разработчикам
    Ответов: 3
    Последнее сообщение: 29.06.2020, 19:51
  5. База данных ОВЕН для Autocad Electrical
    от ООО НОРД-А в разделе Трёп (Курилка)
    Ответов: 3
    Последнее сообщение: 13.07.2018, 10:06

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •