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

Доступ к единому массиву из любых макро

Модератор: специалисты Weintek

Ответить

Автор темы
Curr93
освоился
освоился
Сообщения: 217
Зарегистрирован: 03 фев 2011, 06:51
Имя: Андерс
город/регион: Екатеринбург
Благодарил (а): 58 раз
Поблагодарили: 5 раз

Доступ к единому массиву из любых макро

Сообщение Curr93 »

Возникла необходимость создания массива и доступа к нему из любых макро.
В Address Tag Library создать подобное, видимо, невозможно.
Как быть тогда подскажите, пожалуйста, если применение такого "глобального" массива, мне кажется, наиболее эффективным.

SBeaRM
здесь недавно
здесь недавно
Сообщения: 61
Зарегистрирован: 01 апр 2022, 11:08
Имя: Артем
город/регион: Благовещенск
Поблагодарили: 14 раз

Доступ к единому массиву из любых макро

Сообщение SBeaRM »

Не совсем понятно что вы хотите и чем вас не устраивают ячейки LW (RW), которые по сути и есть глобальный массив, доступный из любого места панели.

Автор темы
Curr93
освоился
освоился
Сообщения: 217
Зарегистрирован: 03 фев 2011, 06:51
Имя: Андерс
город/регион: Екатеринбург
Благодарил (а): 58 раз
Поблагодарили: 5 раз

Доступ к единому массиву из любых макро

Сообщение Curr93 »

SBeaRM писал(а): 22 дек 2022, 10:37 ячейки LW (RW), которые по сути и есть глобальный массив
Хорошо, согласен в целом, но как тогда "обозначить" в редакторе Макро, что например ячейки 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

leon78
эксперт
эксперт
Сообщения: 1024
Зарегистрирован: 25 июл 2008, 10:06
Имя: Леонид
Страна: РФ
Благодарил (а): 27 раз
Поблагодарили: 104 раза

Доступ к единому массиву из любых макро

Сообщение leon78 »

В начале макроса читать из регистров в массив, в конце макроса записывать.
И надеяться, что другие макросы, использующие эти регистры, не выполняются одновременно с этим :-P
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.

Автор темы
Curr93
освоился
освоился
Сообщения: 217
Зарегистрирован: 03 фев 2011, 06:51
Имя: Андерс
город/регион: Екатеринбург
Благодарил (а): 58 раз
Поблагодарили: 5 раз

Доступ к единому массиву из любых макро

Сообщение Curr93 »

leon78 писал(а): 22 дек 2022, 13:51 В начале макроса читать из регистров в массив, в конце макроса записывать.
:o мда, таких неудобств в работе с массивами я еще не встречал. Спасибо за совет!

leon78
эксперт
эксперт
Сообщения: 1024
Зарегистрирован: 25 июл 2008, 10:06
Имя: Леонид
Страна: РФ
Благодарил (а): 27 раз
Поблагодарили: 104 раза

Доступ к единому массиву из любых макро

Сообщение leon78 »

Может и другие способы есть, я не специалист по WEINTEK
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1602
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 69 раз
Поблагодарили: 185 раз

Доступ к единому массиву из любых макро

Сообщение petr2off »

Weintek - по своей сути - простое низкоранговое изделие. Соответсввенно набор его инструментальных средств весьма ограничен. По сути его основное назначение сводится:
1) Взять данные от ПЛК и отобразить их в экранной форме.
2) Взять данные с экранной формы и передать их в ПЛК
Причем, работа с экранными элементами основана на установление связи с ТЕГами, внешними (ПЛК) или внутренними HMI.
С этой точки зрения все логично. Скажем для 1-й задачи, если у Вас не получилось напрямую связать экранные элементы с внешними ТЕГами сразу, выбераете функцией GetData в массив данные из ТЕГов ПЛК в массив переменных макроса, выполняете простенькую обратку, и пишете результат в ТЕГи HMI, которые связаны с экранными элементами функцией SertData.
Конечно - это базовая схема, есть еще и нюансы всякие.
Но, если Вам почему - то понадобилась сложная обработка данных - то Вы просто выбрали не тот инструмент. Берите, например MasterScада, там более богатый инструментарий, можете данные в SQL сервер засунуть, экранная часть вообще может отсутствовать.
Т.е. если вам нужно возить картошку - не используйте для этого велосипед.
А в своей нише Weintek - вполне приемлемый и удобный инструмент. Позволяет быстренько своять простенький интервейс для управления ПЛК.

SBeaRM
здесь недавно
здесь недавно
Сообщения: 61
Зарегистрирован: 01 апр 2022, 11:08
Имя: Артем
город/регион: Благовещенск
Поблагодарили: 14 раз

Доступ к единому массиву из любых макро

Сообщение SBeaRM »

Curr93 писал(а): 22 дек 2022, 14:51 :o мда, таких неудобств в работе с массивами я еще не встречал. Спасибо за совет!
Вы так пишите, как будто вас заставляют вручную все 99 значений поштучно перенести из LW во внутренние переменные макроса, а потом обратно.
Это всё занимает ровно 2 дополнительные команды: команда на чтение в начале макроса и команда на запись в конце макроса.

SBeaRM
здесь недавно
здесь недавно
Сообщения: 61
Зарегистрирован: 01 апр 2022, 11:08
Имя: Артем
город/регион: Благовещенск
Поблагодарили: 14 раз

Доступ к единому массиву из любых макро

Сообщение SBeaRM »

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)
Как видите ни чего неудобного тут нет.
Ну а если уж быть совсем точным, то для вашей постановки задачи даже не обязательно читать данные в начале макроса, потому что их исходное состояние не играет никакой роли, достаточно оставить только запись в конце.
Ответить

Вернуться в «WEINTEK (операторские панели)»