- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Возможна ли непрямая адресация в VBS ?
Модератор: Глоб.модераторы
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Всем привет !
Нужно написать 30 одинаковых скриптов для 30 групп тегов. Каждая группа тегов состоит из 3-х уникальных внутренних тегов панели и относится к соответствующему тегу ПЛК, который будет для каждого соответствующего скрипта «входным». В скрипте необходимо производить простые арифметические и сравнительные действия.
Можно сделать 30 разных скриптов с прямой адресацией.
Но можно ли сделать только один VBS-скрипт, в котором можно было бы приме-нить непрямую адресацию и «цикл», чтобы минимизировать размер кода. Думаю, что тогда эти 30 групп тегов можно было бы по очереди вызывать и вставлять в скрипт как «входы» / «выходы».
Если не трудно, покажите, пожалуйста, как будет выглядеть конструкция такого «универсального» VBS-скрипта, или где можно найти пример.
Заранее благодарен.
Нужно написать 30 одинаковых скриптов для 30 групп тегов. Каждая группа тегов состоит из 3-х уникальных внутренних тегов панели и относится к соответствующему тегу ПЛК, который будет для каждого соответствующего скрипта «входным». В скрипте необходимо производить простые арифметические и сравнительные действия.
Можно сделать 30 разных скриптов с прямой адресацией.
Но можно ли сделать только один VBS-скрипт, в котором можно было бы приме-нить непрямую адресацию и «цикл», чтобы минимизировать размер кода. Думаю, что тогда эти 30 групп тегов можно было бы по очереди вызывать и вставлять в скрипт как «входы» / «выходы».
Если не трудно, покажите, пожалуйста, как будет выглядеть конструкция такого «универсального» VBS-скрипта, или где можно найти пример.
Заранее благодарен.
-
- здесь недавно
- Сообщения: 82
- Зарегистрирован: 07 янв 2017, 09:12
- Имя: Андрей
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Возможна ли непрямая адресация в VBS ?
Если я правильно понял, то:
Код: Выделить всё
Dim index
For index = 1 To 30
SmartTags("Tag_" & index) = 0 'тут ваша логика
Next
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Спасибо за ответ, но пока не совсем понял.
Вот такие тэги :
"VAR_1_IN" ; "VAR_1.1" ; "VAR_1.2" ; "VAR_1_OUT"
"VAR_2_IN" ; "VAR_2.1" ; "VAR_2.2" ; "VAR_2_OUT"
"VAR_3_IN" ; "VAR_3.1" ; "VAR_3.2" ; "VAR_3_OUT"
………………………………………………………………
"VAR_30_IN" ; "VAR_30.1" ; "VAR_30.2" ; "VAR_30_OUT"
Тэги "VAR_**.1" ; "VAR_**.2" как входные и выходные, тоже участвуют в скрипте.
Вот такие тэги :
"VAR_1_IN" ; "VAR_1.1" ; "VAR_1.2" ; "VAR_1_OUT"
"VAR_2_IN" ; "VAR_2.1" ; "VAR_2.2" ; "VAR_2_OUT"
"VAR_3_IN" ; "VAR_3.1" ; "VAR_3.2" ; "VAR_3_OUT"
………………………………………………………………
"VAR_30_IN" ; "VAR_30.1" ; "VAR_30.2" ; "VAR_30_OUT"
Тэги "VAR_**.1" ; "VAR_**.2" как входные и выходные, тоже участвуют в скрипте.
-
- авторитет
- Сообщения: 800
- Зарегистрирован: 12 авг 2008, 11:05
- Имя: Патрушев Олег Валерьевич
- Страна: Россия
- город/регион: г. Н.Новгород
- Благодарил (а): 110 раз
- Поблагодарили: 158 раз
Возможна ли непрямая адресация в VBS ?
А просто написать функцию(скрипт) с параметрами и передать туда эти теги в качестве параметров не подойдет? Ну и 30 раз вызвать.
Была у меня похожая проблема, так и выкрутился. Очень компактно и красиво получилось.
Была у меня похожая проблема, так и выкрутился. Очень компактно и красиво получилось.
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Возможна ли непрямая адресация в VBS ?
POV, приветствую, а не трудно маленький пример показать? Вы говорите по сути про функцию, которая (само понятие функция) есть почти во всех высокоуровневых языках программирования. На VBS таких задач пока не решал, и хотелось бы подсмотреть ) А потом, если что, в поиске найти ;)
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Если поконкретнее, то оставил 3 тэга и написал, что должны делать скрипты.
Тут ниже 30 раз значение тэга "VAR_*_IN" переписывается в тэг "VAR_*_OUT", только если тэг VAR_*.1 = «1»
Temp1 = SmartTags("VAR_1_IN")
If SmartTags("VAR_1.1") = 1
then SmartTags("VAR_1_OUT") = Temp1
Temp2 = SmartTags("VAR_2_IN")
If SmartTags("VAR_2.1") = 1
then SmartTags("VAR_2_OUT") = Temp2
…………………………….……….
…………………………….……….
Temp30 = SmartTags("VAR_30_IN")
If SmartTags("VAR_30.1") = 1
then SmartTags("VAR_30_OUT") = Temp30
Теперь как сделать один универсальный скрипт со счётчиком циклов и подстановкой тэгов "VAR_*_IN" ; "VAR_*_OUT" ; «VAR_*.1» ?
Тут ниже 30 раз значение тэга "VAR_*_IN" переписывается в тэг "VAR_*_OUT", только если тэг VAR_*.1 = «1»
Temp1 = SmartTags("VAR_1_IN")
If SmartTags("VAR_1.1") = 1
then SmartTags("VAR_1_OUT") = Temp1
Temp2 = SmartTags("VAR_2_IN")
If SmartTags("VAR_2.1") = 1
then SmartTags("VAR_2_OUT") = Temp2
…………………………….……….
…………………………….……….
Temp30 = SmartTags("VAR_30_IN")
If SmartTags("VAR_30.1") = 1
then SmartTags("VAR_30_OUT") = Temp30
Теперь как сделать один универсальный скрипт со счётчиком циклов и подстановкой тэгов "VAR_*_IN" ; "VAR_*_OUT" ; «VAR_*.1» ?
-
- здесь недавно
- Сообщения: 82
- Зарегистрирован: 07 янв 2017, 09:12
- Имя: Андрей
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
Возможна ли непрямая адресация в VBS ?
Код: Выделить всё
Function Test(ByVal id)
Dim num1, num2, num3, result
num1 = SmartTags("VAR_"& id & "_IN")
num2 = SmartTags("VAR_"& id & ".1")
num3 = SmartTags("VAR_"& id & ".2")
result = num1 * num2 + num3
SmartTags("VAR_"& id & "_OUT") = result
Test = result
End Function
Upd. Не увидел Вашего сообщения, но сути не меняет
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Если я правильно понял, то сначала создаётся подпрограмма "Test", которая потом будет вызываться те же 30 раз, но только аргументы будут в ней указаны через "id" ?
Если так, то по размеру кода получится, наверное, то же самое.
А "цикл" тут можно будет вставить ?
С ним бы как раз всё и получилось максимально компактно.
Если так, то по размеру кода получится, наверное, то же самое.
А "цикл" тут можно будет вставить ?
С ним бы как раз всё и получилось максимально компактно.
-
- эксперт
- Сообщения: 1735
- Зарегистрирован: 06 янв 2016, 19:45
- Имя: Петров В.Л.
- Страна: Россия
- город/регион: Красноярск
- Благодарил (а): 78 раз
- Поблагодарили: 235 раз
Возможна ли непрямая адресация в VBS ?
По размеру кода будет не то же самое. Будет размер кода функции + 30 вызовов этой функции. Собственно это одна из причин (не основная правда), почему функции используют - экономия кода
-
- здесь недавно
- Сообщения: 40
- Зарегистрирован: 26 фев 2018, 19:41
- Имя: Евгений
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
Возможна ли непрямая адресация в VBS ?
Код: Выделить всё
Dim i, name1, name2, name3
For i = 1 To 30
name1="Var_" & i & "_in"
name2="Var_" & i & "_out"
name3="Var_" & i
If HMIRuntime.Tags(name2).Read=1 Then
HMIRuntime.Tags(name3).Write HMIRuntime.Tags(name1).Read
End If
Next
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Возможна ли непрямая адресация в VBS ?
Если синтаксис позволяет так написать, то можно и так задачу решить. Но все таки применение ф-ции - признак хорошего стиля ;)
Позволю себе скорректировать код Dron_Tat
Код: Выделить всё
Function Test(ByVal id)
Dim num1, num2, num3
num1 = SmartTags("VAR_"& id & "_IN")
num2 = SmartTags("VAR_"& id & ".1")
num3 = SmartTags("VAR_"& id & ".2")
Test = num1 * num2 + num3
End Function
Dim i
For i = 1 To 30
SmartTags("VAR_"& i & "_OUT") = Test (i)
Next
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
А тут
Ведь при создании функции "Test" использовался параметр id .
при вызове функции "Test" (и соответственно, во всех других местах) точно должен стоять параметр (i) вместо id ?
Ведь при создании функции "Test" использовался параметр id .
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Возможна ли непрямая адресация в VBS ?
Мне стоило переменную цикла обозвать х )
Смотрите - есть два типа передачи параметра в ф-цию (и не только в нее) - по значению и по ссылке. Тут мы передаем по значению, т.е. в начале запуска куска кода "Test" происходит id = i. При этом id у нас локальна, и процессор помнит ее ровно столько времени, сколько идёт выполнение этой ф-ции. После чего наглухо забывает о ней. До последующего вызова.
Второй момент - i то у нас никак не меняется. Работаем с id. Это в отличии от передачи параметра по ссылке. Но уже не буду о нем в рамках этой задачи )
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Т.е. всё равно, что будет вместо "i" ?
Хоть "a", хоть "b", хоть "f", хоть *craziest_pinguim" - всё равно функция "Test" воспримет это и вставит вместо своего "id" при вычислениях ?
А может быть у такой функции, например, не один индексный параметр, а 2, 3 ?
Тогда как она разберётся куда какой подставлять ?
Хоть "a", хоть "b", хоть "f", хоть *craziest_pinguim" - всё равно функция "Test" воспримет это и вставит вместо своего "id" при вычислениях ?
А может быть у такой функции, например, не один индексный параметр, а 2, 3 ?
Тогда как она разберётся куда какой подставлять ?
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Возможна ли непрямая адресация в VBS ?
Ну началось )
Правила создания имен переменных очень одинаковы во всех языках. Главное чтоб не с цифры начиналось и не было спецсимволов и пробелов. Ну и нельзя использовать служебные слова. For, например не получится. For1 - пожалуйста.
Но я понимаю суть вопроса - да, мы передаем значение, а под каким оно будет именем - без разницы.
Вот поэтому я и просил в этой ветке каких то примеров ) Тут уже вариации, в зависимости от языка. VBS примечателен тем, что он пофигически относится к типу переменных. Определяет тип, при первом присвоении переменной значения.
Но чаще всего передача делается по тому порядку следования, в котором переменные перечислены в определении ф-ции:
Код: Выделить всё
Function Test (First, Second)
.....
y = Test (x1, x2)
Код: Выделить всё
Function Test (First:integer, Second:real):boolean;
......
var x1:real;
x2:integer;
y:boolean;
y := Test (x1,x2);
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Нет уж, благодарствуйте. Иначе весь мой мозык повзрывается. :-) А он мне ещё пригодится.
Ну Ок. Спасибо за экскурс в пофигистический VBS. Не думал, что он такой :)
Буду уже че-нить начинать творить.
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Возможна ли непрямая адресация в VBS ?
Да нормальный язык, для своих задач. Плохо только с него, наверное, начинать свой путь в программировании. Этот пофигизм с типами данных, наверняка потом сыграет злую шутку при знакомстве с тем же Си.
Да и тот же SCL для ПЛК - ну очень ревностен в этом отношении ;)
Отправлено спустя 2 минуты 35 секунд:
А ответ у "задачки" такой. Если внимательно посмотреть, то в функции мы объявили, что у первого параметра тип integer (целое), а у второго - real (вещественное, с запятой если проще). А вызываем ф-цию как? Да наоборот )
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Создал 2 скрипта :
Первый – это функция Function MainOUT (ByVal id) , где и происходят все вычисления
Второй сделан на Sub , внутри которого вызывается функция MainOUT с ин-дексом "i" и оператором "For i = 1 to <нужное мне количество раз> NEXT".
Всё работает НО есть проблема.
Внутри Function MainOUT я создал условие при котором скрипт может не доработать до конца и выходит по команде Exit
If FilterEnbl = 0 Then Exit Function
Т.е. если тут битовый тэг FilterEnbl = 0, то скрипту нет смысла работать до конца и грузить процессор панели.
У меня, к примеру, 30 датчиков. Один сломан и я для него кнопкой на панели установил FilterEnbl = 0 . И тогда скрипты для всех остальных датчиков перестают работать.
При этом на панель выдаётся системное сообщение «Ошибка. Переполнение в сценарии «Filters» в строке 12» .
Второй скрипт, который на Sub
Sub Filters()
Dim i
For i= 1 To 30
SmartTags("Main_" & i & "_OUT") =MainOUT (i)
Next
Можно ли что-то сделать, чтобы это локальное условие FilterEnbl = 0 для одного датчика не влияло на работу всех скриптов ?
Или придётся убирать его из функции Function MainOUT ?
И тогда каждому «локальному» скрипту всегда придётся отрабатывать до кон«Wi-Fi».
SmartTags("Main_" & i & "_OUT") =MainOUT (i) - это как раз и есть та 12-я строка
Первый – это функция Function MainOUT (ByVal id) , где и происходят все вычисления
Второй сделан на Sub , внутри которого вызывается функция MainOUT с ин-дексом "i" и оператором "For i = 1 to <нужное мне количество раз> NEXT".
Всё работает НО есть проблема.
Внутри Function MainOUT я создал условие при котором скрипт может не доработать до конца и выходит по команде Exit
If FilterEnbl = 0 Then Exit Function
Т.е. если тут битовый тэг FilterEnbl = 0, то скрипту нет смысла работать до конца и грузить процессор панели.
У меня, к примеру, 30 датчиков. Один сломан и я для него кнопкой на панели установил FilterEnbl = 0 . И тогда скрипты для всех остальных датчиков перестают работать.
При этом на панель выдаётся системное сообщение «Ошибка. Переполнение в сценарии «Filters» в строке 12» .
Второй скрипт, который на Sub
Sub Filters()
Dim i
For i= 1 To 30
SmartTags("Main_" & i & "_OUT") =MainOUT (i)
Next
Можно ли что-то сделать, чтобы это локальное условие FilterEnbl = 0 для одного датчика не влияло на работу всех скриптов ?
Или придётся убирать его из функции Function MainOUT ?
И тогда каждому «локальному» скрипту всегда придётся отрабатывать до кон«Wi-Fi».
SmartTags("Main_" & i & "_OUT") =MainOUT (i) - это как раз и есть та 12-я строка
Последний раз редактировалось alex3110 23 авг 2020, 14:46, всего редактировалось 1 раз.
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Возможна ли непрямая адресация в VBS ?
alex3110, немного путано. Код в студию, только оформите его тэгами "код". Чтобы не просто по тексту он был, а был выделен. Конкретно - что там до 12 строки, включая ее
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Вот код функции MainOUT :
Там, где <bla...bla...bla> - всё правильно.
Например, я для датчика 1 выставил бит FilterEnbl = 0
Тогда, после запуска скрипта "Filters"
он обратится к функции MainOUT, где ей в индекс "i" подставится "1" -ца. Т.е. функция MainOUT вызовется с id = 1, т.е. начнёт обрабатывать свой код для датчика №1.
Дойдя до условия FilterEnbl = 0 (т.к. я его выставил в "0")
If FilterEnbl = 0 Then Exit Function
произойдёт выход из функции MainOUT (1).
Я то ожидал, что выйдет и дальше пойдёт, к датчику 2, т.е. подставит MainOUT (2). Но вероятно этого не происходит, т.к. выдаётся сообщение об ошибке и глобальный скрипт не выполняется.
А 12-я строка - это в скрипте "Filters" (который сделан на Sub)
SmartTags("Main_" & i & "_OUT") =MainOUT (i)
12-ая, т.к. штук 7-8 строк уже занято под служебную инфу от SIEMENS
Код: Выделить всё
Function MainOUT(ByVal id)
Dim FilterEnbl, LogIN, DeadBand, LogOUTprev, LogOUT, HLDB, LLDB
FilterEnbl = SmartTags("Filter_" & id & "_Enbl")
If FilterEnbl = 0 Then Exit Function
LogIN = SmartTags("Log" & id & "IN")
<bla...bla...bla>
End Function
Там, где <bla...bla...bla> - всё правильно.
Например, я для датчика 1 выставил бит FilterEnbl = 0
Тогда, после запуска скрипта "Filters"
Код: Выделить всё
Sub Filters()
Dim i
For i= 1 To 30
SmartTags("Main_" & i & "_OUT") =MainOUT (i)
Next
Дойдя до условия FilterEnbl = 0 (т.к. я его выставил в "0")
If FilterEnbl = 0 Then Exit Function
произойдёт выход из функции MainOUT (1).
Я то ожидал, что выйдет и дальше пойдёт, к датчику 2, т.е. подставит MainOUT (2). Но вероятно этого не происходит, т.к. выдаётся сообщение об ошибке и глобальный скрипт не выполняется.
А 12-я строка - это в скрипте "Filters" (который сделан на Sub)
SmartTags("Main_" & i & "_OUT") =MainOUT (i)
12-ая, т.к. штук 7-8 строк уже занято под служебную инфу от SIEMENS
-
- не первый раз у нас
- Сообщения: 325
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 118 раз
Возможна ли непрямая адресация в VBS ?
Может так?
Код: Выделить всё
Function MainOUT(ByVal id)
Dim FilterEnbl, LogIN, DeadBand, LogOUTprev, LogOUT, HLDB, LLDB
LogIN = SmartTags("Log" & id & "IN")
<bla...bla...bla>
End Function
Код: Выделить всё
Sub Filters()
Dim i
For i= 1 To 30
FilterEnbl = SmartTags("Filter_" & i & "_Enbl")
If FilterEnbl <> 0 Then
SmartTags("Main_" & i & "_OUT") = MainOUT (i)
End if
Next
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Возможна ли непрямая адресация в VBS ?
Всё еще непонятно. MainOUT глобальный скрипт, а Filters? Что произойдет при Exit - я не знаю, вернется ли управление снова к локальному скрипту, или просто будет выход... Однако явной ошибки я тут не вижу.
А функция точно вызывается? Если все enbl будут <>0 то отрабатывает?
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Ну "глобальный" - эт я наверное, погорячился
Всё заработало, как и предсказывал уважаемый SMax
Только потом снова нарвался на очередную "засаду".
Для "компактизации", на экране сделал поле "I\O field" в которое, в зависимости от выбранного датчика, вывожу соответствующие значения мультиплексированного тэга MainOUT. Отдельные Main_**_OUT я вычисляю с помощью VBS-скрипта.
Т.е., если я выбрал датчик 5, то в это "I\O field" должно выводиться значение обычного тэга Main_5_OUT .
Но в это «мультиплексированное» "I\O field" это значение Main_5_OUT выводится только тогда, когда на том же экране дополнительно будет присутствовать обычное (не «мультиплексированное») "I\O field" тэга Main_5_OUT .
То же самое и в отношении всех остальных тэгов Main_1_OUT… Main_4_OUT, Main_6_OUT… Main_30_OUT.
Получается, что работать будет только так ?
Т.е. на экране, например, в другом слое, надо делать эти дополнительные поля обычных (не «мультиплексированных») тэгов ?
Ну и потом делать их все невидимыми, чтоб глаз не «мозолили».
Всё заработало, как и предсказывал уважаемый SMax
Только потом снова нарвался на очередную "засаду".
Для "компактизации", на экране сделал поле "I\O field" в которое, в зависимости от выбранного датчика, вывожу соответствующие значения мультиплексированного тэга MainOUT. Отдельные Main_**_OUT я вычисляю с помощью VBS-скрипта.
Т.е., если я выбрал датчик 5, то в это "I\O field" должно выводиться значение обычного тэга Main_5_OUT .
Но в это «мультиплексированное» "I\O field" это значение Main_5_OUT выводится только тогда, когда на том же экране дополнительно будет присутствовать обычное (не «мультиплексированное») "I\O field" тэга Main_5_OUT .
То же самое и в отношении всех остальных тэгов Main_1_OUT… Main_4_OUT, Main_6_OUT… Main_30_OUT.
Получается, что работать будет только так ?
Т.е. на экране, например, в другом слое, надо делать эти дополнительные поля обычных (не «мультиплексированных») тэгов ?
Ну и потом делать их все невидимыми, чтоб глаз не «мозолили».
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Возможна ли непрямая адресация в VBS ?
Оно и в той версии должно было работать ) Но коллега, по своему, прав. Зачем копать, если можно "неудобное" ветвление вовсе из ф-ции вынести.
Вы же уже пошли раз, путем "ну работает же". Решение не хуже других ) Я не пойму, что за мультиплексированный тег. Если нужно, что бы в одном и том же I/O отображались разные теги - велкам в скрипты опять же.