Использование Raspberry Pi c LabView


Использование LabView в кругах радиолюбителей редко заметно, в среде профи же прога давно пользуется уважением: кто моделирует различные процессы, проверяя свои идеи, а некоторые просто делают программные интерфейсы для своих устройств, подключая их через COM-порт.

При чтении ресурсов посвященных Raspberry Pi, иногда встречаются вопросы, посвященные тому, как заставить работать Raspberry Pi с LabView. Чаще всего эти вопросы остаются без ответа, так как имеется ввиду взаимодействие через COM-порт, которое действительно может вызвать определенные затруднения.

Я же решил пойти другим путем: просто подключиться по SSH и считать/передать необходимую информацию и команды.

Я буду пользоваться стандартным компонентом System Exec. Соотвественно под Mac и Linux не понадобится никаких дополнительных компонентов. Для Windows же придется скачать plink, — консольную версию putty, или любой другой консольный SSH-клиент. Как вы уже наверное догадались, наличие именно Pi в этом случае тоже необязательно: эксперимент можно провести с любым другим устройством с ethernet и SSH-сервером на борту.

В данном компоненте нам понадобится задействовать лишь command line для ввода консольных команд и standart output для получения ответа от устройства.

В качестве примера, я сделал небольшую лицевую панель, на которой можно ввести IP-адрес устройства и имя пользователя. Считывать будем самый простой вариант: загрузку процессора, для чего есть контролы Meter для отслеживания в реальном времени и Graph для построения финального графика.

Блок-диаграмму приведу полностью, а затем расскажу, как она работает.

Прежде чем посылать команды, нужно проверить доступен ли наш RPi по сети. Это делается вот такой командой:

ping -c 1 -W 2 <IP-адес> | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }'

На выходе получим 0 или 1, в зависимости от результата. Стоит предупредить, что на Windows, эту проверку придется делать каким-то другим способом, так как и ping не удастся вызвать с такими параметрами, и grep с awk тоже отсутствуют. Соответственно, на блок-схеме была сформирована именно эта команда, затем результат выполнения был переведен из String в Integer, далее убеждаемся, что результат действительно единица (т.е. указаный айпишник пингуется), затем зажигаем Round Led на лицевой панели и переходим в Case-структуру, где пытаемся подключиться по SSH.

Здесь нужно отметить, что стоит заранее сгенерировать RSA-ключи, иначе при подключении ваш Pi будет спрашивать пароль, и на этом все повиснет.

Чтобы получить результат загрузки процессора, я решил не городить конструкции в LabView набросал такой скрипт и сохранил его на Pi:

#!/bin/bash

top -bn1 | grep "Cpu(s)" | \
           sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
           awk '{print 100 - $1}'

Фактически мы просто обращаемся по SSH к скрипту, который возвращает значение текущей загрузки процессора.

ssh <Username>@<IP adress> ‘bash info’

Далее этот запрос повторяется 10 раз в For Loop структуре с задержкой в 2 секунды.

Аналогично можно подключить, например, датчик температуры к GPIO, написать небольшой скрипт на Python, который будет считывать с него текущее значение температуры, а остальные операции проводить в LabView. Сейчас мой пример может показаться избыточным, но если потребуется проводить какие-то сложные операции с результатами измерений, может оказаться, что гораздо проще и нагляднее накидать блок-схему на LabView, чем городить эти конструкции на Python, тем более что процессор Raspberry Pi не всегда может похвастаться хорошей производительностью.