
Auf dem Gebiet der industriellen Automatisierung gibt es ein unausgesprochenes Paradigma, bei dem viele Hersteller von Industrieanlagen Steuerungen getrennt und Modems getrennt herstellen. In der Regel befindet sich jedes Gerät in einem eigenen Gehäuse, hat ein eigenes Netzteil, große Abmessungen und hohe Kosten. Diese Version der funktionalen Trennung hat ihre Vor- und Nachteile, führt jedoch unserer Meinung nach eher zu einer stärkeren Kommerzialisierung als aus objektiven Gründen. Aus diesem Grund haben wir uns für einen etwas anderen Weg entschieden und ein universelles Gerät entwickelt , bei dem es sich um einen frei programmierbaren Linux-basierten Controller mit einem Modem in einem einzigen Fall handelt. Dies ermöglichte es uns in unseren Projekten, die üblichen Automatisierungspanels praktisch vollständig aufzugeben und zu mobileren Lösungen zu gelangen.
Im Rahmen dieses Artikels werden wir Ihnen die Feinheiten beim Einrichten des Modems und einige nützliche Skripte für eine stabilere 3G-Verbindung vorstellen.
Voraussetzungen und Lösungen
Bei der Entwicklung unseres Geräts haben wir uns von der Tatsache leiten lassen, dass es eine Verbindung zum mobilen Internet herstellen muss, um eine Verbindung zu Cloud-Plattformen herzustellen. Es gab zwei Möglichkeiten: das Modem an die Platine anzulöten oder mPCIe-Anschlüsse zu verwenden. Wir haben uns für die zweite Option entschieden und zwei mPCIe-Anschlüsse gleichzeitig bereitgestellt (Abbildung 1), da uns diese Option interessanter und flexibler erschien. Schließlich dauert die Installation und der Austausch des Modems einige Sekunden. Außerdem wird dem Benutzer die erforderliche Variabilität angezeigt, und er kann solche Kombinationen von mPCIe-Modulen verwenden, die er für ein bestimmtes Projekt benötigt. Neben einem 3G-Modem können es sich um LoraWan- oder Wi-Fi-Module handeln. Darüber hinaus haben sich mPCIe-Lösungen als sehr zuverlässig und von hoher Qualität erwiesen.

Abbildung 1 - mPCIe-Anschlüsse
Wir haben die folgenden Optionen als Hauptmodul für 3G für unser Gerät betrachtet:
- MikroTik R11e-LTE6
- Quectel EC25-E
- YUGA CLM920 TE5
- HUAWEI MU709s-2p
Nach den Tests erwies sich das HUAWEI-Modem jedoch als das für uns am meisten bevorzugte in Bezug auf Zuverlässigkeit und Preis-Leistungs-Verhältnis (Abbildung 2). Wir haben es als Basis genommen und es optional in unseren Geräten installiert. Daher werden wir in Zukunft die Konfiguration und die Skripte des relativen Modems dieses Modells berücksichtigen. Möglicherweise ist dieses Skript universell und für andere Modems nützlich, aber die Stabilität der Arbeit mit anderen Modellen kann nicht garantiert werden. Für Rasbian Buster und HUAWEI MU709s-2p funktioniert alles einwandfrei.

Abbildung 2 - Auf der Geräteplatine installiertes HUAWEI MU709s-2p-Modem
Verwenden eines Skripts zum Neustarten eines 3G-Modems
Für einen stabileren und störungsfreien Betrieb haben wir ein Skript geschrieben, das die angegebene IP-Adresse anpingt. Wenn die in den Einstellungen angegebene Anzahl von Pings nicht überschritten wurde, wird das GSM-Modem neu gestartet, wodurch die blockierte Netzwerkverbindung wiederhergestellt wird. Es ist zu beachten, dass das Modem im System als LAN1-Netzwerkkarte definiert ist.
Das Archiv mit allen notwendigen Dateien kann von diesem Link heruntergeladen werden . Außerdem wird der Text der Skripte selbst unten dargestellt.
Die Datei check_inet.sh wird benötigt, um die Internetverbindung zu überprüfen. Wenn die angegebene IP-Adresse nicht pingt, ruckeln wir das 19-Bein und starten das Modem beim Einschalten neu. Der Code lautet wie folgt:
#!/bin/bash
#count=0;
#echo "Start script"
#echo 19 > '/sys/class/gpio/export'
while [ true ]; do
# sleep 30
. /home/pi/igate.conf
#echo $usb_port
#echo 'AT^NDISDUP=1,1,''"'$apn'"''\r\n'
#echo 'AT^NDISDUP=1,1,"internet.mts.ru"\r\n'
flag=0
for ((i = 1; i <= $ping_count; i++)); do
#for i in {1..$ping_count}; do # 5
#ping -I eth1 -c 1 8.8.8.8 > /dev/null || flag=$(($flag+1))
ping -I $interface -c 1 $ping_ip || flag=$(($flag+1))
sleep 1
done
if [ "$flag" -ge "$ping_error" ]; then # 3
#echo " - "
#count=$((count+1))
#echo $count
#
sudo ifconfig eth1 down
echo 19 > '/sys/class/gpio/export'
echo out > '/sys/class/gpio/gpio19/direction'
echo 0 > '/sys/class/gpio/gpio19/value'
sleep 1
echo 1 > '/sys/class/gpio/gpio19/value'
sleep 15
sudo ifconfig eth1 up
sleep 1
#echo -en 'AT^NDISDUP=1,1,"internet.mts.ru"\r\n' > /dev/ttyUSB3
# APN
echo -en 'AT^NDISDUP=1,1,''"'$apn'"''\r\n' > $usb_port
#echo " - "
fi
sleep $timeout
done
Die Datei Start_inet.sh startet check_inet.sh nach dem Neustart des Geräts:
#!/bin/bash
### BEGIN INIT INFO
# Provides: start_inet
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This service is used to manage a servo
### END INIT INFO
case "$1" in
start)
echo "Starting check_inet"
sudo /home/pi/check_inet.sh > /dev/null 2>&1 &
#/home/pi/check_inet.sh
;;
stop)
echo "Stopping check_inet"
#killall servod
sudo kill -USR1 $(ps ax | grep 'check_inet' | awk '{print $1}')
;;
*)
echo "Usage: /etc/init.d/check_inet start|stop"
exit 1
;;
esac
exit 0
Das Archiv enthält auch die Konfigurationsdatei igate.conf. Konfigurationssequenz
:
1. Fügen Sie eine Regel hinzu, um die physische Verbindung des COM-Anschlusses des Modems mit dem USB-Hub abzugleichen . Bearbeiten Sie dazu die Datei im folgenden Pfad:
sudo nano /etc/udev/rules.d/99-com.rules
2. Fügen Sie der Datei die folgende Zeile hinzu:
KERNEL==”ttyUSB*”, KERNELS==”1-1.5:2.4″, SYMLINK+=”GSM”
3. Speichern Sie die Regeln und starten Sie das Gerät neu. Jetzt wird der Port Ihres Modems durch den praktischen Alias / dev / GSM bestimmt.
4. Laden Sie das Archiv über den obigen Link herunter oder erstellen Sie die Dateien check_inet.sh, start_inet.sh und igate.conf selbst.
5. Kopieren Sie die Datei check_inet.sh in den Ordner:
/home/pi/
6. Machen Sie check_inet.sh ausführbar:
sudo chmod +x /home/pi/check_inet.sh
7. Kopieren Sie die Datei start_inet.sh in den Ordner:
/etc/init.d/
8. Machen Sie die Datei start_inet.sh ausführbar:
sudo chmod +x /etc/init.d/start_inet.sh
9. Aktualisieren Sie die Startkonfiguration, indem Sie den folgenden Befehl ausführen:
sudo update-rc.d start_inet.sh defaults
10. Kopieren Sie die Datei igate.conf in den Ordner:
/home/pi/
11. Richten Sie die Konfigurationsdatei ein. Unten ist die Konfigurationsdatei mit Kommentaren:
#ip- . ip-, [ping_error] , GSM-, .
ping_ip=”8.8.8.8″
# APN. -, -.
apn=”internet.mts.ru”
# 3G ( ). . 30 .
timeout=30
# . .
ping_count=5
# . , . [ping_count]. .
ping_error=3
#LAN . , AntexGate [eth1], ifconfig
interface=eth1
#USB . USB , AntexGate [ttyUSB4]
usb_port=”/dev/GSM”
Skriptsteuerung
Führen Sie die Skriptdatei check_inet.sh im Hintergrund aus:
/etc/init.d/start_inet.sh start
Beenden Sie check_inet.sh:
/etc/init.d/start_inet.sh stop
Das Skript wird auch nach einem Neustart des Geräts automatisch gestartet.
Anwendungen des Gerätes
Betrachten wir die Hauptaufgaben, für die das Gerät verwendet werden kann:
- Controller mit Internetzugang für die Datenübertragung in die Cloud;
- Ein 3G-Router für Feldaufgaben;
- Smart Home Controller mit redundantem 3G-Kanal. Das heißt, Sie können den LAN-Port als Hauptkommunikationskanal und 3G als Backup verwenden, sodass Sie immer Zugriff auf das Gerät haben.
- LoRaWAN-Basisstation, dh Abfragen von Geräten über LoRaWAN und Übertragen von Daten in die Cloud über ein 3G- oder LTE-Netzwerk;
- Fahrzeugüberwachungsgerät (CAN-Verbindung und Andocken an verschiedene Dienste)
Tatsächlich kann es für ein solches Gerät viele Anwendungen geben, und sein zweifelsfreier Vorteil ist Vollständigkeit, Vielseitigkeit und Mobilität. Ein Gerät kann den bekannten Automatisierungsschrank ersetzen und zu einer unersetzlichen Lösung in Ihren Projekten werden.