WinCC WinCC altes Speichern Script Hilfe

Lars123

Level-1
Beiträge
188
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

ich habe ein altes WinCC 4x Projekt nach V7.3 migiert.

Es gibt ein Script das bestimmte Variablen in einer Date speichert. Leider geht das nicht mehr.

Ich verstehe leider das Script nicht so ganz. Es gibt eine Auswahl welche gespeichert werden soll.
Aber woher kommt die Liste welche Variablen exportiert werden sollen? Und woher kommt der Wert der Variable?

C:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#include "rezept.h"
FILE* file;
char *addmold=".wzp";        // Endekennung der Maschinenparameterdatei
char *addheat=".hzp";        // Endekennung der Maschinenparameterdatei
char *addcont=".hyp";        // Endekennung der Maschinenparameterdatei
char *addmach=".map";        // Endekennung der Maschinenparameterdatei
char *text1;
char *text2;
char *textges;
char szBuffer[80];    // Hilfsbuffer
BOOL ok=FALSE;

extern char filename[128];
extern char dest[100];            // Pointer auf neuen Dateizeiger

char *moldname;
char *heatname;
char *contname;
char *machname;
char line[82];        // Buffer für Zeileninhalt
char *ddest;
char *ptr;            // Zur stringlänge

char *filter="(*.rzp)\0*.rzp\0";
printf("Getriggert\n");

ddest=SysMalloc(129);
moldname=SysMalloc(72);
heatname=SysMalloc(72);
contname=SysMalloc(72);
machname=SysMalloc(72);
ptr=SysMalloc(20);

text1=SysMalloc(40);
text2=SysMalloc(40);
textges=SysMalloc(80);
printf("Speicher freigegeben\n");

strncpy(text1," ",39);
strcpy(text1,GetText("812.pdl","Statischer Text16"));    //Rückgabe-Typ :char*
strncpy(text2," ",39);
strcpy(text2,GetText("812.pdl","Statischer Text3"));
strncpy(textges," ",79);
strncpy(textges,text1,39);
strcat(textges," ");
strcat(textges,text2);
printf("Texte gelesen\n");

printf("%s\n",filter);
printf("%s\n",textges);

ok=GetSaveName(filename,textges,filter);                // Dialog aufrufen
if (ok)                            // Wenn ok dann
{
   SetTagWord("S_ZUST",0);                // Balken Wert setzen
   SetTagChar("AKT_DAT_NAME",filename);
   file=fopen(filename,"wt");            // File öffnen
   printf("%s\n",filename);
   ptr = strrchr(filename, '.');
   strncpy(ddest," ",128);
   strncpy(ddest, filename, (ptr-filename));    // Bis zum Punkt kopieren
   printf("%s\n",ddest);
   strncpy(dest," ",64);
   strncpy(dest,ddest,64);
   printf("%s\n",dest);
   if (GetTagBit("MOLD_DATA"))// Datenspeichern
   {
      strncpy(moldname," ",64);
      strncpy(moldname,dest,64);
      printf("%s\n",moldname);

      strcat(moldname,addmold);
      printf("%s\n",moldname);
      
      sprintf(line,"%s\n",moldname);            //1
      fputs(line, file);
   }
   if (GetTagBit("HEAT_PARA"))// Datenspeichern
   {
      strncpy(heatname," ",64);
      strncpy(heatname,dest,64);
      strcat(heatname,addheat);
      sprintf(line,"%s\n",heatname);            //1
      fputs(line, file);
   }
   if (GetTagBit("CONT_PARA"))// Datenspeichern
   {
      strncpy(contname," ",64);
      strncpy(contname,dest,64);
      strcat(contname,addcont);
      sprintf(line,"%s\n",contname);            //1
      fputs(line, file);
   }
   if (GetTagBit("MACH_DATA"))// Datenspeichern
   {
      strncpy(machname," ",64);
      strncpy(machname,dest,64);
      strcat(machname,addmach);
      sprintf(line,"%s\n",machname);            //1
      fputs(line, file);
   }
   fclose(file);
   if (GetTagBit("MOLD_DATA"))// Datenspeichern
   {
      SetTagBit("S_MOULD",TRUE);
      SetTagBit("CCMOULD",TRUE);
      SetTagWord("STATEMOULD",0);
   }
   else
   {
      SetTagBit("CCMOULD",FALSE);
      SetTagBit("S_MOULD",FALSE);
   }
   if (GetTagBit("HEAT_PARA"))// Datenspeichern
   {
      SetTagBit("S_HEAT",TRUE);
      SetTagBit("CCHEAT",TRUE);
      SetTagWord("STATEHEAT",0);
   }
   else
   {
      SetTagBit("CCHEAT",FALSE);
      SetTagBit("S_HEAT",FALSE);
   }
   if (GetTagBit("CONT_PARA"))// Datenspeichern
   {
      SetTagBit("S_CONT",TRUE);
      SetTagBit("CCCONT",TRUE);
      SetTagWord("STATECONT",0);
   }
   else
   {
      SetTagBit("CCCONT",FALSE);
      SetTagBit("S_CONT",FALSE);
   }
   if (GetTagBit("MACH_DATA"))// Datenspeichern
   {
      SetTagBit("S_MACH",TRUE);
      SetTagBit("CCMACH",TRUE);
      SetTagWord("STATEMACH",0);
   }
   else
   {
      SetTagBit("CCMACH",FALSE);
      SetTagBit("S_MACH",FALSE);
   }
   SetTagBit("SETUP_ON",FALSE);

}                    // Speicher freigeben
 
Eins ist mir noch aufgefallen:

Wincc V7 kennt anscheint die #include "rezept.h" nicht mehr.

Weißjemand was das für eine Datei ist?
 
Moin,

ich habe die Rezept.h und Rezept.dll gefunden und eingefügt. Aber trotzdem geht das Speichern und Lade Fenster zur Dateiauswahl nicht auf.

Kann man in der Runtime fehler und Scripte die ausgeführt sind debbugen?
 
Du kannst zur Diagnose apdiag.exe aus den uTools Verzeichnis starten, oder auch im entsprechenden Bild ein Diagnosefenster für die GSC-Runtime einfügen. Alles was dann z.B. mit printf ausgegeben wird landet dann auch dort.

Schau mal nach ob in der rezept.h die Funktion GetSaveName als in der dll vorhanden deklariert wurde. Wenn das vermutlich eine selbstgeschriebene dll ist und du keine Quelldateien hast um diese ggf. neu erzeugen zu können, dann könnte es schwer werden. Wenn das so alt ist dann benötigst du evtl. noch je nach dem ob das statisch oder dynamisch zu einer C Bibliothek gelinkt wurde evtl. noch weitergehende Dateien.

Aber lege erstmal die dll im entsprechenden Verzeichnis ab wo sie auch gefunden werden kann, und dann schau dir die Fehlermeldungen an.

Die C-Funktion im WinCC ist auch etwas seltsam vermutlich von jemandem geschrieben der nur nebenbei mal was in C geschrieben hat. Die wo Speicher allokiert wird, erfolgt eine Ausgabe "freigegeben". Die Verwendung von strncpy ist auch zweifelhaft, zumindest wenn das wasserdicht gegen Speicherverletzung sein soll.
 
Zurück
Oben