Автор: flammmable
Управляем шторой через LabVIEWКак я написал в предыдущей статье: Arduino — отличное средство автоматизации. Но есть проблема: далеко не всем нравится программировать на C. Для тех уважаемых пидоров, кому не нравятся текстовые языки программирования, есть LabVIEW, графический язык, разрабатываемый компанией National Instruments.Специально для работы с этим языком National Instruments производит кучу различного оборудования: от ультрадорогих модульных систем PXI до дешёвых устройств, буквально за несколько сотен долларов. Сегодня мы поиграем шторой Джойреактора при помощи одного из таких устройств — USB‑6009.У USB‑6009 четыре аналоговых входа и 12 цифровых линий ввода‑вывода, сгруппированных в полтора так называемых порта. В нулевом порте 8 линий, в первом порте 4 линии.Не буду утомлять подробностями процесса установки LabVIEW и драйверов на серию оборудования DAQmx, к которой относится USB‑6009, и перейду сразу к программированию. В терминологии LabVIEW каждая программа называется «виртуальным прибором». У каждого виртуального прибора есть передняя панель и блок‑диаграмма.
На передней панели располагаются элементы управления и отображения.
На блок‑диаграмме находится логика работы прибора: отдельные блоки, соединённые связями.При этом, каждый элемент управления с передней панели имеет отображение на блок‑диаграмме в виде блока с выходами.
А каждый элемент отображения имеет отображение со входами.Чтобы было понятней, покажу, как выглядит программа на LabVIEW, складывающая два числа:Передняя панельБлок‑схемаСоберём теперь блок‑схему, которая выводила бы на нулевой порт последовательность 00110011.
Для этого нам потребуется:
- константный 1D‑массив (такая строчка зелёных квадратиков), содержащий «00110011»;
- константа с именем так называемого канала (лиловая строчка слева). В ней можно выбрать какбы адрес: наш прибор, нулевой порт и необходимое количество линий этого порта;
- блок «DAQmx Create Channel», который инициализирует обмен данными с USB‑6009;
- блок «DAQmx Write», который даёт команду USB‑6009 вывести массив на порт;
- и блок «Simple Error Handler», который, если что‑то пойдёт не так (например, отвалится USB‑6009), выведет диалоговое с ошибкой;Код программы, выводящей «00110011» на нулевой порт USB‑6009Результат работы программыДля управления шаговым двигателем шторы нам потребуется не просто вывести что‑то на порт, но и циклически изменять состояние его выводов. Для этого нам понадобится… цикл :)
Для начала попробуем сделать бегущий по нулевому порту огонёк:Код бегущего огонькассылка на гифкуБегущий огонёк на USB‑6009В LabVIEW цикл — это область с жирной серой стрелкой, как бы пожирающей свой хвост.
Внутри этой области в обязательном порядке есть специальный зелёный квадратик с жирной красной точкой. Если в этот квадратик заходит логическое значение, равное «Истина», то программа выходит из цикла. Обычно к этому квадратику подключают кнопку «Стоп». Пока эта кнопка не нажата, программа будет работать бесконечно повторяя цикл.Чтобы итерации цикла начинались через равные промежутки времени, в LabVIEW есть специальный блок «Wait Until Next» с изображением метронома. На вход ему подаётся число, задающее задержку в миллисекундах. То есть если мы подадим в этот блок число 250, то итерации будут следовать с интервалом в четверть секунды.Также у циклов в LabVIEW есть специальные парные элементы (имеющие крайне неудачное название — «сдвиговые регистры»), чтобы можно было в текущей итерации использовать значения из предыдущей итерации. Эти элементы расположены на боковых сторонах цикла в виде небольших прямоугольничков: слева это прямоугольники с треугольником вниз, справа прямоугольники с треугольником вверх.На самом деле они работают просто.
Перед стартом цикла снаружи в левый «сдвиговый регистр» заводится какое‑то начальное значение.
Затем, если нужно его поменять и передать на следующую итерацию, то новое значение заводится изнутри цикла на правый «сдвиговый регистр».
Это новое значение будет доступно на следующей итерации, если провести связь от левого «сдвигового регистра» внутрь цикла.То есть если мы смотрим как бы изнутри цикла,
то выход левого «сдвигового регистра» — это значение с предыдущей итерации,
а вход правого «сдвигового регистра» — это значение для будущей итерации.Ну и ещё один новый блок — это «Rotate 1D Array», циклический сдвиг массива. Маленький прямоугольник цвета слоновой кости с изображением 1D‑массива и стрелочкой.
На сколько массив будет сдвинут? На величину, подключаемую к верхнему входу. При этом величина может быть как положительная, так и отрицательная. Это влияет на направление сдвига.Думаю, теперь мы можем написать всю программу целиком.Во‑первых, мы задействуем 4 линии нулевого порта под управление двигателем и 4 линии первого порта под сигналы от кнопок и концевиков:Коннекторы шторы подключены к USB-6009Во‑вторых мы добавим ветку не только выходных сигналов, но и входных.
С входными сигналами всё наоборот: блок «DAQmx Read» не принимает на вход одномерный массив, а выдаёт его.Этот массив мы при помощи блока «Index Array» разделяем на 4 отельные линии, именуем каждую из них и составляем сложное логическое выражение:
- если переключатель нажат вверх и верхний концевик пока не сработал, то вращать двигатель вверх;
- если переключатель нажат вниз и нижний концевик пока не сработал, то вращать двигатель вниз;
- иначе не вращать двигатель;Код целикомКроме простоты написания кода, преимущество LabVIEW ещё в том, что мы можем без особых усилий вывести данные о состоянии концевиков и переключателя на переднюю панель. То есть на экран.ссылка на гифкуГотово!Развернуть { "@context": "http://schema.org", "@type": "BlogPosting", "mainEntityOfPage":{ "@type":"WebPage", "@id":"/post/6391907" }, "headline": "Управляем шторой через LabVIEW / программирование :: инкапсуляция и полиморфизм :: прикольные гаджеты :: электроника :: длиннопост :: LabVIEW :: flammmable :: geek (Прикольные гаджеты. Научный, инженерный и айтишный юмор)", "image": { "@type": "ImageObject", "url": "//img2.reactor.cc/pics/post/full/flammmable-LabVIEW-%D0%B4%D0%BB%D0%B8%D0%BD%D0%BD%D0%BE%D0%BF%D0%BE%D1%81%D1%82-%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0-9506242.png", "height": 750, "width": 1000 }, "datePublished": "2026-10-01T09:38:39+03:00", "dateModified": "2026-10-01T09:38:39+03:00", "author": { "@type": "Person", "name": "flammmable" }, "publisher": { "@type": "Organization", "name": "JoyReactor.cc", "logo": { "@type": "ImageObject", "url": "http://joyreactor.cc/images/joyreactor_ie6.png", "width": 207, "height": 54 } }, "description": "Как я написал в предыдущей статье: Arduino — отличное средство автоматизации. Но есть проблема: далеко не всем нравится программировать на C. Для тех уважаемых пидоров, кому не нравятся текстовые языки программирования, есть LabVIEW, графический язык, разрабатываемый компанией National Instruments.С" }
Комментировать
flammmable LabVIEW длиннопост электроника geek программирование прикольные гаджеты инкапсуляция и полиморфизм
Как я написал в предыдущей статье: Arduino — отличное средство автоматизации. Но есть проблема: далеко не всем нравится программировать на C. Для тех уважаемых пидоров, кому не нравятся текстовые языки программирования, есть LabVIEW, графический язык, разрабатываемый компанией National Instruments.
Специально для работы с этим языком National Instruments производит кучу различного оборудования: от ультрадорогих модульных систем PXI до дешёвых устройств, буквально за несколько сотен долларов. Сегодня мы поиграем шторой Джойреактора при помощи одного из таких устройств — USB‑6009.
У USB‑6009 четыре аналоговых входа и 12 цифровых линий ввода‑вывода, сгруппированных в полтора так называемых порта. В нулевом порте 8 линий, в первом порте 4 линии.
Не буду утомлять подробностями процесса установки LabVIEW и драйверов на серию оборудования DAQmx, к которой относится USB‑6009, и перейду сразу к программированию. В терминологии LabVIEW каждая программа называется «виртуальным прибором». У каждого виртуального прибора есть передняя панель и блок‑диаграмма.
На передней панели располагаются элементы управления и отображения.
На блок‑диаграмме находится логика работы прибора: отдельные блоки, соединённые связями.
При этом, каждый элемент управления с передней панели имеет отображение на блок‑диаграмме в виде блока с выходами.
А каждый элемент отображения имеет отображение со входами.
Чтобы было понятней, покажу, как выглядит программа на LabVIEW, складывающая два числа:
Передняя панель
Блок‑схема
Соберём теперь блок‑схему, которая выводила бы на нулевой порт последовательность 00110011.
Для этого нам потребуется:
- константный 1D‑массив (такая строчка зелёных квадратиков), содержащий «00110011»;
- константа с именем так называемого канала (лиловая строчка слева). В ней можно выбрать какбы адрес: наш прибор, нулевой порт и необходимое количество линий этого порта;
- блок «DAQmx Create Channel», который инициализирует обмен данными с USB‑6009;
- блок «DAQmx Write», который даёт команду USB‑6009 вывести массив на порт;
- и блок «Simple Error Handler», который, если что‑то пойдёт не так (например, отвалится USB‑6009), выведет диалоговое с ошибкой;
Код программы, выводящей «00110011» на нулевой порт USB‑6009
Результат работы программы
Для управления шаговым двигателем шторы нам потребуется не просто вывести что‑то на порт, но и циклически изменять состояние его выводов. Для этого нам понадобится… цикл :)
Для начала попробуем сделать бегущий по нулевому порту огонёк:
Код бегущего огонька
Бегущий огонёк на USB‑6009
В LabVIEW цикл — это область с жирной серой стрелкой, как бы пожирающей свой хвост.
Внутри этой области в обязательном порядке есть специальный зелёный квадратик с жирной красной точкой. Если в этот квадратик заходит логическое значение, равное «Истина», то программа выходит из цикла. Обычно к этому квадратику подключают кнопку «Стоп». Пока эта кнопка не нажата, программа будет работать бесконечно повторяя цикл.
Чтобы итерации цикла начинались через равные промежутки времени, в LabVIEW есть специальный блок «Wait Until Next» с изображением метронома. На вход ему подаётся число, задающее задержку в миллисекундах. То есть если мы подадим в этот блок число 250, то итерации будут следовать с интервалом в четверть секунды.
Также у циклов в LabVIEW есть специальные парные элементы (имеющие крайне неудачное название — «сдвиговые регистры»), чтобы можно было в текущей итерации использовать значения из предыдущей итерации. Эти элементы расположены на боковых сторонах цикла в виде небольших прямоугольничков: слева это прямоугольники с треугольником вниз, справа прямоугольники с треугольником вверх.
На самом деле они работают просто.
Перед стартом цикла снаружи в левый «сдвиговый регистр» заводится какое‑то начальное значение.
Затем, если нужно его поменять и передать на следующую итерацию, то новое значение заводится изнутри цикла на правый «сдвиговый регистр».
Это новое значение будет доступно на следующей итерации, если провести связь от левого «сдвигового регистра» внутрь цикла.
То есть если мы смотрим как бы изнутри цикла,
то выход левого «сдвигового регистра» — это значение с предыдущей итерации,
а вход правого «сдвигового регистра» — это значение для будущей итерации.
Ну и ещё один новый блок — это «Rotate 1D Array», циклический сдвиг массива. Маленький прямоугольник цвета слоновой кости с изображением 1D‑массива и стрелочкой.
На сколько массив будет сдвинут? На величину, подключаемую к верхнему входу. При этом величина может быть как положительная, так и отрицательная. Это влияет на направление сдвига.
Думаю, теперь мы можем написать всю программу целиком.
Во‑первых, мы задействуем 4 линии нулевого порта под управление двигателем и 4 линии первого порта под сигналы от кнопок и концевиков:
Коннекторы шторы подключены к USB-6009
Во‑вторых мы добавим ветку не только выходных сигналов, но и входных.
С входными сигналами всё наоборот: блок «DAQmx Read» не принимает на вход одномерный массив, а выдаёт его.
Этот массив мы при помощи блока «Index Array» разделяем на 4 отельные линии, именуем каждую из них и составляем сложное логическое выражение:
- если переключатель нажат вверх и верхний концевик пока не сработал, то вращать двигатель вверх;
- если переключатель нажат вниз и нижний концевик пока не сработал, то вращать двигатель вниз;
- иначе не вращать двигатель;
Код целиком
Кроме простоты написания кода, преимущество LabVIEW ещё в том, что мы можем без особых усилий вывести данные о состоянии концевиков и переключателя на переднюю панель. То есть на экран.
Готово!
Подробнее
Motor switch up opto top switch down opto bottom STOP JOYREACTOR COMMAND CONSOLE BY PLAMOABLE lenovo NATIONAL INSTRUMENTS JOYREACTOR BY PLAMOABLE Ноутбук с интерфейсом 'Joyreactor Command Console', управляющим двигателями и датчиками, подключен к устройству National Instruments и различным электронным компонентам, на заднем плане — оранжевый ящик с биохазард-логотипом.
sum.vi File Edit View Project Operate Tools Window Help Число №1 5 Число №2 7 Сумма 12 Панель LabVIEW показывает простую программу сложения с двумя полями ввода, помеченными как 'Число №1' и 'Число №2', содержащими значения 5 и 7 соответственно, и полем вывода 'Сумма', отображающим результат 12.
flammmable,LabVIEW,длиннопост,электроника,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,программирование,прикольные гаджеты,инкапсуляция и полиморфизм
Еще на тему
Развернуть
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Пост №6390257 | 0 | 9.56 | 28-09-2026 |
| 2 | Пост №6391998 | 0 | 14.09 | 01-10-2026 |
| 3 | Пост №6392775 | 0 | 8.79 | 02-10-2026 |
| 4 | Написал свой ассемблер, чтобы понять, откуда берётся ff010113. Почти половину моей программы он выдумывает | 0 | 8.28 | 28-08-2026 |
| 5 | SnowTec - SnowTec 09.2026 (STANDALONE, VST3, x64) Разработчик: SnowTec Формат: ... | 0 | 11.05 | 03-10-2026 |
| 6 | Пост №6392809 | 0 | 12.73 | 02-10-2026 |
| 7 | Пост №6393244 | 0 | 8.49 | 03-10-2026 |
| 8 | Я написал верификатор eBPF для микроконтроллера. А потом ядро Linux объяснило мне, где я неправ | 0 | 9.18 | 23-09-2026 |
| 9 | Copy Fix Prompt, diagnose and fix failures with any AI coding agent | 0 | 6.48 | 12-08-2026 |
| 10 | Аккватория КУБЫ ОБРАЗОВАНА СОТВОРЕНА СОЗДАНА СДЕЛАНА РОЖДЕНА СОТВОРЕНА ОБРАЗОВА НА ... | 0 | 5 | 27-09-2026 |