Step 7 UDT-Änderung

Buschmann

Level-2
Beiträge
111
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Ich habe hier einen UDT-Baustein der zur Rezeptverwaltung dient. Am Ende stehen 3 INT-Variablen, die ich gerne in BOOL ändern würde. Die Länge des Bausteins bleibt also bestehen, es gibt "nur" eine Typenänderung.
Gibt es da einen Trick, damit nichts verloren geht? Der UDT-Baustein wird in 3 DBs verwendet. In zweien davon wird er nur 1 x genutzt, in einem allerdings 500 x - da wäre es schon blöd, wenn die Daten verloren gehen...

Gruß
Buschmann
 
Mit verloren gehen meinst Du die Aktualdaten in der CPU?
Wie Du vorgehen kannst/mußt kommt darauf an was für eine CPU Du hast und welches Step7 und ob die Daten in "optimierten" DB liegen.
Also welche CPU hast Du und welches Step7?

Harald
 
300-er + S7-Klassik
Da muß man ein wenig arbeiten, ich gehe wie folgt vor.

1.

Operandenvorrang für die Bausteinkonsistenz unbedingt auf Absolut stellen und ein Mal übersetzen!!!

Mit einem Baustein Blockmove (siehe hier im Forum Suche nach FC112) kopiere ich den Inhalt der betreffenden DB auf identische vorher kopierte und in die SPS eingefügte DB, komplette Länge.
Dann Änderung der UDT, so dass die Länge erhalten bleibt!!! Wie oben erwähnt mußt du nur die Erste der 3 Int in Bool ändern und nach dieser noch 2 weitere Bool einfügen. Die beiden anderen INT läßt du so in der UDT stehen, Namen kannst du ändern, z.Bsp. in "Reserve_YX".
Nach Änderung der UDT, DB öffnen und aktualisieren.
Geänderte DB in die SPS schreiben (nicht die nur zur Datensicherung angelegten DB!).

Vorher die Länge der DB aufschreiben, nun vergleichen, die Länge darf sich nicht verändert haben.

Dann mit Blockmove die Daten wieder zurückkopieren. Bei den neuen Bool-Variablen kann dann irgend etwas drin stehen, ja nachdem welche Zahl in der Int-Variable stand, die dort vorher voehanden war.

Nun mußt du aber noch überall im Programm die Variablen aktualisieren.

2.

DB aus der SPS in dein Projekt kopieren.
Quelle aus dem DB erzeugen (inkl. UDT).
UDT in der Quelle ändern.
Aus der Quelle DB erzeugen.

Die Länge der UDT würde ich nicht ändern, denn wenn irgendwo im Programm Absolutzugriffe oder indirekte Adressierung verwendet wird, gibt es Probleme.

Achtung - Vorher immer Projekt und Daten aus der SPS sichern
 
Zuletzt bearbeitet:
Du könntest auch deinen DB online öffnen, speichern und eine Quelle generieren. Dann den UDt ändern und wieder eine Quelle generieren. Danach den neuen Deklarationsteil in der Quelle in die Quelle mit den Aktualwerten kopieren. Die 3 Integer aus dem Datenteil der Quelle löschen und die Quelle übersetzen. Dann hat dein DB wieder die alten Werte.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Den Weg über eine Quelle finde ich nicht so prickelnd - weil da hat er dann die Aktualwerte von vor 1..2 Stunden und darf > 500 Stellen in der Quelle ändern.

Doch mal sehen, was für eine CPU er hat und ob das so geht, falls da womöglich auch noch TIA reinpfuscht...

Harald
 
Hallo!

Dann will ich die Fragen mal der Reihe nach beantworten.

@PN/DP: Die CPU ist eine S7315-2PN/DP und STEP 7 habe ich hier in der V5.5 + SP2.
@Vollmi: Natürlich würde ich ein INT durch 16 Bool ersetzen. Dann hätte ich genug Signale zum hin- und herschubsen
@Ralle: Dein FC112 bringt mich vermutlich schon mal ein ganzes Stück weiter
@TP-Inc: Den Weg werde ich mir jetzt auch noch mal genauer ansehen. Da die Rezepte eigentlich nicht verändert werden und nur bei einem Modellwechsel ein aktueller Datensatz geladen wird, müsste das auch funktionieren

So, jetzt hab ich mal ins Programm geguckt: Die Änderung der DBs und das Eintragen der richtigen Aktualwerte müsste klappen. Allerdings steht noch eine SCL-Baustein ohne Symbolinfos dazwischen, den muss ich erst noch ein wenig entschlüsseln, verstehen und kommentieren.


Vorerst schon mal DANKE an alle! Ich habe schon wieder einiges gelernt
 
Zurück
Oben