Созданные ответы форума
-
АвторСообщения
-
saprin8
УчастникПолучается так, надо сохранять куда-то значение предыдущее. вот так считал для подсчета расхода с вкт приборов.
public double Diff_mass(int Value, int OldValue) { double difference; if (Val(Value) == Val(OldValue)) { difference = 0; } else if (Val(Value) != Val(OldValue)) { difference = Val(Value) - Val(OldValue); SetFata(OldValue, Val(Value), 1); } else { difference = 0; } return difference; }
Можно использовать Month/DayStarted.
-
Этот ответ был изменен 1 месяц, 3 недели назад от
saprin8.
saprin8
УчастникИли можно сделать на каждой мнемосхеме динамический рисунок, который не виден в нормальном состоянии и если авария, то виден.
saprin8
УчастникЧтобы не создавать доп канал можно в свой же канал во входную формулу поставить Val(), ну а в выходную уже SetVal или как Михаил выше написал SetData. Соответственно если отправлять нужно разные числа в канал, то вместо определенного числа нужно ставить в формулу Cmd. Тогда окно всплывающее (Ну и на схеме поставить значение в дин.текст «Отправить команду»)
saprin8
Участник100+-
saprin8
УчастникДа и pdf кмк не особо нужен, excel за глаза хватит. А так стандарт — выбор параметров ячеек, их количество, выбор границ для подкрашивания фона ячейки, возможно постройка диаграммы.
saprin8
УчастникУ нас принцип полного описания переменных, ибо сегодня один работает и понимает, а завтра пришел другой и уже сокращения не вдупляет. Особенно если взять какую-нибудь водоподготовку или гальванику, где подрядчик переменные длинные сделал (как бы не против) и описания к ним тоже не короткие выходят даже после переделки. Так-то можно вообще заменить на Состояние автомата QF1, но тогда гудеть будут программисты, которые занимаются заведением переменных на сервер, где должна быть сортировка на аварии/рабочие состояния/предупреждения/сервисы и т.д., а они не технические инженеры понимать все это
-
Этот ответ был изменен 3 месяца, 1 неделя назад от
saprin8.
saprin8
УчастникДля опроса ВКТ-7 6 линий связи в коммуникаторе и норм, никаких нагрузок. Но как по мне лучше отдельный OPC сервер иметь, с которого скада будет забирать данные. Kepserver какой-нибудь или MasterOPC (у второго под ру сегмент заточены протоколы). У меня 69 линий связи, в некоторых по 3000+ тегов и все летает.
saprin8
Участникнет, на базовом работает все норм
saprin8
УчастникРазвернул, все тоже самое. В проекте особо ничего не менял в вебе. Размер окна всплывающего, расположение иконок работы с экраном (изменение масштаба), цвета, сместил текст названия всплывающего окна. Ну и в JS вроде поменял появление иконок работы с экраном при условии разрешения экрана больше всплывающего окне
saprin8
УчастникПереход на любую мнемосхему приводит к выходу из полноэкранного режима. Вэб 6.1.2.1
saprin8
УчастникНет, в демке полноэкранный режим работает
saprin8
УчастникВообще триггер добавить на мнемосхему было бы удобно. TON или TOF, который всплывающее окно выдавал бы или другое событие.
saprin8
УчастникКод подсчета новых аварий, соответственно для клика и для нового количества аварий нужны пустые каналы
public double NewAlarms(int alarmsPre, int alarmsPost, int click) { double status = 0; double AlarmsCount = Val(alarmsPost) - Val(alarmsPre); if (click == 1) { status = 0; } else { if (AlarmsCount > 0 ) { status = AlarmsCount; } else if (AlarmsCount <= 0) { status = 0; } } return status; }
Анимация лампочки
public double Animation(int alarmsPre, int alarmsPost, int click) { double status = 0; if (Val(alarmsPre) < Val(alarmsPost) & Val(click) == 0) { status = 1; } else if (Val(alarmsPre) != Val(alarmsPost) & Val(click) == 1) { status = 0; SetVal(click, 0); SetVal(alarmsPre, Val(alarmsPost)); } if (Val(alarmsPre) > Val(alarmsPost)) { status = 0; SetVal(alarmsPre, Val(alarmsPost)); } return status; }
Массив подсчета аварий, где каждый канал это массив подсчета аварий в корпусе
public double Alarms_count_All() { double status = 0; double [] alarms = { Val(4384), Val(1511), Val(9190), Val(9191), Val(9192), Val(9193), Val(9194), Val(9195), Val(9196), Val(9197), Val(9198), Val(19201), Val(20603), Val(25908), Val(7727), Val(37758), Val(37209), Val(38314), Val(38960), Val(39826), Val(40107) }; Array.ForEach(alarms, i => status += i); return status; }
Код наличия аварий (ищет в массиве 1)
public double Water_Alarm_K153() { int status = 0; double[] alarms = { Val(2268), Val(2355), Val(2434), Val(2534), Val(2601), Val(2669), Val(2736), Val(2804) }; bool Exist = Array.IndexOf(alarms, 1) != -1; if (Exist) { status = 1; } else { status = 0; } return status; }
saprin8
УчастникТакже звук уведомления об аварии можно в цикл поставить (то есть количество новых аварий > 0 включаем, выключаем, включаем и т.д. канал с маской событий звука по изменению, пока не заквитируется авария. Будет постоянно пикать, правда журнал заполнять тоже будет, да и если журнал закрыт, то звука нет
saprin8
УчастникУ меня сразу главный экран открывается, это вроде же настроить можно. Плюс диспетчерская служба всегда мониторить скаду должна, что подразумевает работу 24/7 с открытым браузером на главном экране. Да и выпадающее меню слева нажать и выйти на главный экран дело 2х секунд если не меньше. А новые аварии определить уведомлением (звук), сделать счетчик новых аварий, код могу скинуть
-
Этот ответ был изменен 1 месяц, 3 недели назад от
-
АвторСообщения