EasyBuilder - Скорая помощь новичкам

Работа с панелями оператора Weintek - подключение, программирование, совмещение с ПЛК

Модераторы: kiv, 8bit, VanMo

Re: EasyBuilder - Скорая помощь новичкам

Сообщение uni » 08 июн 2015, 08:20

Можно ли следить за состоянием окна при помощи одного триггера? Т.е. когда окно открывается бит устанавливается, а когда закрывается - сбрасывается. Или двумя только можно?

И ещё.Как можно реализовать строку с выпадающим меню для переключения между экранами? Чтобы при этом меню автоматически исчезало после переключения. Попроще.
Россия - навсегда!
http://git.io/vOZo0
uni
 
Сообщения: 57
Зарегистрирован: 14 май 2015, 14:39
Откуда: Екатеринбург

Re: EasyBuilder - Скорая помощь новичкам

Сообщение den_po » 08 июн 2015, 10:28

uni писал(а):Можно ли следить за состоянием окна при помощи одного триггера? Т.е. когда окно открывается бит устанавливается, а когда закрывается - сбрасывается. Или двумя только можно?

И ещё.Как можно реализовать строку с выпадающим меню для переключения между экранами? Чтобы при этом меню автоматически исчезало после переключения. Попроще.

Можно установить на окно битовые кнопки, которые меняют бит как вам нужно при открытии и закрытии окна.
В EBPro можно при открытии и закрытии окна вызывать макрос (выбирается в свойствах окна, если макросы существуют).

Про выпадающее меню непонятно, если оно автоматически исчезнет, то как до него потом добраться?
den_po
 
Сообщения: 436
Зарегистрирован: 04 фев 2013, 12:25

Re: EasyBuilder - Скорая помощь новичкам

Сообщение uni » 08 июн 2015, 12:20

Можно установить на окно битовые кнопки, которые меняют бит как вам нужно при открытии и закрытии окна.

Пока так и делаю в каждом окне.
Мне нужно, чтобы определённый макрос работал в цикле в определённом окне. Для этого нужно в параметрах макроса указывать бит условия. Чтобы получить такой бит приходится так делать - отдельно установка при открытии и при закрытии. Как-то это сложно, мне кажется. Целых два элемента только для того, чтобы исключить работу макроса в других окнах. Вот и думаю как бы упростить.

В EBPro можно при открытии и закрытии окна вызывать макрос (выбирается в свойствах окна, если макросы существуют).

У окна есть возможность запускать макрос в цикле, но там жёстко задано время в 500 мсек, что не всегда нужно.

Про выпадающее меню непонятно, если оно автоматически исчезнет, то как до него потом добраться?

Есть основное меню, из которого выпадает список подменю. У меня есть несколько экранов с архивами, которые в полоску с другими кнопками меню просто не влезают. Вот и сделал окошко с кнопками. Мне интересно, есть ли уже готовые примеры с реализацией обычного главного меню, как в Windows окнах. Сейчас мне приходится добавлять ещё одну кнопку "Закрыть", так как я не знаю более удобного способа закрыть, если ничего не выбрано. Остальные, которые я пробовал, не подошли.

http://img.radiokot.ru/files/4453/medium/o7k3z0aap.png
Россия - навсегда!
http://git.io/vOZo0
uni
 
Сообщения: 57
Зарегистрирован: 14 май 2015, 14:39
Откуда: Екатеринбург

Re: EasyBuilder - Скорая помощь новичкам

Сообщение den_po » 08 июн 2015, 12:39

uni писал(а):
Можно установить на окно битовые кнопки, которые меняют бит как вам нужно при открытии и закрытии окна.

Пока так и делаю в каждом окне.
Мне нужно, чтобы определённый макрос работал в цикле в определённом окне. Для этого нужно в параметрах макроса указывать бит условия. Чтобы получить такой бит приходится так делать - отдельно установка при открытии и при закрытии. Как-то это сложно, мне кажется. Целых два элемента только для того, чтобы исключить работу макроса в других окнах. Вот и думаю как бы упростить.

Так делать надо не в каждом окне, а только в том, где макрос крутится.
Два элемента - это просто. Если не нравится, можно в макросе проверять номер текущего окна (LW-9050).

uni писал(а):
Про выпадающее меню непонятно, если оно автоматически исчезнет, то как до него потом добраться?

Есть основное меню, из которого выпадает список подменю. У меня есть несколько экранов с архивами, которые в полоску с другими кнопками меню просто не влезают. Вот и сделал окошко с кнопками. Мне интересно, есть ли уже готовые примеры с реализацией обычного главного меню, как в Windows окнах. Сейчас мне приходится добавлять ещё одну кнопку "Закрыть", так как я не знаю более удобного способа закрыть, если ничего не выбрано. Остальные, которые я пробовал, не подошли.

http://img.radiokot.ru/files/4453/medium/o7k3z0aap.png

Можно попробовать добавить в 4 окно (common window) прозрачную кнопочку на весь экран, которая при нажатии закрывает меню, а активировать её, когда подменю раскрыты.
Штатное средство - кнопка быстрого запуска плюс окно 3 (fast selection). Выплывающее по нажатию этой кнопки меню этой же кнопкой и прячется.
den_po
 
Сообщения: 436
Зарегистрирован: 04 фев 2013, 12:25

Re: EasyBuilder - Скорая помощь новичкам

Сообщение uni » 08 июн 2015, 15:31

Спасибо, попробую.

Такой вопрос. Нет ли примеров компактной визуализации графических объектов и параметров на них? Или каких-то идей как можно ужать экран с 15'' до 10'' (с 1024 х 768 до 800 x 480). Нарисовал картинки и тут сказали, что панель у заказчика другая.
Россия - навсегда!
http://git.io/vOZo0
uni
 
Сообщения: 57
Зарегистрирован: 14 май 2015, 14:39
Откуда: Екатеринбург

Re: EasyBuilder - Скорая помощь новичкам

Сообщение den_po » 08 июн 2015, 16:05

uni писал(а):Спасибо, попробую.

Такой вопрос. Нет ли примеров компактной визуализации графических объектов и параметров на них? Или каких-то идей как можно ужать экран с 15'' до 10'' (с 1024 х 768 до 800 x 480). Нарисовал картинки и тут сказали, что панель у заказчика другая.

При изменении модели на модель с другим разрешением экрана EB предлагает отмасштабировать объекты. Но лучше, конечно, когда растровые изображения отображаются в своём размере.
den_po
 
Сообщения: 436
Зарегистрирован: 04 фев 2013, 12:25

Re: EasyBuilder - Скорая помощь новичкам

Сообщение uni » 10 июн 2015, 11:22

Есть основное меню, из которого выпадает список подменю. У меня есть несколько экранов с архивами, которые в полоску с другими кнопками меню просто не влезают. Вот и сделал окошко с кнопками. Мне интересно, есть ли уже готовые примеры с реализацией обычного главного меню, как в Windows окнах. Сейчас мне приходится добавлять ещё одну кнопку "Закрыть", так как я не знаю более удобного способа закрыть, если ничего не выбрано. Остальные, которые я пробовал, не подошли.

Придумал как реализовать выпадающие меню более менее нормальным способом. Это аналог обработчика сообщений окна в Windows.

Картинка: https://yadi.sk/i/j2ULHoUfhBNHU

Код: Выделить всё
// Назначение: Обработчик событий от окон.
// Автор: Мезенцев Вячеслав
// Дата: 10 июня 2015 г.
// Настройки: период выполнения 100 мсек.


unsigned short CurrentWindow

// Окна.
unsigned short WINDOW_REACTOR = 10
unsigned short WINDOW_CONTROL = 11
unsigned short WINDOW_PARAMETERS = 12
unsigned short WINDOW_ARCHIVE_1 = 13
unsigned short WINDOW_ARCHIVE_2 = 14
unsigned short WINDOW_ARCHIVE_3 = 15

// Меню выглядит так:

// РЕАКТОР (Функциональная клавиша)
// УПРАВЛЕНИЕ (Функциональная клавиша)
// ПАРАМЕТРЫ (Функциональная клавиша)
// АРХИВ (Установить бит, переключить, LB-550)
//   |
//   +- АРХИВ 1 (Установить бит, Установить (ON), LB-570) \
//   +- АРХИВ 2 (Установить бит, Установить (ON), LB-571)  } - окно "Выбор окна архива" (Direct window, НЕ монопольно LB-597)
//   +- АРХИВ 3 (Установить бит, Установить (ON), LB-572) /

// LW-500 - Триггер смены базового окна. Нужно добавить смену базового окна в список триггеров ПЛК.
// Галочку очистки значения поставить.


// Обработчик прочих элементов управления.
sub OtherEventHandler()

    bool tmp = false
   
    bool Archive1KeyPressed = false
    bool Archive2KeyPressed = false
    bool Archive3KeyPressed = false
   
    bool SelectArchiveWindowVisible = false
   
    GetData( SelectArchiveWindowVisible, "Local HMI", LB, 597, 1 )
   
    // Обработчик окна выбора архива.
    if SelectArchiveWindowVisible == true then
   
        //
        GetData( Archive1KeyPressed, "Local HMI", LB, 570, 1 )
        GetData( Archive2KeyPressed, "Local HMI", LB, 571, 1 )
        GetData( Archive3KeyPressed, "Local HMI", LB, 572, 1 )
       
        if Archive1KeyPressed == true then
       
            tmp = false
                       
            // Сбрасываем состояние кнопки.
            SetData( tmp, "Local HMI", LB, 570, 1 )
                       
            // Сбрасываем состояние кнопки выбора архива.
            SetData( tmp, "Local HMI", LB, 550, 1 )
           
            // Переключаем базовое окно.
            SetData( WINDOW_ARCHIVE_1, "Local HMI", LW, 500, 1 )
           
           
        else if Archive2KeyPressed == true then
       
            tmp = false

            // Сбрасываем состояние кнопки.
            SetData( tmp, "Local HMI", LB, 571, 1 )
           
            // Сбрасываем состояние кнопки выбора архива.
            SetData( tmp, "Local HMI", LB, 550, 1 )

            // Переключаем базовое окно.
            SetData( WINDOW_ARCHIVE_2, "Local HMI", LW, 500, 1 )
           
           
        else if Archive3KeyPressed == true then
       
            tmp = false

            // Сбрасываем состояние кнопки.
            SetData( tmp, "Local HMI", LB, 572, 1 )

            // Сбрасываем состояние кнопки выбора архива.
            SetData( tmp, "Local HMI", LB, 550, 1 )
           
            // Переключаем базовое окно.
            SetData( WINDOW_ARCHIVE_3, "Local HMI", LW, 500, 1 )

       
        end if
   
    end if
   
end sub


// Обработчик окна "Реактор".
sub ReactorWindowEventHandler()

end sub


// Обработчик окна "Управление".
sub ControlWindowEventHandler()

end sub


// Обработчик окна "Параметры".
sub ParametersWindowEventHandler()

end sub


// Обработчик окна "Архив 1".
sub Archive1WindowEventHandler()

end sub


// Обработчик окна "Архив 2".
sub Archive2WindowEventHandler()

end sub


// Обработчик окна "Архив 3".
sub Archive3WindowEventHandler()

end sub


macro_command main()

    bool ArchiveKeyPressed = false
   
    // Считываем номер текущего базового окна.
    GetData( CurrentWindow, "Local HMI", LW, 9050, 1 )
   
    // Главное меню (одинаковое для всех окон).
   
    // Копируем состояние в триггер окна "Выбор окна архива".
    GetData( ArchiveKeyPressed, "Local HMI", LB, 550, 1 )
   
    SetData( ArchiveKeyPressed, "Local HMI", LB, 597, 1 )
       
   
    if CurrentWindow == WINDOW_REACTOR then
   
        ReactorWindowEventHandler()
   
    else if CurrentWindow == WINDOW_CONTROL then
   
        ControlWindowEventHandler()
   
    else if CurrentWindow == WINDOW_PARAMETERS then
   
        ParametersWindowEventHandler()
   
    else if CurrentWindow == WINDOW_ARCHIVE_1 then
   
        Archive1WindowEventHandler()
   
    else if CurrentWindow == WINDOW_ARCHIVE_2 then
   
        Archive2WindowEventHandler()
   
    else if CurrentWindow == WINDOW_ARCHIVE_3 then
   
        Archive3WindowEventHandler()
       
    end if
   
    // Прочие элементы управления.
    OtherEventHandler()

end macro_command
Россия - навсегда!
http://git.io/vOZo0
uni
 
Сообщения: 57
Зарегистрирован: 14 май 2015, 14:39
Откуда: Екатеринбург

Re: EasyBuilder - Скорая помощь новичкам

Сообщение uni » 11 июн 2015, 11:37

Округление количества бит при чтении состояния дискретных входов - это нормально? (панель mt8100iE запрашивает количество 2 байтовыми блоками)
Полечить никак нельзя?
Россия - навсегда!
http://git.io/vOZo0
uni
 
Сообщения: 57
Зарегистрирован: 14 май 2015, 14:39
Откуда: Екатеринбург

Re: EasyBuilder - Скорая помощь новичкам

Сообщение den_po » 11 июн 2015, 13:19

uni писал(а):Округление количества бит при чтении состояния дискретных входов - это нормально? (панель mt8100iE запрашивает количество 2 байтовыми блоками)
Полечить никак нельзя?

Это нормально. Если вам действительно нужно читать отдельные биты, можете использовать типы 0x_bit и 1x_bit (0x_single_bit, 1x_single_bit). В некоторых драйверах этих типов нет (в Modbus RTU Zero-Based например).

Единственная, на мой взгляд, разумная причина для использования этих типов -- когда контроллер выдаёт ошибку, если "округлённые" биты вылезают за разрешённый диапазон адресов.
den_po
 
Сообщения: 436
Зарегистрирован: 04 фев 2013, 12:25

Re: EasyBuilder - Скорая помощь новичкам

Сообщение Lucky_brain » 22 июн 2015, 09:04

Добрый день! Возник вопрос, возможно ли реализовать на панели timeout для admina? То есть после авторизации если администратор ничего не предпринял, то через некоторое время должен произойти logout.
Lucky_brain
 
Сообщения: 8
Зарегистрирован: 25 май 2015, 10:31
Откуда: Уфа

Пред.След.

Вернуться в Weintek

Кто сейчас на конференции

Сейчас этот форум просматривают: pkl58, TulaevSN и гости: 18