• обязательно заполнить свой профиль на русском языке кириллицей
  • не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему
  • дублирование сообщений приравнивается к спаму
  • за поиск и предложение пиратского ПО - бан без предупреждения
  • рекламу и частные объявления мы не размещаем ни на каких условиях

Как сделать в TIA Portal WinCC Professional неоднократно-открываемые отдельные окна

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)
Ответить

Автор темы
AlexRezn
здесь недавно
здесь недавно
Сообщения: 15
Зарегистрирован: 22 июн 2017, 03:55
Имя: Александр
Благодарил (а): 4 раза
Поблагодарили: 4 раза
Контактная информация:

Как сделать в TIA Portal WinCC Professional неоднократно-открываемые отдельные окна

Сообщение AlexRezn » 15 апр 2019, 09:50

Вопрос возник по следующей причине.

Для открытия по кнопке отдельного окна с экранной формой я нашёл лишь функцию ActivateScreenInScreenWindow.
Кладу на форму ScreenWindow, для стандартного закрытия его по крестику разрешаю в свойствах "Header" и "Close button".
На кнопке на Click садится вызов ActivateScreenInScreenWindow с указанием в параметрах этого окна и нужного экрана.

Работает только один раз. То есть кликом открываем, закрываем крестиком - больше не вызывается.

Такое впечатление, что это окно при загрузке рантайма существует невидимым, функция делает его видимым, а крестик уничтожает в принципе.
Тогда непонятно, как его создавать заново следующим кликом?
---------------------------------------------------------------------------------------

Отсюда второй вопрос:
В нормальном WinCC есть базовые функции библиотеки под названием "BASIC PROCESS CONTROL". В частности, SSMOpenTopField и т.п. для создания окон процесса с выдачей туда экранных форм. Куда делась эта библиотека в Тиа Портале, и что её заменяет?

Аватара пользователя

M3f
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 31 янв 2017, 11:08
Имя: Николай
Благодарил (а): 5 раз
Поблагодарили: 8 раз

Как сделать в TIA Portal WinCC Professional неоднократно-открываемые отдельные окна

Сообщение M3f » 15 апр 2019, 10:22

AlexRezn, при нажатии "крестика" объект "Screen window" скрывается, поэтому при его вызове надо прописывать св-ва "Visibility".
Например, я вызываю окно так:

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

Sub OnClick(ByVal item)
SetPropertyByConstant "Main_Screen", "SW_Pump_3_4", "ScreenName", "Pump_3_Screen"
SetPropertyByConstant "Main_Screen", "SW_Pump_3_4", "CaptionText", "Насосный агрегат №3"
SetPropertyByConstant "Main_Screen", "SW_Pump_3_4", "Left", "673"
SetPropertyByConstant "Main_Screen", "SW_Pump_3_4", "Top", "409"
SetPropertyByConstant "Main_Screen", "SW_Pump_3_4", "Visible", "TRUE"
End Sub
— EPLAN Electric P8 Professional+ 2.7 HF1 11496
— TIA Portal Professional V14.0 SP1 Upd5
— Creo Parametric 4.0 M070


Автор темы
AlexRezn
здесь недавно
здесь недавно
Сообщения: 15
Зарегистрирован: 22 июн 2017, 03:55
Имя: Александр
Благодарил (а): 4 раза
Поблагодарили: 4 раза
Контактная информация:

Как сделать в TIA Portal WinCC Professional неоднократно-открываемые отдельные окна

Сообщение AlexRezn » 15 апр 2019, 11:22

M3f, Спасибо, получилось!

Касательно заголовка вопрос.
SetPropertyByConstant "Main_Screen", "SW_Pump_3_4", "CaptionText", "Насосный агрегат №3"

Я пробовал двумя вариантами: этим и SetPropChar
В обоих вариантах на месте русских букв вопросительные знаки. В языках проекта указано два языка - английский и русский. В прямом задании в свойствах экранных объектов русских текстов всё работает.
Но здесь - скрипт, почему-то не ловит кодировку. Что делать?

Аватара пользователя

M3f
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 31 янв 2017, 11:08
Имя: Николай
Благодарил (а): 5 раз
Поблагодарили: 8 раз

Как сделать в TIA Portal WinCC Professional неоднократно-открываемые отдельные окна

Сообщение M3f » 15 апр 2019, 11:55

AlexRezn, Скрипт на VBA или C?
— EPLAN Electric P8 Professional+ 2.7 HF1 11496
— TIA Portal Professional V14.0 SP1 Upd5
— Creo Parametric 4.0 M070


Автор темы
AlexRezn
здесь недавно
здесь недавно
Сообщения: 15
Зарегистрирован: 22 июн 2017, 03:55
Имя: Александр
Благодарил (а): 4 раза
Поблагодарили: 4 раза
Контактная информация:

Как сделать в TIA Portal WinCC Professional неоднократно-открываемые отдельные окна

Сообщение AlexRezn » 15 апр 2019, 12:20

На С скрипт.

Аватара пользователя

M3f
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 31 янв 2017, 11:08
Имя: Николай
Благодарил (а): 5 раз
Поблагодарили: 8 раз

Как сделать в TIA Portal WinCC Professional неоднократно-открываемые отдельные окна

Сообщение M3f » 15 апр 2019, 12:31

AlexRezn, была аналогичная проблема с С-скриптами, перелопатил кучу вариантов ничего не помогло. Была какая-то несовместимость сборки и кодировки под С. Как вариант попробуйте в настройках: "WinCC-Language&font-Language settings for script" выставить нужный язык.
В итоге писал вызов окон, и там где надо было прописывать наименование на русском, на VB.
— EPLAN Electric P8 Professional+ 2.7 HF1 11496
— TIA Portal Professional V14.0 SP1 Upd5
— Creo Parametric 4.0 M070


Автор темы
AlexRezn
здесь недавно
здесь недавно
Сообщения: 15
Зарегистрирован: 22 июн 2017, 03:55
Имя: Александр
Благодарил (а): 4 раза
Поблагодарили: 4 раза
Контактная информация:

Как сделать в TIA Portal WinCC Professional неоднократно-открываемые отдельные окна

Сообщение AlexRezn » 16 апр 2019, 07:45

M3f, Николай, ну, установка языков ничего не даёт, придётся переводить скрипт в Бэйсик.
Не подскажете, как мне в Бэйсике заменить Сишное

SetPropertyByConstant(GetParentScreen(screenName), GetParentScreenWindow(screenName),"CaptionText", "Дозатор 1_1");
(то есть у родительского ScreenWindow, которое вызвало текущий Screen, заменить заголовок)

и типа
SetPropertyByConstant(ParentScreen, ParentWindow,"Height", "424");
SetPropertyByConstant (screenName, "", "Height", "375");
(менять свойства родительского и своего окон)

В Си screenName дают прямо в параметрах обработчика. А в Бэйсике нет функций GetParentScreen и GetParentScreenWindow, и входных параметров.

Видимо, всё надо брать в объекте HMIRuntime, но я не могу в нём разобраться по бестолковому хэлпу. Пример нужен.

Аватара пользователя

M3f
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 31 янв 2017, 11:08
Имя: Николай
Благодарил (а): 5 раз
Поблагодарили: 8 раз

Как сделать в TIA Portal WinCC Professional неоднократно-открываемые отдельные окна

Сообщение M3f » 16 апр 2019, 10:07

Из руководства, для примера:

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

'Programming language: VBS
SetPropertyByTagIndirect GetParentScreen(screenName), GetParentScreenWindow(screenName), "ScreenName", "HMI_value_1"
'User defined code
...
Аналог:

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

{
// Programming language: C
SetPropertyByTagIndirect (GetParentScreen(screenName), GetParentScreenWindow(screenName), "ScreenName", "HMI_value_1");
// User defined code
...
}
— EPLAN Electric P8 Professional+ 2.7 HF1 11496
— TIA Portal Professional V14.0 SP1 Upd5
— Creo Parametric 4.0 M070


Автор темы
AlexRezn
здесь недавно
здесь недавно
Сообщения: 15
Зарегистрирован: 22 июн 2017, 03:55
Имя: Александр
Благодарил (а): 4 раза
Поблагодарили: 4 раза
Контактная информация:

Как сделать в TIA Portal WinCC Professional неоднократно-открываемые отдельные окна

Сообщение AlexRezn » 16 апр 2019, 10:34

M3f,
Видел это в хэлпе. Я пробовал эти родительские функции, не работают они в Бэйсике. (((

Точнее, они, вроде бы, работают, но вообще не так, как в Си. Обращаются не к ближайшему уровню, а ещё выше. Они изменяют параметры самого верхнего окна - рантайма.

Либо screenName, передаваемое в Си-варианте, какое-то не то, что я вынужден указывать в явном виде стрингом в Бэйсике. Как получить программно текущее screenName, совпадающее с Си-шным, непонятно.

Конкретно иерархия:

Окно рантайма c StartScreen - ScreenWindow - Screen "Dozirovka" - по клику ScreenWindow "Window_BATCHER" в него функцией установлен Screen "Batcher_1_1" - у него на Loaded скрипт.

Попытка выставить размеры и заголовок Window_BATCHER в этом скрипте. Типа
SetPropertyByConstant GetParentScreen ("BATCHER_1_1"), GetParentScreenWindow ("BATCHER_1_1"),"Height", "424"

Изменяет окно рантайма.

Вариант с явным указанием имени родительского экрана
SetPropertyByConstant "Dozirovka", GetParentScreenWindow ("BATCHER_1_1"),"Height", "424"

ничего не изменяет вообще.


Автор темы
AlexRezn
здесь недавно
здесь недавно
Сообщения: 15
Зарегистрирован: 22 июн 2017, 03:55
Имя: Александр
Благодарил (а): 4 раза
Поблагодарили: 4 раза
Контактная информация:

Как сделать в TIA Portal WinCC Professional неоднократно-открываемые отдельные окна

Сообщение AlexRezn » 17 апр 2019, 04:36

M3f,

Николай, ну, нашёл я правильное решение. Пусть пригодится кому-то ещё.
Применил следующий способ:
В прямом задании функций без скрипта задал три функции "SetPropertyCurrentWindow" с размерами и заголовком.
проверил, что работают как надо, потом задал "Конвертировать в VBS". Вот что получилось:

SetPropertyByConstant GetParentScreen(AccessPath), GetParentScreenWindow(AccessPath), "Height", "424"
SetPropertyByConstant GetParentScreen(AccessPath), GetParentScreenWindow(AccessPath), "Width", "623"
SetPropertyByConstant GetParentScreen(AccessPath), GetParentScreenWindow(AccessPath), "CaptionText", """Дозатор 1_1"""

То есть оказалось:
1). Свойство объекта экрана AccessPath = "Returns the storage path of a screen" здесь надо применять вместо имени экрана. Очевидно, прямое задание стринговой константы должно включать в себя весь путь, начиная со стартового экрана.
2). Свойство объекта экрана AccessPath (и, наверняка, прочие тоже) можно применять без указания самого объекта. Очевидно, они тогда берутся из текущего экрана, в котором задан скрипт.
SetPropertyByConstant AccessPath, "MainButton1", "Backcolor", "65280" (и т.п.) - Тоже всё работает верно.

3). Текст заголовка указала аж в ТРОЙНЫХ кавычках. Убрал лишние две пары - всё равно работает верно. Это было что-то, связанное с интерпретацией параметра функции SetPropertyCurrentWindow.

Поди вычитай всё это из разных мест хэлпа и увяжи воедино!

Теперь буду знать )))
===========================

С вопросом русского текста в С-скриптах тоже разобрался.
После того, как в настройки проекта и настройки рантайма WinCC добавляешь русский язык, в редакторе С-скрипта становится доступным выбор параметра "Code page". Там два варианта: "device settings" и "Russian". Устанавливаешь "Russian" - и всё отображается верно!
Так что теперь у меня оба варианта работают правильно, и Сишный, и бейсиковский. )))

Ответить

Вернуться в «Simatic TIA Portal»