CoDeSys V3 mit Raspberry Pi Kamera

Cedhen
2014-07-28
2016-05-05
  • Cedhen - 2014-07-28

    Hallo zusammen

    Als Erstes... Danke an alle die hier bereits gepostet haben. Konnte schon einiges, mit den Inhalten, erreichen.

    Nun bin ich jedoch an ein Thema gestoßen, wo ich einfach nicht weiter komme.

    Meine Situation:
    Ich möchte über CoDeSys die Raspberry Pi Kamera ansteuern.
    D.h im Detail...
    - Triggerung der Kamera
    - Einstellungen der Kamera (Bildgröße, Kontrast,usw.)
    - Abspeichern der Fotos auf der SD-Karte

    Wie muss ich das Programm aufbauen, dass ich auf die Raspberry Pi Kamera Zugriff habe?
    Die Bibliothek mit den Methoden wurde ja automatisch implementiert... weiß jedoch nicht genau wie diese einzusetzen sind.
    Ein Beispiel Programm würde hier enorm weiter helfen.

    Herzlichen Dank im Voraus
    Cedhen

     
  • eschwellinger

    eschwellinger - 2014-07-28

    Hallo,

    es wird ja wenn man das Storepackage installiert folgendes Beispiel mitinstalliert:

    "c:\Users\<username>\CODESYS Control for Raspberry PI\1.1.0.0\Camera.project" </username>

    Aufgerufen wird also z.B mache ein Bild so:
    (man kann z.B das Bild über den SPS file browser hochholen auf den CODESYS PC)

    IF xTakePicture THEN
       Raspberry_Pi_Camera.Still('-o Picture.jpg');
       xTakePicture := FALSE;
    END_IF
    

    welche optionen man einstellen kann sieht man hier im Tooltipp bei der Bibliothek.

    Grüße
    Edwin

    IMG: FileBrowser.jpg

    IMG: raspistill.jpg

     
  • Cedhen - 2014-07-28

    Super Sache!!! Danke für die schnelle Antwort

    Hab es gleich getestet und es funktioniert. Nun werde ich alle nötigen Einstellungen ergänzen und nochmals versuchen.

    Manchmal sieht man den Wald vor lauter Bäumen nicht.

     
  • eschwellinger

    eschwellinger - 2014-07-28

    Hi,

    noch ein Beispiel für ein Video:

    IF xTakeVideo THEN
       Raspberry_Pi_Camera.Vid('-w 640 -h 480 -fps 90 -t 12000 -vf -hf -o test90fps.h264');
       xTakeVideo := FALSE;
    END_IF
    

    Ne Zeitlupenaufnahme mit der PI CAM getriggert vom SPS Programm.
    ->das test90fps.h264' mit Filebrowser von Pi holen und als avi umbennen und "staunen"
    Grüße
    Edwin

     
  • Cedhen - 2014-07-30

    Hallo Edwin

    Danke nochmals für deine tolle Unterstützung.
    Habe alles am laufen.

    Leider stehe ich nun am nächsten Problem an...
    Habe zwar schon oft mit CoDeSys gearbeitet, jedoch nie auf diese Art und Weise.

    Beschreibung der zukünftigen Applikation:
    Wie bereits von dir erklärt, Bilder mit Hilfe der Pi Kamera aufnehmen.
    Diese Bilder sollten nun in einem ImagePool zur Verfügung stehen, um ein ausgewähltes Bild auf der WebVisu an zu zeigen.
    Nach diversen Aufnahmen (Bsp. 100 Bilder) wird über eine Random Funktion auf ein Bild zugegriffen und Visualisiert. Die Bild Dateien werden über einen Zähler indexiert (Bsp. 1.jpg, 2.jpg, usw.). In CoDeSys (CoDeSys_Control_for_Raspberr_Pi/Dateien) sind diese bereits sichtbar.

    Meine Fragen:
    - In welchem Verzeichnis werden die Bilder im Laufzeitsystem abgelegt (Verzeichnis im Raspberry Pi)?
    - Wie kriege ich diese Bilder automatisch in eine Bildersammlung?
    - Wie kann ich gezielt Bilder aus der Bildersammlung öffnen und auf die Visu legen?

    Ich nehme an, dass dies der richtige Weg ist. 1. Bilder aufnehmen, 2. Bilder in einen ImagePool legen, 3. Bilder aus dem ImagePool nehmen um zu verwenden. Evtl. gibt es einen schnelleren, direkteren Weg?

    Ich danke dir im Voraus für deine Unterstützung

    Gruss
    Cedhen

     
  • eschwellinger

    eschwellinger - 2014-07-30

    Hallo Cedhen,

    die Bilder liegen in /root/visu/ auf dem Pi , den Pfad könntest du ändern über das /etc/CODESYSControl.cfg vielleicht aber auch besser ins RAM legen damit
    nicht soviel auf die SD Karte geschrieben wird, das schaded auf kurz oder lange der SD (vor allem schreiben und den Pi ausschalten kann die SD korrupt werden lassen)

    Dmust ne Visu Seite machen die z.B 1.jpg, 2.jpg... usw enthält im ImagePool in CODESYS.

    Dann das caching der Bilder wie hier ( l viewtopic.php?f=18&t=4631#p14783 l )
    schon beschrieben abschalten und eben über die CAM Bilder(raspistill) die Bilder direkt austauschen (überschreiben lassen).
    Klar welche Bilder du anzeigst machst du schon über den ImagePool und vielleicht Frames oder eben die Bilder entsprechend unsichtbar schalten
    nur das active sichbar.

    Grüße
    Edwin

     
  • Cedhen - 2014-07-31

    Hallo Edwin

    Wird ein Bild aufgenommen, habe ich diese Bilder in folgendem Verzeichnis

    Jedoch befinden sich diese Bilder in keiner Bildersammlung.

    Kann ich die aufgenommenen Bilder nicht direkt in eine Bildersammlung speichern?
    Da ich so gegen 200 Bilder pro Tag machen werde, muss ich die Bilder wohl auf die SD-Karte speichern. Nehme an, dass das RAM dazu nicht ausreichend ist.

    So könnte ich auf der WebVisu einfach auf das letzte Bild verweisen (variable Bild_ID im Bildfeld eingeben) und hätte so immer eine aktuelle Ansicht.

    Danke für eine Antwort

    Gruss
    Cedhen

    IMG: Verzeichnis.jpg

     
  • eschwellinger

    eschwellinger - 2014-08-04

    Hallo Cedhen,

    also ich habe dir mal ein Beispiel Projekt erstellt, wie es gehen könnte.
    Paar Randbedingungen:
    Ich speichere die Bilder nicht auf SD Karte da ich denke das dein PI das keine paar Wochen überleben würde
    das zyklische schreiben auf die SD Karte, meine ich.
    (Du kannst es natürlich trotzem ausprobieren - aber bitte die Lizenz sichern, damit wenn die SD Karte Schrott ist, damit du die Lizenz wieder herstellen kannst - falls du eine hast )

    Also entweder RAM Disk anlegen, hast du ja gemeint reicht dir nicht (denke das ware die schönste Lösung), also alternative USB Stick mounten - bei dem ist es egal wenn der eventuell durch zu vieles schreiben Schaden nimmt, hauptsache Pi läuft weiter.


    1. mit RAM Disk anlagen mit 100MB:
    mit ssh auf Pi einloggen:
    sudo nano /etc/fstab
    am Ende folgende Zeile einfügen:
    tmpfs /tmp tmpfs nodev,nosuid,relatime,size=100M 0 0

    dann
    sudo reboot
    und mit
    df -h
    kontrollieren ob Ramdisk vorhanden:
    Filesystem Size Used Avail Use% Mounted on
    rootfs 15G 2.3G 12G 17% /
    /dev/root 15G 2.3G 12G 17% /
    devtmpfs 183M 0 183M 0% /dev
    tmpfs 38M 224K 38M 1% /run
    tmpfs 5.0M 0 5.0M 0% /run/lock
    tmpfs 75M 20K 75M 1% /run/shm
    /dev/mmcblk0p1 56M 9.6M 47M 18% /boot
    /dev/sda1 7.6G 24M 7.6G 1% /media/usbstick
    tmpfs 100M 20M 81M 20% /tmp

    nun das visu Verzeichnis anlagen in der Ramdisk (das könnte man später in rc.local machen damit es nach jedem booten passiert):
    **sudo mkdir /tmp/visu **

    den symbolischen Link muss man nur einmal machen:
    sudo ln -s /tmp/visu/ visu


    2. alternative USB Stick Mounten:
    ssh auf Pi verbinden und folgendes machen:

    sudo mkdir /media/usbstick

    dann:
    sudo blkid /dev/sda1
    aufrufen
    /dev/sda1: UUID="D424-5D3F" TYPE="vfat"

    dann fstab editieren
    sudo nano -Bw /etc/fstab

    folgende Zeile ergänzen (UUID durch deine ersetzen):

    UUID=3241-40CE /media/usbstick/ vfat defaults,auto,umask=000,users,rw 0

    so nun noch einen symbolischen Link erstellen: (der visu Ordner auf den USB stick)

    sudo ln -s /media/usbstick/visu/ visu

    nach dem Download des CODESYS Projektes im visu Ordner auf dem Pi die webvisu.cfg.json
    ändern (also einmal webvisu runterladen... dann ändern dann oben in CODESYS nach webvisu2 umbenennen, damit diese nicht mehr beim download überschrieben wird)

    {
    "UpdateRate": 200,
    "PlcAddress": "0000.9ED4.C1D5",
    "UseLocalHost": true,
    "Application": "Application",
    "StartVisu": "SendTweetVisu",
    ** "NumCachedImages": 0,**
    "BestFit": true,
    "LogLevel": "INFO",
    "CommBufferSize": 50000,
    "HasKeyboard": false
    }

    dann beim 2. download in CODESYS:
    auf der Webvisu
    Name of Webvisu: webvisu2 ändern (siehe screenshot).

    Das wars, beachten muss man noch, das man bei der Ramdisk Lösung wenn man die persistent haben will den visu Ordner ja nach jedem Start
    des Pi's wieder füllen muss, also entweder wieder über CODESYS downloads oder aber eben sichern z.B nach home/pi/visu und diesen beim neustart
    über rc.local wieder zurücksichert.

    Grüße
    Edwin

    IMG: webvisu2.jpg

    CameraMultiblePicWebvisu.project [257.61 KiB]

     
  • Cedhen - 2014-08-05

    Herzlichen Dank für die wiederum schnelle Antwort.

    Habe mich nun entschlossen, alles auf dem RAM zu lösen. Werde die Datenqualität reduzieren und dann geht das schon.
    Kann ich die Grösse auch auf 200M erhöhen oder gibt das Probleme?

    Habe die Anpassungen folgender Massen vorgenommen:

    Leider sehe ich nicht, dass die entsprechende RAM-Disk vorhanden ist. Zumindest sehe ich keine mit 100M.

    Danke im Voraus für eine Antwort

    Gruss
    Cedhen

    IMG: angepasstes file.jpg

    IMG: nach_reboot.jpg

     
  • eschwellinger

    eschwellinger - 2014-08-05

    Hallo
    hats du das in die fstab eingetragen + Reboot?

    sudo nano /etc/fstabdas hier: tmpfs /tmp tmpfs nodev,nosuid,relatime,size=100M 0 0 **
    am Ende der Datei
    sudo reboot**
    Grüße
    Edwin

     
  • Cedhen - 2014-08-05

    Hallo Edwin

    Wie in den PrintScreens zu sehen habe ich diese so aufgerufen (GNU naon 2.2.6 File: /etc/fstab)
    Eingabe habe ich auch nochmals kontrolliert. Stimmt.
    Reboot habe ich ebenfalls ausgeführt.

    Gruss
    Cedhen

     
  • Cedhen - 2014-08-05

    Sorry Edwin

    Mein Fehler!!! Sollte mal eine Pause machen.
    Die Eingabe war nicht richtig.

     
  • eschwellinger

    eschwellinger - 2014-08-06

    Hi,

    es ist ja so das man den Visu Pfad normalerweise so umbiegen können müsste (in /etc/CODESYSControl.cfg):

    [SysFile]
    FilePath.1=/etc/, 3S.dat
    PlaceholderFilePath=/media/usbstick/visu,$visu$

    bedauerlicherweise gibt noch einen Fehler der verhindert, das dieses "Umbiegen" funktioniert, darum wie oben beschreiben die symbolischen links erstellen.
    wem das zu viel ist, kann aber gerne den "Plan B" Workaround anwenden:

    man muss im root Verzeichnis auch noch das Verzeichnis wie auf dem Stick anlagen: also
    root/media/usbstick/visu
    Verzeichnis hirachie anlegen dann funktioniert das Umbiegen des Visuverzeichnisses wie geplant.
    Wie gesagt mit diesem Workaround kann man sich die sym. Links sparen.
    Das nur der Vollständikeit halber.
    Grüße
    Edwin

     
  • Cedhen - 2014-08-07

    Hallo Edwin

    Habe nun alles am laufen.
    Die RAM Variante getestet und läuft.
    Die USB Variante getestet und läuft.
    Muss jetzt nur noch schauen, dass die Bilder auch nach einem reboot gespeichert bleiben. Sollte ich aber hinkriegen.

    Habe Anfang dieser Woche die Vollversion erhalten und das neue Image geladen und eingerichtet.
    Lizenz sollte auf dem Raspberry Pi drauf sein (Siehe Bild)

    Trotzdem bricht mir die EtherCat Verbindung alle zwei Stunden ab. So wie ohne die Vollversion.
    Habe ich etwas falsch gemacht?

    Danke für eine Antwort

    Gruss
    Cedhen

    IMG: Lizenz.jpg

     
  • stefanh - 2016-02-29

    Hallo
    habe folgendes Projekt runtergeladen: CameraMultiblePicWebvisu.project. Nun habe ich folgende Frage: In Image Pool sind Picture0 bis Picture5. Wie kann ich dort noch mehr Bilder einfügen? Ich bräuchte das für ein anderes Projekt.

    Herzlichen Dank
    Stefan

     
  • eschwellinger

    eschwellinger - 2016-02-29

    Hi Stefan,

    so...

    Grüße
    Edwin

    IMG: ImagePool.jpg

     
  • stefanh - 2016-03-03

    Hallo Edwin
    Vielen Dank für die schnelle Antwort.
    Bei mir funktioniert`s leider nicht.

    IMG: 2.PNG

     
  • stefanh - 2016-03-03

    IMG: 3.PNG

     
  • eschwellinger

    eschwellinger - 2016-03-03

    Hi,

    die picture6.jpg muss auf deinem CODESYS PC ja irgendwo sein... ist die das?
    Grüße
    Edwin

     
  • stefanh - 2016-03-03

    Hi

    ist auf jedem Fall auf dem Raspberry, dort ist es ja auch sichtbar in root/visu...aber wie geht`s weiter?

    Gruß
    Stefan

     
  • stefanh - 2016-03-04

    Hallo Edwin

    Habs gefunden ...läuft.

    Vielen Dank nochmal

    Gruß
    Stefan

     
  • Ensi8050 - 2016-05-05

    Hallo cedhen, Edwin und stefanh,

    hattet ihr eine automatische Nummerierung der erstellten Bilder? Wenn ja, wie habt ihr das in CoDeSys realisiert?

    Vielen Dank schonmal

    Ensi8050

     

Log in to post a comment.