FLProg
Вход на сайт
Логин:
Пароль:
Поиск
...
Статистика
Четверг, 24.08.2017, 13:45
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: support, Сергей 
Форум » Основной » Спросить у знатоков » Указатель на функцию? (Как объявить его в пользовательском блоке CODE?)
Указатель на функцию?
igee Дата: Вторник, 07.03.2017, 13:55 | Сообщение # 1
Сержант
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 0
Статус: Offline
Всем привет!
Собственно вопрос как? Если объявить указатель во вкладке Declare, то FLProg будет считать этот блок некорректным, если попытаться создать его как функцию - FLProg ругнется, что не тот формат и тоже не даст это сделать.... тупик?
 
slavas Дата: Вторник, 07.03.2017, 14:49 | Сообщение # 2
Генерал-майор
Группа: Проверенные
Сообщений: 547
Награды: 12
Репутация: 11
Статус: Offline
покажите что пытаетесь сделать
 
igee Дата: Вторник, 07.03.2017, 16:56 | Сообщение # 3
Сержант
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 0
Статус: Offline
Собственно пытаюсь реализовать нумпад, который бы менял значение переменных в контроллере при вводе их на дисплее. Есть несколько экранов. Переходы между экранами сделаны в виде простеньких функций типа
Код
void page1()
{
    page1.show();//-->команда дисплею
    delay(100);
    current_screen=1;//переменная с номером экрана
}

Экранов энное количество. На экране №5, есть, например, параметр "температура" в качестве уставки, которую мы задаем с дисплея. То есть есть кнопочка "Температура" и текстовое поле со значением этой температуры. К кнопке "температура" привязана функция перехода, которая перекидывает нас на экран нумпада (и, забегая вперед, к которой хотелось бы привязать указатель), где мы вводим значение, затем нажимаем кнопку "Ввод". Кнопка "ввод", помимо прочего, должна вернуть нас на экран №5. Т.к. на экран нумпада мы переходим не только с экрана №5, но так же и с №6 и №7, то кнопка "ввод" должна понимать куда нас вернуть. Один из вариантов, как ей дать понять куда нас возвращать, это в функцию перехода добавить переменную page, в которую мы поместим номер страницы с которой переходим, а в функцию, привязанную к кнопке "ввод"  вставить, например свич

Код
switch(page)
    case 1:
       page1();
    break;
    case 2:
        page2();
    break;
    ...
    case n:
        pagen();
    break;
который будем править, каждый раз при изменении количества страниц проекта. Согласитесь, бяка?
Поэтому  было бы хорошо объявить указатель

Код
void (*pageOpen)(void)

поместить  его в функцию кнопки "температура", которая перекидывает нас на нумпад.
Код
void setTemp()
{
    pageNumpad.show();//-->команда дисплею
    current_screen=10;//переменная с номером экрана
    pageOpen = page5;// указатель на функцию, которая откроет страницу 5 с температурой
}
и тогда уже в функцию кнопки "ввод", не надо будет втыкать неудобный свич, а достаточно будет указать

Код
(*pageOpen );
Так вот проблема в том, что в блоке CODE не получается объявить указатель. Как я и писал выше.

Добавлено (07.03.2017, 16:56)
---------------------------------------------
В общем пока что выход: добавить во вкладке Declare закомментированное объявление указателя, а после компиляции в IDE удалить комментарий. Напишу в новый функционал хотелку.

Сообщение отредактировал igee - Вторник, 07.03.2017, 15:59
 
slavas Дата: Вторник, 07.03.2017, 17:16 | Сообщение # 4
Генерал-майор
Группа: Проверенные
Сообщений: 547
Награды: 12
Репутация: 11
Статус: Offline
А с блоком меню встроенным не прще будет?
 
igee Дата: Вторник, 07.03.2017, 19:41 | Сообщение # 5
Сержант
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 0
Статус: Offline
Я с ним особо не разбирался, если честно, но если я правильно понимаю, то он для строковых дисплеев. А у меня Nextion.
 
Олег Дата: Среда, 08.03.2017, 01:23 | Сообщение # 6
Гуру
Группа: Проверенные
Сообщений: 983
Награды: 24
Репутация: 16
Статус: Offline
А зачем вы функции Nextion хотите передать контроллеру? Или я что-то не так понял? Если так, то у вас контроллер только на дисплей работать будет.

Схемы на ноутбуки
 
igee Дата: Среда, 08.03.2017, 14:39 | Сообщение # 7
Сержант
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 0
Статус: Offline
Эмм.. видимо что то не так.  Функции Nextion я передаю c Ардуины на Nextion.  pageNumpad.show(); - это библиотечная команда для отображения страницы, которую мы объявили в Declare: NexPage pageNumpad = NexPage (10,0,"pageNumpad")
 
Олег Дата: Среда, 08.03.2017, 14:48 | Сообщение # 8
Гуру
Группа: Проверенные
Сообщений: 983
Награды: 24
Репутация: 16
Статус: Offline
Не понимаю зачем с ардуины говорить Nextion какую ему страницу открыть, если все это делается внутри Nextion, а в Ардуино отправляется только значение переменной, введенной с клавиатуры в Nextion.

Схемы на ноутбуки
 
igee Дата: Среда, 08.03.2017, 15:06 | Сообщение # 9
Сержант
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 0
Статус: Offline
В вашей схеме получается, что ардуина слейв. А мне нужно чтобы он был мастером. Ардуина говорит что делать - дисплей только делает.
 
Олег Дата: Среда, 08.03.2017, 15:44 | Сообщение # 10
Гуру
Группа: Проверенные
Сообщений: 983
Награды: 24
Репутация: 16
Статус: Offline
Ардуино мастер, он опрашивает Nextion на вопрос содержания переменной и получает ответ, а вот изменения переменной лежит на самом Nextion. Просто любопытно какя острая необходимость использовать тощие ресурсы Ардуино, если это можно сделать средствами панели?

Схемы на ноутбуки
 
Boroda Дата: Среда, 08.03.2017, 15:49 | Сообщение # 11
Генерал-лейтенант
Группа: Проверенные
Сообщений: 793
Награды: 36
Репутация: 36
Статус: Offline
igee, всегда было и будет: HMI - мастер, Скада - мастер, контроллер - слейв. Потому как система отображения и управления запрашивает у слейва только те регистры, данные о которых сейчас отображаются, может посылать слейву команды записи уставок и т.д, слейв этого не может.

Если бы мастером был контроллер, то, при наличии тысячи регистров, получился бы полный тормоз. Изменение уставок и обновление информации длилось бы секундами или десятками секунд.
 
igee Дата: Среда, 08.03.2017, 17:28 | Сообщение # 12
Сержант
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 0
Статус: Offline
Может быть я путаю понятия мастер - слейв?) В связке ардуино - дисплей. Пример: на дисплее страница на которой отображается температура. Ардуина видит изменение температуры на датчике, и отправляет на дисплей команду изменить содержание текстового поля со значением температуры. В этом случае она действует же как мастер? Дисплей же не ведет при этом постоянный опрос значения переменной температуры. Другая ситуация, когда мы нажимаем кнопку на дисплее. Тут ардуина "слушает" последовательный порт и уже реагирует на команды, которые там появляются. Тут вроде как ардуина слейв.  Где я ошибаюсь и как это классифицировать?
 
Олег Дата: Среда, 08.03.2017, 18:18 | Сообщение # 13
Гуру
Группа: Проверенные
Сообщений: 983
Награды: 24
Репутация: 16
Статус: Offline
Цитата Boroda ()
igee, всегда было и будет: HMI - мастер, Скада - мастер, контроллер - слейв
 Я не большой знаток архитектуры, но мне кажется что при использовании стандартных блоков Nextion в FLProg Ардуино выступает мастером. Все блоки имеют входы Get или Send  и только от ардуино зависит принять-отдать данные в панель, или нет. 
 По идее контроллер всегда должен быть мастером, так-как он делает основную работу, а HMI и Scada это всего лишь вспомогательные функции по установке параметров и отображению информации.
 Хотя это наверно от ревльной реализации зависит.


Схемы на ноутбуки
 
Boroda Дата: Среда, 08.03.2017, 22:41 | Сообщение # 14
Генерал-лейтенант
Группа: Проверенные
Сообщений: 793
Награды: 36
Репутация: 36
Статус: Offline
Олег, да, контроллер управляет оборудованием, но все отображатели у контроллера сами запрашиваю информацию, а не контроллер их опрашивает. Так же при изменении уставки на панели, панель отправляет контроллеру эту информацию. При включении питания, переменные в панели нулевые, она заполняет их опросив контроллер. Вообще панели оператора довольно трудно перевести в Слейв режим, а в большинстве случаев это вообще невозможно. Как обстоят дела с Некстион, не знаю, руками ее не щупал.
 
Форум » Основной » Спросить у знатоков » Указатель на функцию? (Как объявить его в пользовательском блоке CODE?)
Страница 1 из 11
Поиск:

FLProg © 2017
Яндекс.Метрика