Step 7 FB Vergrößern

klauserl

Level-2
Beiträge
246
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
Folgendes Problem
Will einen FB mit dazugehörigem Instanz DB Vergrößern.
Problem: Es wird auf verschiedene Statische Adressen des DBs im Programm zugegriffen.
Durch das Vergrößern des FBs (brauch noch einige In und Out Variablen) verschieben sich natürlich auch diese Adressen.
Habe schon versucht auf Symbolische Programmierung umzustellen.
Leider kein Erfolg wenn ich den FB und den DB lade, spielt die Anlage verrückt.
Danke
 
Habe schon versucht auf Symbolische Programmierung umzustellen.

Wie hast du das gemacht? Operandenvorrang Symbolisch? Wie ist es jetzt eingestellt?
Hast du davor eine Konsistenzprüfung und danach auch eine gemacht?

Leider kein Erfolg wenn ich den FB und den DB lade, spielt die Anlage verrückt.[/QUOTE]
Das kann auch andere Ursachen haben als nur ein Zugriff auf falsche Adressen. z.B. der Reinit der DB inhalte.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Achtung ich verwende Step7!
Bausteinvergleich hab vorher gemacht.
Es wird nach Erzeugung (vergrößern) des IDBs im Programm auf die falschen Adressen zugegriffen.
Kann ich das nicht irgendwie mit Symbolischen Zugriff lösen. Möchte nicht das ganze Programm durchackern.
Danke
 
Wie ist denn die Adressierung der Variablen des IDBs gelöst?

Nach folgendem Muster?

L LW18
T LW26

Dann solltest du an der Stelle darüber nachdenken, ob du nicht diese unschöne Programmierung an der Stelle korrigieren möchtest und stattdessen beispielsweise schreibst:

L #WordVariable1
T #WordVariable2

Die Namen der Variablen entnimmst du der Deklaration im FB, dort stehen neben den Namen auch die Lokaladressen. Danach kannst du auch Ein-/Ausgänge neu deklarieren und es ist nicht schlimm, dass sich der Lokale Offset ändert, weil jetzt über die Symbolik auf die Variablen zugegriffen wird und nicht mehr über die Lokaladressen.
 
Achtung ich verwende Step7!
Das ist mir klar.

Bausteinvergleich hab vorher gemacht.
Es wird nach Erzeugung (vergrößern) des IDBs im Programm auf die falschen Adressen zugegriffen.
Kann ich das nicht irgendwie mit Symbolischen Zugriff lösen. Möchte nicht das ganze Programm durchackern.
Kannst du das mit Symbolischem Zugriff lösen. Es gibt aber ausnahmen die man beachten muss.
Als da wären:
Indirekte Adressierung oder auch Pointeradressierung werden nicht Symbolisch werden nur durch umstellung des Operandenvorrangs.
Suche daher nach AUF und #P etc um allfällige Absolutzugriffe zu finden. Das können viele oder auch keine sein. Kommt drauf an wer das wie programmiert hat.

Aber eben vorher Konsistenzprüfung machen, danach auf Symbolischen Vorrang umschalten, und nochmal konsistenzprüfung machen. Das nimmt dir n haufen Handarbeit ab.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@TE:
Das ist der Grund, warum es nicht gut ist auf die Instanzdaten "quer" zuzugreifen.
Wenn nun die Umstellung auf "symbolischen Vorrang" nicht funktioniert dann wird es eventuell so sein wie schon hier geschrieben. Das heißt, du mußt dein ganzes Programm kontrollieren. Ich würde erstmal so anfangen :
- hat dein I-DB überhaupt einen symbolischen Namen ?
- gibt es Zugriff, wie von UDP im Beitrag #4 geschrieben - wenn ja dann diese zu qualifizierten Zugriffen umändern - also statt "AUF DB 100" und "L DBW 10" dann besser schreiben "L DB100.DBW 10"
- gibt es die von Vollmi beschriebene Pointerei dann "Good Luck" - da würde ich versuchen, dass irgendwie zu eliminieren oder in den FB selbst zu verlagern.

Tut mir leid - anders wird es nicht gehen ...

Gruß
Larry
 
Prinzipiell kann man das durch "Operandenvorrang symbolisch" + "Bausteinkonsistenz Prüfen" schon lösen.
Setzt aber auch hier ein gewisses Vertrauen in die vorliegende Software voraus, weil hier durch einige Änderungsarten auch richtig Mist passieren kann.

Irgendwelche indirekten, gepointerten Adressierungsarten, kommen dann noch als Schmankerl oben drauf.

Mfg
Manuel
 
Danke die Adressierung mit symbolischen Operandenvorrang hat funktioniert!!!
Wie von euch angesprochen gibts da noch ein Problem mit einer indirekter Adressierung.
Danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
gibt es vielleicht noch
- eine VISU / HMI die in den IDB greift
- eine Datenkoplung die in den IDB greift
?
Eine Pointeradresse geht auch Symbolisch ##Variablenanfang, wie genau, weis ich jetzt auch nicht. Muss da auch immer wo "abschreiben".
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Problem: Es wird auf verschiedene Statische Adressen des DBs im Programm zugegriffen.
Du meinst von außerhalb des FB auf den IDB?
Gehen die Zugriffe gleich auf die ersten Variablen in STAT? Du brauchst ja nur soviele STAT-Variablen vom Anfang STAT zum Ende verschieben, wie Du neue Adressen für die hinzukommenden IN/OUT-Parameter brauchst. Da würden sich die Adressen der nicht verschobenen Variablen nicht ändern.
Sind die IN/OUT-Parameter und erste STAT-Variablen evtl. "ungünstig" deklariert mit Bit/Byte-Lücken? Vielleicht reicht umsortieren der IN/OUT-Parameter um Platz für die neuen Parameter zu schaffen. Gibt es vielleicht mehrere WORD/INT/REAL-INPUT-Parameter? Die könnte man als externe Struktur zusammenfassen und per POINTER an den FB übergeben, das schafft Platz in den IN/OUT-Parametern.

Wie viele Instanzen gibt es von dem FB? Alle mit eigenem IDB? Oder auch als Multiinstanz?

Wenn die vorherigen Programmierer nicht sorgfältig auf symbolische Programmierung geachtet haben, dann nützt einfach nur Umstellen auf Operandenvorrang Symbolisch nichts. Unsymbolische Zugriffe, die per Hand geprüft/angepasst werden müssen:
Gibt es teilqualifizierte Adressierung: nur DBX../DBB../DBW../DBD..?
Gibt es indirekte Adressierung auf die Instanz? Von außerhalb des FB und von innerhalb?

PS: zu langsam getippselt..

Harald
 
Zurück
Oben