Zahlavi

Выберите язык

Описание программы версия 1.0.1

 

Давно думал, как здесь подробно разобрать написанную программу. В конце концов, я решил не переборщить. Тот, кто не умеет программировать на javascript для node.js, точно не узнает его здесь. Кто знает, не нужно никаких тривиальных подробностей. Для этой первой версии я сделаю исключение и немного проанализирую описание, чтобы очистить процедуры и зависимости, которые будут применяться к другим версиям.

Javascript как язык программирования - это не компилятор, а интерпретатор. Это означает, что я не храню исходный код при себе и публикую здесь не только непонятные исполняемые файлы. Все написанные программы представляют собой простые текстовые файлы, доступные для чтения любому, кто говорит на этом языке. Только node.js переводит эти тексты в исполняемую форму в тот момент, когда она должна быть выполнена. Поэтому вы можете изучить все, что найдете здесь, а затем изменить это в соответствии со своими потребностями. Я хотел бы получить от вас обратную связь. Вот почему я прошу всех, кто вносит какие-либо изменения, написать мне об этом. Мне тоже нравится чему-то учиться. Спасибо.

Вы можете скачать первую пробную версию 1.0.1 по адресу Файлы для скачивания / для HW версии 1.x. Как его использовать описано внизу страницы Подготовка Raspberry Pi. Для его функциональности необходимо установить библиотеки onoff и socket.io с помощью программы npm.

Проект состоит из следующих частей:

  • каталог js, вот мои файлы с функциями javascript
  • каталог pict, вот изображения, используемые на сайте
  • файл favicon.ico, значок программы, отображаемый в браузере
  • файл index.html, основная веб-страница, отображаемая в браузере
  • файл satprowler.js, основная программа для node.js

Веб-сервер использует не стандартный веб-порт 80, а 8080. Если вы не возражаете, вы можете изменить номер порта в файле satprowler.js. Я хотел как-то разграничить общение с Raspberry Pi. Следовательно, необходимо ввести адрес в этом формате в веб-браузер.

http://192.168.xxx.xxx:8080

Где xxx - две последние цифры IP-адреса Raspberry Pi, в зависимости от настроек вашей домашней сети. После подключения в браузере появится следующее окно.

PrtScr01Thumb

Рис. 1 Экран SatProwler

Нажатие любой кнопки со стрелкой запускает соответствующий двигатель. При отпускании двигатель снова останавливается. Если вы нажмете кнопку, переместите мышь за ее пределы и отпустите мышь, двигатель будет продолжать работать. Нажмите ту же кнопку, чтобы остановить его. Это программная ошибка, но таким образом вы можете убедиться, что оба движка могут работать одновременно.

Изначально это все, что я просил с первого теста. Проверить управление двигателем и направление движения. Но потом добавил проверку входных сигналов с датчиков. При отпускании любой кнопки значения всех счетчиков отображаются в окне терминала.

Значение, представляющее состояние концевых выключателей, сначала "True". При закрытии изменяется на «False», при открытии возвращается на «True». Во время тестирования я обнаружил, что переключатели нулевой точки замыкаются и размыкаются при разных значениях счетчика импульсов. Поэтому исходный блок управления, вероятно, перейдет к поиску нулевой точки, а затем вернется немного. Это можно увидеть на видео на странице Введение. Следовательно, переключатель имеет некоторый гистерезис, и правильная нулевая точка находится в момент размыкания переключателя. Я также буду следовать этому правилу в своих программах. Также необходимо учитывать, что это механические переключатели с колебаниями (многократное отключение / включение из-за гибкости контактов). Я не решаю эту фичу в версии 1.0.1.

На самом деле я понятия не имею, почему у обоих двигателей по два датчика скорости. При подсчете входных импульсов от двигателей SatProwler версии 1.0.1 считает импульсы каналов A и B в один счетчик. Это удваивает количество импульсов и, следовательно, теоретическую точность установки положения. Так ли это на самом деле, еще неизвестно. Двигатель постоянного тока обладает определенной инерцией и остановить его с точностью до 1 импульса, вероятно, будет непросто.

Для всего азимутального пути в диапазоне от -90 ° до + 90 ° мое устройство насчитало примерно 36000 импульсов (18000 импульсов на канал), что означает 200 импульсов (100 импульсов на канал) на каскад. Это соответствует точности 0,01 градуса на импульс, как указано в исходном руководстве пользователя. Для всей траектории подъема от 10 ° до 50 ° мое устройство насчитало примерно 32000 (2 x 16 000) импульсов, то есть 800 (2 x 400) импульсов на ступень. Это соответствует точности 0,0025 градуса на импульс, как указано в исходном руководстве пользователя.

Веб-браузер в настоящее время обменивается данными с веб-сервером в одном направлении. Это означает, что он отправляет команду серверу, но не получает подтверждения о том, что сервер получил и выполнил ее. Для отправки команды используются функции «RelayOn» и «RelayOff». Первая функция - это команда на закрытие, вторая - на размыкание реле. К какому реле (паре реле при изменении направления) относится команда, определяется числом в скобках. Моя библиотека «js / driverfce.js» решает способ отправки команды на сервер.

Другая библиотека «https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js» обеспечивает сетевое взаимодействие. К сожалению, мне пока не удалось разместить эту библиотеку локально на SD-карте Raspberry Pi, поэтому мне нужен доступ в Интернет для тестирования. Это вся мощная часть файла index.html. Все остальное касается только стандарта html или макета страницы.

Файл satprowler.js содержит всю программу сервера. Сначала я объявляю переменные для состояния счетчиков и определяю значения по умолчанию. Я установил счетчики на мнимое значение 5000, а состояние переключателей - на истинное. Затем загружается библиотека «onoff», которая напрямую управляет выводами порта GPIO. Впоследствии определяются параметры отдельных выводов. Любой, кто использует контакты других портов GPIO, должен исправить их здесь. Но не следует забывать, что все входы должны иметь активные «подтягивающие» резисторы. Библиотека "onoff" не может их включить, поэтому номера контактов также необходимо исправить в файле "config.txt" в области загрузки SD-карты, как описано на странице Подготовка Raspberry Pi а затем перезапустите Raspberry Pi.

Функции «xxx.watch» определяют обработку прерывания, вызванного изменением значения на входных контактах порта GPIO. Пока есть только добавление или вычитание 1 в счетчике импульсов в соответствии с направлением вращения двигателя. Для переменных «orgAZ» и «orgEL» значение меняется только на «False» или «True» в зависимости от состояния переключателя. Но при изменении на «True» значение счетчиков сбрасывается. С этого момента они должны рассчитывать правильное значение текущей позиции. Ниже приведена функция, которая освобождает использованные прерывания Raspberry Pi перед выходом из программы. Функция "process.on" ('SIGINT', uneportOnClose); напротив, он активирует определенные прерывания.

Затем следует создание и запуск собственного веб-сервера. Вот как отвечать на запросы веб-клиента. Строка http.listen (8080); определяет, какой порт будет прослушивать сервер. Здесь вы можете установить стандартный порт 80 или что-нибудь еще.

Остальное - это описание того, что делает сервер после получения запроса на управление портами GPIO. Он устанавливает требуемые выходные значения с помощью библиотеки «onoff». Здесь мы должны следить за тем, чтобы включение / выключение реле изменения направления вращения производилось только при остановленном двигателе.

С профессиональной точки зрения у программы много недостатков. Но его предназначение не для нормального использования. Это просто вопрос проверки работоспособности оборудования. Тем не менее, после осторожного подхода к концевым выключателям, его можно было использовать для многократной ручной регулировки положения сателлитов, для чего значения счетчиков записываются на листе бумаги. Это позволило бы проверить точность, с которой определенная позиция может быть найдена повторно. Измерительным устройством может быть спутниковый приемник и его индикатор мощности сигнала со спутника.

 

No comments

Comments are closed

The comments for this content are closed.