Стартовая страница › Форумы › Ошибки в работе › Какая связь между Драйвером и БД?
- В этой теме 52 ответа, 3 участника, последнее обновление 2 месяца назад сделано
manjey73.
-
АвторЗаписи
-
04.05.2026 в 14:45 #43114
manjey73УчастникВот наткнулся тут на ошибку, но не понимаю, где собственно ее искать.
И пока непонятно, какая связь между Коммуникатором, работой драйвера и запись в БД? (чуть ниже будет видно на скринах).Итак, предыстория. Есть у нас ДГУ без интерфейса в мозгах, но есть счетчик ДО и счетчик ПОСЛЕ ДГУ.
Решил написать скрипт, который будет контролировать косвенно, что ДГУ запустился.Скрипт контроля по двум каналам — взяты по одному каналу напряжения от счетчиков bef (before) и aft (after). Счетчики Энергомера 303 и Меркурий 236
public double DguControl(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 } return outval; }Скрипт логического И
// Логическое И public double AND(params int[] cnls) { double result = 1; foreach (int cnlNum in cnls) { if (Val(cnlNum) < 1 || Stat(cnlNum) < 1) result = 0; } return result; }Формула в расчетном канале
DguControl(803, 517)
803 — это канал «Напряжение L1» счетчика Энергомера
517 — это канал «Напряжение L1» счетчика МеркурийРовно в 0 минут и в 30 минут каждого часа запись значения 0 в базу. Проверял утилитой.
При этом, на том же компьютере создал такой же расчетный канал и натравил на устройство с Modbus протоколом (в качестве каналов выступили показания Температуры датчиков уровней двух генераторов, дизельного и бензинового)
Еще точно такие же каналы создал дома для разных устройств (Scada на OrangePi процессор ARM)
1. Напряжение двух счетчиков (Меркурий и SDM220 (MBus протокол))
2. ПР200 Овен (Modbus) просто каких-то два каналаИ странно, но таких пиков каждые полчаса НЕТ.
Вот и вопрос — виновник драйвер Энергомеры? и каким таким образом драйвер в принципе может влиять на запись в БД?
Маска событий выставлена 9 для всех вариантов.
И главное как избавиться от такого поведения?
04.05.2026 в 14:56 #43115
JurasskParkУчастникКак я понимаю, когда вы записываете значение, то значение рассчиталось скриптом, на Stat = 1, о том что значение качественное не записали.
Я так с календарем мучался пока не понял, что нужно Stat = 1 записывать при расчёте.04.05.2026 в 14:58 #43116
manjey73УчастникТак почему нет такой проблемы у той же самой формулы в других вариантах?
Формула полностью идентична, скопированная на другую машинку с первой.
+ на первой сделана такая же формула на два Modbus устройства.04.05.2026 в 14:59 #43117
manjey73УчастникДа, из особенностей, Период опроса драйверов счетчиков на 1-ом ПК каждые 20 секунд.
04.05.2026 в 15:02 #43118
manjey73УчастникНапример Канал 803 не пишет в минутную БД, есть копия минутной БД для архива 3 месяца (90 дней)
и в ней нет этих получасовых пиков, как на расчетном канале.-
Ответ изменён 2 месяца, 2 недели назад пользователем
manjey73.
04.05.2026 в 15:06 #43120
manjey73УчастникИ да, проверял. Сеансы и Запросы драйвера без ошибок.
04.05.2026 в 15:11 #43121
manjey73УчастникЭ, может тут копия БД играет роль? Есть две минутных БД, одна 365 дней, другая 90 дней.
По факту как бы две БД и типа Модуль БД просто не успевает каждые полчаса что-то сделать и записать?04.05.2026 в 15:12 #43122
JurasskParkУчастникА если так?
public double AND(params int[] cnls) { double result = 1; foreach (int cnlNum in cnls) { // Если нет связи (Stat=0), но прошло меньше 2 секунд с начала опроса - считаем что связь есть if(Stat(cnlNum) == 0 && TimeSinceLastGood(cnlNum) < 2000) { continue; } if (Val(cnlNum) < 1 || Stat(cnlNum) < 1) result = 0; } return result; }04.05.2026 в 15:16 #43123
manjey73Участникблин. Сама по себе формула проверяет статус канала, какой статус канала от Коммуникатора, если от него НЕТ ошибок?
ессно всегда 1. Вот что и удивляет.
04.05.2026 в 15:19 #43124
manjey73УчастникТем более Curent Data включена на всех каналах.
На Расчетных ничего не выставлено, значит запись по умолчанию в Текущие, Минутные (код архива Min) и Часовые (код архива Hour)04.05.2026 в 15:20 #43125
manjey73Участникз.ы. я подобные получасовки еще наблюдал, когда тестировал свой модуль, но не помню что и как там настроено было. На своем ноуте ессно, не на каком-то реальном сервере.
И да, там не было этих формул в принципе.
-
Ответ изменён 2 месяца, 2 недели назад пользователем
manjey73.
04.05.2026 в 15:25 #43127
manjey73Участник04.05.2026 в 15:25 #43128
JurasskParkУчастникА не может быть проблемой в самом счетчике? у нас так газовые сбоили на часовых, поэтому мы им время сдвигали на +5 секунд.
04.05.2026 в 15:28 #43129
manjey73УчастникIsPeriodic = true LogEnabled = false MaxQueueSize = 1000 PullToPeriod = 0 ReadOnly = false Retention = 365 UseCopyDir = false WriteWithPeriod = true WritingPeriod = 1 WritingPeriodUnit = Minuteу другого архива отличие только в днях, выставлено 90.
Счетчики пишут только в 90 дневный.
Modbus устройства пишут в обычный минутный (стоит маска 15)04.05.2026 в 15:29 #43131
manjey73УчастникДанные счетчиков без пропусков и без этих вот пиков непонятных.
-
Ответ изменён 2 месяца, 2 недели назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.