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

Как в VBS присвоить переменной значение TextList?

Ответить

Автор темы
Dron_Tat
здесь недавно
здесь недавно
Сообщения: 82
Зарегистрирован: 07 янв 2017, 09:12
Имя: Андрей
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Как в VBS присвоить переменной значение TextList?

Сообщение Dron_Tat »

Пытаюсь в скрипте присвоить переменной значение из TextList, но никак не могу понять как сделать. В просторах интернета нашел что можно сделать через LookupText, но не работает. Кто сталкивался как делать?

Код: Выделить всё

LookupText strOut,index, HMIRuntime.Language,"Text_list_1"
strOut - результат, index - значение int, Text_list_1 - имя списка.

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 320
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 6 раз
Поблагодарили: 113 раз

Как в VBS присвоить переменной значение TextList?

Сообщение SMax »

Я бы создал внутренний тег и привязал его к Text List - Output Value, и в скриптах опрашивал этот тег.

Автор темы
Dron_Tat
здесь недавно
здесь недавно
Сообщения: 82
Зарегистрирован: 07 янв 2017, 09:12
Имя: Андрей
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Как в VBS присвоить переменной значение TextList?

Сообщение Dron_Tat »

У меня просто таких тегов около 40, к каждой создавать I\O поле. Или я что то не понял?

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 320
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 6 раз
Поблагодарили: 113 раз

Как в VBS присвоить переменной значение TextList?

Сообщение SMax »

Вам что нужно сделать то? А то может и без скриптов обойтись можно. В общем задача какая?

Автор темы
Dron_Tat
здесь недавно
здесь недавно
Сообщения: 82
Зарегистрирован: 07 янв 2017, 09:12
Имя: Андрей
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Как в VBS присвоить переменной значение TextList?

Сообщение Dron_Tat »

Хочу сделать некое логирование запуска маршрута, у меня их около 2 тыс. Одновременно могут до 18 маршрутов. То есть лог при запуске, остановке, дозапуске маршрута. Само логирование не проблема, но проблема в том что контроллер в скаду передает только значение INT, а все храниться в "Text list". В "HMI alarms" я не смог обратиться к "Text list", поэтому решил через скрипт собрать все единый String и отправить его в Alarm.

Код: Выделить всё

For index = 1 To 18	
	Marsh_array(index) = SmartTags("Номера_маршрутов[" & index & "]") & " " & SmartTags("Начало_маршрутов[" & index & "]") & " - " & SmartTags("Конец_маршрутов[" & index & "]") & " " & SmartTags("Статусы_маршрутов[" & index & "]")
Next
Вот это мне выводить только значения INT, как сделать что бы было словами?

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 320
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 6 раз
Поблагодарили: 113 раз

Как в VBS присвоить переменной значение TextList?

Сообщение SMax »

Считать текстовое значение Text List действительно проблематично, я пробовал в классической WinCC 7.4, и также не добился результата от LookupText.
Могу предложить два варианта:
Вариант 1.
Скриптом считать свойство Text List –> Assignments, там будет строка вида: 0,Нет;1,Маршрут 1;2,Маршрут 2;3,Маршрут 3;
индекс от текста отделен запятой, а группы точкой с запятой, далее разобрать ее скриптом для сопоставления индекса и текста.

Вариант 2.
Добавить внутренний строковый тег для каждого Text List и в событии Object Change добавить С-скрипт с вручную прописанными текстовыми значениями Text List:

Код: Выделить всё

int Index;
LPSTR Value;
Index = GetPropWord(lpszPictureName, lpszObjectName, "OutputValue");	
switch (Index)
	{
	case 1 : Value = "Маршрут 1"; break;
	case 2 : Value = "Маршрут 2"; break;
	case 3 : Value = "Маршрут 3"; break;
	case 4 : Value = "Маршрут 4"; break;
	case 5 : Value = "Маршрут 5"; break;
	default : Value = "Нет"; break;
	}
SetTagChar("Value1", Value);
После этого в своем скрипте можете использовать два тега - Index (число) и Value (текст)

Пример для WinCC 7.4
001.png
002.png
pdl.zip
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Автор темы
Dron_Tat
здесь недавно
здесь недавно
Сообщения: 82
Зарегистрирован: 07 янв 2017, 09:12
Имя: Андрей
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Как в VBS присвоить переменной значение TextList?

Сообщение Dron_Tat »

Первый вариант для меня более удобен, так как при дополнении списка, ничего не надо подправлять. Только я не совсем знаю как на VB script достучаться до Text List, то что вы предложили?

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 320
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 6 раз
Поблагодарили: 113 раз

Как в VBS присвоить переменной значение TextList?

Сообщение SMax »

Dron_Tat писал(а): 09 авг 2020, 10:06 как на VB script достучаться до Text List
Прошу прощения за долгий ответ, не заходил на сайт.
Например так:

Код: Выделить всё

Dim Var, TList_Name
Set TList_Name = ScreenItems("Название Вашего Text List")
Var = TList_Name.Assignments

stesl
эксперт
эксперт
Сообщения: 1002
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 87 раз
Поблагодарили: 126 раз

Как в VBS присвоить переменной значение TextList?

Сообщение stesl »

SMax, попутный вопросик, а switch/case в VBS, как и в С - нужно после каждого варианта break делать? Мотаю на ус нюансы )
После default - break наверно уже лишний?...

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 320
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 6 раз
Поблагодарили: 113 раз

Как в VBS присвоить переменной значение TextList?

Сообщение SMax »

Я с бейсиком не очень дружу, поищите в инете там информации предостаточно.

Я вот подумал у Вас же наверное Global Script, из него обращаться к объекту нужно иначе, через HMIRuntime, с указанием экрана или пути к экрану (у меня в PCS например выглядит как: @SCREEN.@WIN12:@1001.@TOP09:NewPdl1) почитайте здесь, в конце есть примеры:
VBScripts.pdf
Кроме того, это обращение возможно только к активному экрану, т.е. открытому в данный момент. Если у Вас Text List-ы на разных экранах, то Вы не сможете обратиться к тем которые скрыты.

Во втором варианте тоже есть нюанс, после запуска Runtime в текстовых тегах ничего не будет, значения там будут появляться только после изменения соответствующего Text List-а, поэтому нужен еще скрипт который после запуска Runtaim однократно записал бы значения во все текстовые теги, соответствующие целым значениям Text List-ов, на данный момент времени.

Для чего Вы используете Text List-ы? Вы с помощью их выбираете значения или они служат только как индикаторы отображающие текст в соответствии с целым значением тега из ПЛК? Если второе, то их с успехом можно заменить на обычные Static Text с применением Dynamic Dialog для сопоставления текста целому значению тега и с них без проблем скриптом можно считывать текст. Но опять-же только с активного в данный момент экрана.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Meduzjam
здесь недавно
здесь недавно
Сообщения: 2
Зарегистрирован: 15 апр 2014, 16:39
Имя: Василий

Как в VBS присвоить переменной значение TextList?

Сообщение Meduzjam »

Dron_Tat писал(а): 22 июл 2020, 12:08 Пытаюсь в скрипте присвоить переменной значение из TextList, но никак не могу понять как сделать. В просторах интернета нашел что можно сделать через LookupText, но не работает. Кто сталкивался как делать?

Код: Выделить всё

LookupText strOut,index, HMIRuntime.Language,"Text_list_1"
strOut - результат, index - значение int, Text_list_1 - имя списка.
StrOut и Index должны быть именно тэгами а не переменными VBS, по этой причине у вас не работал вызов этой функции. Создайте интернал тэги и вызов делайте вот так:

Код: Выделить всё

LookupText "strTag","indexTag", HMIRuntime.Language,"Text_list_1"
Ответить

Вернуться в «WinCC»