Variablenarchivierung

franzlurch

Level-1
Beiträge
339
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

habe hier ein MP277 8" Touch, mit dem ich Variablen archivieren möchte. Mein Problem dabei ist nur, dass die Variablen im CSV Archiv immer durcheinander abelegt werden, der Kunde mir aber eine strike Reihenfolge für die Formatierung vorgegeben hat. Hatt hierzu schon einmal einen Eintrag anfang des Jahres gemacht. Bei der ersten Anlage hab ich das ganze nun über Scripte gemacht, d.h. die ganzen CSV-Dateien immer selbt formatier und beschrieben. Da ich alle 5s ca. 80 Variablen archivieren muss, wirkt sich das ganze dann doch ziemlich auf die Performance des Panels aus.
Hat jemand ne Idee, wie ich das ganze eleganter Lösen kann? Muss jetzt nämlich die zweite Anlage programmieren und bin mit der genannten Variante nicht so ganz glücklich.
 
hi,
wann bekommt der Kunde die Archive denn? sofort oder nach dem Archivieren?
mir ist nix bekannt, dass von WinCC flexible aus ohne Skripte eine Reihenfolge oder Formatierung vorgegeben werden kann...
wenn der Kunde nach dem Archivieren die Ergebnisse will, musst du die Daten der csv-Datei eben im nachhinein über Skripte oder so sortieren...
 
mit flexible können ja meine ich externe Programme gestartet werden.
vielleicht kannst du was programmieren, das deine csv-Datei kopiert, ordnet und so, wenn der Vorgang zu ende ist. und der Kunden kann dann die "formatierte Datei" sich holen
 
Hallo,
vielleicht stellst du dein Script mal hier ein - möglicherweise hat es ja Optimierungs-Potential.
Allerdings ist es so, dass das MP277 nicht unbedingt ein Power-Rechner ist ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Variablen archivierung

Hi Larry,

was für ein Panel würdest du hierfür empfehlen?? MP377 oder sogar Panel PC ???

Anbei mein Script zum archivieren:

Code:
Dim f,fs,datei
Dim fs2,pfad,mmc
Dim fs3,dateipfad
Dim traceability_io,freigabe_daten_loggen
Dim datum
Dim blattnummer,teilenummer
Dim batch_nr_basis, batch_nr_haerter
Dim operator 
Dim maschinennummer
'ACTUAL VALUES
Dim druck_p_eingang_a,druck_p_eingang_b,druck_p_ausgang_a,druck_p_ausgang_b
Dim solltemp_aggregat,isttemp_aggregat
Dim isttemp_behaelter, niveau_behaelter
Dim solltemp_behaelter, solltemp_beh_a, solltemp_beh_b, isttemp_beh_a, isttemp_beh_b
Dim ausflussrate_ab,ar_a,ar_b
Dim mv,mv_abw_max, mv_abw_ist
Dim dichte_a,dichte_b
Dim bsz_ges_std,bsz_ges_min,bsz
Dim zertifikatsnummer_a,zertifikatsnummer_b
Dim verbrauch_a,verbrauch_b,total_verbrauch_a,total_verbrauch_b
Dim niveau_a,niveau_b
 

traceability_io=SmartTags("Interne_Variablen\INTERNE_VAR_Traceability_Data_OK")
freigabe_daten_loggen=SmartTags("Externe_Variablen_IC\ic_freigabe_daten_loggen")
If traceability_io=True And freigabe_daten_loggen=True Then
'If traceability_io=True Then
 'Betriebsstundenzähler erstellen
 bsz_ges_std=SmartTags("Externe_Variablen\IW_BETRIEBSSTUNDEN_GES_STD")
 bsz_ges_min=SmartTags("Externe_Variablen\IW_BETRIEBSSTUNDEN_GES_MIN")
 bsz=bsz_ges_std&"h"&"  "&bsz_ges_min&"min" 
 
 'MMC CHECK
 Set fs2 = CreateObject("filectl.filesystem")
 pfad="\Storage Card MMC"
 
 mmc=fs2.Dir(pfad)
 
 If mmc="Storage Card MMC" Then
  'Dateisystem erstellen
  Set f = CreateObject("filectl.file")
  Set fs = CreateObject("filectl.filesystem")
  
  'Aktuelles Datum lesen
  datum=Date
  
  ' Maschinen Seriennummer
  maschinennummer="xyz"
  
  'Speicherort zuweisen 
  dateipfad="\Storage Card MMC\Logs"
  
  'Dateiname von Interner Variable zuweisen 
  datei=SmartTags("Interne_Variablen\INTERNE_VAR_Dateiname_Archiv_Export")
  
  'INTERNE Variablen, lokalen zuweisen
  blattnummer=SmartTags("Interne_Variablen\INTERNE_VAR_Blade_Number")
  teilenummer=SmartTags("Interne_Variablen\INTERNE_VAR_TEILENUMMER")
  batch_nr_basis=SmartTags("Interne_Variablen\INTERNE_VAR_Batch_Number_Base1")
  batch_nr_haerter=SmartTags("Interne_Variablen\INTERNE_VAR_Batch_Number_Hardener")
  zertifikatsnummer_a=SmartTags("Interne_Variablen\INTERNE_VAR_Kalibrierungszertifikatsnummer_A")
  zertifikatsnummer_b=SmartTags("Interne_Variablen\INTERNE_VAR_Kalibrierungszertifikatsnummer_B")
 
  
   
  'EXTERNE ACTUAL VALUES lokalen Variablen zuweisen
  dichte_a=SmartTags("Externe_Variablen\IW_DICHTE_A")
  dichte_b=SmartTags("Externe_Variablen\IW_DICHTE_B")
  druck_p_eingang_a=FormatNumber(SmartTags("Externe_Variablen\IW_DRUCK_P_EING_A"),1)
  druck_p_eingang_b=FormatNumber(SmartTags("Externe_Variablen\IW_DRUCK_P_EING_B"),1)
  druck_p_ausgang_a=FormatNumber(SmartTags("Externe_Variablen\IW_DRUCK_P_AUSG_A"),1)
  druck_p_ausgang_b=FormatNumber(SmartTags("Externe_Variablen\IW_DRUCK_P_AUSG_B"),1)
  solltemp_aggregat=FormatNumber(SmartTags("Externe_Variablen\IW_SOLLTEMPERATUR"),1)
  isttemp_aggregat=FormatNumber(SmartTags("Externe_Variablen\IW_IST_TEMP"),1)
  ausflussrate_ab=FormatNumber(SmartTags("Externe_Variablen\IW_AR"),1)
  ar_a=FormatNumber(SmartTags("Externe_Variablen\IW_AR_A"),1)
  ar_b=FormatNumber(SmartTags("Externe_Variablen\IW_AR_B"),1)
  mv=FormatNumber(SmartTags("Externe_Variablen\IW_MV_IST"),1)
  mv_abw_max=FormatNumber(SmartTags("Externe_Variablen\IW_MV_ABW_MAX"),1)
  mv_abw_ist=FormatNumber(SmartTags("Externe_Variablen\IW_MV_ABW_IST"),1)
  verbrauch_a=FormatNumber(SmartTags("Externe_Variablen\IW_Verbrauch_pro_Blatt_A"),1)
  verbrauch_b=FormatNumber(SmartTags("Externe_Variablen\IW_Verbrauch_pro_Blatt_B"),1)
  total_verbrauch_a=FormatNumber(SmartTags("Externe_Variablen\IW_Verbrauch_Gesamt_A"),1)
  total_verbrauch_b=FormatNumber(SmartTags("Externe_Variablen\IW_Verbrauch_Gesamt_B"),1)
  isttemp_behaelter=FormatNumber(SmartTags("Externe_Variablen\IW_temperatur_container_ist"),1)
  niveau_behaelter=FormatNumber(SmartTags("Externe_Variablen\IW_niveau_container"),1)
  niveau_a=FormatNumber(SmartTags("Externe_Variablen\IW_NIVEAU_A"),1)
  niveau_b=FormatNumber(SmartTags("Externe_Variablen\IW_NIVEAU_B"),1)
  solltemp_behaelter=FormatNumber(SmartTags("Externe_Variablen\P_solltemp_beh"),1)
  solltemp_beh_a=FormatNumber(SmartTags("Externe_Variablen\P_solltemp_beh_a"),1)
  solltemp_beh_b=FormatNumber(SmartTags("Externe_Variablen\P_solltemp_beh_b"),1)
  isttemp_beh_a=FormatNumber(SmartTags("Externe_Variablen\IW_isttemp_beh_a"),1)
  isttemp_beh_b=FormatNumber(SmartTags("Externe_Variablen\IW_isttemp_beh_b"),1)
  
  
  
  
   
  'Wenn Ordner Logs nicht vorhanden ist erstellen
  Set fs3 = CreateObject("filectl.filesystem")
  If fs3.dir(dateipfad) = "" Then fs.mkdir(dateipfad)
  
  
  'Wenn die Datei mit diesem Namen noch nicht besteht,
  'dann anlegen und Kopfzeile schreiben
  If fs.dir(datei)="" Then 
   f.open datei,2
   f.Lineprint "Date" & ";" & "Time" & ";" & "Blade number" & ";" & "Model part" & ";" & "Ratio A:B" & ";" & "Amount A [l]" & ";" & "Amount B[l]" & ";" & "Batch number base A" & ";" & "Batch number hardener B"& ";" & "Certificate Calibr. nr. A" & ";" & "Certificate Calibr. nr. B" & ";" & "Press. Pump Inp. A [bar]" & ";" & "Press. Pump Inp. B [bar]" & ";" & "Press. Pump Outp. A [bar]" & ";" & "Press. Pump Outp. B [bar]" & ";" & "Temp.TH S [°C]" & ";" & "Temp. TH R [°C]" & ";" & "Temp. Cont. S [°C]" & ";" & "Temp.Cont. R [°C]" & ";" & "Temp. Cont. A S [°C]" & ";" & "Temp. Cont. A R [°C]" & ";" & "Temp. Cont. B S [°C]" & ";" & "Temp. Cont. B R [°C]" & ";" & "Level A [%]" & ";" & "Level B [%]" & ";" & "Level Cont. [%]" & ";" & "Flow rate A+B [l/min]" & ";" &  "Flow rate A [l/min]" & ";" & "Flow rate B [l/min]" & ";" & "Ratio Tol. [%]" & ";" & "Ratio Dev. [%]" & ";" & "Total Amount A [l]" & ";" & "Total Amount B [l]" & ";" & "Machine serial nr." & ";" & "Tot. mach. running hours [h]" & ";" & "Tot. mach. running hours [min]" & ";" & "Density base A [g/cm³]" & ";" & "Density hardener B [g/cm³]"  
   f.close 
  End If
  
  'Log Daten anhängen 
   f.open datei,8
   'f.Lineprint "Date" & ";" & "Time" & ";" & "Blade number" & ";" & "Model part" & ";" & "Ratio A:B" & ";" & "Amount A [l]" & ";" & "Amount B[l]" & ";" & "Batch number base A" & ";" & "Batch number hardener B"& ";" & "Certificate Calibr. nr. A" & ";" & "Certificate Calibr. nr. B" & ";" & "Press. Pump Inp. A [bar]" & ";" & "Press. Pump Inp. B [bar]" & ";" & "Press. Pump Outp. A [bar]" & ";" & "Press. Pump Outp. B [bar]" & ";" & "Temp.TH S [°C]" & ";" & "Temp. TH R [°C]" & ";" & "Temp.Cont. R [°C]" & ";" & "Level A [%]" & ";" & "Level B [%]" & ";" & "Level Cont. [%]" & ";" & "Flow rate A+B [l/min]" & ";" &  "Flow rate A [l/min]" & ";" & "Flow rate B [l/min]" & ";" & "Ratio Tol. [%]" & ";" & "Ratio Dev. [%]" & ";" & "Total Amount A [l]" & ";" & "Total Amount B [l]" & ";" & "Machine serial nr." & ";" & "Tot. mach. running hours [h:min]" & ";" & "Density base A [g/cm³]" & ";" & "Density hardener B [g/cm³]"  
   f.Lineprint datum & ";" & Time & ";" & blattnummer & ";" & teilenummer & ";" & mv & ";" & verbrauch_a & ";" & verbrauch_b & ";" & batch_nr_basis & ";" & batch_nr_haerter & ";" & zertifikatsnummer_a & ";" & zertifikatsnummer_b & ";" & druck_p_eingang_a & ";" & druck_p_eingang_b & ";" & druck_p_ausgang_a & ";" & druck_p_ausgang_b & ";" & solltemp_aggregat & ";" & isttemp_aggregat & ";" & solltemp_behaelter & ";" & isttemp_behaelter & ";" & solltemp_beh_a & ";" & isttemp_beh_a & ";" & solltemp_beh_b & ";" & isttemp_beh_b & ";" & niveau_a & ";" & niveau_b & ";" & niveau_behaelter & ";" & ausflussrate_ab & ";" & ar_a & ";" & ar_b & ";" & mv_abw_max & ";" & mv_abw_ist & ";" & total_verbrauch_a & ";" & total_verbrauch_b & ";" & maschinennummer & ";" & bsz_ges_std & ";" & bsz_ges_min & ";" & dichte_a & ";" & dichte_b
   f.close
  
  
 Else
 
 SetBitInTag SmartTags("Interne_Variablen\INTERNE_VAR_FEHLER"), 1
  
 End If 

End If
 
Hallo Franz,
ich mache solche Sachem mit einem Panel-PC und PC-Runtime. Dabei habe ich durchaus Anwendungen, wo ich solche Datenreihen im 2-Sekundentakt schreibe - ohne Performance-Verlust der Visu.

Was mir an deinem Script auffällt :
Fürs Speichern ist es immer günstiger nur einen großen String zu schreiben als diese zusammengesetzte Konstruktion.

Also :
Code:
   f.Lineprint "Date" & ";" & "Time" & ";" & "Blade number" & ";" & "Model part" & ";"   ....
 
könnte auch so aussehen :
 
   f.Lineprint "Date;Time;Blade number;Model part;"   ....
Da du das 2mal im Script hast könnte ich mir hier sogar gut eine Script-Variable vorstellen, die du einmal beschreibst und dann wieder verwendest.

In der Zeile, wo du die Werte übergibst könntest du auch aus allen Einzelwerten und den Semikolons erst einen String bilden und dann den schreiben.

Eventuell würde ich mir aus die Zwischen-Variablen ersparen und die Formatierung direkt in den Zielstring packen - das ist aber eventuell auch Haarspalterei ... das Hauptproblem wird wohl das Speichern und der Zeildatenträger sein.

Gruß
Larry
 
also ich schreibe mit einem op277 ähnlich viele daten

ausführungszeit ermitteln
Code:
dim t1,t2,...
t1=timer
 
...den ganzen kram aus dem script bearbeiten
 
t2=timer
f.lineprint t2-t1
close
end sub
als ergebnis erhalte ich 0
d.h. also unter 1 sekunde
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Volker,
wo kommt denn die Variable "Timer" bei dir her ? Ich kenne da nur Time ...

Für ein Script in der Länge und Konstellation von Franz Lurch eine Laufzeit von 0 anzunehmen ist unrealistisch. Ich habe da leider keine wirklich TP/OP-Erfahrung was das angeht, allerdings ist die PC-Runtime bisher immer performanter gewesen als die Siemens-Geräte - und bei einer PC-Runtime hatte ich bei solchen Konstrukten im Sekundentakt aufgerufen schon Schierigkeiten bekommen.

Gruß
Larry
 
der unterschied zu mir ist, das ich nicht alles in eine zeile schreiben sondern alles untereinander aber auch ca 80 mal

so
Code:
 f.LinePrint "p1ist;"&SmartTags("p1_istfreq")&"Hz"
 f.LinePrint "p2ist;"&SmartTags("p2_istfreq")&"Hz"
ich denke sogar, das mein script länger braucht, da ich jedesmal das lineprint nutze

timer ist eine funktion von vbs und gibt die zeit in sekunden nach 0:00 Uhr zurück.
 
Variablen archivieren

Morgen,

die Schlussvolgerung aus dem ganzen ist doch nun, wenn eine Kunde eine bestimmte Formatierungsreihenfolge vorgibt, geht kein Weg daran vorbei, das ganze händisch mittels VB Script zu programmieren ???


Franz Lurch
 
Servus zusammen,

habt ihr Erfahrung mit langen Laufzeiten zur Variablenarchivierung?

Zielsystem ist ein MP377 und ich möchte ca. 10 Variablen im 5 s Raster über 1-2 Jahre sichern. Mit der Intergrierten Variablenaufzeichnung komme ich da nutürlich nicht besonders weit.

Wie starte ich eigentlich die Variablenaufzeichnung?

Gruß

Benjamin
 
Hallo,
du baust dir eine Varioable, die in dem von dir gewünschten Zeitraster ihren Wert ändert. An diese Wertänderung hängst du ein Script, das die von dir gewünschten Variablen sichert. Wie das geht steht u.A. hier.
Ich habe allerdings die Befürchtung, dass dein Speicherplatz dafür nicht annähernd ausreichend sein wird ...

Gruß
Larry
 
Zurück
Oben