Automatische Nummerierung bei erstellten Bilder (Pi Kamera)

Ensi8050
2016-05-01
2019-11-08
  • Ensi8050

    Ensi8050 - 2016-05-01

    Guten Tag,

    gibt es eine Möglichkeit im Beispielprojekt Camera (mit dem Raspberry Pi) eine durchlaufende Nummerierung bei den erstellten Bildern einzuführen? Bisher war es ja so, dass immer die alte Datei überschrieben wurde. Ich habe es mit diesem Ansatz versucht:

    nummer:=nummer +1;
    Raspberry_Pi_Camera.Still('"-o Bild"+nummer+".jpg -t 0"');
    

    Jedoch erhalte ich dann nur den Namen Bild_.jpg.

    Vielen Dank schonmal

    Freundliche Grüße

    Ensi8050

     
  • plcmax

    plcmax - 2016-05-01

    Hallo,
    versuch es mal so:
    stBildfilename:=CONCAT('Bild',INT_TO_STRING(Nummer));
    stBildfilename:=concat(stBildfilename,Extention);

    Gruß
    plcmax

     
  • Ensi8050

    Ensi8050 - 2016-05-05

    plcmax hat geschrieben:
    Hallo,
    versuch es mal so:
    stBildfilename:=CONCAT('Bild',INT_TO_STRING(Nummer));
    stBildfilename:=concat(stBildfilename,Extention);
    Gruß
    plcmax

    Hallo plcmax,
    danke für deine Antwort. Dieser Ansatz würde innerhalb von CoDeSys den Namen durchnummerieren. Ist auch nützlich, aber mein Problem ist es, diesen Namen dem Raspberry Pi mitzuteilen; der Pi benennt am Ende ja die Datei. Kennst du dich darin vielleicht aus?

    Grüße

    Ensi8050

    P.S. Habe jetzt es auch mit einem direkten Bash-Befehl versucht (auf dem Raspberry Pi klappt es), aber CoDeSys nimmt es nicht:

    Raspberry_Pi_Camera.Still('-o /media/usbstick/Bild_$(DATE +"%d-%m-%Y_%H:%M:%S").jpg -t 0');
    
     
  • eschwellinger

    eschwellinger - 2016-05-07

    Hi,
    eigentlich hatte es plcmax schon korrekt beschrieben:
    den Pfad muss du halt noch anpassen vermutlich:

    PROGRAM PLC_PRG
    VAR
       xTakePicture: BOOL;
       iPictureCounter: INT;
       strHelperCamOption: STRING:='-o';
       strPath:STRING:=' /media/usbstick/visu/picture';
       strFilename:STRING:='1';
       strFileExtension: STRING:='.jpg';
       strCAMCommand: STRING;
    END_VAR
    VAR CONSTANT
       maxPic:INT:=6;
    END_VAR
    

    die Implementireung:

    IF xTakePicture THEN
       PrepareCommand();
       Raspberry_Pi_Camera.Still(strCAMCommand);
       xTakePicture := FALSE;
       iPictureCounter:=iPictureCounter+1;
       IF iPictureCounter = maxPic THEN
          iPictureCounter:=0;
          strFilename:= '0';
          strCAMCommand:='';
       END_IF
    END_IF
    

    PrepareCommand Action:

    strFilename:= INT_TO_STRING(iPictureCounter);
    strCAMCommand:=strHelperCamOption;
    strCAMCommand:=CONCAT(strCAMCommand,strPath);
    strCAMCommand:=CONCAT(strCAMCommand,strFilename);
    strCAMCommand:=CONCAT(strCAMCommand,strFileExtension);
    

    Grüße
    Edwin

    CameraMultiblePicWebvisu.project [162.75 KiB]

     
  • Ensi8050

    Ensi8050 - 2016-05-14

    Hallo Herr Schwellinger,

    vielen Dank für die ausführliche Erklärung, jetzt weiß ich was plcmax gemeint hatte. Die Stringerzeugung funktioniert jetzt wunderbar, außer mit dem Datum-Uhrzeit-Stempel ('-o /media/usbstick/Bild_DT#2016-05-10-06:54:18.jpg -t 100' als String macht er nicht). Das jetztige Problem besteht darin, dass keine korrekten Videodateien in der if-Schleife erzeugt werden bzw. nur die Videodatei (mit nur 1KB, 10 Sekunden waren eingestellt). Das xTakePicture ist bei mir ein digitaler Eingang, dessen Flanke überprüft wird (steigende Flanke). Der Index am Ende wird ohne Probleme hochgezählt.
    Ich hoffe, Sie könnten nochmal einen kurzen Blick darüberwerfen?

       IF Eingang_steigende_Flanke THEN                           
             //Bild und Video aufnehmen   
             Index:= Index+1;
       END_IF
    

    Herzlichen Dank und schöne Grüße

    Ensi8050

     
  • eschwellinger

    eschwellinger - 2016-05-15

    Hi,
    dann so, ne kleine Statemachine hilft in allen Lebenslagen

    PROGRAM PLC_PRG
    VAR
       xTakePicture: BOOL;
       iPictureCounter: INT;
       strHelperCamOption: STRING:='-o';
       strPath:STRING:=' /root/visu/';
       strFilename:STRING:='Picture';
       strFileExtension: STRING:='.jpg';
       strCAMCommand: STRING;
       Bitmapversion: ARRAY[1..maxPic] OF INT;
       iState: INT;
    END_VAR
    VAR CONSTANT
       maxPic:INT:=6;
    END_VAR
    
    IF xTakePicture THEN
       CASE iState OF
          0: // Prepare PictureName
             strFilename:='Picture';
             PrepareCommand();
             iPictureCounter:=iPictureCounter+1;   
             iState:=iState+1;
          1:
             Raspberry_Pi_Camera.Still(strCAMCommand);
             IF iPictureCounter = maxPic +1 THEN
                iPictureCounter:=0;
                strFilename:= '0';
                strCAMCommand:='';
             END_IF
                iState:=iState+1;
          2:
             xTakePicture := FALSE;
             iState:=0;
       END_CASE
    END_IF
    

    Grüße
    Edwin

     
  • CloudHead

    CloudHead - 2019-11-08

    Der korrekte Pfad lautet:

    Cam.Still('-w 800 -h 600 -t 500 -o /var/opt/codesys/PlcLogic/visu/pic.jpg');

    Edit1:
    Ich meinte natürlich den Pfad auf den Visu-Ordner der SD-Karte, damit
    diese in der Standardeinstellung dann über den Image-Pool eingebunden werden können.

    Gruß
    CloudHead

     

Log in to post a comment.