# Was ist hier falsch? (WinCC, Skript für Archivexport)



## Holcapone (1 Dezember 2009)

Hallo,
das ist mein kurzes Skript:

#include "apdefap.h"
 long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
UAHARCHIVE hArchive;
BOOL janein;
janein = uaArchiveExport(hArchive,"C:\Program Files\Siemens\Step7\S7Proj\WinCC_3\wincproj\OS(1)\Export\LED-Anzeige\Control1.csv",0,0);    
}
return (0);

Und als Fehlermeldung bekomme ich: 
line8: error (0040): <type> expected before 'return'

Will eigentlich nur das Archiv in die *.csv Datei exportieren, ohne auf den Knopf drücken zu müssen. Habe schon im Forum recherchiert und weiß, dass das ein altes Thema ist. Hat jemand trotzdem eine Lösung für mich?

Grüße...


----------



## Thomas_v2.1 (1 Dezember 2009)

Unter C ist der Backslash in einem String ein Steuerzeichen.
Wenn du das Zeichen verwenden willst musst du es 'escapen', also einen Backslash davorschreiben. Also:

C:\\Program Files\\Siemens\\Step7....


----------



## Holcapone (1 Dezember 2009)

Habe es gerade probiert, daran liegt es nicht.
Der Dateipfad ist ja auch in den Anführungszeichen geschrieben.
Die Fehlermeldung bezieht sich auf das return, da weiß ich aber nicht weiter.


----------



## Thomas_v2.1 (1 Dezember 2009)

Das return gehört ja auch in die geschweifte Klammer.


----------



## Holcapone (2 Dezember 2009)

Uups... jetzt geht es ohne Fehlermeldung.
Muss ich eigentlich beim ersten Parameter nicht mein Archiv in irgendeiner Form angeben? ("hArchive")


----------



## Holcapone (9 Dezember 2009)

Also nach viel belesen, habe ich folgendes Skript geschrieben:

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
UAHCONNECT hConnect;
UAHARCHIVE hArchive;
uaConnect(&hConnect);
uaQueryArchiveByName(hConnect, "Einzelwerte", &hArchive);
uaArchiveOpen(hArchive);
uaArchiveExport(hArchive,"C:\\Export\\Control2.csv",0,0);    
uaArchiveClose(hArchive);    
uaReleaseArchive(hArchive);
uaDisconnect(hConnect);    
}

Also das Archiv Einzelwerte soll unter den Dateinamen Control2.csv im Ordner C:\Export abgelegt werden.
Das habe ich als Aktion auf einen Taster projektiert, der also auf Tastendruck das Archiv exportieren soll.
Das klappt aber nicht! Wenn ich den Knopf drücke, passiert nix.
Woran könnte das liegen?


----------



## marlob (9 Dezember 2009)

Zum UserArchiv in eine csv zu exportieren benutze ich folgendes Script.
In dem Script musst du 
in Zeile 30 den Archivnamen anpassen
in Zeile 64 den Pfad anpassen
und überall wo UAExport_VAM5() steht, sollte der Name deines Scripts stehen.


----------



## Holcapone (10 Dezember 2009)

Ich habe es jetzt mal mit deinem Skript probiert, hat aber noch nichts funktioniert. Es scheint mit sehr stark an die Siemensvorlage angelehnt zu sein. 

Wie realisiere ich eigentlich die Fehlerausgabe, die durch die "print"-Befehle erzeugt wird? Mit einem EA- Feld? Oder gibt es irgendwo eine Konsole?

Dann könnte ich sehen, wo der Hase im Pfeffer liegt.

Danke.


----------



## marlob (10 Dezember 2009)

Das ist die Siemensvorlage  Angepasst auf mein Projekt
Was funktioniert denn genau nicht? Hast du das Script angepasst?


----------



## marlob (10 Dezember 2009)

Du kannst über Smart Objects -> Application Windows ->
Global Script -> GSC Diagnostic ein diagnosefenster einfügen


----------



## Holcapone (10 Dezember 2009)

Momentan sieht es noch so aus:

#E201: UAExport_VAM5() - uaQueryArchiveByName failed!  error=0
#E302: UAExport_VAM5() - uaArchiveSetSort failed!  error=1002
#E401: UAExport_VAM5() - uaArchiveOpen failed!  error=1002
#E501: UAExport_VAM5() - uaArchiveExport failed!  error=54589576
#E801: UAExport_VAM5() - uaArchiveClose failed!  error=1002
#E802: UAExport_VAM5() - uaReleaseArchive failed!  error=1002
#E803: UAExport_VAM5() - uaDisconnect failed!  error=1002

Sollte im gleichen Fenster nicht auf das Archiv zugegriffen werden? Z. B. mit TrendControl.​


----------



## marlob (10 Dezember 2009)

Holcapone schrieb:


> ...
> #E201: UAExport_VAM5() - uaQueryArchiveByName failed!  error=0
> ...​


Dieser Fehler deutet darauf hin, das das Archiv nicht geöffnet werden kann.
Hast du den Namen angepasst?


----------



## Holcapone (10 Dezember 2009)

Ich habe genau den Namen eingegeben, der auch im TagLogging steht.

Die Codezeile:
bOK = uaQueryArchiveByName(hConnect, "Einzelwerte", &hArchive);

Der Archivname im TagLogging:
Einzelwerte   Prozesswertarchiv

Könnte es vielleicht daran liegen,
dass ich in den ersten Zeile des Quelltextes folgendes NICHT stehen habe: "int Einzelwerte(void)" ?

Sieht so aus bei mir:

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#pragma code("kernel32.dll")
VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);
#pragma code()

UAHCONNECT hConnect;
...
...

Es lässt sich ja so nichts dazuschreiben, bis zum "{".



Aussehemüsste es aber laut Vorgabe so:

#include "apdefap.h"
int Einzelwerte(void)
{
#pragma code("kernel32.dll")
VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);
#pragma code()

UAHCONNECT hConnect;
...
...​


----------



## marlob (10 Dezember 2009)

Dann wird das wohl nicht funktionieren. Mein Script ist für das UserArchiv und nicht fürs Taglogging


----------



## marlob (10 Dezember 2009)

Probiere mal dies
Wie wird die Funktionalität "Report speichern" des WinCC Online Trend Control verwendet, um archivierte Prozesswerte als CSV-Datei zu exportieren?


----------



## Holcapone (10 Dezember 2009)

Das hatte ich schon gefunden,
aber das Skript hat noch nicht gefunzt.

Mache mich jetzt erst mal über UserArchiv schlau.


----------



## Holcapone (14 Dezember 2009)

So, habe mich jetzt mit UA beschäftigt: Angelegt und bissl rumgespielt.
Exportieren hebe ich mir noch auf,  denn ich versuche noch das automatische Variablenlesen hinzubekommen.
Hatte dazu schon ein Skript für die alte OCX geschrieben, dass immer alle 2 Sek. die Werte liest. In der RT gab es dafür aber einen Fehler: fehlercode 0x80040005
Mein Code:

SetPropChar("Tabellen.pdl","Control3","PressTBButton", "Last");
SetPropChar("Tabellen.pdl","Control3","PressTBButton", "Next");
SetPropChar("Tabellen.pdl","Control3","PressTBButton","ReadVar");


Was ist denn eigentlich der moderne ua- Befehl für Variablen lesen?

15.12.09: Exportieren geht jetzt von allein, mittel Global Skript. Es fehlt jetzt nur noch das selbsständige einlesen der Werte, habe dazu aber einen neuen Fred aufgemacht.


----------

