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

Вопросы, не попадающие в другие разделы.

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

Сообщение npp » Сб авг 28, 2021 1:27 pm

Добрый день!

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

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

P.S. В среде InTouch приходилось делать подобное через Indirect Тэги используя поле .Name
npp
 
Сообщения: 27
Зарегистрирован: Пт июн 08, 2018 1:27 pm

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

Сообщение dEVILoper » Ср сен 01, 2021 6:23 pm

Добрый день!
В Custom Properties символа Archestra объявляете свойство, которое будет отвечать за текущее значение тега (например, MyTagValue).
Далее, получив нужное имя тега (для примера, пусть в строковую переменную MyTagName), пишете скрипт (по нажатию кнопки или как-то по-другому, в соответствии с Вашей реализацией интерфейса):
SetCustomPropertyValue("MyTagValue","InTouch:"+MyTagName,0).
В самом символе привязываете отображение значения свойства MyTagValue.
dEVILoper
 
Сообщения: 50
Зарегистрирован: Пт май 07, 2010 7:06 am
Откуда: Russia

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

Сообщение npp » Чт сен 02, 2021 3:11 pm

Премного благодарен. Это работает :)

Но не совсем. После
Код: Выделить всё
   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 логах какие-либо сообщения по этому поводу отсутствуют.
npp
 
Сообщения: 27
Зарегистрирован: Пт июн 08, 2018 1:27 pm

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

Сообщение dEVILoper » Чт сен 02, 2021 6:49 pm

Да, привязка к значениям выполняется не моментально.
В Вашем случае, как вариант, можно привязать свойство по действию и выставить какой-нибудь флаг (также объявленный в 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;
dEVILoper
 
Сообщения: 50
Зарегистрирован: Пт май 07, 2010 7:06 am
Откуда: Russia

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

Сообщение npp » Сб сен 04, 2021 1:05 pm

С флагом и опросом IsGood тоже заработало. Спасибо )
npp
 
Сообщения: 27
Зарегистрирован: Пт июн 08, 2018 1:27 pm


Вернуться в Другое

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

cron