Страница 1 из 1

Получить значение тэга имея его имя.

СообщениеДобавлено: Сб авг 28, 2021 1:27 pm
npp
Добрый день!

Вcе действия производятся в среде Archestra.
Так получилось, что некий перечень тэгов нужно подгрузить из файла с жёсткого диска.
Имена тэгов из файла получаю в текстовом виде в переменную типа String и заливаю список в ComboBox. Пользователь в ComboBox выбирает желаемый тэг и в свойство TrendClient.Pen.Exeption передаю имя тэга и график исторических значений замечательно рисуется.

Хотелось бы получить также численное значение тэга для вывода на дисплей. Как это сделать в Archestra, имея только наименование тэга в переменной типа String?

P.S. В среде InTouch приходилось делать подобное через Indirect Тэги используя поле .Name

Re: Получить значение тэга имея его имя.

СообщениеДобавлено: Ср сен 01, 2021 6:23 pm
dEVILoper
Добрый день!
В Custom Properties символа Archestra объявляете свойство, которое будет отвечать за текущее значение тега (например, MyTagValue).
Далее, получив нужное имя тега (для примера, пусть в строковую переменную MyTagName), пишете скрипт (по нажатию кнопки или как-то по-другому, в соответствии с Вашей реализацией интерфейса):
SetCustomPropertyValue("MyTagValue","InTouch:"+MyTagName,0).
В самом символе привязываете отображение значения свойства MyTagValue.

Re: Получить значение тэга имея его имя.

СообщениеДобавлено: Чт сен 02, 2021 3:11 pm
npp
Премного благодарен. Это работает :)

Но не совсем. После
Код: Выделить всё
   SetCustomPropertyValue("TagPen1","InTouch:" + HistPen1,0);


в моём скрипте следует (задание масштаба тренда)
Код: Выделить всё
   MaxPen1 = Round (TagPen1 + 0.2 * TagPen1,1);
   MinPen1 = Round (TagPen1 - 0.2 * TagPen1,1);


В результате в моих полях вывода пишется, что переменные MaxPen1 и MinPen1 не являются числом

notvalue.jpg
(29.53 КБ) Скачиваний: 0

Похоже, что SetCustomPropertyValue работает асинхронно и не успевает выполниться.
При этом само значение TagPen1 в поле "Текущ. знач." отображается успешно и динамически.

Повторный вызов скрипта отрабатывает нормально (видимо на предыдущих значениях).

В SMC логах какие-либо сообщения по этому поводу отсутствуют.

Re: Получить значение тэга имея его имя.

СообщениеДобавлено: Чт сен 02, 2021 6:49 pm
dEVILoper
Да, привязка к значениям выполняется не моментально.
В Вашем случае, как вариант, можно привязать свойство по действию и выставить какой-нибудь флаг (также объявленный в Custom Properties):
Код: Выделить всё
SetCustomPropertyValue("TagPen1","InTouch:" + HistPen1,0);
MyFlag = 1;

Далее в общем скрипте символа While Showing дописать остальную часть:
Код: Выделить всё
if MyFlag and IsGood(TagPen1) then
  MaxPen1 = Round (TagPen1 + 0.2 * TagPen1,1);
  MinPen1 = Round (TagPen1 - 0.2 * TagPen1,1);
  MyFlag = 0;
endif;

Re: Получить значение тэга имея его имя.

СообщениеДобавлено: Сб сен 04, 2021 1:05 pm
npp
С флагом и опросом IsGood тоже заработало. Спасибо )