1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Скрипт для вызова faceplate с trend

Ответить

Автор темы
swaips-87
здесь недавно
здесь недавно
Сообщения: 44
Зарегистрирован: 06 фев 2021, 02:47
Имя: Юрий
Страна: Россия
город/регион: Челябинская облость
Благодарил (а): 9 раз
Поблагодарили: 2 раза

Скрипт для вызова faceplate с trend

Сообщение swaips-87 »

Добрый день всем!
Прошу помощи разобраться, начинаю работать с WinCC 8.0. существует такая задача, при клике на значение аналогового параметра, открыть picture window, в котором выводить тренд данного параметра, так как параметров много, и чтобы не плодить picture window на странице, каждый со своими настройками, хочу скриптом в С, вызывать это окно с трендом, писать его наименование и т.д. так вот, всё получилось, за исполнением того, - как в скрипте прописать чтобы в свойство TrendTagName с типом string, записать имя нужного мне tag. SetPropChar не катит, ругается при компиляции, но оно и понятно, другой тип.
Может кто в курсе, как это сделать.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

LexSL
осмотрелся
осмотрелся
Сообщения: 192
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 65 раз
Поблагодарили: 46 раз

Скрипт для вызова faceplate с trend

Сообщение LexSL »

Вот пример как я делал в одном из проектов (правда там была WinCC 7.2)

Код: Выделить всё

// настройка графика
SetPropChar(lpszPictureName, "TrendTag1", "TrendWindowAdd", "myWindow");
SetPropChar(lpszPictureName, "TrendTag1", "TimeAxisAdd", "myTimeAxis");
SetPropChar(lpszPictureName, "TrendTag1", "ValueAxisAdd", "myValueAxis");

SetPropChar(lpszPictureName, "TrendTag1", "TimeAxisTrendWindow", "myWindow");
SetPropChar(lpszPictureName, "TrendTag1", "ValueAxisTrendWindow", "myWindow");
SetPropChar(lpszPictureName, "TrendTag1", "TrendAdd", "тренд_какой_то"); //
SetPropWord(lpszPictureName, "TrendTag1", "TrendProvider", 1);
SetPropChar(lpszPictureName, "TrendTag1", "TrendTagName", szValue); //имя переменной из архива типа: "ProcessValuearchive\\temp1"
SetPropChar(lpszPictureName, "TrendTag1", "TrendLabel",  "label_какой_то");
SetPropWord(lpszPictureName, "TrendTag1", "TrendColor", RGB(0,0,128));
SetPropChar(lpszPictureName, "TrendTag1", "TrendTrendWindow", "myWindow");
SetPropChar(lpszPictureName, "TrendTag1", "TrendTimeAxis", "myTimeAxis");
SetPropChar(lpszPictureName, "TrendTag1", "TrendValueAxis", "myValueAxis");
SetPropWord(lpszPictureName,"TrendTag1","TimeAxisTimeRangeBase",600000);	//задание периода графика (1 час) 
SetPropWord(lpszPictureName,"TrendTag1","TimeAxisTimeRangeFactor",1);	    //задание множителя периода графика ( х 1) 

SetPropWord(lpszPictureName,"TrendTag1", "TrendLineWidth",2);
SetPropWord(lpszPictureName,"TrendTag1", "TrendPointWidth",3);
SetPropWord(lpszPictureName, "TrendTag1", "TrendLineType", 2);

SetPropBOOL(lpszPictureName,"TrendTag1","TrendWindowFineGrid",FALSE);
SetPropWord(lpszPictureName,"TrendTag1", "TrendWindowCoarseGridColor", RGB(145,145,145));
SetPropChar(lpszPictureName,"TrendTag1", "Caption", "Тренд........");

//настройка ось Y
SetPropBOOL(lpszPictureName, "TrendTag1","ValueAxisAutoPrecisions",FALSE);	//Return-Type: BOOL 
SetPropWord(lpszPictureName, "TrendTag1","ValueAxisPrecisions",1);	//Return-Type: BOOL 
SetPropBOOL(lpszPictureName, "TrendTag1","ValueAxisExponentialFormat",FALSE);	//Return-Type: BOOL 
SetPropBOOL(lpszPictureName, "TrendTag1","ValueAxisAutoRange",TRUE);	//Return-Type: BOOL 


Автор темы
swaips-87
здесь недавно
здесь недавно
Сообщения: 44
Зарегистрирован: 06 фев 2021, 02:47
Имя: Юрий
Страна: Россия
город/регион: Челябинская облость
Благодарил (а): 9 раз
Поблагодарили: 2 раза

Скрипт для вызова faceplate с trend

Сообщение swaips-87 »

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

Автор темы
swaips-87
здесь недавно
здесь недавно
Сообщения: 44
Зарегистрирован: 06 фев 2021, 02:47
Имя: Юрий
Страна: Россия
город/регион: Челябинская облость
Благодарил (а): 9 раз
Поблагодарили: 2 раза

Скрипт для вызова faceplate с trend

Сообщение swaips-87 »

Кому интересно, разобрался как это сделать, код ниже

char * PictureName = "TrendPdg";
char * WindowName ="TrendPic";
char * WindowTitle = "CaptionText";

char ArchiveTagName [100];
char value [100];
sprintf(ArchiveTagName, "Temperatures_Station1\\%sTemperature_R2", value);

SetVisible(lpszPictureName,"TrendPic",TRUE); //Return-Type: BOOL

SetPropChar(lpszPictureName, WindowName, WindowTitle,"Temperature_R2");

SetPropChar(PictureName,"Trendlbl1","TrendTagName",ArchiveTagName); //Return-Type: BOOL
У вас нет необходимых прав для просмотра вложений в этом сообщении.

stesl
эксперт
эксперт
Сообщения: 1011
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 94 раза
Поблагодарили: 136 раз

Скрипт для вызова faceplate с trend

Сообщение stesl »

swaips-87, Изначально - вопрос поставлен неверно. Faceplate и Picture Window абсолютно разные вещи ;)
swaips-87 писал(а): 14 мар 2024, 13:22 и чтобы не плодить picture window на странице
Не понятен подход, но "плодить" их нужно лишь для каждого экземпляра Structure Tag

С PW подход как в ООП - объект.свойство ;)

makesstr
осмотрелся
осмотрелся
Сообщения: 194
Зарегистрирован: 19 сен 2019, 10:09
Имя: Макс
Страна: Россия
город/регион: Славянск-на-Кубани
Благодарил (а): 5 раз
Поблагодарили: 34 раза

Скрипт для вызова faceplate с trend

Сообщение makesstr »

[+]
Dim obj, objTrendControl, Suffix, name, colorNew, colorIndex, startpicturename
startpicturename = HMIRuntime.BaseScreenName
name = item.ObjectName
Suffix = ".Value"
Set obj = HMIRuntime.Screens(startpicturename).ScreenItems("Trend_for_Script")

colorIndex = Int(Rnd()*4)
Select Case colorIndex
Case 0'MainR
colorNew = RGB(200+Int(Rnd()*55),Int(Rnd()*255),Int(Rnd()*255))
Case 1'MainG
colorNew = RGB(Int(Rnd()*255),200+Int(Rnd()*55),Int(Rnd()*255))
Case 2'MainB
colorNew = RGB(55+Int(Rnd()*200),55+Int(Rnd()*200),200+Int(Rnd()*55))
Case Else 'RGBmix
colorNew = RGB(55+Int(Rnd()*200),55+Int(Rnd()*200),55+Int(Rnd()*200))
End Select

If Flags=4 Or Flags=8 And obj.Visible Then
obj.CaptionText = obj.CaptionText & ", " & name
Set objTrendControl = obj.Screen.ScreenItems("TrendControl")
objTrendControl.TrendAdd = name
objTrendControl.TrendRepos = objTrendControl.TrendCount
objTrendControl.TrendTrendWindow = objTrendControl.TrendWindowRename
objTrendControl.ValueAxisAdd = item.ObjectName
objTrendControl.ValueAxisTrendWindow = objTrendControl.TrendWindowRename
objTrendControl.TrendColor = colorNew
objTrendControl.ValueAxisInTrendColor = True
objTrendControl.TrendValueAxis = item.ObjectName
objTrendControl.TrendTimeAxis = objTrendControl.TimeAxisRename
objTrendControl.TrendTagName = "Process_value_archive\" & name & Suffix
Else
obj.Visible = True
obj.CaptionText = name
Set objTrendControl = obj.Screen.ScreenItems("TrendControl")

Do While objTrendControl.ValueAxisCount > 1
objTrendControl.ValueAxisRepos = 1
objTrendControl.TrendRepos = 1
objTrendControl.ValueAxisRemove = objTrendControl.ValueAxisName
objTrendControl.TrendRemove = objTrendControl.TrendName
Loop

objTrendControl.ValueAxisRename = name
objTrendControl.TrendRename = name
objTrendControl.TrendTagName = "Process_value_archive\" & name & Suffix
objTrendControl.TrendColor = colorNew
objTrendControl.ValueAxisInTrendColor = True
objTrendControl.ValueAxisAutoRange = True
End If
Вот наш скрипт. Например, тег TIR_0811.Value. Называем объект вызванного фейсплейта TIR_0811.
На клик вешаем этот скрипт. В стартовую картинку кладем Window с названием Trend_for_Script, в котором уже лежит OnlineTrendControl с названием TrendControl. Если уже вызван тренд и кликнуть на другой фейсплейт с нажатым контрл или альт, в окно трендов добавится еще тренд с новой осью значений. Если не зажимать контрл или альт, тренд не добавится, а заменится.
WinCC 7.4 SP1 Upd15, Step5.6

Автор темы
swaips-87
здесь недавно
здесь недавно
Сообщения: 44
Зарегистрирован: 06 фев 2021, 02:47
Имя: Юрий
Страна: Россия
город/регион: Челябинская облость
Благодарил (а): 9 раз
Поблагодарили: 2 раза

Скрипт для вызова faceplate с trend

Сообщение swaips-87 »

Ну да, согласен, возможно не совсем корректно поставил вопрос. В начале пути изучения WiCC. Спасибо всем кто откликнулся. Проработаю разные варианты, решения задачи, но пока решение найдено. Очень интересное решение с добавлением трендов, при помощи зажатия контрл и альт. Вопросы, в процессе изучения, возникнут ещё.. прошу прощения за кажущуюся вам глупость и неопытность. :ext_book: всё знать не возможно, когда-то, у всех могут возникнуть глупые вопросы.

stesl
эксперт
эксперт
Сообщения: 1011
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 94 раза
Поблагодарили: 136 раз

Скрипт для вызова faceplate с trend

Сообщение stesl »

swaips-87 писал(а): 15 мар 2024, 14:59 у всех могут возникнуть глупые вопросы.
Абсолютно у всех ;)
Но настоятельно советую тему с PW прокачать. Это крутой инструмент.
Ответить

Вернуться в «WinCC»