{{ :elektronik:raspberry_pi_sps:header_sps_pi_.jpg?nolink&3000 |}}
====== Raspberry PI SPS ======
Lange habe ich immer wieder nach einer SPS zum rumprobieren geschaut. Aber selbst bei Ebay sind die Erwachsenen SPSen viel zu teuer fürs rumprobieren.
Seit einiger Zeit bietet 3S ihre Software [[https://store.codesys.com/codesys-control-for-raspberry-pi-sl.html|CODESYS für den Raspberry Pi]] an. Es wird Ausdrücklich davor gewarnt das System in einem Produktivsystem einzusetzen, da keine harte Echtzeit garantiert werden kann. Für ein Testsystem ist mir das relativ egal.
Da CODESYS aber gleichzeitig auch die Möglichkeit bietet ein HMI über ein Webinterface zu erstellen wollte ich zusätzlich noch ein Display an die Himbeere anschließen. Ich habe mich für ein Billig-Display mit resistivem Touch aus China entschieden.
CODESYS bietet die Möglichkeit auf dem Pi u.a. über Ethercat, Profinet und Modbus zu kommunizieren. Aber auch die internen Schnittstellen, wie 1-Wire, SPI und I²C sind verfügbar. Daher habe ich mich entschlossen die I²C-Schnittstelle herauszuführen und zu nutzen. Dafür habe ich noch eine galvanische Trennung über den Baustein ISO1541 eingebaut (über Amazon in China bestellt). Die I²C-Schnittstelle gebe ich über einen 9-poligen D-SUB-Stecker raus. Gleichzeitig kommt von dort auch die Versorgung für den ISO1541.
Das Gehäuse für Raspberry Pi, Display und Isolator habe ich konstruiert und mit meinem 3D-Drucker erstellt.
{{:elektronik:raspberry_pi_sps:pi_sps.jpg?direct&300|}}
{{:elektronik:raspberry_pi_sps:pi_sps_opened1.jpg?direct&300|}}
{{:elektronik:raspberry_pi_sps:pi_sps_opened2.jpg?direct&300|}}
===== Einrichtung des Raspberrys =====
Ich habe dafür noch den Raspberry Pi 2 verwendet. Softwareseitig habe ich das [[https://docs.emlid.com/navio2/common/ardupilot/configuring-raspberry-pi/|Image von Emlid]] mit intigriertem RT_PREEMPT-Patch genommen, um dem System potentiell bessere Laufzeiteigenschaften bezüglich Echtzeitfähigkeit zu geben. Ob es in diesem Anwendungsfall wirklich viel bringt weiß ich nicht genau. Anschließend habe ich die Partitionen angepasst, dass die [[http://www.fabiandeitelhoff.de/2014/07/raspberry-pi-speicherplatz-der-sd-karte-ausnutzen/|SD-Karte vollständig genutzt]] wird.
Dann musste natürlich noch eine grafische Oberfläche drauf. Diese kann man mit folgendem Befehl installieren:
sudo apt-get update
sudo apt-get install xserver-xorg xinit xserver-xorg-video-fbdev lxde lxde-common
Anschließend habe ich den Pi so eingestellt, dass er automatisch in den Desktop startet und sich einloggt. Das kann man in dem Konfigurationsscript vom Raspberry Pi machen. Dieses ruft man wie folgt auf:
sudo raspi-config
===== Display =====
Dann muss man noch eine feste Auflösung erzwingen, sonst nutzt der Pi nur einen kleinen Teil des Bildschirms. Dazu muss man die config.txt bearbeiten:
sudo nano /boot/config.txt
Dort müssen folgende Parameter wie folgt gesetzt sein:
config_hdmi_boost=4
disable_overscan=1
hdmi_cvt 800 480 60 6 0 0 0
hdmi_group=2
hdmi_mode=87
Speichern mit STRG+O -> Enter, Verlassen mit STRG+X.
Um den Touch zum Laufen zu bekommen muss man ebenfalls die /boot/config.txt angepasst werden:
dtparam=spi=on
dtoverlay=spi0-2cs
dtoverlay=spi1-1cs,cs0_pin=16,cs0_spidev=disabled
dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapx$
Dann muss noch die Datei /etc/X11/xorg.conf.d/99-calibration.conf mit folgendem Inhalt erstellt werden:
Section "InputClass"
Identifier "calibration"
MatchProduct "ADS7846 Touchscreen"
Option "Calibration" "208 3905 288 3910"
Option "SwapAxes" "0"
EndSection
Wer sich mal den Original-“Treiber” vom Hersteller ansehen will, den gibts [[http://www.waveshare.com/w/upload/2/24/LCD-show-160520.tar.gz|hier]]. Würde den aber nicht direkt installieren, da er Configs überschreibt. Dann lieber die zwei Änderungen von oben machen.
Kalibrieren musste ich den Touch nicht. Bei mir passt das einigermaßen.
===== HMI =====
Browser für das HMI habe ich einige ausprobiert. Am besten/stabilsten läuft Chromium. Epiphany läuft auch gut, aber stürzt öfters mal ab.
Um Chromium auf den Pi zu bekommen kann man sich den Ubuntu-Paketquellen bedienen. Wie das geht steht [[https://raspberrypi.stackexchange.com/questions/44384/how-to-get-chromium-on-raspberry-3/44690#44690|hier]].
Damit Chromium zum Systemstart gleich im Monitor-Modus mitstartet kann man eine .desktop-Datei im Autostart anlegen:
sudo nano ~/.config/autostart/chromium.desktop
Mit folgendem Inhalt:
[Desktop Entry]
Name=Autostart-Script
Comment=
Type=Application
Exec=/home/pi/startB.sh
Terminal=false
Anschließend muss noch startB.sh in /home/pi/ mit folgendem Inhalt erstellt werden (und ausführbar gemacht werden):
#!/bin/sh
xset -dpms # disable DPMS (Energy Star) features.
xset s off # disable screen saver
xset s noblank # don't blank the video device
chromium-browser --kiosk --incognito --noerrdialogs --disable-infobars http://127.0.0.1:8080/webvisu.htm &
===== Maus ausblenden =====
Möchte man noch die Maus ausblenden, so kann man das Tool unclutter nutzen.
sudo apt-get install unclutter
und man muss noch das Startup-Script ergänzen (z.B. für das Ausblenden nach 5 Sekunden):
unclutter -idle 5 &
===== Bildschirmschoner =====
sudo apt-get update
sudo apt-get install xscreensaver
Und anschließend in der GUI den Screensaver abwählen (Modus: Bildschirmschoner deaktivieren), damit sich der Bildschirm vom Pi nicht abschaltet.
===== CODESYS installieren =====
Dies ist in den Dokumenten von CODESYS bereits gut beschrieben: klick (Erste Schritte)
Starten tut man am besten mit dem Beispiel für die Webvisualisierung. Man sollte nur die Größe der Visualisierung der Auflösung entsprechend einstellen.
===== Fernwartung =====
Ich habe mir noch einen VNC-Server auf den Pi gepackt. Wichtig ist, dass keine neue Session erzeugt wird, also VNC und der Bildschirm das selbe anzeigen. Wie das geht ist hier bereits gut beschrieben.
{{:elektronik:raspberry_pi_sps:screen_codesys_webvisu.png?direct&300|}}
Dazu habe ich mir auch noch drei Icons (Textdateien mit .desktop-Endung) auf der Pi-Arbeitsoberfläche angelegt:
[Desktop Entry]
Name=Autostart-Script
Comment=
Type=Application
Exec=/home/pi/startB.sh
Terminal=false
Name[en_GB]=Webinterface
[Desktop Entry]
Name=Autostart-Script
Comment=
Type=Application
Exec=gksudo -k -u root /etc/init.d/codesyscontrol stop
Terminal=false
Name[en_GB]=Stop Codesys
[Desktop Entry]
Name=Autostart-Script
Comment=
Type=Application
Exec=gksudo -k -u root /etc/init.d/codesyscontrol start
Terminal=false
Name[en_GB]=Start Codesys
Diese sind nützlich, falls man Codesys neustarten will (z.B. wenn die zwei Stunden der Testversion abgelaufen sind).
{{tag>[codesys display pi plc raspberry sps touch]}}
\\ ~~DISQUS~~