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

Weintek. Переключение экранов

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

Ответить
Аватара пользователя

Автор темы
megavolt86
эксперт
эксперт
Сообщения: 1172
Зарегистрирован: 14 ноя 2013, 20:35
Имя: Анатолий Сергеевич
Страна: Россия
город/регион: Башкортостан
Благодарил (а): 13 раз
Поблагодарили: 65 раз

Weintek. Переключение экранов

Сообщение megavolt86 »

Здравствуйте, коллеги!
Прилетело задание запрограммировать панель управления МТ8101IE. Проект небольшой, вроде как простой, но как обычно дурная голова не дает покоя всему остальному...
Ну о главном - панель должна отражать текущие параметры абсолютно одинаковых компрессоров (6 штук больших и 2 штуки поменьше) у каждого компрессора около 15 параметров. И чтобы облегчить разработку одинаковых экранов решил нарисовать две мнемосхемы (окна) и все привязки в них осуществить к внутренним переменным, а по нажатию кнопки происходило присваивание внешних тэгов внутренним.
Разобравшись с концепцией решил провести тренировку и создал фон с кнопками и три экрана (id):
10 - обзорный экран
11 - компрессор побольше
12 - компрессор поменьше
[+] Написал макрос

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

macro_command main()
unsigned int screen_cmd, screen_id, m_screen_id//тэг вызываемого окна

GetData(screen_cmd, "Local HMI", "Screen_control", 1)//получение числа вызываемого окна
GetData(m_screen_id, "Local HMI", LW, 9050, 1)//определение текущего окна

select case screen_cmd
case 1
	screen_id=11//окно 11
break

case 2
	screen_id=12//окно 12
break

case else
	screen_id=10//окно 10
break

end select

if m_screen_id <> screen_id then
	SetData(screen_id, "Local HMI", "Screen_id", 1)
end if

end macro_command
период выполнения 10*100ms
Вроде работать должно, но нет...работает только один раз, потом происходит сброс и открыто только окно 10.
все испробовал, но положительного результата не достиг :ges_no:
Господа, помогите побороть мою неприятность
:ext_secret:
Аватара пользователя

Никита
почётный участник форума
почётный участник форума
Сообщения: 3899
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Страна: РФ
город/регион: Мурманск
Благодарил (а): 18 раз
Поблагодарили: 187 раз

Weintek. Переключение экранов

Сообщение Никита »

В порядке бреда: у макроса в свойствах не забыли указать вместо однократного (по умолчанию) циклическое выполнение с периодом? Это "стандартная" фича у EasyBuilder, не раз на ней обжигались. Режим указывается в одном месте, а период в другом и взаимоблокировки нет.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
Аватара пользователя

Автор темы
megavolt86
эксперт
эксперт
Сообщения: 1172
Зарегистрирован: 14 ноя 2013, 20:35
Имя: Анатолий Сергеевич
Страна: Россия
город/регион: Башкортостан
Благодарил (а): 13 раз
Поблагодарили: 65 раз

Weintek. Переключение экранов

Сообщение megavolt86 »

макрос был разработан для примера и отладки, ибо кнопки отображения параметров большого компрессора будут подключать параметры 6 компрессоров, но отображение будет вестись на одном окне, то есть кнопки 1-6 должны включать окно №11, а кнопки 7-8 - окно №12
Никита писал(а): 12 апр 2018, 14:28 вместо однократного (по умолчанию) циклическое выполнение с периодом
Конечно указал...
может что-то где то еще необходимо включить... разобрался :ges_clap2: дело было во внутренних тэгах панели:
использовал LW0 для выбора экрана и LW1 для задания экрана и видимо происходило наложение ...изменил LW1 на LW2 и переключение стало работать как надо.
Путаница была из-за структуры памяти панели.
:ext_secret:
Ответить

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