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

Проблемы с Global object

Ответить

Автор темы
Serg_G
здесь недавно
здесь недавно
Сообщения: 59
Зарегистрирован: 04 авг 2018, 07:02
Имя: Сергей
Благодарил (а): 8 раз
Поблагодарили: 2 раза

Проблемы с Global object

Сообщение Serg_G »

Уважаемые коллеги. У меня такой вопрос. В 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?

Сергей
здесь недавно
здесь недавно
Сообщения: 84
Зарегистрирован: 02 авг 2010, 11:30
Имя: Сергей Сергеевич
Страна: РФ
город/регион: Москва
Благодарил (а): 3 раза
Поблагодарили: 5 раз

Проблемы с Global object

Сообщение Сергей »

Навскидку вижу два варианта:
1. Через Methods - по идее каждому объекту в FT можно присвоить значения всех его свойств - надо разбираться как, никогда Methods не использовал. Хотя этот вариант наверное более правильный и красивый.
2. Масштабировать все шкалы в контроллере на значение 0-100% и использовать уже масштабированное значение в bar

Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 5632
Зарегистрирован: 07 окт 2011, 09:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 600 раз
Поблагодарили: 756 раз

Проблемы с Global object

Сообщение Ryzhij »

VBA не нужен. Метки-заменители тегов #1...#15 глобального объекта определяются в свойствах экземпляра объекта. Если не изменяет память, в панели конфигурации это "Links".
Если хоть одна метка-заменитель в экземпляре объекта останется неопределённой - компилятор будет выдавать указание на ошибку. Это естественно.
В глобальном объекте для границ шкал бар-графа обычно используют поле объекта типа "Label" для отображения свойств индицируемого тега (минимальное и максимальное значение тега из базы данных), а имя тега в этом самом объекте типа "Label" вводят как раз с использованием метки заменителя.
Попытка использовать не "Label", а "NumericDisplay" обречена на провал )))
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
Serg_G
здесь недавно
здесь недавно
Сообщения: 59
Зарегистрирован: 04 авг 2018, 07:02
Имя: Сергей
Благодарил (а): 8 раз
Поблагодарили: 2 раза

Проблемы с Global object

Сообщение Serg_G »

Спасибо за ответы. В принципе я нашел решение использовать вместо бара прямоугольник. А именно свойство "Fill" Его можно привязать к HMI тегу, а тот к параметру. А в HMI-теге можно проставить границы значений.
Но мне все же хочется знать. Можно ли прочитать Global object parameter's из VBA.

Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 5632
Зарегистрирован: 07 окт 2011, 09:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 600 раз
Поблагодарили: 756 раз

Проблемы с Global object

Сообщение Ryzhij »

Serg_G писал(а): 29 окт 2018, 15:49 Можно ли прочитать Global object parameter's из VBA
Свойства и параметры экземпляра можно, а вот самого глобального объекта (дефиниции) - вряд ли.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
Serg_G
здесь недавно
здесь недавно
Сообщения: 59
Зарегистрирован: 04 авг 2018, 07:02
Имя: Сергей
Благодарил (а): 8 раз
Поблагодарили: 2 раза

Проблемы с Global object

Сообщение Serg_G »

Ryzhij писал(а): 30 окт 2018, 05:20
Serg_G писал(а): 29 окт 2018, 15:49 Можно ли прочитать Global object parameter's из VBA
Свойства и параметры экземпляра можно, а вот самого глобального объекта (дефиниции) - вряд ли.
Наверно я неправильно объяснил. На мнемосхеме находится экземпляр глобального блока, определяющий конкретный регулятор. Когда по нему кликают, то вызывается глобальный блок и ему передаются параметры с конкретными значениями для данного регулятора. Отображение идет через экранчик, который "всплывает" на той же мнемосхеме. И я бы хотел привязаться к событию Activate или AnimationStart экранчика. С помощью VBA прочитать один из этих передаваемых параметров и сделать определенные настройки элементов, который будут отображены на экранчике.
И если это возможно, то просьба показать это в виде фрагмента программы на VBA.

Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 5632
Зарегистрирован: 07 окт 2011, 09:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 600 раз
Поблагодарили: 756 раз

Проблемы с Global object

Сообщение Ryzhij »

Serg_G писал(а): 30 окт 2018, 08:07 Когда по нему кликают, то вызывается глобальный блок и ему передаются параметры с конкретными значениями для данного регулятора.
Параметры передаются в момент вызова глобального блока.
Или у Вас на мнемосхеме просто находится объект со ссылкой на команду вызова экземпляра глобального объекта, либо у Вас два глобальных объекта и клик по экземпляру одного (чьи параметры были ему переданы в момент отрисовки) вызывает экземпляр другого.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
Serg_G
здесь недавно
здесь недавно
Сообщения: 59
Зарегистрирован: 04 авг 2018, 07:02
Имя: Сергей
Благодарил (а): 8 раз
Поблагодарили: 2 раза

Проблемы с Global object

Сообщение Serg_G »

Ryzhij писал(а): 30 окт 2018, 08:51
Serg_G писал(а): 30 окт 2018, 08:07 Когда по нему кликают, то вызывается глобальный блок и ему передаются параметры с конкретными значениями для данного регулятора.
Параметры передаются в момент вызова глобального блока.
Или у Вас на мнемосхеме просто находится объект со ссылкой на команду вызова экземпляра глобального объекта, либо у Вас два глобальных объекта и клик по экземпляру одного (чьи параметры были ему переданы в момент отрисовки) вызывает экземпляр другого.
У меня только один глобальный объект.

Сергей
здесь недавно
здесь недавно
Сообщения: 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.

Автор темы
Serg_G
здесь недавно
здесь недавно
Сообщения: 59
Зарегистрирован: 04 авг 2018, 07:02
Имя: Сергей
Благодарил (а): 8 раз
Поблагодарили: 2 раза

Проблемы с Global object

Сообщение Serg_G »

Сергей писал(а): 30 окт 2018, 10:16
Тот параметр который мне нужен это не тег, а просто символьная строка с именем регулятора. Она нигде не хранится, а просто записана в качестве одного из Global Object Parameter

Сергей
здесь недавно
здесь недавно
Сообщения: 84
Зарегистрирован: 02 авг 2010, 11:30
Имя: Сергей Сергеевич
Страна: РФ
город/регион: Москва
Благодарил (а): 3 раза
Поблагодарили: 5 раз

Проблемы с Global object

Сообщение Сергей »

Вы это имя прочитать хотите для конкретного экземпляра?
Сделайте текстовую переменную, которую привяжите к этой строке набора тегов. и работайте с String Display, в том числе и через VBA

Автор темы
Serg_G
здесь недавно
здесь недавно
Сообщения: 59
Зарегистрирован: 04 авг 2018, 07:02
Имя: Сергей
Благодарил (а): 8 раз
Поблагодарили: 2 раза

Проблемы с Global object

Сообщение Serg_G »

Сергей. Огромное спасибо. Попробовал прочитать командой
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 не знаю - надо разбираться

Автор темы
Serg_G
здесь недавно
здесь недавно
Сообщения: 59
Зарегистрирован: 04 авг 2018, 07:02
Имя: Сергей
Благодарил (а): 8 раз
Поблагодарили: 2 раза

Проблемы с Global object

Сообщение Serg_G »

Сергей писал(а): 30 окт 2018, 11:31 Я думаю только через Methods:
Property Get: Double MaxValue()
Property Get: Double MinValue()

Но к сожалению Methods не использовал никогда, откуда и как вызвать команду Invoke не знаю - надо разбираться
Get - это ведь получить значение, а записать метода нет. Проще сделать масштабирование параметра в контроллере. Еще раз спасибо, я узнал все что хотел.

Сергей
здесь недавно
здесь недавно
Сообщения: 84
Зарегистрирован: 02 авг 2010, 11:30
Имя: Сергей Сергеевич
Страна: РФ
город/регион: Москва
Благодарил (а): 3 раза
Поблагодарили: 5 раз

Проблемы с Global object

Сообщение Сергей »

Да скорее всего это получить значение. Вообще то странно, что в Bar эти вещи анимации не поддаются

Отправлено спустя 1 час 7 минут 4 секунды:
Serg_G писал(а): 29 окт 2018, 15:49 Спасибо за ответы. В принципе я нашел решение использовать вместо бара прямоугольник. А именно свойство "Fill" Его можно привязать к HMI тегу, а тот к параметру. А в HMI-теге можно проставить границы значений.
Но мне все же хочется знать. Можно ли прочитать Global object parameter's из VBA.
Кстати -зачем промежуточный HMI тег - привязывайте сразу к тегу контроллера

Автор темы
Serg_G
здесь недавно
здесь недавно
Сообщения: 59
Зарегистрирован: 04 авг 2018, 07:02
Имя: Сергей
Благодарил (а): 8 раз
Поблагодарили: 2 раза

Проблемы с Global object

Сообщение Serg_G »

Сергей писал(а): 30 окт 2018, 14:19 Да скорее всего это получить значение. Вообще то странно, что в Bar эти вещи анимации не поддаются

Отправлено спустя 1 час 7 минут 4 секунды:
Serg_G писал(а): 29 окт 2018, 15:49 Спасибо за ответы. В принципе я нашел решение использовать вместо бара прямоугольник. А именно свойство "Fill" Его можно привязать к HMI тегу, а тот к параметру. А в HMI-теге можно проставить границы значений.
Но мне все же хочется знать. Можно ли прочитать Global object parameter's из VBA.
Кстати -зачем промежуточный HMI тег - привязывайте сразу к тегу контроллера
Дело в том, что для HMI тега можно задать мин. и макс. значения. И свойство "Fill" берет эти значения в качестве граничных для расчета длины столбика заполнения. А у тега контроллера такие значения не задаются. Они ведь указаны в свойствах физического канала и недоступны HMI.
Ответить

Вернуться в «Общие вопросы»