Какая связь между Драйвером и БД?

Стартовая страница Форумы Ошибки в работе Какая связь между Драйвером и БД?

Просмотр 15 сообщений - с 31 по 45 (из 53 всего)
  • Автор
    Записи
  • #43274
    Mikhail
    Модератор

    TrendTableViewer-v6, она почему-то может показывать базы только если архивы находятся по пути c:\Program Files\SCADA\Archive\

    Кнопка Browse не работает?

    #43275
    manjey73
    Участник

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

    а почему не из Текущих данных?
    Собственно вы нашли причину и поправите в будущем? или это ускользающая штука? почему строго каждые полчаса, а не когда попало?

    Кнопка Browse не работает?

    Все действия одинаковы, но если я загрузил папку архива с сервера в любую папку, или если на локальном сервере(тестовом) у меня архив на другом диске, то ничего не откроется, кроме информации meta. Данных при этом нет, пустое окно.

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

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

    Это алгоритм работы.

    Данных при этом нет, пустое окно.

    Не могу воспроизвести: https://ibb.co/B2KG70Q3
    Возможно, страница не выбрана.

    #43288
    manjey73
    Участник

    screen

    Сама Scada в Program Files
    Архивы пишутся на диск D — видно откуда откываю.
    Данные по meta файлу какие-то есть, а данных по каналам нет.

    з.ы. плохо, что такой алгоритм, он должен проверять маску архива и смотреть откуда брать данные, если они отсутствуют в том же самом архиве, куда пишется расчетный канал.

    И при этом мне все равно непонятно — ПОЧЕМУ строго в 0 и 30 минут? а не все время, если такой алгоритм 🙂

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

    Забавно, у меня есть БД, которая пишет раз в 30 минут, она открылась.
    штатная Min и Hour не открываются, meta данные подтягиваются, а по Timestamp все пусто.

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

    Сделайте вывод дополнительной информации в файл при расчёте формулы для исторического значения. Возможно, это прояснит, почему так происходит.

    #43310
    manjey73
    Участник

    А что именно выводить в файл?
    Может есть какое-то свойство, что лучше вам поможет найти причину?

    А, собственно при чем тут расчетные каналы и открытие БД из другого места?

    Или речь о 30-ти минутных глюках?

    • Ответ изменён 3 месяца, 3 недели назад пользователем manjey73.
    #43319
    Mikhail
    Модератор

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

    Использование утилиты для просмотра архива к этому вопросу не относится.

    #43320
    manjey73
    Участник

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

    #43325
    Mikhail
    Модератор
    public const string LogPath = @"C:\MyLog.log";
    
    public void WriteToLog(string s = "")
    {
      using (StreamWriter writer = new(LogPath, true, Encoding.UTF8))
      {
        writer.WriteLine(s);
      }
    }
    
    public CnlData LogHist()
    {
      if (!IsCurrent)
      {
        WriteToLog($"{DateTime.UtcNow:u}, {DateTime.Now:u}, {Timestamp:u} CnlNum = {CnlNum}, Val = {CnlVal}, Stat = {CnlStat}");
      }
    
      return CnlData;
    }
    

    В формуле канала: LogHist()

    #43326
    manjey73
    Участник
    2026-05-13 14:00:07Z, 2026-05-13 17:00:07Z, 2026-05-13 14:00:07Z CnlNum = 902, Val = 1, Stat = 1
    2026-05-13 14:00:07Z, 2026-05-13 17:00:07Z, 2026-05-13 14:00:07Z CnlNum = 902, Val = 1, Stat = 1
    2026-05-13 14:00:07Z, 2026-05-13 17:00:07Z, 2026-05-13 14:00:07Z CnlNum = 902, Val = 1, Stat = 1
    2026-05-13 14:00:07Z, 2026-05-13 17:00:07Z, 2026-05-13 14:00:00Z CnlNum = 902, Val = 1, Stat = 0
    2026-05-13 14:00:07Z, 2026-05-13 17:00:07Z, 2026-05-13 14:00:00Z CnlNum = 902, Val = 1, Stat = 0
    2026-05-13 14:00:07Z, 2026-05-13 17:00:07Z, 2026-05-13 14:00:00Z CnlNum = 902, Val = 0, Stat = 1
    2026-05-13 14:00:07Z, 2026-05-13 17:00:07Z, 2026-05-13 14:00:00Z CnlNum = 902, Val = 0, Stat = 1
    2026-05-13 14:00:07Z, 2026-05-13 17:00:07Z, 2026-05-13 14:00:00Z CnlNum = 902, Val = 0, Stat = 0
    2026-05-13 14:00:07Z, 2026-05-13 17:00:07Z, 2026-05-13 14:00:07Z CnlNum = 902, Val = 1, Stat = 1
    2026-05-13 14:00:07Z, 2026-05-13 17:00:07Z, 2026-05-13 14:00:07Z CnlNum = 902, Val = 1, Stat = 1
    2026-05-13 13:30:07Z, 2026-05-13 16:30:07Z, 2026-05-13 13:30:07Z CnlNum = 902, Val = 1, Stat = 1
    2026-05-13 13:30:07Z, 2026-05-13 16:30:07Z, 2026-05-13 13:30:00Z CnlNum = 902, Val = 1, Stat = 0
    2026-05-13 13:30:07Z, 2026-05-13 16:30:07Z, 2026-05-13 13:30:00Z CnlNum = 902, Val = 0, Stat = 1
    2026-05-13 13:30:07Z, 2026-05-13 16:30:07Z, 2026-05-13 13:30:00Z CnlNum = 902, Val = 0, Stat = 1
    2026-05-13 13:30:07Z, 2026-05-13 16:30:07Z, 2026-05-13 13:30:00Z CnlNum = 902, Val = 0, Stat = 0
    2026-05-13 13:30:07Z, 2026-05-13 16:30:07Z, 2026-05-13 13:30:07Z CnlNum = 902, Val = 1, Stat = 1
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:02:22Z CnlNum = 902, Val = 1, Stat = 1
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:00:00Z CnlNum = 902, Val = 1, Stat = 0
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:02:22Z CnlNum = 902, Val = 1, Stat = 1
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:00:00Z CnlNum = 902, Val = 1, Stat = 0
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:00:00Z CnlNum = 902, Val = 0, Stat = 1
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:00:00Z CnlNum = 902, Val = 0, Stat = 1
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:00:00Z CnlNum = 902, Val = 0, Stat = 0
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:01:00Z CnlNum = 902, Val = 1, Stat = 0
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:01:00Z CnlNum = 902, Val = 0, Stat = 1
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:01:00Z CnlNum = 902, Val = 0, Stat = 1
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:01:00Z CnlNum = 902, Val = 0, Stat = 0
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:02:00Z CnlNum = 902, Val = 1, Stat = 0
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:02:00Z CnlNum = 902, Val = 0, Stat = 1
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:02:00Z CnlNum = 902, Val = 0, Stat = 1
    2026-05-13 13:02:22Z, 2026-05-13 16:02:22Z, 2026-05-13 13:02:00Z CnlNum = 902, Val = 0, Stat = 0

    Формулу упростил до

    public const string LogPath = @"/opt/scada/ScadaServer/Storage/MyLog.log";
    
    public void WriteToLog(string s = "")
    {
      using (StreamWriter writer = new(LogPath, true, Encoding.UTF8))
      {
        writer.WriteLine(s);
      }
    }
    
    public CnlData LogHist(double val)
    {
        WriteToLog($"{DateTime.UtcNow:u}, {DateTime.Now:u}, {Timestamp:u} CnlNum = {CnlNum}, Val = {val}, Stat = {CnlStat}");
    
      return CnlData;
    }

    И встроил ее в формулу контроля ДГУ (каналы Симулятора 107 и 108)

    public double DguControl1(int bef, int aft)
    {
      double outval = double.NaN;
    
      if (AND(bef, aft) > 0)
      {
        outval = 1; // 1 - Сеть есть
      }
      else if (Stat(bef) == 0 && Stat(aft) == 0)
      {
        outval = 0; // 0 - Нет сети, генератор  в STOP
      }
      else if (Stat(bef) == 0 && Stat(aft) > 0)
      {
        outval = 2; // 2 - Нет сети, генератор  в RUN
      }
    var xxx = LogHist(outval);
    return outval;
    }
    

    Откуда там 0 пролетает, непонятно…

    #43327
    manjey73
    Участник

    Кстати пробовал на рабочем ПК ту же формулу поставить в Симулятор и удивительно, провалов вроде не было.
    Запущу на ночь без записи в файл.

    То есть что-то происходит со статусом и значением в одной из итераций обработки формул, а не во всех.

    #43328
    manjey73
    Участник

    Да, на рабочем ПК кроме Симулятора ничего и нет собственно.

    #43329
    manjey73
    Участник

    На голом Симуляторе такой проблемы нет. Файл не писал, просто вижу по графику.
    Но если система нагружена, даже незначительно, проблема при записи в разные БД присутствует.

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

    Еще веселее скрин

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

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