На форуме обязательно:
  1. Заполнить свой профиль НА РУССКОМ ЯЗЫКЕ КИРИЛЛИЦЕЙ. См. Правила, п.2.d.
  2. Не писать свой вопрос в первую попавшуюся тему, а вместо этого создать свою. См. Правила, п.3.a.

Дублирование сообщений приравнивается к спаму. Рекламу мы не размещаем ни на каких условиях.

Проблемы с Global object

Ответить

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

Проблемы с Global object

Сообщение Serg_G » 28 окт 2018, 21:29

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


Сергей
здесь недавно
здесь недавно
Сообщения: 46
Зарегистрирован: 02 авг 2010, 10:30
Имя: Сергей Сергеевич
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Проблемы с Global object

Сообщение Сергей » 29 окт 2018, 10:14

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


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

Проблемы с Global object

Сообщение Ryzhij » 29 окт 2018, 14:56

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


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

Проблемы с Global object

Сообщение Serg_G » 29 окт 2018, 15:49

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


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

Проблемы с Global object

Сообщение Ryzhij » 30 окт 2018, 05:20

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


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

Проблемы с Global object

Сообщение Serg_G » 30 окт 2018, 08:07

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


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

Проблемы с Global object

Сообщение Ryzhij » 30 окт 2018, 08:51

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


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

Проблемы с Global object

Сообщение Serg_G » 30 окт 2018, 09:18

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


Сергей
здесь недавно
здесь недавно
Сообщения: 46
Зарегистрирован: 02 авг 2010, 10:30
Имя: Сергей Сергеевич
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Проблемы с Global object

Сообщение Сергей » 30 окт 2018, 10:16

Обращайтесь к тегу который считывается из контроллера командой 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
здесь недавно
здесь недавно
Сообщения: 10
Зарегистрирован: 04 авг 2018, 07:02
Имя: Сергей
Благодарил (а): 3 раза

Проблемы с Global object

Сообщение Serg_G » 30 окт 2018, 10:53

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


Сергей
здесь недавно
здесь недавно
Сообщения: 46
Зарегистрирован: 02 авг 2010, 10:30
Имя: Сергей Сергеевич
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Проблемы с Global object

Сообщение Сергей » 30 окт 2018, 11:16

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


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

Проблемы с Global object

Сообщение Serg_G » 30 окт 2018, 11:24

Сергей. Огромное спасибо. Попробовал прочитать командой
Dim SPar as String

SPar = ThisDisplay.TagParameters.Item(1)

И получил что хотел.
Теперь еще одна просьба. Не могу найти как на VBA изменить свойства BARа - Maximum Value. Среди доступных свойств нет ничего похожего. Получается его изменить нельзя.


Сергей
здесь недавно
здесь недавно
Сообщения: 46
Зарегистрирован: 02 авг 2010, 10:30
Имя: Сергей Сергеевич
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Проблемы с Global object

Сообщение Сергей » 30 окт 2018, 11:31

Я думаю только через Methods:
Property Get: Double MaxValue()
Property Get: Double MinValue()

Но к сожалению Methods не использовал никогда, откуда и как вызвать команду Invoke не знаю - надо разбираться


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

Проблемы с Global object

Сообщение Serg_G » 30 окт 2018, 13:08

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

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


Сергей
здесь недавно
здесь недавно
Сообщения: 46
Зарегистрирован: 02 авг 2010, 10:30
Имя: Сергей Сергеевич
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Проблемы с Global object

Сообщение Сергей » 30 окт 2018, 13:12

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

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


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

Проблемы с Global object

Сообщение Serg_G » 30 окт 2018, 21:49

Сергей писал(а):
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.

Ответить

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