# WinCC - Daten aus User Archiv bearbeiten



## .:lxg:.Chefkoch (20 März 2007)

Hallo....

Ich bräuchte für mein WinCC - Projekt eine Datenbank, in der ich eine Anzahl x Artikel verwalten kann. (Anlegen neuer Datensätze, verändern, löschen und Suchfunktion nach Artikelnummer)

Ich habe mir mit dem User Archiv bereits eine Datenbank erzeugt, in der nun 50 Artikel liegen.

Wie kann ich die Daten aus dem User Archiv nun konfortabel verwalten. Habe solch eine Funktionalität bisher noch nicht gemacht, und bin auch nicht gerade fit in VB-Scripts. Hat vielleicht jemand ein Beispiel oder vielleicht einen Link, wie ich an die Daten des User Archives herankomme?

Vielen Dank im vorraus


----------



## Raydien (20 März 2007)

ähnliches habe ich schonmal realiesiert.
Ich habe Zyklisch Daten ins User Archiv geschrieben und 1x am Tag nach CSV exportiert.. Folgende Skripts habe ich für das User Archiv gefunden.

ersteinmal ein Link:
http://support.automation.siemens.c...us&aktprim=0&extranet=standard&subtype=133000



C-Skript:

#include "apdefap.h"
int CRT3884_UAExport(void)
{
UAHCONNECT hConnect;
UAHARCHIVE hArchive;
BOOL bOK;
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;
  return (iRet);
}
///////////////////////////////////////////////////////////
// connect to  archive via name
//////////////////////////////////////////////////////////
bOK = uaQueryArchiveByName(hConnect, "MyArchiv", &hArchive);
if ((bOK == FALSE) || (hArchive == NULL)){
  uaDisconnect(hConnect);
  printf ("#E201: CRT3884_UAExport() - uaQueryArchiveByName failed!  error=%d\r\n", uaGetLastError());
  iRet = -201;
  return (iRet);
}
///////////////////////////////////////////////////////////
// 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;
  return (iRet);
}
///////////////////////////////////////////////////////////
// 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;
  return (iRet);
}
///////////////////////////////////////////////////////////
// export archive
//////////////////////////////////////////////////////////
bOK = uaArchiveExport(hArchive, "p:\\tmp\\MyArchive.csv", 0, 0);
if (bOK == FALSE){
  printf ("#E501: CRT3884_UAExport() - uaArchiveExport failed!  error=%d\r\n");
  iRet = -501;
}
///////////////////////////////////////////////////////////
// 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 (iRet);


Hoffe konnte dir helfen

Gruß 
Das Raydien


----------



## .:lxg:.Chefkoch (20 März 2007)

Erstmal Danke für die superschnelle   Antwort.

Allerdings brauche ich da noch ein wenig mehr Hilfestellung zu. Habe wie gesagt wenig Erfahrung mit Scripten. 

Ich habe gerade mal versucht, das Script in mein Projekt einzubauen. Nun bekomme ich folgende Fehlermeldung:

Line86: error(0040) <ident> expected before '<eof>'.  

Ich bin auch nicht ganz sicher, wo genau ich das Script einbauen muß.

Ich stelle mir das nachher so vor:
Ich habe ein Bild, mit einer Eingabe/Anzeigemaske. Dort werden die Daten eines Datensatzes angezeigt. Sie können bei Bedarf auch geändert werden. Am unteren Bildschirmrand habe ich die Möglichkeit, eine beliebige Artikelnummer einzugeben. Durch drücken eines Buttons werden die entsprechenden Daten aus der Datenbank geladen (Suchfunktion), und in der Anzeigemaske dargestellt. (Es sollte auch Buttons für 'neuen Datensatz' und 'Änderung übernehmen' geben evt. Scrollbuttons <- / ->)
Mit OK würde ich das Bild schließen wollen und die Daten runter in die Steuerung schreiben.

Ist so etwas machbar?.....(auch ohne VB oder C++ Starprogrammierer zu sein?? )


----------



## Raydien (20 März 2007)

Hast du schon einmal das Interface vom User Archiv auf deiner Grafik gelegt? und dann das Achiv miteinander verbunden?

evt sind da schon alle sachen drin die du benötigst.

Wie du das aber dann in einem Schwung zu Steuerung bekommst weiß ich nicht, denke aber das das user Archiv unterstützt.


----------



## .:lxg:.Chefkoch (20 März 2007)

lol....

verstehe absolut Bahnhof.... Was meinst du mit Interface auf Grafik legen. Wie mache ich das. Bin ein absoluter "honk" was das angeht. Es würde mir sehr helfen, wenn du nem "Neuling" wie mir mal detalliert erklärst, was ich ausprobieren soll. (Hab doch vom User Archiv null Plan!!) 

Ich weiß nur, das so was geht, da ich eine ähnliche Anwendung schon mit InTouch programmiert habe. Muß doch mit WinCC auch zu machen sein. Allerdings........(-> kriege eh langsam den Eindruck, das WinCC voll das sch..... Programm ist    boah...ist das umständlich gemacht!)


----------



## Raydien (20 März 2007)

Ja Intouch ist in diesen bereich vieles leichter, nagut jedes System hat seine Vor und nachteil. Ich finde dafür die Komminikation ist in Intouch nicht so gelungen.

Im Grafik Editor haste rechts eine Leiste wo Buttons usw. drin ist da steht irgendwo was mit User Archiv. Such das mal und pack das mal auf einem Bild. Das steht aber auch in WinCC in der Hilfe.


----------

