- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
WinCC OA - Как изменять настройки алармов с помощью языка CONTROL
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 2
- Зарегистрирован: 25 май 2018, 14:29
- Имя: Максим
- Страна: Россия
- город/регион: Санкт-Петербург
WinCC OA - Как изменять настройки алармов с помощью языка CONTROL
Здравствуйте. Нужно изменять граничные значения, классы и тексты сообщений. Конфигурационный _alert_hdl я наследую от мастер-точки данных. Там уже заданы классы, границы диапазонов и тексты сообщений. Пробовал dpSet() и alertSet(), но не помогло. В справке есть пример в dpSet(), но он работает, если этого конфигурационного элемента нет у элемента точки данных.
-
- здесь недавно
- Сообщения: 2
- Зарегистрирован: 25 май 2018, 14:29
- Имя: Максим
- Страна: Россия
- город/регион: Санкт-Петербург
WinCC OA - Как изменять настройки алармов с помощью языка CONTROL
нашёл решение. Такой код:
Код: Выделить всё
//------------------------------
// Установка обработки алармов
//--------------------------------
bool setDpeAlertHdl(string dpe, float minAlarm, float minNorm, float maxNorm, float maxAlarm)
{
int rc;
dyn_errClass err;
int type = 13;
dyn_int rangeTypes = makeDynInt(4, 4, 4, 4, 4);
dyn_bool inclLimit = makeDynBool(TRUE, FALSE,TRUE, FALSE,FALSE, TRUE,FALSE, TRUE); //1_u_limit, 2_l_limit,2_u_limit, 3_l_limit,3_u_limit, 4_l_limit,4_u_limit, 5_l_limit
dyn_string alertTexts = makeDynString("Alert!!!", "Warning!", "OK", "Warning!", "Alert!!!");
dyn_string alertClasses = makeDynString("System1:alert.", "System1:warning.", "", "System1:warning.", "System1:alert.");
//dpe = "System1:Z.Value2";
string dpeNameAlertHdl = dpe + ":_alert_hdl";
DebugN("dpeNameAlertHdl = " + dpeNameAlertHdl);
if (!isDpeValid(dpe)) //читаем данные, если данный элемент точки данных существует
return false;
//чтение данных из конф. элемента _alert_hdl точки данных dpe
rc = dpGet(
dpeNameAlertHdl + ".._type", type,
dpeNameAlertHdl + ".1._type", rangeTypes[1],
dpeNameAlertHdl + ".2._type", rangeTypes[2],
dpeNameAlertHdl + ".3._type", rangeTypes[3],
dpeNameAlertHdl + ".4._type", rangeTypes[4],
dpeNameAlertHdl + ".5._type", rangeTypes[5],
dpeNameAlertHdl + ".1._u_incl", inclLimit[1],
dpeNameAlertHdl + ".2._l_incl", inclLimit[2],
dpeNameAlertHdl + ".2._u_incl", inclLimit[3],
dpeNameAlertHdl + ".3._l_incl", inclLimit[4],
dpeNameAlertHdl + ".3._u_incl", inclLimit[5],
dpeNameAlertHdl + ".4._l_incl", inclLimit[6],
dpeNameAlertHdl + ".4._u_incl", inclLimit[7],
dpeNameAlertHdl + ".5._l_incl", inclLimit[8],
dpeNameAlertHdl + ".1._class", alertClasses[1],
dpeNameAlertHdl + ".2._class", alertClasses[2],
dpeNameAlertHdl + ".4._class", alertClasses[4],
dpeNameAlertHdl + ".5._class", alertClasses[5],
dpeNameAlertHdl + ".1._text", alertTexts[1],
dpeNameAlertHdl + ".2._text", alertTexts[2],
dpeNameAlertHdl + ".3._text", alertTexts[3],
dpeNameAlertHdl + ".4._text", alertTexts[4],
dpeNameAlertHdl + ".5._text", alertTexts[5]
);
err = getLastError();
if (dynlen(err) > 0 || rc < 0)
{
DebugN("Не удалось прочитать данные из конфигурационного элемента '_alert_hdl' точки данных " + dpe + "");
//DebugN(err);
}
DebugN("rangeTypes = " + rangeTypes);
DebugN("type = " + type);
DebugN("inclLimit = " + inclLimit);
DebugN("alertTexts = " + alertTexts);
DebugN("alertClasses = " + alertClasses);
/* rc = dpSetWait(dpName + "." + elName + ":_alert_hdl.._ack", DPATTR_ACKTYPE_SINGLE); // квитирование
rc = dpSetWait(dpConf + ".._active", FALSE); // деактивирование
*/
bool ackResult = acknowledgeDpe(dpe);
DebugN("ackResult = " + ackResult);
bool deactiveResult = setActiveDpeAlertHdl(dpe, FALSE);
DebugN("deactiveResult = " + deactiveResult);
/*
if (!ackResult)
return false;
if (!setActiveDpeAlertHdl(dpe, FALSE))
return FALSE;*/
//запись данных в ":_alert_hdl"
rc = dpSetWait(
dpeNameAlertHdl + ".._type", type,
dpeNameAlertHdl + ".1._type", rangeTypes[1],
dpeNameAlertHdl + ".2._type", rangeTypes[2],
dpeNameAlertHdl + ".3._type", rangeTypes[3],
dpeNameAlertHdl + ".4._type", rangeTypes[4],
dpeNameAlertHdl + ".5._type", rangeTypes[5],
dpeNameAlertHdl + ".1._u_limit", minAlarm,
dpeNameAlertHdl + ".2._l_limit", minAlarm,
dpeNameAlertHdl + ".2._u_limit", minNorm,
dpeNameAlertHdl + ".3._l_limit", minNorm,
dpeNameAlertHdl + ".3._u_limit", maxNorm,
dpeNameAlertHdl + ".4._l_limit", maxNorm,
dpeNameAlertHdl + ".4._u_limit", maxAlarm,
dpeNameAlertHdl + ".5._l_limit", maxAlarm,
dpeNameAlertHdl + ".1._u_incl", inclLimit[1],
dpeNameAlertHdl + ".2._l_incl", inclLimit[2],
dpeNameAlertHdl + ".2._u_incl", inclLimit[3],
dpeNameAlertHdl + ".3._l_incl", inclLimit[4],
dpeNameAlertHdl + ".3._u_incl", inclLimit[5],
dpeNameAlertHdl + ".4._l_incl", inclLimit[6],
dpeNameAlertHdl + ".4._u_incl", inclLimit[7],
dpeNameAlertHdl + ".5._l_incl", inclLimit[8],
dpeNameAlertHdl + ".1._class", alertClasses[1],
dpeNameAlertHdl + ".2._class", alertClasses[2],
dpeNameAlertHdl + ".4._class", alertClasses[4],
dpeNameAlertHdl + ".5._class", alertClasses[5],
dpeNameAlertHdl + ".1._text", alertTexts[1],
dpeNameAlertHdl + ".2._text", alertTexts[2],
dpeNameAlertHdl + ".3._text", alertTexts[3],
dpeNameAlertHdl + ".4._text", alertTexts[4],
dpeNameAlertHdl + ".5._text", alertTexts[5]
,dpeNameAlertHdl + ".._orig_hdl", TRUE,
dpeNameAlertHdl + ".._active", TRUE
);
err = getLastError();
if (dynlen(err) > 0)
{
//throwError(err);
DebugN("Ошибка при записи граничных значений для алармов в точку данных " + dpe + "!");
return false;
}
if (rc < 0)
{
DebugN("Ошибка при записи граничных значений для алармов в точку данных " + dpe + "!");
return false;
}
return true;
}
-
- новенький
- Сообщения: 1
- Зарегистрирован: 30 янв 2021, 12:13
- Имя: Сергей
- Страна: Россия
- город/регион: Череповец
WinCC OA - Как изменять настройки алармов с помощью языка CONTROL
Добрый день. Работает без удаления мастер-точки данных?