- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Проблемы с Global object
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 59
- Зарегистрирован: 04 авг 2018, 07:02
- Имя: Сергей
- Благодарил (а): 8 раз
- Поблагодарили: 2 раза
Проблемы с Global object
Уважаемые коллеги. У меня такой вопрос. В Factorytalk v.8 я создаю глобальный объект. Global object parameter's определены как #1 ...#15. Конкретно это отображение на всплывающей панели основных параметров ПИД-регулятора в том числе с использованием Bar-ов. Для одного регулятора все работает, но в проекте у меня несколько регуляторов. Регулируемые ими сигналы имеют разные шкалы. Не хочется создавать объекты под каждый регулятор. Bar имеет параметры Minimum value и Maximum value. Я должен записать туда только числовое значение. Я не могу подставить параметр типа #1. А мне надо значение одного из Global object parameter. Можно ли это сделать и как?
Я подумал что можно решить задачу с помощью VBA. Например при активации панельки записать в свойства Bar-ов. Но и здесь проблема. Компилятор ругается когда видит переменную вида #1. Как обратиться к Global object parameter's из VBA?
Я подумал что можно решить задачу с помощью VBA. Например при активации панельки записать в свойства Bar-ов. Но и здесь проблема. Компилятор ругается когда видит переменную вида #1. Как обратиться к Global object parameter's из VBA?
-
- здесь недавно
- Сообщения: 84
- Зарегистрирован: 02 авг 2010, 11:30
- Имя: Сергей Сергеевич
- Страна: РФ
- город/регион: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
Проблемы с Global object
Навскидку вижу два варианта:
1. Через Methods - по идее каждому объекту в FT можно присвоить значения всех его свойств - надо разбираться как, никогда Methods не использовал. Хотя этот вариант наверное более правильный и красивый.
2. Масштабировать все шкалы в контроллере на значение 0-100% и использовать уже масштабированное значение в bar
1. Через Methods - по идее каждому объекту в FT можно присвоить значения всех его свойств - надо разбираться как, никогда Methods не использовал. Хотя этот вариант наверное более правильный и красивый.
2. Масштабировать все шкалы в контроллере на значение 0-100% и использовать уже масштабированное значение в bar
-
- почётный участник форума
- Сообщения: 5790
- Зарегистрирован: 07 окт 2011, 09:12
- Имя: Гаско Вячеслав Эриевич
- Страна: Россия
- город/регион: Рязань
- Благодарил (а): 673 раза
- Поблагодарили: 840 раз
Проблемы с Global object
VBA не нужен. Метки-заменители тегов #1...#15 глобального объекта определяются в свойствах экземпляра объекта. Если не изменяет память, в панели конфигурации это "Links".
Если хоть одна метка-заменитель в экземпляре объекта останется неопределённой - компилятор будет выдавать указание на ошибку. Это естественно.
В глобальном объекте для границ шкал бар-графа обычно используют поле объекта типа "Label" для отображения свойств индицируемого тега (минимальное и максимальное значение тега из базы данных), а имя тега в этом самом объекте типа "Label" вводят как раз с использованием метки заменителя.
Попытка использовать не "Label", а "NumericDisplay" обречена на провал )))
Если хоть одна метка-заменитель в экземпляре объекта останется неопределённой - компилятор будет выдавать указание на ошибку. Это естественно.
В глобальном объекте для границ шкал бар-графа обычно используют поле объекта типа "Label" для отображения свойств индицируемого тега (минимальное и максимальное значение тега из базы данных), а имя тега в этом самом объекте типа "Label" вводят как раз с использованием метки заменителя.
Попытка использовать не "Label", а "NumericDisplay" обречена на провал )))
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
-
- здесь недавно
- Сообщения: 59
- Зарегистрирован: 04 авг 2018, 07:02
- Имя: Сергей
- Благодарил (а): 8 раз
- Поблагодарили: 2 раза
Проблемы с Global object
Спасибо за ответы. В принципе я нашел решение использовать вместо бара прямоугольник. А именно свойство "Fill" Его можно привязать к HMI тегу, а тот к параметру. А в HMI-теге можно проставить границы значений.
Но мне все же хочется знать. Можно ли прочитать Global object parameter's из VBA.
Но мне все же хочется знать. Можно ли прочитать Global object parameter's из VBA.
-
- почётный участник форума
- Сообщения: 5790
- Зарегистрирован: 07 окт 2011, 09:12
- Имя: Гаско Вячеслав Эриевич
- Страна: Россия
- город/регион: Рязань
- Благодарил (а): 673 раза
- Поблагодарили: 840 раз
Проблемы с Global object
Свойства и параметры экземпляра можно, а вот самого глобального объекта (дефиниции) - вряд ли.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
-
- здесь недавно
- Сообщения: 59
- Зарегистрирован: 04 авг 2018, 07:02
- Имя: Сергей
- Благодарил (а): 8 раз
- Поблагодарили: 2 раза
Проблемы с Global object
Наверно я неправильно объяснил. На мнемосхеме находится экземпляр глобального блока, определяющий конкретный регулятор. Когда по нему кликают, то вызывается глобальный блок и ему передаются параметры с конкретными значениями для данного регулятора. Отображение идет через экранчик, который "всплывает" на той же мнемосхеме. И я бы хотел привязаться к событию Activate или AnimationStart экранчика. С помощью VBA прочитать один из этих передаваемых параметров и сделать определенные настройки элементов, который будут отображены на экранчике.
И если это возможно, то просьба показать это в виде фрагмента программы на VBA.
-
- почётный участник форума
- Сообщения: 5790
- Зарегистрирован: 07 окт 2011, 09:12
- Имя: Гаско Вячеслав Эриевич
- Страна: Россия
- город/регион: Рязань
- Благодарил (а): 673 раза
- Поблагодарили: 840 раз
Проблемы с Global object
Параметры передаются в момент вызова глобального блока.
Или у Вас на мнемосхеме просто находится объект со ссылкой на команду вызова экземпляра глобального объекта, либо у Вас два глобальных объекта и клик по экземпляру одного (чьи параметры были ему переданы в момент отрисовки) вызывает экземпляр другого.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
-
- здесь недавно
- Сообщения: 59
- Зарегистрирован: 04 авг 2018, 07:02
- Имя: Сергей
- Благодарил (а): 8 раз
- Поблагодарили: 2 раза
Проблемы с Global object
У меня только один глобальный объект.Ryzhij писал(а): ↑30 окт 2018, 08:51Параметры передаются в момент вызова глобального блока.
Или у Вас на мнемосхеме просто находится объект со ссылкой на команду вызова экземпляра глобального объекта, либо у Вас два глобальных объекта и клик по экземпляру одного (чьи параметры были ему переданы в момент отрисовки) вызывает экземпляр другого.
-
- здесь недавно
- Сообщения: 84
- Зарегистрирован: 02 авг 2010, 11:30
- Имя: Сергей Сергеевич
- Страна: РФ
- город/регион: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
Проблемы с Global object
Обращайтесь к тегу который считывается из контроллера командой ThisDisplay.TagParameters.Item()
В скобках - номера параметра из Global Object Parameter defifnition. Только непомню с нуля там нумерация или с 1. Т.е. если вы хотите обратится к тегу который записывается в #1, то вызывайте его ThisDisplay.TagParameters.Item(0), #2 - ThisDisplay.TagParameters.Item(1) и т.д. - здесь наверное главное номер параметра в таблице Global Object Parameter defifnition а не его привязка (#1, #2 и т.д.)
Сделайте на фейсплэйте (всплывающем окне) кнопку. В VBA пропишите например такой код:
Private Sub Button1_Released()
Application.ExecuteCommand "&Set " & ThisDisplay.TagParameters.Item(0) & ".button 1"
End Sub
В контроллере в наборе тегов (например TestTAGS) который вы привязываете по #1 (в первую строку Global Object Parameter defifnition) добавте Bool тег button.
Запустите клиента откройте фесплэйт нажмите созданную кнопку. В студии в логе увидите Set [имя контроллера]TestTAGS.button 1
В контроллере этот тег станет 1.
В скобках - номера параметра из Global Object Parameter defifnition. Только непомню с нуля там нумерация или с 1. Т.е. если вы хотите обратится к тегу который записывается в #1, то вызывайте его ThisDisplay.TagParameters.Item(0), #2 - ThisDisplay.TagParameters.Item(1) и т.д. - здесь наверное главное номер параметра в таблице Global Object Parameter defifnition а не его привязка (#1, #2 и т.д.)
Сделайте на фейсплэйте (всплывающем окне) кнопку. В VBA пропишите например такой код:
Private Sub Button1_Released()
Application.ExecuteCommand "&Set " & ThisDisplay.TagParameters.Item(0) & ".button 1"
End Sub
В контроллере в наборе тегов (например TestTAGS) который вы привязываете по #1 (в первую строку Global Object Parameter defifnition) добавте Bool тег button.
Запустите клиента откройте фесплэйт нажмите созданную кнопку. В студии в логе увидите Set [имя контроллера]TestTAGS.button 1
В контроллере этот тег станет 1.
-
- здесь недавно
- Сообщения: 59
- Зарегистрирован: 04 авг 2018, 07:02
- Имя: Сергей
- Благодарил (а): 8 раз
- Поблагодарили: 2 раза
Проблемы с Global object
Тот параметр который мне нужен это не тег, а просто символьная строка с именем регулятора. Она нигде не хранится, а просто записана в качестве одного из Global Object Parameter
-
- здесь недавно
- Сообщения: 84
- Зарегистрирован: 02 авг 2010, 11:30
- Имя: Сергей Сергеевич
- Страна: РФ
- город/регион: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
Проблемы с Global object
Вы это имя прочитать хотите для конкретного экземпляра?
Сделайте текстовую переменную, которую привяжите к этой строке набора тегов. и работайте с String Display, в том числе и через VBA
Сделайте текстовую переменную, которую привяжите к этой строке набора тегов. и работайте с String Display, в том числе и через VBA
-
- здесь недавно
- Сообщения: 59
- Зарегистрирован: 04 авг 2018, 07:02
- Имя: Сергей
- Благодарил (а): 8 раз
- Поблагодарили: 2 раза
Проблемы с Global object
Сергей. Огромное спасибо. Попробовал прочитать командой
Dim SPar as String
SPar = ThisDisplay.TagParameters.Item(1)
И получил что хотел.
Теперь еще одна просьба. Не могу найти как на VBA изменить свойства BARа - Maximum Value. Среди доступных свойств нет ничего похожего. Получается его изменить нельзя.
Dim SPar as String
SPar = ThisDisplay.TagParameters.Item(1)
И получил что хотел.
Теперь еще одна просьба. Не могу найти как на VBA изменить свойства BARа - Maximum Value. Среди доступных свойств нет ничего похожего. Получается его изменить нельзя.
-
- здесь недавно
- Сообщения: 84
- Зарегистрирован: 02 авг 2010, 11:30
- Имя: Сергей Сергеевич
- Страна: РФ
- город/регион: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
Проблемы с Global object
Я думаю только через Methods:
Property Get: Double MaxValue()
Property Get: Double MinValue()
Но к сожалению Methods не использовал никогда, откуда и как вызвать команду Invoke не знаю - надо разбираться
Property Get: Double MaxValue()
Property Get: Double MinValue()
Но к сожалению Methods не использовал никогда, откуда и как вызвать команду Invoke не знаю - надо разбираться
-
- здесь недавно
- Сообщения: 59
- Зарегистрирован: 04 авг 2018, 07:02
- Имя: Сергей
- Благодарил (а): 8 раз
- Поблагодарили: 2 раза
Проблемы с Global object
Get - это ведь получить значение, а записать метода нет. Проще сделать масштабирование параметра в контроллере. Еще раз спасибо, я узнал все что хотел.
-
- здесь недавно
- Сообщения: 84
- Зарегистрирован: 02 авг 2010, 11:30
- Имя: Сергей Сергеевич
- Страна: РФ
- город/регион: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
Проблемы с Global object
Да скорее всего это получить значение. Вообще то странно, что в Bar эти вещи анимации не поддаются
Отправлено спустя 1 час 7 минут 4 секунды:
Отправлено спустя 1 час 7 минут 4 секунды:
Кстати -зачем промежуточный HMI тег - привязывайте сразу к тегу контроллераSerg_G писал(а): ↑29 окт 2018, 15:49 Спасибо за ответы. В принципе я нашел решение использовать вместо бара прямоугольник. А именно свойство "Fill" Его можно привязать к HMI тегу, а тот к параметру. А в HMI-теге можно проставить границы значений.
Но мне все же хочется знать. Можно ли прочитать Global object parameter's из VBA.
-
- здесь недавно
- Сообщения: 59
- Зарегистрирован: 04 авг 2018, 07:02
- Имя: Сергей
- Благодарил (а): 8 раз
- Поблагодарили: 2 раза
Проблемы с Global object
Дело в том, что для HMI тега можно задать мин. и макс. значения. И свойство "Fill" берет эти значения в качестве граничных для расчета длины столбика заполнения. А у тега контроллера такие значения не задаются. Они ведь указаны в свойствах физического канала и недоступны HMI.Сергей писал(а): ↑30 окт 2018, 14:19 Да скорее всего это получить значение. Вообще то странно, что в Bar эти вещи анимации не поддаются
Отправлено спустя 1 час 7 минут 4 секунды:Кстати -зачем промежуточный HMI тег - привязывайте сразу к тегу контроллераSerg_G писал(а): ↑29 окт 2018, 15:49 Спасибо за ответы. В принципе я нашел решение использовать вместо бара прямоугольник. А именно свойство "Fill" Его можно привязать к HMI тегу, а тот к параметру. А в HMI-теге можно проставить границы значений.
Но мне все же хочется знать. Можно ли прочитать Global object parameter's из VBA.