TIA Langzeitarchiv in SQL Datenbak

aleXandroW

Level-2
Beiträge
59
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Voraussetzung: S7300, PC-Runtime WinCC V13

ich archiviere eine Variable über Variablenarchiv in eine SQL Datenbank. Ich möchte ein neues Archiv erzeugen, wenn das Archiv voll ist. Sprich wenn voll wird ein Ereignis ausgelöst: Es wird eine neue Tabelle angelegt und in der neuen Tabelle werden die Variable weiter archiviert. Die erste Tabelle heißt zum Beispiel Laufzeit_1 und die neue Tabelle Laufzeit_2.
Ich denke mal das anlegen eines neuen Archivs muss über ein Script erfolgen bzw. kopieren des Archivs? Wie ist da die Syntax?
 
Wie schreibst du den jetzt in die "SQL-Datenbank"?
Das erstellen der Tabelle muss ja dann über den selben Weg laufen.

WinCC Advanced oder Professional?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

den Tabellenname von Archiven kann man nicht ändern.
Ich kenne nur die Möglichkeit beides, den Tabellenname und das schreiben per Scripte zu machen.
Dazu benutze ich zwei Scripte. Der erste erzeugt eine neue Tabelle in der Datenbank. Der zweite schreibt Variablen in die Tabelle.
Im zweiten Script gibt es noch die Besonderheit mit Real Zahlen. Die Kommas müssen als Punkt ersetzt werden.

Code:
Sub Neue_Tabelle_Gesamt(ByRef TabName)' Dieses Skript erzeugt eine Neue Tabelle in einer SQL Datenbank


Dim conn, rst, SQL_Tabelle, Merker


Merker = 0


On Error Resume Next 


Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")


conn.Open "Provider=MSDASQL;DSN=D71-Archiv" 'DSN= Name der ODBC-Datenbank 


'Fehlerroutine
If Err.Number <> 0 Then
	ShowSystemAlarm "Fehler 1 #" & Err.Number & " " & Err.Description
	Err.Clear
	Exit Sub
End If


SQL_Tabelle = "CREATE TABLE " & TabName & " (Nummer Int Not Null, Zeitstempel_SPS DATETIME Not Null, Bediener CHAR(20) Not Null, Auftrags_Nr Int Not Null, Variante Int Not Null, Aufnahme Int Not Null, Solldruck_103 Int Not Null, Prüfdruck_innen_103 Int Not Null, Prüfdruck_aussen_103 Int Not Null, Fülldruck_innen_104 FLOAT(6) Not Null, Leckage_innen_104 FLOAT(6) Not Null, Fülldruck_aussen_104 FLOAT(6) Not Null, Leckage_aussen_104 FLOAT(6) Not Null, Tuben_innen_belegt CHAR(6) Not Null, Tuben_aussen_belegt CHAR(6) Not Null, Tubenrand_innen_iO CHAR(6) Not Null, Tubenrand_aussen_iO CHAR(6) Not Null,  Leckprüfung_innen_iO CHAR(6) Not Null, Leckprüfung_aussen_iO CHAR(6) Not Null, Kappen_innen_da CHAR(6) Not Null, Kappen_aussen_da CHAR(6) Not Null, Kappenprüfung_innen_iO CHAR(6) Not Null, Kappenprüfung_aussen_iO CHAR(6) Not Null, ID BIGINT IDENTITY(1,1) Not Null, Zeitstempel DATETIME Not Null CONSTRAINT DF_" & TabName & "_Zeitstempel DEFAULT (getdate()), CONSTRAINT PK_" & TabName & " PRIMARY KEY CLUSTERED (ID Asc)With (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) On [PRIMARY])"


	'ShowSystemAlarm SQL_Tabelle1 


Set rst = conn.Execute(SQL_Tabelle)


'Fehlerroutine
If Err.Number = -2147217900 Then
    	ShowSystemAlarm "Tabelle in Datenbank mit Name '" & TabName & "' existiert schon und wird weitergeführt!"
    	Merker = 1
    	Err.Clear  
			
ElseIf Err.Number <> 0 Then
		ShowSystemAlarm "Fehler 2 #" & Err.Number & " " & Err.Description
		Merker = 2
		Err.Clear
End If




If Merker = 0 Then
	ShowSystemAlarm "Neue Tabelle '" & TabName & "' in Datenbank erstellt!"
End If






conn.close


Set conn = Nothing
Set rst = Nothing
Set SQL_Tabelle = Nothing
End Sub

Code:
Sub Datensatz_in_Tabelle_Gesamt()' Dieses Skript schreibt Daten in eine SQL Datenbank


SmartTags("SQL\DIB St.109.M_Datenbernahme")=2


Dim conn1, rst1


Set conn1 = CreateObject("ADODB.Connection")
Set rst1 = CreateObject("ADODB.Recordset")


conn1.Open "Provider=MSDASQL;DSN=D71-Archiv"


'Fehlerroutine
If Err.Number <> 0 Then
	ShowSystemAlarm "Fehler 1 #" & Err.Number & " " & Err.Description
	Err.Clear
	Exit Sub
End If


Dim SQL_Tabelle1 


'Fehlerroutine
If Err.Number <> 0 Then
	ShowSystemAlarm "Fehler 2 #" & Err.Number & " " & Err.Description
	Err.Clear
	Exit Sub
End If
 
 SQL_Tabelle1 = "INSERT INTO "&SmartTags("TabName_Gesamt_SQL")&"([Nummer],[Zeitstempel_SPS],[Bediener],[Auftrags_Nr],[Variante],[Aufnahme],[Solldruck_103],[Prüfdruck_innen_103],[Prüfdruck_aussen_103],[Fülldruck_innen_104],[Leckage_innen_104],[Fülldruck_aussen_104],[Leckage_aussen_104],[Tuben_innen_belegt],[Tuben_aussen_belegt],[Tubenrand_innen_iO],[Tubenrand_aussen_iO],[Leckprüfung_innen_iO],[Leckprüfung_aussen_iO],[Kappen_innen_da],[Kappen_aussen_da],[Kappenprüfung_innen_iO],[Kappenprüfung_aussen_iO]) VALUES ('"&SmartTags("Nummer")&"','"_
 														 &SmartTags("Zeitstempel_SPS")&"','"_
														 +""&"','"_
   														 &SmartTags("Auftrag_Nr")&"','"_
   														 &SmartTags("Variante")&"','"_
   														 &SmartTags("Aufnahme")&"','"_
   														 &SmartTags("Solldruck_103")&"','"_
   														 &SmartTags("Prüfdruck_innen_103")&"','"_
   														 &SmartTags("Prüfdruck_aussen_103")&"','"_
   														+Replace(CStr(SmartTags("Fülldruck_innen_104")),",",".")+ "','"_
													    +Replace(CStr(SmartTags("Leckage_innen_104")),",",".")+ "','"_
														+Replace(CStr(SmartTags("Fülldruck_aussen_104")),",",".")+ "','"_
														+Replace(CStr(SmartTags("Leckage_aussen_104")),",",".")+ "','"_
 														 &SmartTags("Tuben_innen_belegt")&"','"_
   														 &SmartTags("Tuben_aussen_belegt")&"','"_
   														 &SmartTags("Tubenrand_innen_iO")&"','"_
   														 &SmartTags("Tubenrand_aussen_iO")&"','"_
   														 &SmartTags("Leckprüfung_innen_iO")&"','"_
   														 &SmartTags("Leckprüfung_aussen_iO")&"','"_
  														 &SmartTags("Kappen_innen_da")&"','"_
														 &SmartTags("Kappen_aussen_da")&"','"_
														 &SmartTags("Kappenprüfung_innen_iO")&"','"_
														 &SmartTags("Kappenprüfung_aussen_iO")&"')"    											
														
 'Fehlerroutine
If Err.Number <> 0 Then
	ShowSystemAlarm "Fehler 3 #" & Err.Number & " " & Err.Description
	Err.Clear
	Exit Sub
End If
 														 
	'ShowSystemAlarm SQL_Tabelle1 
	Set rst1 = conn1.Execute(SQL_Tabelle1)


'Fehlerroutine
If Err.Number <> 0 Then
	ShowSystemAlarm "Fehler 4 #" & Err.Number & " " & Err.Description
	Err.Clear
	Exit Sub
End If
'End If 


conn1.close


Set conn1 = Nothing
Set rst1 = Nothing
Set SQL_Tabelle1 = Nothing


SmartTags("SQL\DIB St.109.M_Datenbernahme")=0
End Sub

Harald
 
Ne ich meine Datenbank
Ach ja stimmt das gab's bei PC-Runtime ja auch. Ich schreibe eigentlich auch meistens direkt.

Den Tabellennamen wirst du nicht ändern können.
Kann mir nur vorstellen dass du vielleicht den Inhalt der SQL-Tabelle wegkopieren/leeren und dann WinCC wieder los-schreiben lassen könntest.

Schau dir das hier mal an.
https://support.industry.siemens.com/cs/ww/de/view/61883659
Das sind einige Script-Beispiele für SQL-Zugriffe, unter anderem auch "Tabelle erzeugen" / "Tabelle kopieren", drin.
Vielleicht wäre das ein Ansatz.

Könnte vielleicht irgendwie so aussehen
  1. Ereignis - Archiv voll -> Scriptaufruf
  2. Systemfunktion StoppeArchivierung
  3. SQL-Tabelle wegkopieren per ADO
  4. Systemfunktion LöscheArchiv
  5. Systemfunktion StarteArchivierung
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe ein ähnliches Problem mit TIA V15.1 Runtime Advanced und Microsoft SQL Datenbanken.

Ich soll die Werte aus einem Schichtzähler bzw. Teileinfos in eine SQL Datenbank schreiben. Über das Variablenarchiv bekomme die Werte direkt in die Datenbank geschrieben -> Archivierungszyklus bei Wertänderung. Das Ganze würde an der Stelle auf genügen.

https://support.industry.siemens.co...iner-sql-datenbank-archiviert-?dti=0&lc=de-WW

Bei den Teileinfos würde ich gerne auf Anweisung über ein Bit mehrere Variablen aus einem Block in die Datenbank kopieren. Dazu müsste ich wohl das script von Funky verwenden.

Allerdings bin ich in Skripten ein totaler Anfänger. Ich bin bei uns eher der Antriebsspezialist.

Kann mir bitte jemand aus dem Forum das script von Funky so umstellen, das ich eine Variable (Realwert) auf Anforderung in die Datenbank kopiert bekomme.
Über eine Antwort würde ich mich freuen.

Gruss
 
Zurück
Oben