Указатель на функцию?
Указатель на функцию?
Всем привет!
Собственно вопрос как? Если объявить указатель во вкладке Declare, то FLProg будет считать этот блок некорректным, если попытаться создать его как функцию - FLProg ругнется, что не тот формат и тоже не даст это сделать.... тупик?
Собственно вопрос как? Если объявить указатель во вкладке Declare, то FLProg будет считать этот блок некорректным, если попытаться создать его как функцию - FLProg ругнется, что не тот формат и тоже не даст это сделать.... тупик?
Указатель на функцию?
покажите что пытаетесь сделать
Указатель на функцию?
Собственно пытаюсь реализовать нумпад, который бы менял значение переменных в контроллере при вводе их на дисплее. Есть несколько экранов. Переходы между экранами сделаны в виде простеньких функций типа
Экранов энное количество. На экране №5, есть, например, параметр "температура" в качестве уставки, которую мы задаем с дисплея. То есть есть кнопочка "Температура" и текстовое поле со значением этой температуры. К кнопке "температура" привязана функция перехода, которая перекидывает нас на экран нумпада (и, забегая вперед, к которой хотелось бы привязать указатель), где мы вводим значение, затем нажимаем кнопку "Ввод". Кнопка "ввод", помимо прочего, должна вернуть нас на экран №5. Т.к. на экран нумпада мы переходим не только с экрана №5, но так же и с №6 и №7, то кнопка "ввод" должна понимать куда нас вернуть. Один из вариантов, как ей дать понять куда нас возвращать, это в функцию перехода добавить переменную page, в которую мы поместим номер страницы с которой переходим, а в функцию, привязанную к кнопке "ввод" вставить, например свич
который будем править, каждый раз при изменении количества страниц проекта. Согласитесь, бяка?
Поэтому было бы хорошо объявить указатель
поместить его в функцию кнопки "температура", которая перекидывает нас на нумпад.
и тогда уже в функцию кнопки "ввод", не надо будет втыкать неудобный свич, а достаточно будет указать
Так вот проблема в том, что в блоке CODE не получается объявить указатель. Как я и писал выше.
Добавлено (07.03.2017, 16:56)
---------------------------------------------
В общем пока что выход: добавить во вкладке Declare закомментированное объявление указателя, а после компиляции в IDE удалить комментарий. Напишу в новый функционал хотелку.
Код: Выделить всё
void page1()
{
page1.show();//-->команда дисплею
delay(100);
current_screen=1;//переменная с номером экрана
}
Код: Выделить всё
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 );
Добавлено (07.03.2017, 16:56)
---------------------------------------------
В общем пока что выход: добавить во вкладке Declare закомментированное объявление указателя, а после компиляции в IDE удалить комментарий. Напишу в новый функционал хотелку.
Последний раз редактировалось igee 07 мар 2017, 15:59, всего редактировалось 1 раз.
Указатель на функцию?
А с блоком меню встроенным не прще будет?
Указатель на функцию?
Я с ним особо не разбирался, если честно, но если я правильно понимаю, то он для строковых дисплеев. А у меня Nextion.
Указатель на функцию?
А зачем вы функции Nextion хотите передать контроллеру? Или я что-то не так понял? Если так, то у вас контроллер только на дисплей работать будет.
Указатель на функцию?
Эмм.. видимо что то не так. Функции Nextion я передаю c Ардуины на Nextion. pageNumpad.show(); - это библиотечная команда для отображения страницы, которую мы объявили в Declare: NexPage pageNumpad = NexPage (10,0,"pageNumpad")
Указатель на функцию?
Не понимаю зачем с ардуины говорить Nextion какую ему страницу открыть, если все это делается внутри Nextion, а в Ардуино отправляется только значение переменной, введенной с клавиатуры в Nextion.
Указатель на функцию?
В вашей схеме получается, что ардуина слейв. А мне нужно чтобы он был мастером. Ардуина говорит что делать - дисплей только делает.
Указатель на функцию?
Ардуино мастер, он опрашивает Nextion на вопрос содержания переменной и получает ответ, а вот изменения переменной лежит на самом Nextion. Просто любопытно какя острая необходимость использовать тощие ресурсы Ардуино, если это можно сделать средствами панели?
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
Указатель на функцию?
igee, всегда было и будет: HMI - мастер, Скада - мастер, контроллер - слейв. Потому как система отображения и управления запрашивает у слейва только те регистры, данные о которых сейчас отображаются, может посылать слейву команды записи уставок и т.д, слейв этого не может.
Если бы мастером был контроллер, то, при наличии тысячи регистров, получился бы полный тормоз. Изменение уставок и обновление информации длилось бы секундами или десятками секунд.
Если бы мастером был контроллер, то, при наличии тысячи регистров, получился бы полный тормоз. Изменение уставок и обновление информации длилось бы секундами или десятками секунд.
Указатель на функцию?
Может быть я путаю понятия мастер - слейв?) В связке ардуино - дисплей. Пример: на дисплее страница на которой отображается температура. Ардуина видит изменение температуры на датчике, и отправляет на дисплей команду изменить содержание текстового поля со значением температуры. В этом случае она действует же как мастер? Дисплей же не ведет при этом постоянный опрос значения переменной температуры. Другая ситуация, когда мы нажимаем кнопку на дисплее. Тут ардуина "слушает" последовательный порт и уже реагирует на команды, которые там появляются. Тут вроде как ардуина слейв. Где я ошибаюсь и как это классифицировать?
Указатель на функцию?
Я не большой знаток архитектуры, но мне кажется что при использовании стандартных блоков Nextion в FLProg Ардуино выступает мастером. Все блоки имеют входы Get или Send и только от ардуино зависит принять-отдать данные в панель, или нет.Boroda писал(а):igee, всегда было и будет: HMI - мастер, Скада - мастер, контроллер - слейв
По идее контроллер всегда должен быть мастером, так-как он делает основную работу, а HMI и Scada это всего лишь вспомогательные функции по установке параметров и отображению информации.
Хотя это наверно от ревльной реализации зависит.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
Указатель на функцию?
Олег, да, контроллер управляет оборудованием, но все отображатели у контроллера сами запрашиваю информацию, а не контроллер их опрашивает. Так же при изменении уставки на панели, панель отправляет контроллеру эту информацию. При включении питания, переменные в панели нулевые, она заполняет их опросив контроллер. Вообще панели оператора довольно трудно перевести в Слейв режим, а в большинстве случаев это вообще невозможно. Как обстоят дела с Некстион, не знаю, руками ее не щупал.
Кто сейчас на конференции
Сейчас этот форум просматривают: Слимпер и 1 гость