![](https://habrastorage.org/webt/oy/ca/ew/oycaewu5gt1nhfczrh2cmffzbcq.jpeg)
В этом уроке мы рассмотрим использование пользовательских системных переменных для связи web интерфейса настройки и схемы проекта. Так же попробуем настроить синхронизацию системных часов контроллера с серверами точного времени.
Данный урок создан для версии 3.1.4, которая сейчас находится в предрелизовом тестировании. Скачать её можно здесь. Более подробно о проекте FLProg можно узнать из блога компании на хабре, сайта проекта и форума. Кроме того на канале ArduinoProm можно посмотреть огромное множество видео уроков.
В качестве основы будем использовать проект, созданный на прошлом уроке.
Для начала создадим в три системных пользовательских параметра, в которых будет хранится текущее системное время контролера, часовой пояс, и адрес сервера точного времени, с которым будем синхронизироваться. Для этого находим ветку «Добавить параметр» в дереве проекта в узле “Пользовательские параметры”.
![](https://habrastorage.org/webt/ly/x5/nt/lyx5ntbovumhnei8so2minrob54.png)
Откроется окно диалога добавления нового системного параметра. Заполним его.
![](https://habrastorage.org/webt/80/jw/jr/80jwjrlmkkztgrzt0mshwl5-vp8.png)
В поле “Имя” введём имя параметра. Выберем тип параметра – “String”. Значение этого параметра будет динамически изменяться в процессе работы, поэтому отключим сохранение значение параметра в EEPROM. Поэтому же не задаем значение по умолчанию. Максимальную длину строки оставим 20 (вывод будет в виде 01:01:01 01-01-2018 то есть 19 символов).
Таким же образом добавим второй параметр
![](https://habrastorage.org/webt/am/h8/0c/amh80c9qpt1y5r9pipq-piiefli.png)
Только оставим сохранение в EEPROM, что бы контроллер запоминал введённый нами сервер, и зададим сервер по умолчанию.
И наконец, создадим третий параметр, значение часового пояса, для корректного отображения времени.
![](https://habrastorage.org/webt/73/ue/nw/73uenw99ca7saku05vzp3ezbmvc.png)
Тип параметра Integer, Обязательно сохранять в EEPROM, значение по умолчанию, на Ваш выбор (у меня это 4 часа).
В результате мы получили три пользовательских параметра
![](https://habrastorage.org/webt/lz/0k/3n/lz0k3nb1x-dlyh5s-99nfdmorcu.png)
Переходим к схеме прошивки.
В библиотеке функциональных блоков находим блок “Получение времени с NTP сервера” и претаскиваем его на рабочую область схемы
![](https://habrastorage.org/webt/gm/vg/nj/gmvgnj5gj9bf1yi7wbeou8o1m5c.png)
Двойной клик по этому блоку открывает редактор параметров блока.
![](https://habrastorage.org/webt/pg/u5/fr/pgu5frxmuzknqwmy9kg19pxq2py.png)
Рассмотрим настройки поподробнее.
NTP сервер — адрес сервера с которого будет браться точное время. Можно задать как константу. Можно выбрать из списка стандартных. Я все проверял – работают. Для выбора нажмите кнопку “Стандартные сервера”.
![](https://habrastorage.org/webt/al/ha/ys/alhaysghnxmdqcavlgr76ez5jte.png)
Но поскольку мы хотим “по взрослому” задавать адрес сервера из web интерфейса ставим галочку в чек бокс “Вход”
Период запроса до получения первого ответа – периодичность, с которой контроллер будет “стучаться” на сервер пока не получит время в первый раз. Оставляем константой значение раз в 30 секунд. Возможно так же установить вход, тогда на него необходимо будет подавать значение в миллисекундах.
Период запроса после получения первого ответа — как часто контроллер будет уточнять время у сервера. Оставляем по умолчанию, раз в полчаса. Так же можно задавать через вход, в миллисекундах.
Часовой пояс – Поскольку сервер отдаёт время по Гринвичу, этим параметром задаем смещение часового пояса в часах. Мы решили задавать этот параметр через web интерфейс, поэтому ставим галочку в чек бокс “Вход”
Выход “Год”, Выход “Месяц”, Выход “День”, Выход “Час”, Выход “Минута”, Выход “Секунда” – в данном уроке они нам не нужны, поэтому галочки не устанавливаем.
Выход “Unix Time” – этот выход нам не нужен, галочку не ставим (если честно я пока не придумал User Case для него. Но на всякий случай сделал, вдруг, кому то пригодится).
Итого у нас получилась такая настройка блока
![](https://habrastorage.org/webt/uv/2v/r5/uv2vr5ydtv3ydsqnhmg7j0cak8a.png)
Соответственно изменился и блок на схеме прошивки
![](https://habrastorage.org/webt/r8/93/fh/r893fhyrnb9dhachn96t_lzvvoy.png)
Найдем в библиотеке блок “Чтение системного параметра” и перетаскиваем его на схему.
![](https://habrastorage.org/webt/rz/xk/ol/rzxkolpex43huthy5djzgzdzf0k.png)
Двойной клик по этому блоку, и начинаем настраивать его параметры.
Сначала нажимаем кнопку выбора системного параметра.
![](https://habrastorage.org/webt/bu/0m/rn/bu0mrnqa5sy8ve5jrin0vwtpcos.png)
Открывается окно выбора системного параметра. Выбираем параметр “Сервер точного времени”
![](https://habrastorage.org/webt/cn/gr/qu/cngrqu7jxusawjc1ffxqix-rzxm.png)
На этом настройка блока закончена.
Располагаем удобно блоки и соединяем выход блока “Чтение системного параметра” со входом “Server” блока “Получение времени с NTP сервера”
![](https://habrastorage.org/webt/nu/mj/m1/numjm1ryhg5wjv4b0nonhv0q__4.png)
Перетаскиваем на схему ещё один блок “Чтение системного параметра” и настраиваем его на чтение параметра “Часовой пояс”.
![](https://habrastorage.org/webt/uz/ec/cx/uzeccxkp6w3jsztvq24mfzh_izc.png)
Соединяем выход этого блока со входом “TimeZone” блока “Получение времени с NTP сервера”
![](https://habrastorage.org/webt/a5/ac/-o/a5ac-ou4d6owjk62ywaftowyfu8.png)
Добавляем на схему новую плату. Для этого нажимаем кнопку “Добавить плату”
![](https://habrastorage.org/webt/r0/9y/br/r09ybryrhgdualvx6bkntejmdvg.png)
Первую плату сворачиваем, она нам больше не понадобится. Для этого кликаем по стрелочке в заголовке первой платы.
![](https://habrastorage.org/webt/tx/j1/zm/txj1zmktcnq0ovkic-nrohy-yxu.png)
Вытаскиваем на схему на вторую плату блок “Получение данных с часов точного времени”
![](https://habrastorage.org/webt/gv/1i/cf/gv1icfwvtsakil2ky8pkah_9q6g.png)
Двойным кликом по нему вызываем диалог настройки блока. Нажав кнопку “New” вызываем диалог выбора часов и выбираем “Системные часы контроллера”.
![](https://habrastorage.org/webt/ph/yz/q-/phyzq-b8kbsdqbsmkqzx2tfxbpq.png)
![](https://habrastorage.org/webt/kj/zp/wb/kjzpwbyipn3vf73pxqnmmaffkhu.png)
Затем ставим галочку “Выход “Часы””
![](https://habrastorage.org/webt/h0/pm/ad/h0pmad5q_1rsr0qkvrstl9xc_7m.png)
И заканчиваем редактирование блока.
Затем копируем этот блок ещё пять раз, переставляя в настройках каждого из них галочку выхода в последовательности Минута – Секунда – День — Месяц – Год.
![](https://habrastorage.org/webt/ge/3q/dz/ge3qdze0jw-pftr_anh7dhpxwuo.png)
Теперь вытаскиваем на схему из библиотеки блок “Конвертация строк”.
![](https://habrastorage.org/webt/ew/nt/qi/ewntqie0dpqaoqbrpoqrwvwlngs.png)
И в его настройках выбираем тип конвертации “Время”
![](https://habrastorage.org/webt/qa/rs/3h/qars3hdfliocyi6qw7zrz-kriam.png)
Копируем блок ещё пять раз, и собираем схему
![](https://habrastorage.org/webt/wd/cn/q7/wdcnq7vqhjffyx1q96koyadtjw0.png)
Переносим на схему из библиотеки блок “Сложение строк”
![](https://habrastorage.org/webt/bv/tt/xo/bvttxo_fw3ziqfc5syr4pbrgm3u.png)
В настройках блока задаём 11 входов.
![](https://habrastorage.org/webt/4h/bc/30/4hbc30jrwltqt1fodggv0seue7i.png)
И соединяем блоки согласно схеме
![](https://habrastorage.org/webt/ir/z2/zg/irz2zgwken0iq8ehm_90w1kzv0y.png)
На свободных входах блока задаём константы
Вход 2 — “:”
Вход 4 — “:”
Вход 6 – Пробел
Вход 8 — “-”
Вход 10 – “-”
Для задания константы производим клик правой кнопкой мыши на свободном входе и из выпавшего меню выбираем “Вставить константу”
![](https://habrastorage.org/webt/e3/oy/a7/e3oya7bbojdilo70nuf1n15hzk8.png)
Откроется окно ввода константы, где в поле “Значение по умолчанию” вводится необходимая константа
![](https://habrastorage.org/webt/ol/ws/98/olws981oen_wpbcrfappmdagpgk.png)
Теперь вытаскиваем из библиотеки на схему блок “Запись системного параметра”
![](https://habrastorage.org/webt/yl/3m/zt/yl3mzt3hjhtqyw__ajgk13tg_dc.png)
В настройках блока снимаем галочку “Вход разрешения записи” и выбираем параметр “Дата — Время”
![](https://habrastorage.org/webt/wl/6h/av/wl6havdy8cinfwlpl4tfvp4lck8.png)
Соединяем выход блока “Сложение строк” со входом блока “Запись системного параметра”
![](https://habrastorage.org/webt/d9/-r/3y/d9-r3ywv-yuaxbr_rctbvvbngqi.png)
В результате у нас должна получится такая схема (Для наглядности развернём первую плату).
![](https://habrastorage.org/webt/4u/9l/eq/4u9leq4v053jejpyi08yluy3jrm.png)
Со схемой прошивки закончили, возвращаемся к дереву проекта.
На главную страницу Web интерфейса добавим три параметра (как это сделать смотри в предыдущем уроке).
Параметр 1 – Системный параметр “Дата — Время”, тип параметра – “Текст”, лейбла – “Время”
Параметр 2 – Системный параметр “Сервер точного времени”, тип параметра – “Поле ввода”, лейбла – “Сервер”
Параметр 3 – Системный параметр “Часовой пояс”, тип параметра – “Поле ввода”, лейбла – “Часовой пояс”
![](https://habrastorage.org/webt/hj/q-/kf/hjq-kfpifn8uv1zz7p5i_btkgim.png)
Включаем на странице кнопку “Save”
![](https://habrastorage.org/webt/6y/th/kk/6ythkknyo5ka-t7bu5nmpmtybgi.png)
Заливаем программу в контроллер, и смотрим, что у нас получилось на главной странице (как это сделать, смотри предыдущий урок)
Сразу после подключения – с сервером точного времени ещё не синхронизировались
![](https://habrastorage.org/webt/ph/tk/1g/phtk1grovjrkefkfbbhbdsykwke.png)
Через минуту (обновили страницу) – прошла синхронизация
![](https://habrastorage.org/webt/77/ds/w4/77dsw4un9uabbmcy_rqcyhgohpo.png)
Сменили часовой пояс и нажали кнопку сохранить
![](https://habrastorage.org/webt/ru/wh/x9/ruwhx9fj6pkv9jt107nnyd409mg.png)
Проект, созданный на уроке можно скачать здесь.