Статия за това как да създадете програмируем логически контролер от евтино китайско устройство. Такова устройство ще намери своето приложение както в домашната автоматизация, така и като практически часове по училищна информатика.
За справка, по подразбиране програмата Sonoff Basic работи с мобилно приложение чрез китайска облачна услуга; след предложената модификация цялото по-нататъшно взаимодействие с това устройство ще бъде възможно в браузъра.
Раздел I. Свързване на Sonoff към услугата MGT24
Стъпка 1: Създайте контролен панел
Регистрирайте се в сайта
Вход
За да създадете контролен панел за ново устройство, щракнете върху бутона „+“.
Пример за създаване на панел
След като панелът бъде създаден, той ще се появи в списъка ви с панели.
В раздела „Настройка“ на създадения панел намерете полетата „Идентификатор на устройството“ и „Ключ за упълномощаване“; в бъдеще тази информация ще се изисква при настройка на устройството Sonoff.
Пример за раздел
Стъпка 2. Презаредете устройството
Използване на помощната програма
Стъпка 3. Настройка на устройството
Подайте захранване на устройството, след като светодиодът светне, натиснете бутона и го задръжте натиснат, докато светодиодът започне да мига периодично равномерно.
В този момент ще се появи нова wi-fi мрежа, наречена „PLC Sonoff Basic“, свържете компютъра си към тази мрежа.
Обяснение на светодиодната индикация
LED индикация
Състояние на устройството
периодично двойно мигане
няма връзка с рутер
свети непрекъснато
установена връзка с рутера
периодично равномерно мигане
режим на Wi-Fi точка за достъп
загасени
Няма захранване
Отворете интернет браузър и въведете текста „192.168.4.1“ в адресната лента, отидете на страницата с настройки на мрежовите настройки на устройството.
Попълнете полетата както следва:
- „Име на мрежата“ и „Парола“ (за свързване на устройството към вашия домашен Wi-Fi рутер).
- “Device ID” и “Authorization Key” (за оторизиране на устройството в услугата MGT24).
Пример за настройка на мрежови параметри на устройството
Запазете настройките и рестартирайте устройството.
Тук
Стъпка 4. Свързване на сензори (по избор)
Текущият фърмуер поддържа до четири температурни сензора ds18b20. Тук
Раздел II. Визуално програмиране
Стъпка 1: Създаване на скриптове
Използва се като среда за програмиране
Добавих специализирани блокове за запис и четене на параметри на устройството. Всеки параметър е достъпен по име. За параметри на отдалечени устройства се използват съставни имена: “parameter@device”.
Падащ списък с опции
Примерен сценарий за циклично включване и изключване на товара (1Hz):
Пример за скрипт, синхронизиращ работата на две отделни устройства. А именно, релето на целевото устройство повтаря работата на релето на отдалеченото устройство.
Сценарий за термостат (без хистерезис):
За да създадете по-сложни скриптове, можете да използвате променливи, цикли, функции (с аргументи) и други конструкции. Няма да описвам всичко това подробно тук, вече има доста в мрежата.
Стъпка 2: Ред на скриптовете
Скриптът работи непрекъснато и щом достигне своя край, започва отново. В този случай има два блока, които могат временно да поставят на пауза скрипта, „закъснение“ и „пауза“.
Блокът "закъснение" се използва за закъснения от милисекунди или микросекунди. Този блок стриктно поддържа интервала от време, блокирайки работата на цялото устройство.
Блокът „пауза“ се използва за секунди (или по-малко) забавяния и не блокира изпълнението на други процеси в устройството.
Ако самият скрипт съдържа безкраен цикъл, чието тяло не съдържа „пауза“, интерпретаторът самостоятелно инициира кратка пауза.
Ако разпределеният стек памет е изчерпан, интерпретаторът ще спре да изпълнява такъв енергоемък скрипт (бъдете внимателни с рекурсивните функции).
Стъпка 3: Отстраняване на грешки в скриптове
За отстраняване на грешки в скрипт, който вече е зареден в устройството, можете да изпълните програмно проследяване стъпка по стъпка. Това може да бъде изключително полезно, когато поведението на скрипта се окаже различно от предвиденото от автора. В този случай проследяването позволява на автора бързо да намери източника на проблема и да коригира грешката в скрипта.
Сценарий за изчисляване на факториел в режим на отстраняване на грешки:
Инструментът за отстраняване на грешки е много прост и се състои от три основни бутона: „старт“, „една стъпка напред“ и „стоп“ (да не забравяме и режима за отстраняване на грешки „влизане“ и „изход“). В допълнение към проследяването стъпка по стъпка, можете да зададете точка на прекъсване на всеки блок (като щракнете върху блока).
За да покажете текущите стойности на параметрите (сензори, релета) в монитора, използвайте блока „печат“.
Тук
Раздел за любопитните. Какво има под капака?
За да работят скриптовете на целевото устройство, са разработени интерпретатор на байт код и асемблер с 38 инструкции. Изходният код на Blockly има вграден специализиран кодов генератор, който преобразува визуални блокове в инструкции за асемблиране. Впоследствие тази асемблерна програма се преобразува в байт код и се прехвърля към устройството за изпълнение.
Архитектурата на тази виртуална машина е доста проста и няма смисъл да се описва, в интернет ще намерите много статии за проектиране на най-простите виртуални машини.
Обикновено отделям 1000 байта за стека на моята виртуална машина, което е достатъчно, за да спестя. Разбира се, дълбоките рекурсии могат да изчерпят всеки стек, но е малко вероятно да имат някаква практическа полза.
Полученият байт код е доста компактен. Като пример, байт кодът за изчисляване на същия факториел е само 49 байта. Това е неговата визуална форма:
А това е неговата програма за асемблер:
shift -1
ldi 10
call factorial, 1
print
exit
:factorial
ld_arg 0
ldi 1
gt
je 8
ld_arg 0
ld_arg 0
ldi 1
sub
call factorial, 1
mul
ret
ldi 1
ret
Ако сглобената форма на представяне няма практическа стойност, тогава разделът „javascrit“, напротив, дава по-познат вид от визуалните блокове:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Относно изпълнението. Когато стартирах най-простия скрипт за мигане, получих 47 kHz квадратна вълна на екрана на осцилоскопа (при тактова честота на процесора от 80 MHz).
Мисля, че това е добър резултат, поне тази скорост е почти десет пъти по-бърза от
В последната част
Обобщавайки, ще кажа, че използването на скриптове ни позволява не само да програмираме логиката на работа на отделно устройство, но също така прави възможно свързването на няколко устройства в един механизъм, където някои устройства влияят върху поведението на други.
Също така отбелязвам, че избраният метод за съхраняване на скриптове (директно в самите устройства, а не на сървъра) опростява превключването на вече работещи устройства към друг сървър, например към домашен Raspberry, тук
Това е всичко, ще се радвам на съвети и градивна критика.
Източник: www.habr.com