TIA DB Adresse und DB Varaiblenadresse zur Laufzeit adressieren

Beiträge
21
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wie kann ich DB Adresse und DB Varaiblenadresse zur Laufzeit über eine Variable adressieren?
Ich habe mich schon durchs Forum gewühlt....DB_ANY, Pointer, Variant etc....bin leider verwirrt

Eigentlich möchte die Db BAusteinadresse und Variablenadresse über EIngangsvariablen meines FB vorgeben.

Ich habe TIA V16 und eine CPU 1510SP.

1625732442435.png


Danke, Schrödingersbit
 
POKE ist wast du suchst, aber warum noch so im Speicher herumstochern? Man kann mittlerweile (fast) alles komplett symbolisch ohne irgendwelche Adress-Berechnungen programmieren.

edit: ein Beispiel hilft mehr..

Du kannst zB den Bereich im DB8 als UDT anlegen, diesen als IN/OUT übergeben und so damit arbeiten. Auch Peek kannst du dir sparen wenn du die Eingangsdaten gleich als UDT in der Symboltabelle abgreifst.
 
ja peek and poke verwende ich bereits...heisst das ist in TIA / 1500er CPU's bereits die eleganteste Variante sowas zu machen?

Schrödingersbit
 
Moin Schroedingersbit,

mit absoluten Adressen zu arbeiten ist einfach nicht elegant. Wenn man das doch machen muss (ich hoffe nicht "will"), geht es nur über PEEK und POKE.
Eleganter ist es, mit Symbolik zu arbeiten. Warum willst Du auf unterschiedliche DBs zugreifen? Einfacher ist es, alles, worauf man zugreifen will in einem DB anzulegen (kann immerhin 3mb groß sein). Im DB helfen vor allem Arrays bei der symbolischen Programmierung.

VG

MFreiberger
 
Moin Schroedingersbit,

mit absoluten Adressen zu arbeiten ist einfach nicht elegant. Wenn man das doch machen muss (ich hoffe nicht "will"), geht es nur über PEEK und POKE.
Eleganter ist es, mit Symbolik zu arbeiten. Warum willst Du auf unterschiedliche DBs zugreifen? Einfacher ist es, alles, worauf man zugreifen will in einem DB anzulegen (kann immerhin 3mb groß sein). Im DB helfen vor allem Arrays bei der symbolischen Programmierung.

VG

MFreiberger
Mein Baustein verwendet einen Baustein aus einer Bibliothek. Dieser wiederum verwendet einen globalen DB für Anwenderdaten.
Das heisst zu jeder Instanz von meinem FB gehört dann ein globaler DB mit den Anwenderdaten. Ich weiss nicht schön und auch nicht inbedingt im Sinne von objektorientiert.
Der Baustein aus meiner Bibliothek greift auch über PEEK und POKE auf eben diesen gloabelen Ansenderdaten DB zu, diesen FB möchte ich dahingehend aber nicht ändern.

Nun will ich einfach nochmal über die Adresse dieses globalen DB über eine EIngangsvariable an meinen FB parametrierbar machen und dann im FB DB Variablen initialisieren.

Schrödingersbit
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Schrödingersbit,

wenn ich Dich richtig verstehe, hast Du einen FB, einen dazugehörigen IDB und einen dazugehörigen DB?

Warum erstellst Du nicht einen Datentypen mit dem Inhalt aus dem globalen DB mit den Anwenderdaten. Dann könntest Du entweder x globale DBs mit einer Variablen Deines Datentyps erstellen oder einen DB mit einem Array of Deinem Datentyp.
Dem FB verpasst Du ein IO mit Deinem Datentyp.
Dann kannst Du Jeder FB-Instanz über nur einem Formalparamter alle Anwenderdaten zur Verfügung stellen.

VG

MFreiberger
 
ich habe jetzt einen global DB vom Typ Anwenderdaten erstellt.
diesen übergebe ich über "variant" am eingang meinem FB
1625756862607.png

über VARIANT_TO_DB_ANY ermittle ich die Adresse des DB
in diesem fall ist das DB15
1625756931775.png

die adresse ist dann in tempAddress gespeichert und kann dann für die Balluff Lib weiterverwendent werden:
1625756990033.png

am ende kann ich dann noch den Ansender DB beschreiben:
1625757052488.png

so habe ich nun einen FB der die Funktionalität abbildet. Pro Lesekopf einen seperate Instanz von diesem FB und jeweils einen globalen Anwender DB pro Instanz muss ich erstellen.

1625757394136.png

Für mich passt das soweit...nur bin ich ein wenig unsicher ob ich VARIANT und DB_ANY schon im SInne des Erfinders verwendet habe 🤪😬:D🤷‍♀️
 
Zurück
Oben