- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Доступ к единому массиву из любых макро
Модераторы: Глоб.модераторы, специалисты Weintek
-
- освоился
- Сообщения: 222
- Зарегистрирован: 03 фев 2011, 06:51
- Имя: Андерс
- город/регион: Екатеринбург
- Благодарил (а): 59 раз
- Поблагодарили: 5 раз
Доступ к единому массиву из любых макро
Возникла необходимость создания массива и доступа к нему из любых макро.
В Address Tag Library создать подобное, видимо, невозможно.
Как быть тогда подскажите, пожалуйста, если применение такого "глобального" массива, мне кажется, наиболее эффективным.
В Address Tag Library создать подобное, видимо, невозможно.
Как быть тогда подскажите, пожалуйста, если применение такого "глобального" массива, мне кажется, наиболее эффективным.
-
- здесь недавно
- Сообщения: 98
- Зарегистрирован: 01 апр 2022, 11:08
- Имя: Артем
- город/регион: Благовещенск
- Благодарил (а): 1 раз
- Поблагодарили: 25 раз
Доступ к единому массиву из любых макро
Не совсем понятно что вы хотите и чем вас не устраивают ячейки LW (RW), которые по сути и есть глобальный массив, доступный из любого места панели.
-
- освоился
- Сообщения: 222
- Зарегистрирован: 03 фев 2011, 06:51
- Имя: Андерс
- город/регион: Екатеринбург
- Благодарил (а): 59 раз
- Поблагодарили: 5 раз
Доступ к единому массиву из любых макро
Хорошо, согласен в целом, но как тогда "обозначить" в редакторе Макро, что например ячейки LW-0...LW-99 являются массивом
данных с именем State (тип данных short) и, например, написать такой код (в коде д.б. квадратные скобки с i - это понятно, главное сейчас как обозначить массив с вышеперечисленными ячейками):
bool Alm[99]
short State[99], i=0
for i=0 to 99
if alm then
state =2
else
state =0
end if
next i
-
- эксперт
- Сообщения: 1146
- Зарегистрирован: 25 июл 2008, 10:06
- Имя: Леонид
- Страна: РФ
- Благодарил (а): 49 раз
- Поблагодарили: 134 раза
Доступ к единому массиву из любых макро
В начале макроса читать из регистров в массив, в конце макроса записывать.
И надеяться, что другие макросы, использующие эти регистры, не выполняются одновременно с этим
И надеяться, что другие макросы, использующие эти регистры, не выполняются одновременно с этим
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.
-
- освоился
- Сообщения: 222
- Зарегистрирован: 03 фев 2011, 06:51
- Имя: Андерс
- город/регион: Екатеринбург
- Благодарил (а): 59 раз
- Поблагодарили: 5 раз
Доступ к единому массиву из любых макро
мда, таких неудобств в работе с массивами я еще не встречал. Спасибо за совет!
-
- эксперт
- Сообщения: 1146
- Зарегистрирован: 25 июл 2008, 10:06
- Имя: Леонид
- Страна: РФ
- Благодарил (а): 49 раз
- Поблагодарили: 134 раза
Доступ к единому массиву из любых макро
Может и другие способы есть, я не специалист по WEINTEK
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.
-
- эксперт
- Сообщения: 1737
- Зарегистрирован: 06 янв 2016, 19:45
- Имя: Петров В.Л.
- Страна: Россия
- город/регион: Красноярск
- Благодарил (а): 78 раз
- Поблагодарили: 235 раз
Доступ к единому массиву из любых макро
Weintek - по своей сути - простое низкоранговое изделие. Соответсввенно набор его инструментальных средств весьма ограничен. По сути его основное назначение сводится:
1) Взять данные от ПЛК и отобразить их в экранной форме.
2) Взять данные с экранной формы и передать их в ПЛК
Причем, работа с экранными элементами основана на установление связи с ТЕГами, внешними (ПЛК) или внутренними HMI.
С этой точки зрения все логично. Скажем для 1-й задачи, если у Вас не получилось напрямую связать экранные элементы с внешними ТЕГами сразу, выбераете функцией GetData в массив данные из ТЕГов ПЛК в массив переменных макроса, выполняете простенькую обратку, и пишете результат в ТЕГи HMI, которые связаны с экранными элементами функцией SertData.
Конечно - это базовая схема, есть еще и нюансы всякие.
Но, если Вам почему - то понадобилась сложная обработка данных - то Вы просто выбрали не тот инструмент. Берите, например MasterScада, там более богатый инструментарий, можете данные в SQL сервер засунуть, экранная часть вообще может отсутствовать.
Т.е. если вам нужно возить картошку - не используйте для этого велосипед.
А в своей нише Weintek - вполне приемлемый и удобный инструмент. Позволяет быстренько своять простенький интервейс для управления ПЛК.
1) Взять данные от ПЛК и отобразить их в экранной форме.
2) Взять данные с экранной формы и передать их в ПЛК
Причем, работа с экранными элементами основана на установление связи с ТЕГами, внешними (ПЛК) или внутренними HMI.
С этой точки зрения все логично. Скажем для 1-й задачи, если у Вас не получилось напрямую связать экранные элементы с внешними ТЕГами сразу, выбераете функцией GetData в массив данные из ТЕГов ПЛК в массив переменных макроса, выполняете простенькую обратку, и пишете результат в ТЕГи HMI, которые связаны с экранными элементами функцией SertData.
Конечно - это базовая схема, есть еще и нюансы всякие.
Но, если Вам почему - то понадобилась сложная обработка данных - то Вы просто выбрали не тот инструмент. Берите, например MasterScада, там более богатый инструментарий, можете данные в SQL сервер засунуть, экранная часть вообще может отсутствовать.
Т.е. если вам нужно возить картошку - не используйте для этого велосипед.
А в своей нише Weintek - вполне приемлемый и удобный инструмент. Позволяет быстренько своять простенький интервейс для управления ПЛК.
-
- здесь недавно
- Сообщения: 98
- Зарегистрирован: 01 апр 2022, 11:08
- Имя: Артем
- город/регион: Благовещенск
- Благодарил (а): 1 раз
- Поблагодарили: 25 раз
Доступ к единому массиву из любых макро
Вы так пишите, как будто вас заставляют вручную все 99 значений поштучно перенести из LW во внутренние переменные макроса, а потом обратно.
Это всё занимает ровно 2 дополнительные команды: команда на чтение в начале макроса и команда на запись в конце макроса.
-
- здесь недавно
- Сообщения: 98
- Зарегистрирован: 01 апр 2022, 11:08
- Имя: Артем
- город/регион: Благовещенск
- Благодарил (а): 1 раз
- Поблагодарили: 25 раз
Доступ к единому массиву из любых макро
В вашем случае это будет выглядеть так:Curr93 писал(а): ↑22 дек 2022, 13:11 Хорошо, согласен в целом, но как тогда "обозначить" в редакторе Макро, что например ячейки LW-0...LW-99 являются массивом
данных с именем State (тип данных short) и, например, написать такой код (в коде д.б. квадратные скобки с i - это понятно, главное сейчас как обозначить массив с вышеперечисленными ячейками):
Код: Выделить всё
bool Alm[99]
short State[99], i=0
GetData(State[0], "Local HMI", LW, 0, 99)
for i=0 to 99
if alm [i] then
state [i]=2
else
state [i]=0
end if
next i
SetData(State[0], "Local HMI", LW, 0, 99)
Ну а если уж быть совсем точным, то для вашей постановки задачи даже не обязательно читать данные в начале макроса, потому что их исходное состояние не играет никакой роли, достаточно оставить только запись в конце.