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

Ergebnis 1 bis 8 von 8

Thema: Variaben automatisch mit Skript in User Archiv einlesen

  1. #1
    Registriert seit
    13.08.2009
    Beiträge
    22
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Unglücklich


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Freunde der Nacht,

    mit welchem ua- Befehl liest man die Variablen ins User Archive?
    Und ist davor ein Sprung an die letzte Stelle notwendig? (Befehl?)

    Grüße
    Zitieren Zitieren Variaben automatisch mit Skript in User Archiv einlesen  

  2. #2
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

    Standard

    Hier hatte ich mal ein Beispielprojekt gepostet
    http://www.sps-forum.de/showpost.php...84&postcount=2
    Da kann man sich ein paar Sachen abgucken

  3. #3
    Holcapone ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.08.2009
    Beiträge
    22
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hatte es erst gar nicht mitbekommen, aber das schreiben klappt schon (noch per Knopfdruck). Jetzt ist das Problem nur noch, dass er dazu immer die letzte Zeile nimmt, aber halt nicht die allerletzte (leer) und damit eine neue erstellt.
    Weisst du da was?

    Ich schau mir mal das Bsp. an.

  4. #4
    Registriert seit
    15.12.2007
    Beiträge
    712
    Danke
    84
    Erhielt 105 Danke für 94 Beiträge

    Standard

    Also dein Beispiel ist genau das was ich auch im Moment suche.
    Nur finde ich bei dir die Skripte nicht mit denen er die Daten ins Archiv schiebt.
    Die liegen ja anscheinend nicht auf Buttons.
    Ich hätte gerne so eine Funktion wie auf dem Button "Insert Job".
    Ich muss dazu sagen das ich mich mit Skripten so gut wie gar nicht auskenne.
    Nur wenn ich alleine schon den Code von dem Button in mein Projekt einfügen will dann meckert WinCC schon rum das es "uaUtilityEnumRecords" etc. nicht kennt.
    Kannst du mir da mal ein bißchen auf die Sprünge helfen?

    Wäre super.

  5. #5
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

    Standard

    uaUtilityEnumRecords ist eine Projektfunktion, die du auch aus dem
    Beispielprojekt in dein Projekt kopieren musst. Du findest sie, wenn du
    den C-Skript Editor öffnest

  6. #6
    Holcapone ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.08.2009
    Beiträge
    22
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Habe jetzt soviel rausbekommen, dass man zuerst dassmachen muss:
    Damit sinnvolle Daten im neuen Datensatz stehen, müssen die Felder des lokalen Datensatzpuffers vor dem Aufruf von uaArchiveInsert mit den Funktionen uaArchiveSetFieldValue... beschrieben werden.
    Die interne Spalte "ID" muss mit der Funktion uaArchiveSetFieldValueLong in den aktuellen Datensatz geschrieben werden.

    Und danch: uaArchiveInsert: Fügt den lokalen Datensatzpuffer in die aktuelle Datenbank ein.

    Probiere momentan damit rum, bekomme aber immer noch Fehlermeldungen.
    Hier mal mein Programmausschnitt:


    //////////////////////////////////////////////////////////
    //Zeile einfügen
    /////////////////////////////////////////////////////////
    uaArchiveSetFieldValueLong(hArchive,8,0); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,7,0); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,6,0); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,5,0); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,4,0); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,3,0); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,2,0); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,1,0); //Return-Type: BOOL

    bOK=uaArchiveInsert(hArchive); //Return-Type: BOOL
    if (bOK==FALSE)
    {
    printf("Fehler: uaArchiveInsert fehlgeschlagen. error=%d\r\n",uaGetLastError());
    }
    printf("uaArchiveInsert war erfolgreich.\r\n");

  7. #7
    Holcapone ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.08.2009
    Beiträge
    22
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Bin jetzt bissl weiter gekommen, hier der Skriptausschinitt:


    bOK=uaArchiveSetFieldValueLong(hArchive,8,666); //Return-Type: BOOL
    if (bOK==TRUE)
    {
    printf("Erfolgreich uaArchiveSetFieldValueLong, Stelle 8,Wert 666.\r\n");
    }
    if (bOK==FALSE)
    {
    printf("FEHLER uaArchiveSetFieldValueLong, Stelle 8,Wert 666.\r\n");
    }
    uaArchiveSetFieldValueLong(hArchive,7,666); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,6,666); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,5,666); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,4,666); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,3,666); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,2,666); //Return-Type: BOOL
    bOK=uaArchiveSetFieldValueLong(hArchive,1,666); //Return-Type: BOOL
    if (bOK==TRUE)
    {
    printf("Erfolgreich uaArchiveSetFieldValueLong, Stelle 1,Wert 666.\r\n");
    }
    if (bOK==FALSE)
    {
    printf("FEHLER uaArchiveSetFieldValueLong, Stelle 1,Wert 666.\r\n");
    }

    uaArchiveSetFieldValueLong(hArchive,0,66); //Return-Type: BOOL

    bOK=uaArchiveInsert(hArchive); //Return-Type: BOOL
    if (bOK==TRUE)
    {
    printf("Erfolgreicher uaArchiveInsert.\r\n");
    }
    if (bOK==FALSE)
    {
    printf("FEHLER uaArchiveInsert.\r\n");
    }

    Habe die Funktion auf eine Taste gelegt und wenn man klickt, dann wird eine neue Zeile mit der ID 66 angelegt. Das Problem ist, dass es nur bei der 66 bleibt und ich keine neue ID- Nummer eingetragen wird. Dies müsste man mit einer Variablen machen, die immer weiter erhöht (inkrementiert) wird.Bis jetzt habe ich aber Problememit den Datentypen, der will immer gleich nen Wert als Parameter haben.

    Hilfe!

  8. #8
    Holcapone ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.08.2009
    Beiträge
    22
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Soweit bin ich fertig mit meinem Skript, es wird eine neue Zeile angelegt und dann die aktuellen Variablenwerte reingeschrieben. Danach wird das ganze exportiert. Gibt noch ein, zwei kleine Macken, aber sonst gehts erst mal.

    Hier zum nachmachen und verbessern:

    #include "apdefap.h"

    int gscAction( void )
    {
    UAHCONNECT hConnect;
    UAHARCHIVE hArchive;
    BOOL bOK;
    LONG NumberOfFields ;
    long* plCount;
    int iRet = 0;

    ///////////////////////////////////////////////////////////
    // connect component user archive
    //////////////////////////////////////////////////////////
    bOK = uaConnect(&hConnect);
    if ((bOK == FALSE) || (hConnect == NULL)){
    printf ("#E101: CRT3884_UAExport() - uaConnect failed! error=%d\r\n", uaGetLastError());
    iRet = -101;

    }

    ///////////////////////////////////////////////////////////
    // connect to archive via name
    //////////////////////////////////////////////////////////
    bOK = uaQueryArchiveByName(hConnect, "LEDArchiv", &hArchive);
    if ((bOK == FALSE) || (hArchive == NULL)){
    uaDisconnect(hConnect);
    printf ("#E201: CRT3884_UAExport() - uaQueryArchiveByName failed! error=%d\r\n", uaGetLastError());
    iRet = -201;
    }

    ///////////////////////////////////////////////////////////
    // set filter
    //////////////////////////////////////////////////////////
    //bOK = uaArchiveSetFilter(hArchive, "ChargeName like '%charge%' and DateBegin >= '2006-01-01 00:00:00' AND DateBegin < '2007-01-01'");
    //if (bOK == FALSE){
    //printf ("#E301: CRT3884_UAExport() - uaArchiveSetFilter failed! error=%d\r\n", uaGetLastError());
    //iRet = -301;
    //}

    ///////////////////////////////////////////////////////////
    // set sort
    //////////////////////////////////////////////////////////
    //bOK = uaArchiveSetSort(hArchive, "ChargeUser , ChargeName desc");
    //if (bOK == FALSE){
    //printf ("#E302: CRT3884_UAExport() - uaArchiveSetSort failed! error=%d\r\n", uaGetLastError());
    //iRet = -302;
    //}

    ///////////////////////////////////////////////////////////
    // open archive
    //////////////////////////////////////////////////////////
    bOK = uaArchiveOpen(hArchive);
    if (bOK == FALSE){
    uaReleaseArchive(hArchive);
    uaDisconnect(hConnect);
    printf ("#E401: CRT3884_UAExport() - uaArchiveOpen failed! error=%d\r\n", uaGetLastError());
    iRet = -401;
    }


    //******* Get Number of Fields **********************************************
    NumberOfFields = uaArchiveGetFields( hArchive );
    printf("Number of Fields = %u\n", NumberOfFields );

    //*******Anzahl der Datensätze***********************************************
    uaArchiveGetCount(hArchive,plCount); //Return-Type: LONG
    printf("Die Anzahl der Datensätz beträgt: %D\r\n",plCount);

    ///////////////////////////////////////////////////////////////////////
    //Zur letzten Stelle des Archivs springen
    //////////////////////////////////////////////////////////////////////
    bOK= uaArchiveMoveLast(hArchive);
    if (bOK == FALSE)
    {
    printf("Fehler bei uaArchiveMoveLast! error=%d\r\n", uaGetLastError());
    }
    if (bOK == TRUE)
    {
    printf("Erfolgreich zur letzten Stelle gesprungen.\r\n");
    }


    ///////////////////////////////////////////////////////////
    //Variablen ins Archiv schreiben
    ///////////////////////////////////////////////////////////
    bOK= uaArchiveReadTagValues(hArchive,NULL,0,0);
    if (bOK == TRUE)
    {
    printf("Erfolgreiches schreiben ins Anwenderarchiv.\r\n");
    }
    if (bOK == FALSE)
    {
    printf("Fehler beim Lesen aus den Feldvariablen! errror=%d\r\n",uaGetLastError());
    }


    //////////////////////////////////////////////////////////
    //Zeile einfügen
    /////////////////////////////////////////////////////////


    uaArchiveSetFieldValueLong(hArchive,0,0); //Return-Type: BOOL
    bOK=uaArchiveSetFieldValueLong(hArchive,1,666); //Return-Type: BOOL
    if (bOK==TRUE)
    {
    printf("Erfolgreich uaArchiveSetFieldValueLong, Stelle 1,Wert 666.\r\n");
    }
    if (bOK==FALSE)
    {
    printf("FEHLER uaArchiveSetFieldValueLong, Stelle 1,Wert 666.\r\n");
    }
    uaArchiveSetFieldValueLong(hArchive,2,666); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,3,666); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,4,666); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,5,666); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,6,666); //Return-Type: BOOL
    uaArchiveSetFieldValueLong(hArchive,7,666); //Return-Type: BOOL
    bOK=uaArchiveSetFieldValueLong(hArchive,8,666); //Return-Type: BOOL
    if (bOK==TRUE)
    {
    printf("Erfolgreich uaArchiveSetFieldValueLong, Stelle 8,Wert 666.\r\n");
    }
    if (bOK==FALSE)
    {
    printf("FEHLER uaArchiveSetFieldValueLong, Stelle 8,Wert 666.\r\n");
    }


    bOK=uaArchiveInsert(hArchive); //Return-Type: BOOL
    if (bOK==TRUE)
    {
    printf("Erfolgreicher uaArchiveInsert.\r\n");
    }
    if (bOK==FALSE)
    {
    printf("FEHLER uaArchiveInsert.\r\n");
    }


    ///////////////////////////////////////////////////////////////////
    //Aktualisiert das geöffnete Anwenderarchiv
    //////////////////////////////////////////////////////////////////
    bOK=uaArchiveUpdate(hArchive);
    if (bOK==TRUE)
    {
    printf("Erfolgreiches Aktualisieren des Anwenderarchivs.\r\n");
    }
    if (bOK==FALSE)
    {
    printf("Fehler ""Update_failed"" = 106.\r\n");
    }


    ///////////////////////////////////////////////////////////
    //Archiv neu laden
    ///////////////////////////////////////////////////////////
    bOK=uaArchiveRequery(hArchive); //Return-Type: BOOL
    if(bOK==FALSE)
    {
    printf("Archiv neu laden ist fehlgeschlagen.\r\n");
    }
    if(bOK==TRUE)
    {
    printf("Archiv neu laden war erfolgreich.\r\n");
    }



    ///////////////////////////////////////////////////////////
    // export archive
    //////////////////////////////////////////////////////////
    bOK = uaArchiveExport(hArchive, "c:\\Export\\MyArchive.csv", 0, 0);
    if (bOK == FALSE){
    printf ("#E501: CRT3884_UAExport() - uaArchiveExport failed! error=%d\r\n");
    }
    ///////////////////////////////////////////////////////////
    // close archive
    //////////////////////////////////////////////////////////
    bOK = uaArchiveClose(hArchive);
    if (bOK == FALSE){
    printf ("#E801: CRT3884_UAExport() - uaArchiveClose failed! error=%d\r\n", uaGetLastError());
    iRet = -801;
    }

    bOK = uaReleaseArchive(hArchive);
    if (bOK == FALSE){
    printf ("#E802: CRT3884_UAExport() - uaReleaseArchive failed! error=%d\r\n", uaGetLastError());
    iRet = -802;
    }

    ///////////////////////////////////////////////////////////
    // disconnect component user archive
    //////////////////////////////////////////////////////////
    bOK = uaDisconnect(hConnect);
    if (bOK == FALSE){
    printf ("#E803: CRT3884_UAExport() - uaDisconnect failed! error=%d\r\n", uaGetLastError());
    iRet = -803;
    }

    return 0;
    }

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 22.09.2011, 08:42
  2. User Archiv
    Von moinsf im Forum HMI
    Antworten: 3
    Letzter Beitrag: 07.10.2009, 17:37
  3. WinCC String und User Archiv
    Von Raydien im Forum HMI
    Antworten: 9
    Letzter Beitrag: 12.01.2007, 16:14
  4. User Archiv
    Von Otto99 im Forum HMI
    Antworten: 4
    Letzter Beitrag: 05.05.2006, 12:31
  5. SQL-Zugriffe auf WinCC User-Archiv
    Von jogi im Forum HMI
    Antworten: 1
    Letzter Beitrag: 19.10.2004, 01:04

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •