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

Скрипт C. Вызов Picture Window на родительском окне с другого PW

Модератор: Глоб.модераторы

Ответить

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

Скрипт C. Вызов Picture Window на родительском окне с другого PW

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

Добрый день, прошу помощи, запутался немного.
Ситуация такая, требуется с одного PW открыть кнопкой второе PW на родительском окне с присвоением определенных свойств окну
Вот что у меня в скрипте на кнопке:

char *pictureName = "@SFP_trend.Pdl";
char *windowName = "WindowSensor";
char *windowTitle = "CaptionText";
char *titleContent = "";
char *objectName = "lblHeader1";
char *propertiesText = "Text";

char ArchiveTagName [100];
char value [100];

// Получение родительского изображения
char *lpszPicture = GetParentPicture(lpszPictureName);

//Получаем заголовок окна изображения
char *titleContent = GetPropChar(lpszPicture, windowName, windowTitle);

// Устанавливаем текст для заголовка
SetPropChar(lpszPictureName, objectName, propertiesText, windowTitle);

sprintf(ArchiveTagName, "Archive_Trend_RH\\%sDataForDCSPowerStation_RH_Tank1_Level_r", value);

SetPictureName(lpszPictureName, windowName, pictureName);
SetPropChar (lpszPictureName, windowName, windowTitle, titleContent);

SetVisible (lpszPicture, windowName, TRUE);

SetPropChar(pictureName,"Trend","TrendTagName",ArchiveTagName);
SetPropDouble(pictureName,"Trend","ValueAxisEndValue",1);
SetPropChar(pictureName,"Trend","TrendRename",titleContent);
У вас нет необходимых прав для просмотра вложений в этом сообщении.

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

Скрипт C. Вызов Picture Window на родительском окне с другого PW

Сообщение makesstr »

Обязательно на Си писать?
WinCC 7.4 SP1 Upd15, Step5.6

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

Скрипт C. Вызов Picture Window на родительском окне с другого PW

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

makesstr писал(а): 05 авг 2024, 08:04 Обязательно на Си писать?
Добрый день, там всё на Си написано, хотелось бы не менять структуру, если менять только это, то придется менять всё (ну что в пределах этого скрипта).
У вас есть какое-то иное предложение? VBS?

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

Скрипт C. Вызов Picture Window на родительском окне с другого PW

Сообщение makesstr »

Откуда берется текст "НС1 Давление факт PT-1 Гросс, МПа"?
[+] На будущее
Называть переменные также как называются свойства объектов - плохая затея.
Отправлено спустя 11 минут 2 секунды:
[+] Непонятно откуда берутся Название тренда, Путь к тренду, Название окна
Dim PwTrend
Set PwTrend = item.Parent.Parent.Parent.ScreenItems("WindowSensor")

PwTrend.PictureName = "SFP_trend.Pdl"
PwTrend.CaptionText = "Название окна"
PwTrend.Visible = 1

PwTrend.Screen.ScreenItems("lblHeader1").Text = "Название тренда"
PwTrend.Screen.ScreenItems("Trend").ValueAxisEndValue = 1
PwTrend.Screen.ScreenItems("Trend").TrendTagName = "Путь к тренду"
PwTrend.Screen.ScreenItems("Trend").TrendRename = "Название тренда"
WinCC 7.4 SP1 Upd15, Step5.6

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

Скрипт C. Вызов Picture Window на родительском окне с другого PW

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

makesstr писал(а): 05 авг 2024, 14:21 Откуда берется текст "НС1 Давление факт PT-1 Гросс, МПа"?
Это старое окно, открывается и прописывалось индивидуально на каждый датчик
вот код:
char *tagPrefix = "NS1";
char *pictureName = "@SFP_trend.Pdl";
char *windowName = "WindowSensor";
char *windowTitle = "CaptionText";
char *titleContent = "НC1 Давление факт PT-1 Гросс, МПа";

char ArchiveTagName [100];
char value [100];



sprintf(ArchiveTagName, "Archive_Trend_RH\\%sData_AI_Data[1]_Out_value", value);


SetTagPrefix(lpszPictureName, windowName, tagPrefix);
SetPictureName(lpszPictureName, windowName, pictureName);
SetPropChar (lpszPictureName, windowName, windowTitle, titleContent);

SetVisible (lpszPictureName, windowName, TRUE);

SetPropChar(pictureName,"Trend","TrendTagName",ArchiveTagName);
SetPropDouble(pictureName,"Trend","ValueAxisBeginValue",0);

SetPropDouble(pictureName,"Trend","ValueAxisEndValue",1);
SetPropChar(pictureName,"Trend","TrendRename",titleContent);
У вас нет необходимых прав для просмотра вложений в этом сообщении.

iceman
здесь недавно
здесь недавно
Сообщения: 28
Зарегистрирован: 15 фев 2018, 07:17
Имя: Александр
Страна: Россия
город/регион: Новокузнецк
Поблагодарили: 9 раз

Скрипт C. Вызов Picture Window на родительском окне с другого PW

Сообщение iceman »

День добрый.
Попробуем разобраться.

char *pictureName = "@SFP_trend.Pdl";
char *windowName = "WindowSensor";
char *windowTitle = "CaptionText";
char *titleContent = "";
char *objectName = "lblHeader1";
char *propertiesText = "Text";

char ArchiveTagName [100];
char value [100];

//Доп переменная
char MainName[MAX_PATH];


// Получение родительского изображения
char *lpszPicture = GetParentPicture(lpszPictureName);

//формируем путь
sprintf(MainName, "%s.%s:%s", lpszPicture, windowName, pictureName);


//Получаем заголовок окна изображения
char *titleContent = GetPropChar(lpszPicture, windowName, windowTitle);
Заголовок получаем из окна механизма для последующей склейки? Или заголовок определяется в переменной char *titleContent = "";?

// Устанавливаем текст для заголовка
Зачем дополнительный заголовок в окне, если уже есть название окна с таким же текстом?
И строку скрипта переносим вниз


sprintf(ArchiveTagName, "Archive_Trend_RH\\%sDataForDCSPowerStation_RH_Tank1_Level_r", value);

//обращаемся к PW на родительском окне, а не на текущем - значит lpszPicture
SetPictureName(lpszPicture, windowName, pictureName);
SetPropChar (lpszPicture, windowName, windowTitle, titleContent);

SetVisible (lpszPicture, windowName, TRUE);

// Устанавливаем текст для заголовка
SetPropChar(MainName, objectName, propertiesText, windowTitle);
SetPropChar(MainName,"Trend","TrendTagName",ArchiveTagName);
SetPropDouble(MainName,"Trend","ValueAxisEndValue",1);
SetPropChar(MainName,"Trend","TrendRename",titleContent);

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

Скрипт C. Вызов Picture Window на родительском окне с другого PW

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

iceman, Спасибо огромное, заработало.
iceman писал(а): 06 авг 2024, 05:21 char *titleContent = GetPropChar(lpszPicture, windowName, windowTitle);
Заголовок получаем из окна механизма для последующей склейки? Или заголовок определяется в переменной char *titleContent = "";?
это были эксперименты , получить в заголовок.
Не могли бы вы помочь еще, пожалуйста, как возможно сделать так, чтобы в зависимости от какого либо свойства ( к примеру имя) элемента, динамически менять конструкцию
iceman писал(а): 06 авг 2024, 05:21 sprintf(ArchiveTagName, "Archive_Trend_RH\\%sDataForDCSPowerStation_RH_Tank1_Level_r", value);
, для выбора нужного тега из архива.

iceman
здесь недавно
здесь недавно
Сообщения: 28
Зарегистрирован: 15 фев 2018, 07:17
Имя: Александр
Страна: Россия
город/регион: Новокузнецк
Поблагодарили: 9 раз

Скрипт C. Вызов Picture Window на родительском окне с другого PW

Сообщение iceman »

swaips-87 писал(а): 07 авг 2024, 03:46 Не могли бы вы помочь еще, пожалуйста, как возможно сделать так, чтобы в зависимости от какого либо свойства ( к примеру имя) элемента, динамически менять конструкцию
iceman писал(а): 06 авг 2024, 05:21 sprintf(ArchiveTagName, "Archive_Trend_RH\\%sDataForDCSPowerStation_RH_Tank1_Level_r", value);
, для выбора нужного тега из архива.
День добрый.

Конструкция sprintf(ArchiveTagName, "Archive_Trend_RH\\%sDataForDCSPowerStation_RH_Tank1_Level_r", value); уже динамическая.
Переменная value подставляется в строку (вместо %s). Кстати, непонятно где она задается.
Возможно, чтобы не менять идеологию работы данного скрипта, имя тега задавать через переменную. Заголовки задаются и имя тега тоже можно. А собрать строку не составить проблем.
Либо в окно с графиком передавать префикс и часть скрипта переносить в @SFP_trend.Pdl на событие OpenPicture.

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

Скрипт C. Вызов Picture Window на родительском окне с другого PW

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

iceman,
iceman писал(а): 07 авг 2024, 05:05 Archive_Trend_RH\\%sDataForDCSPowerStation_RH_Tank1_Level_r", value
Вот эта часть , просто добавлена мной, я сам прописал это, по сути, мне при нажатии на ту или иную кнопку, нужно менять значение "DataForDCSPowerStation_RH_Tank1_Level_r", как его поменять я пока не понимаю

char *pictureName = "@SFP_trend.Pdl";
char *windowName = "WindowSensor";
char *windowTitle = "CaptionText";
char *titleContent = "SRT3000RMXLI";
char *objectName = "lblHeader1";
char *propertiesText = "Text";

char ArchiveTagName [100];
char value [100]; Вот тут я его обозначил

//Доп переменная
char MainName[MAX_PATH];

// Получение родительского изображения
char *lpszPicture = GetParentPicture(lpszPictureName);

//формируем путь
sprintf(MainName, "%s.%s:%s", lpszPicture, windowName, pictureName);

sprintf(ArchiveTagName, "Archive_Trend_RH\\%sDataForDCSPowerStation_RH_Tank1_Level_r", value); тут по сути (выделенное) я прописываю архив, и имя архивного тега (но в ручную), по сути мне нужно получать свойство или имя тут , и переписывать его.

//обращаемся к PW на родительском окне, а не на текущем - значит lpszPicture
SetPictureName(lpszPicture, windowName, pictureName);
SetPropChar (lpszPicture, windowName, windowTitle, titleContent);

SetVisible (lpszPicture, windowName, TRUE);

// Устанавливаем текст для заголовка
SetPropChar(MainName, objectName, propertiesText, windowTitle);
SetPropChar(MainName,"Trend","TrendTagName",ArchiveTagName);
SetPropDouble(MainName,"Trend","ValueAxisEndValue",1);
SetPropChar(MainName,"Trend","TrendRename",titleContent);

Вот скрипт который вызывает первое окно:
char *tagPrefix = "PT_OUT";
char *pictureName = "AI_Window.Pdl";
char *windowName = "WindowAI_Edit";
char *windowTitle = "CaptionText";
char *titleContent = "НС1 Давление выход";

SetTagPrefix(lpszPictureName, windowName, tagPrefix);
SetPictureName(lpszPictureName, windowName, pictureName);
SetVisible (lpszPictureName, windowName, TRUE);
SetPropChar (lpszPictureName, windowName, windowTitle, titleContent);

SetWidth(lpszPictureName,"WindowAI_Edit",250);
SetHeight(lpszPictureName,"WindowAI_Edit",181);

SetBackColor("AI_Window.Pdl","B_Chek",RGB(0,255,0));
}

iceman
здесь недавно
здесь недавно
Сообщения: 28
Зарегистрирован: 15 фев 2018, 07:17
Имя: Александр
Страна: Россия
город/регион: Новокузнецк
Поблагодарили: 9 раз

Скрипт C. Вызов Picture Window на родительском окне с другого PW

Сообщение iceman »

char value [100];

получаем префикс окна параметра ("НС-1 давление выход"), который получается из - char *tagPrefix = "PT_OUT";
strcpy(value, GetTagPrefix(GetParentPicture(lpszPictureName), GetParentPictureWindow(lpszPictureName));

если тег структурный, то склеиваем с суффиксом
strcat(value, ".суффикс");

далее подставляем в строку для графика в нужно место
sprintf(ArchiveTagName, "Archive_Trend_RH\\%sDataForDCSPowerStation_RH_Tank1_Level_r", value);

это все добавляем в скрипт на кнопку вызова графика

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

Скрипт C. Вызов Picture Window на родительском окне с другого PW

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

iceman, Александр, не дает скомпилировать , выдает что не хватает ";" после скобки, я не могу вообще получить тегпрефикс
char *pictureName = "@SFP_trend.Pdl";
char *windowName = "WindowSensor";
char *windowTitle = "CaptionText";
char *objectName = "lblHeader1";
char *propertiesText = "Text";

char ArchiveTagName [100];
char value [100];

//Доп переменная
char MainName[MAX_PATH];

// Получение родительского изображения
char *lpszPicture = GetParentPicture(lpszPictureName);
char *titleContent = GetPropChar(lpszPicture,lpszObjectName,"comment");

//формируем путь
sprintf(MainName, "%s.%s:%s", lpszPicture, windowName, pictureName);


//Получаем заголовок окна изображения
//char *titleContent = GetPropChar(lpszPicture, windowName, windowTitle);
//Заголовок получаем из окна механизма для последующей склейки? Или заголовок определяется в переменной char *titleContent = "";?


// Устанавливаем текст для заголовка
//Зачем дополнительный заголовок в окне, если уже есть название окна с таким же текстом?И строку скрипта переносим вниз


//обращаемся к PW на родительском окне, а не на текущем - значит lpszPicture
SetPictureName(lpszPicture, windowName, pictureName);
SetPropChar (lpszPicture, windowName, windowTitle, titleContent);

SetVisible (lpszPicture, windowName, TRUE);

strcpy(value, GetTagPrefix(GetParentPicture(lpszPictureName), GetParentPictureWindow(lpszPictureName));
strcat(value, ".QVAL");

sprintf(ArchiveTagName, "Archive_Trend_RH\\%s", value);


// Устанавливаем текст для заголовка
SetPropChar(pictureName, objectName, propertiesText, windowTitle);
SetPropChar(pictureName,"Trend","TrendTagName",ArchiveTagName);
SetPropDouble(pictureName,"Trend","ValueAxisEndValue",100);
SetPropChar(pictureName,"Trend","TrendRename",value);

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

Скрипт C. Вызов Picture Window на родительском окне с другого PW

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

вот скрин
У вас нет необходимых прав для просмотра вложений в этом сообщении.

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

Скрипт C. Вызов Picture Window на родительском окне с другого PW

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

Александр, спасибо, все получилось, конструкцию немного поменял.

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

char *pictureName = "@SFP_trend.Pdl";
char *windowName = "WindowSensor";
char *windowTitle = "CaptionText";
char *objectName = "lblHeader1";
char *propertiesText = "Text";

char ArchiveTagName [100];
char value [100];

//Доп переменная
char MainName[MAX_PATH];

// Получение родительского изображения
char *lpszPicture = GetParentPicture(lpszPictureName);
char *titleContent = GetPropChar(lpszPicture,lpszObjectName,"comment");

//формируем путь
sprintf(MainName, "%s.%s:%s", lpszPicture, windowName, pictureName);


//обращаемся к PW на родительском окне, а не на текущем - значит lpszPicture
SetPictureName(lpszPicture, windowName, pictureName);
SetPropChar (lpszPicture, windowName, windowTitle, titleContent);

SetVisible (lpszPicture, windowName, TRUE);

strcpy(value, GetTagPrefix(lpszPicture, GetParentPictureWindow(lpszPictureName)));	
strcat(value, ".QVAL");

sprintf(ArchiveTagName, "Archive_Trend_RH\\%s", value);


// Устанавливаем текст для заголовка
SetPropChar(pictureName, objectName, propertiesText, windowTitle);
SetPropChar(pictureName,"Trend","TrendTagName",ArchiveTagName);
SetPropDouble(pictureName,"Trend","ValueAxisEndValue",100);
SetPropChar(pictureName,"Trend","TrendRename",value);
Ответить

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