Ответы в темах
-
АвторЗаписи
-
Romiros
УчастникДобрый день. Вам скорее нужна связка DrvDbImport и Модуль авто управления. В DbImport подготовьте команду на запись с нужным запросом и вызывайте ее в МАУ по таймеру или нужному триггеру.
Romiros
УчастникУ Вас версия RapidScada последняя? Просто были изменения в модулях под самую последнюю версию, возможно что-то не стыкуется.
Romiros
УчастникСкорее всего никак, это предустановленный текст.
Romiros
УчастникСохраняй в storage как текстовый файл, при перезагрузке считывай из него. Наверное самое простое и надёжное средство.
Romiros
УчастникЭто формула для расчетного канала, чтобы зафиксировать время изменения параметра. Отдельный канал, чтобы не затирать само значение. Т.е. доп. расчетный канал нужен для таких случаев.
Romiros
УчастникСомневаюсь, поэтому и храню время в отдельном канале. При старте сервера и первой итерации расчета PrevVal = Cnl, я так думаю.
Romiros
УчастникА зачем? На график выводится изменение самого параметра и там этот временной интервал можно оценить. А так масло масляное получается.
Romiros
УчастникТак я об этом выше написал. Сохранять в значении расчетного канала последнее время изменения. У меня так и делается.
Romiros
УчастникSetVal(CnlNum, Cmd)
Естественно у тебя это не будет работать. Val(); Stat() просто продлевает значение и текущий статус канала. Если у тебя там был изначально 0, то и будут прочерки. Его же сначала надо задать. Т.е. используй SetData(n, val, stat) или SetData(n, cnlData).
Romiros
УчастникУ меня сделано так:
В расчетный канал записывается время изменения чтобы не потерять данные при остановке сервера:
PrevVal(219) != Val(219) ? UtcNow(): Val()Далее вычисляется интервал. Форматирование здесь можно сделать уже какое захочется. В моем случае нужно было выводить только одну составляющую времени.
public string EventTime(int cnlNum)
{
DateTime dt = DateTime.FromOADate(Val(cnlNum));
TimeSpan delta = DateTime.UtcNow — dt;if(delta.Days > 0)
return $»{delta.Days} day»;
else if(delta.Hours > 0)
return $»{delta.Hours} hour»;
else if(delta.Minutes > 0)
return $»{delta.Minutes} min»;
else
return $»{delta.Seconds} sec»;
}Romiros
УчастникНу это уже здравствуй Json + Javascript. Я пишу на нем для психологической разгрузки, когда можно тяжелое разделить на синее и прибавить фамилию и все это в одном массиве :). Структуры — это наверное уже RapidScada7 :).
Romiros
Участникс интервалами случился косяк ? 15 часов они и в Африке 15 часов, а получается что в формулах надо приводить этот интервал к 12-ти часам, чтобы получить по Москве правильные 15 часов. ?
Ну тут при реализации формулы конечно нужно все предусматривать.
Romiros
УчастникНе по UTC, а по тому часовому поясу, который тебе нужен. Хочешь ставь свой, а хочешь дочерней системы. Честно говоря не вижу проблемы. Просто используешь всегда ToUTC или FromUTC в драйверах, модулях или формулах. Должна быть какая-то общая величина. Представь если корабль пересекает пол мира, какое тут нафиг локальное время? У него каждый день может быть новый часовой пояс :). Тут вообще запутаешься в расчетах, если не будет привязки по единому времени на двух серверах.
Romiros
УчастникТак и не надо в текущем. Есть базовая система — UTC. Хочешь видеть на своём сервере в том времени, которое на другом, поставь соответствующую настройку в ScadaWeb, она там есть. У нас так реально два филиала работают. У них +4, но закрываться должны по +3. И они просто ставят себе Московское время везде — на приборах и на серверах. Не знаю как у них не едет крыша, но видимо привыкли. Исторически 🙂
Romiros
УчастникИ для распределенных объектов, где операторы окажутся в разных временных зонах будут видеть события и время каждый по своему.
А вот здесь зависит от того как нужно. Например у меня один корабль с одним часовым поясом, а сервер в офисе с другим. RapidGate передает данные и события а диспетчер в офисе видит все по своему времени и ему так удобно.
-
АвторЗаписи