markus.dietschi
Level-2
- Beiträge
- 21
- Reaktionspunkte
- 2
-> Hier kostenlos registrieren
Hallo zusammen
Ich bin noch Anfänger mit Siemens TIA und erst recht im VB-Skripting.
Situation:
- Eine Rezeptur-Datenbank in einem TP700-Comfort
- Eigenes Rezepturbild und nicht die Original-Siemens-Rezepturanzeige
- Ein Rezept-Datensatz besteht aus ca. 8 Array's mit je 8 Einträgen (String & Integer) - Datenlänge eines einzelnen Datensatzes ca. 240 Byte
- TIA-Portal V15.1
- TP700-Comfort-Panel
- Software derzeit rein in der Simulation am Laufen
Problemstellung:
Da ich ein eigenes Rezepturbild kreiert habe, habe ich bekanntermassen keinen direkten Zugriff auf die Rezept-Datenbank bzw. deren Struktur und Aufbau.
Wenn ich einen neuen Datensatz im Panel erzeuge, kriegt dieser im Rezeptur-Speicher einfach die nächst freie "Datensatznummer". Somit habe ich keine Ahnung wieviele Datensatzeinträge mein Rezepturspeicher eigentlich hat. Dieses Problem habe ich mittlerweile mit einem Skript gelöst, in welchem ich mit der Systemfunktion "GetDataRecordName" jeden Datensatzeintag aus dem Speicher auslese. Je nachdem ob als Statuswert 4 (erfolgreich) oder 12 (Fehler) rauskommt, weiss ich nun ob ein Eintrag mit dieser "Datensatznummer" existiert oder nicht, bzw. wievile Einträge mein Rezepturspeicher eigenlich hat. Soweit so gut.
Wenn ich jetzt aber einen Datensatz lösche, klafft im Rezepturspeicher im Hintergrund ein Loch in der Datensatz-Nummerierung. Und damit ich nicht jedesmal wenn ich mich durch den Datenspeicher klicke (Plus-Minus-Zählung ebenfalls über Skript gelöst) eine Systemfehlermeldung erscheint, weil er dabei über dieses "Loch" stolpert, wollte ich ein Skript schreiben, das ebenfalls mittels "GetDataRecordName" jeden Datensatz ausliest, und dabei solange weiterläuft bis keine "Status-Fehlermeldung-12" mehr auftaucht, und ich somit weiss, welche "Datensatz-Nummer" als nächstes wieder existiert. Funktioniert ebenfalls......ABER;
Wenn das Skript mehr als ca. 70 Fehlermeldung in seiner FOR-Schlaufe durchläuft bevor dieses wieder eine gültige Datensatznummer findet, kratzt mir das Skript ab, und gibt mir als Fehlermeldung "Überlast" in der Variable an, in welcher das HMI den Status (0,2,4,12) dieser Systemfunktion speichert und an welcher die ganze Skriptfunktion aufgehängt ist.
Alle Variablen, die aus der Funktion "GetDataRecordName" beschrieben werden, sind PLC-Variablen, werden also ständig aktualisiert. Dachte zuerst, dass die Runtime ein Problem damit hat, das die Variable in so kurzer Zeit so oft überschrieben und ausgelesen werden. Habe dann lediglich aus der Statusvariable eine lokale HMI-Variable gemacht. Ergebnis ist, dass das Skript nun erst ab ca.170 Durchläufen diese "Überlast"-Fehlermeldung bringt.
-> WARUM?
zu erwähnen ist ebenfalls, dass die Skriptausführung in der Simulation keine Sekunde dauert, bis diese Fehlermeldung erscheint.
Gibt es hierzu eine logische Erklärung, bzw. einen Lösungsansatz oder mache ich da komplett was verkehrt mit diesem Rezeptur-Handling.
vielen Dank für blickerweiternde Hinweise
Ich bin noch Anfänger mit Siemens TIA und erst recht im VB-Skripting.
Situation:
- Eine Rezeptur-Datenbank in einem TP700-Comfort
- Eigenes Rezepturbild und nicht die Original-Siemens-Rezepturanzeige
- Ein Rezept-Datensatz besteht aus ca. 8 Array's mit je 8 Einträgen (String & Integer) - Datenlänge eines einzelnen Datensatzes ca. 240 Byte
- TIA-Portal V15.1
- TP700-Comfort-Panel
- Software derzeit rein in der Simulation am Laufen
Problemstellung:
Da ich ein eigenes Rezepturbild kreiert habe, habe ich bekanntermassen keinen direkten Zugriff auf die Rezept-Datenbank bzw. deren Struktur und Aufbau.
Wenn ich einen neuen Datensatz im Panel erzeuge, kriegt dieser im Rezeptur-Speicher einfach die nächst freie "Datensatznummer". Somit habe ich keine Ahnung wieviele Datensatzeinträge mein Rezepturspeicher eigentlich hat. Dieses Problem habe ich mittlerweile mit einem Skript gelöst, in welchem ich mit der Systemfunktion "GetDataRecordName" jeden Datensatzeintag aus dem Speicher auslese. Je nachdem ob als Statuswert 4 (erfolgreich) oder 12 (Fehler) rauskommt, weiss ich nun ob ein Eintrag mit dieser "Datensatznummer" existiert oder nicht, bzw. wievile Einträge mein Rezepturspeicher eigenlich hat. Soweit so gut.
Wenn ich jetzt aber einen Datensatz lösche, klafft im Rezepturspeicher im Hintergrund ein Loch in der Datensatz-Nummerierung. Und damit ich nicht jedesmal wenn ich mich durch den Datenspeicher klicke (Plus-Minus-Zählung ebenfalls über Skript gelöst) eine Systemfehlermeldung erscheint, weil er dabei über dieses "Loch" stolpert, wollte ich ein Skript schreiben, das ebenfalls mittels "GetDataRecordName" jeden Datensatz ausliest, und dabei solange weiterläuft bis keine "Status-Fehlermeldung-12" mehr auftaucht, und ich somit weiss, welche "Datensatz-Nummer" als nächstes wieder existiert. Funktioniert ebenfalls......ABER;
Wenn das Skript mehr als ca. 70 Fehlermeldung in seiner FOR-Schlaufe durchläuft bevor dieses wieder eine gültige Datensatznummer findet, kratzt mir das Skript ab, und gibt mir als Fehlermeldung "Überlast" in der Variable an, in welcher das HMI den Status (0,2,4,12) dieser Systemfunktion speichert und an welcher die ganze Skriptfunktion aufgehängt ist.
Alle Variablen, die aus der Funktion "GetDataRecordName" beschrieben werden, sind PLC-Variablen, werden also ständig aktualisiert. Dachte zuerst, dass die Runtime ein Problem damit hat, das die Variable in so kurzer Zeit so oft überschrieben und ausgelesen werden. Habe dann lediglich aus der Statusvariable eine lokale HMI-Variable gemacht. Ergebnis ist, dass das Skript nun erst ab ca.170 Durchläufen diese "Überlast"-Fehlermeldung bringt.
-> WARUM?
zu erwähnen ist ebenfalls, dass die Skriptausführung in der Simulation keine Sekunde dauert, bis diese Fehlermeldung erscheint.
Gibt es hierzu eine logische Erklärung, bzw. einen Lösungsansatz oder mache ich da komplett was verkehrt mit diesem Rezeptur-Handling.
vielen Dank für blickerweiternde Hinweise