Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Page 2 of 2 FirstFirst 12
Results 11 to 19 of 19

Thread: Tags in CSV schreiben

  1. #11
    winnman's Avatar
    winnman is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    30.08.2010
    Location
    Östereich
    Posts
    1,745
    Danke
    570
    Erhielt 244 Danke für 217 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    so bin einen Schritt weiter, fehlerlos compiliert nach dem ich ein bisschen gespielt hab:
    Fehler weg.jpg

    aber jetzt geht es ans eingemachte:
    Error File unknown.PNG
    da stimmt also was mit der Zuweisung nicht, aber was?
    Elektrotechnik und Elektronik funktioniert mit Rauch (Beweis: Tritt Rauch aus, funktioniert auch das Bauteil nicht mehr)

  2. #12
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    15,381
    Danke
    1,272
    Erhielt 4,530 Danke für 3,653 Beiträge

    Default

    Zuerst entferne die Zeile "#define filename...", und dann stelle sicher daß es die WinCC-Variable "Filename_Logfile_Durchfluesse" gibt.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    winnman (15.04.2020)

  4. #13
    winnman's Avatar
    winnman is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    30.08.2010
    Location
    Östereich
    Posts
    1,745
    Danke
    570
    Erhielt 244 Danke für 217 Beiträge

    Default

    Hallo Harald, danke, es stellen sich erste Erfolge ein.

    jetzt schreib er mir jeden Aufruf die Werte so wie m Bild rein, aber immer auf die selbe Stelle.

    Ich bräuchte aber das so wie im Bild rechts, das er jeweils eine neue Zeile anfügt.

    erste erfolge.jpg

    hoffe ich bin nicht zu aufdringlich, aber C und so ist nicht das meine und ich hab sonst niemand der mir das abnehmen kann

    Winnman
    Elektrotechnik und Elektronik funktioniert mit Rauch (Beweis: Tritt Rauch aus, funktioniert auch das Bauteil nicht mehr)

  5. #14
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    15,381
    Danke
    1,272
    Erhielt 4,530 Danke für 3,653 Beiträge

    Default

    Für Hinzufügen von Zeilen müsstest Du die Datei im "append" Mode öffnen
    Code:
       fpFile = fopen(GetTagChar("Filename_Logfile_Durchfluesse"), "a" ); //open file for append
    und die Kopfzeile mit den Variablennamen nur beim ersten Mal (beim neu Anlegen) schreiben. Dazu müsstest Du zunächst testen ob die Datei schon existiert (oder ob sie sich direkt für append öffnen läßt?). Wie das in Standard C programmiert wird habe ich vergessen... ist bei mir zu lange her.
    Weiters müsstest Du die Schleife und das sprintf für das Zusammenbasteln der csv-Zeile ändern (keine Variablennamen, Zeilenschaltung "\n" nur am Ende der Zeile nach allen Werten). Hast Du in Deiner Firma niemanden der C programmieren kann?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    winnman (16.04.2020)

  7. #15
    winnman's Avatar
    winnman is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    30.08.2010
    Location
    Östereich
    Posts
    1,745
    Danke
    570
    Erhielt 244 Danke für 217 Beiträge

    Default

    Hallo Harald,

    Ich bin jetzt auf der Suche bei uns in der Fa. (>2000 Mitarbeiter), aber wenn ich Frage "C" kommt meist "was ist das" oder hab ich mal vor x Jahren in der Ausbildung mal gehabt, . . .

    Hab aber eventuell jetzt einen Kollegen an der Angel.

    Besten Dank für die bisherige Hilfe. Ev. muss ich doch noch mal nachfragen.

    Winnman
    Elektrotechnik und Elektronik funktioniert mit Rauch (Beweis: Tritt Rauch aus, funktioniert auch das Bauteil nicht mehr)

  8. #16
    Join Date
    29.03.2004
    Posts
    7,160
    Danke
    165
    Erhielt 2,153 Danke für 1,537 Beiträge

    Default

    Also in Kurzform mit GetTagMultiWait für 15 Variablen:
    Code:
    // WINCC:TAGNAME_SECTION_START
    #define TAGDATEINAME "intern_8BitTextTag_DateinameMitPfad"
    #define TAG01 "Var01"
    #define TAG02 "Var02"
    #define TAG03 "Var03"
    #define TAG04 "Var04"
    #define TAG05 "Var05"
    #define TAG06 "Var06"
    #define TAG07 "Var07"
    #define TAG08 "Var08"
    #define TAG09 "Var09"
    #define TAG10 "Var10"
    #define TAG11 "Var11"
    #define TAG12 "Var12"
    #define TAG13 "Var13"
    #define TAG14 "Var14"
    #define TAG15 "Var15"
    // WINCC:TAGNAME_SECTION_END
    
    double val[15];
    char* pDateiname;
    long int size;
    BOOL ok;
    FILE* pFile;
    
    ok = GetTagMultiWait("%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f", 
      TAG01, &val[0],
      TAG02, &val[1],
      TAG03, &val[2],
      TAG04, &val[3],
      TAG05, &val[4],
      TAG06, &val[5],
      TAG07, &val[6],
      TAG08, &val[7],
      TAG09, &val[8],
      TAG10, &val[9],
      TAG11, &val[10],
      TAG12, &val[11],
      TAG13, &val[12],
      TAG14, &val[13],
      TAG15, &val[14]
    );
    // ok wertet nicht aus ob die Variablen wirklich aus der SPS gelesen werden konnte, sondern nur ob die Funktion ausgeführt werden konnte
    if (!ok) {
      printf("Fehler: GetTagMultiWait Aufruf war nicht erfolgreich!\n");
    } else {
      // Datei verarbeiten
      pDateiname = GetTagChar(TAGDATEINAME);
      if (pDateiname) {
        pFile = fopen(pDateiname, "a");
        if (pFile) {
          fseek(pFile, 0, SEEK_END);
          size = ftell(pFile);
          // Wenn Dateigroesse 0, dann Header schreiben
          if (size == 0) {
            fprintf(pFile, "%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s\n",
              TAG01, TAG02, TAG03, TAG04, TAG05, TAG06, TAG07, TAG08,
              TAG09, TAG10, TAG11, TAG12, TAG13, TAG14, TAG15);
          }
          fprintf(pFile, "%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f\n",
              val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7],
              val[8], val[9], val[10], val[11], val[12], val[13], val[14]);
          fclose(pFile);
          printf("Erfolg: Die Daten wurden in Datei '%s' geschrieben\n", pDateiname);
        } else {
          printf("Fehler: Die Datei '%s' konnte nicht geoeffnet werden!\n", pDateiname);
        }
      } else {
        printf("Fehler: Dateiname konnte mit GetTagChar nicht gelesen werden!\n");
      }
    }
    Hinter die #defines musst du deine Tagnamen eintragen. Der Tag für den Dateinamen muss eine 8 Bit Textvariable sein, und muss den ganzen Pfad enthalten. Hier musst du nicht 'escapen', also ein Eintrag wie C:\temp\export.csv sollte funktionieren.

    Die Punkt/Komma-Ersetzung muss beim aktuellen WinCC soweit ich weiß nicht mehr vorgenommen werden, da WinCC ich meine seit 7.2 die Lokaleinstellungen vom Betriebssystem verwendet. Also wenn du ein Deutsches Windows hast, dann sollte auch ein Komma ausgegeben werden.

    Wenn du mehr oder weniger Variablen hast, dann sollte ersichtlich sein an welchen Stellen die Anpassungen vorgenommen werden müssen.

  9. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    winnman (16.04.2020)

  10. #17
    winnman's Avatar
    winnman is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    30.08.2010
    Location
    Östereich
    Posts
    1,745
    Danke
    570
    Erhielt 244 Danke für 217 Beiträge

    Default

    Hallo Thomas,

    besten Dank, das ist genau das was ich brauche und es macht das hervorragend.


    ich trau mich ja fast nicht zu fragen aber kannst du mir bei den folgenden Punkten auch noch helfen?

    Wie kann ich für WEB Kameras eine Crome Browser Fenster aufmachen und dann gleichzeitig Passwort für die Kamera übergeben (hab den eingebauten "Explorer probiert, da mault aber die Kamera das die nur mit ektuellem Crome, Firefox, . . . funktioniert

    Wie kann ich über einen Button ein Excel File öffnen? mit execute hab ich das Probiert, da passiert aber genau gar nichts (muss ich ev. den Pfad/Filnamen in einer speziellen Form eingeben?)
    sg Winnman
    Elektrotechnik und Elektronik funktioniert mit Rauch (Beweis: Tritt Rauch aus, funktioniert auch das Bauteil nicht mehr)

  11. #18
    Join Date
    29.03.2004
    Posts
    7,160
    Danke
    165
    Erhielt 2,153 Danke für 1,537 Beiträge

    Default

    Quote Originally Posted by winnman View Post
    Wie kann ich für WEB Kameras eine Crome Browser Fenster aufmachen und dann gleichzeitig Passwort für die Kamera übergeben (hab den eingebauten "Explorer probiert, da mault aber die Kamera das die nur mit ektuellem Crome, Firefox, . . . funktioniert
    Da müsstest du prüfen wie das Passwort übermittelt wird. Wenn per http-get, dann wird das Passwort als Parameter an die URL angehängt, sowas wie http://1.2.3.4/web.html?password=abc. Das macht aber heutzutage eigentlich keiner mehr, weil das Passwort dann im Klartext übermittelt wird. Bei Firefox existiert eine Option um Formularfelder automatisch ausfüllen zu lassen, würde ich mal probieren ob das weiterhilft.

    Manche Kameras geben den Stream im RTSP Format aus. Das kann z.B. der VLC-Player abspielen, für den es auch ein Plugin gibt was wohl auch mal mit WinCC kompatibel war. Für den RTSP Stream ließ sich dann in VLC Benutzername und Passwort mit angeben.

  12. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    winnman (16.04.2020)

  13. #19
    winnman's Avatar
    winnman is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    30.08.2010
    Location
    Östereich
    Posts
    1,745
    Danke
    570
    Erhielt 244 Danke für 217 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Noch mal an alle die bis jetzt geholfen haben besten Dank.

    Hier jetzt mal meine derzeitigen Lösungen:

    1. Mal ein VBA Script, der die Local Time in entsprechende Variablen Schreibt (Triggere ich alle 1s):
    Code:
    Option Explicit
    Function actionDim mDatum_Zeit
    Dim Datum_Zeit
    Dim Jahr
    Dim Monat
    Dim Tag
    Dim Stunde
    Dim Minuten
    Datum_Zeit = Now
    Set mDatum_Zeit = HMIRuntime.Tags("iDatum_Zeit")
    mDatum_Zeit.Read
    mDatum_Zeit.Value = Datum_Zeit
    mDatum_Zeit.Write
    Set Jahr = HMIRuntime.Tags("iJahr")
    Jahr.Read
    Jahr.Value = Year(Now)
    Jahr.Write
    Set Monat = HMIRuntime.Tags("iMonat")
    Monat.Read
    Monat.Value = Month(Now)
    Monat.Write
    Set Tag = HMIRuntime.Tags("iTag")
    Tag.Read
    Tag.Value = Day(Now)
    Tag.Write
    Set Stunde = HMIRuntime.Tags("iStunde")
    Stunde.Read
    Stunde.Value = Hour(Now)
    Stunde.Write
    Set Minuten = HMIRuntime.Tags("iMinute")
    Minuten.Read
    Minuten.Value = Minute(Now)
    Minuten.Write
    'HMIRuntime.Trace "OK geschrieben " & Datum_Zeit & "  " & vbCrLf  'für testzwecke
    
    End Function
    Und jetzt das Hauptscript als C Aktion, wird jede Minute aufgerufen (paar Variablen sind da noch nicht im Endstadium, darum werden da derzeit auch noch sinnlose Werte geschrieben):
    Code:
    #include "apdefap.h"
    int gscAction( void )
    {
    
    // WINCC:TAGNAME_SECTION_START
    #define TAGDATEINAME "Filename_Logfile_Durchfluesse"
    #define TAG01 "iDatum_Zeit"
    #define TAG02 "iJahr"
    #define TAG03 "iMonat"
    #define TAG04 "iTag"
    #define TAG05 "iStunde"
    #define TAG06 "iMinute"
    #define TAG07 "WF_Gaisbach_Q_Restwasser"
    #define TAG08 "WF_Gaisbach_Q_Restwasser"
    #define TAG09 "WF_Gaisbach_Q_Restwasser"
    #define TAG10 "WF_Gaisbach_Q_Restwasser"
    #define TAG11 "WF_Gaisbach_Q_Restwasser"
    #define TAG12 "WF_Gaisbach_Q_Restwasser"
    #define TAG13 "WF_Beereben_Q_Restwasser"
    #define TAG14 "WF_Karbach_Q_Restwasser"
    #define TAG15 "WF_Gaisbach_Q_Restwasser"
    // WINCC:TAGNAME_SECTION_END
    double val[15];    //Anzahl anpassen!
    double iMinute;
    char* pDateiname;
    long int size;
    BOOL ok;
    FILE* pFile;
    SetTagChar("Filename_Logfile_Durchfluesse","d:\\durchfluesse.csv"); //Return-Type: BOOL 
     
    iMinute = GetTagDouble("iMinute"); //Return-Type: double 
    if (iMinute == 0 || iMinute == 15 || iMinute == 30 || iMinute == 45 ) //soll nur bei ganzer 1/4 Stunde den Rest ausführen
    {
    ok = GetTagMultiWait("%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f", 
      TAG01, &val[0],
      TAG02, &val[1],
      TAG03, &val[2],
      TAG04, &val[3],
      TAG05, &val[4],
      TAG06, &val[5],
      TAG07, &val[6],
      TAG08, &val[7],
      TAG09, &val[8],
      TAG10, &val[9],
      TAG11, &val[10],
      TAG12, &val[11],
      TAG13, &val[12],
      TAG14, &val[13],
      TAG15, &val[14]
    );
    // ok wertet nicht aus ob die Variablen wirklich aus der SPS gelesen werden konnte, sondern nur ob die Funktion ausgeführt werden konnte
    if (!ok) {
      printf("Fehler: GetTagMultiWait Aufruf war nicht erfolgreich!\n");
    } else {
      
    // Datei verarbeiten
      pDateiname = GetTagChar(TAGDATEINAME);
      if (pDateiname) {
        pFile = fopen(pDateiname, "a");
        if (pFile) {
          fseek(pFile, 0, SEEK_END);
          size = ftell(pFile);
          
          // Wenn Dateigroesse 0, dann Header schreiben
          if (size == 0) {
            fprintf(pFile, "%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s\n",
              TAG01, TAG02, TAG03, TAG04, TAG05, TAG06, TAG07, TAG08,
              TAG09, TAG10, TAG11, TAG12, TAG13, TAG14, TAG15);
          }
          fprintf(pFile, "%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f\n",
              val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7],
              val[8], val[9], val[10], val[11], val[12], val[13], val[14]);
          fclose(pFile);
          printf("Erfolg: Die Daten wurden in Datei '%s' geschrieben\n", pDateiname);
        } else {
          printf("Fehler: Die Datei '%s' konnte nicht geoeffnet werden!\n", pDateiname);
        }
      } else {
        printf("Fehler: Dateiname konnte mit GetTagChar nicht gelesen werden!\n");
      }
    }
    }
    else {
    printf("keine volle 1/4 Stunde \n"); //zu Tetzwecken wenn es öfter aufgerufen wird
    }
     
    return 0; 
    }
    Elektrotechnik und Elektronik funktioniert mit Rauch (Beweis: Tritt Rauch aus, funktioniert auch das Bauteil nicht mehr)

Similar Threads

  1. TIA Smarttag | CSV-Daten in DB-Schreiben
    By kw_f14 in forum Simatic
    Replies: 0
    Last Post: 25.06.2019, 15:57
  2. CSV-Datei schreiben TwinCAT 3
    By Master1991 in forum CODESYS und IEC61131
    Replies: 2
    Last Post: 09.06.2019, 21:30
  3. 2d-Array in CSV-Datei schreiben
    By van_Burn in forum CODESYS und IEC61131
    Replies: 1
    Last Post: 18.01.2013, 11:49
  4. csv schreiben mit Zeilenumbruch
    By Ampel03 in forum CODESYS und IEC61131
    Replies: 5
    Last Post: 15.02.2012, 07:14
  5. CSV-Daten in Datenbaustein schreiben?
    By Poldi007 in forum Simatic
    Replies: 9
    Last Post: 29.03.2010, 02:31

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •