Beren
Level-1
- Beiträge
- 318
- Reaktionspunkte
- 23
-> Hier kostenlos registrieren
*gelöscht*
Zuletzt bearbeitet:
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
VAR_INPUT
DBNr : BLOCK_DB ;
END_VAR
AUF #DBNr
Und wie übergebe ich einen Pointer?
Ich habe per IN die DB Nr. an meinen FC übergeben.
Im FC habe ich den DB mit AUF #DBNr geöffnet.
Nun möchte ich per
LAR1 P#XXX.X eine bestimmte Stelle im DB referenzieren, die von aussen übergeben werden soll. Wie mach ich das?
1. Möglichkeit:
IN-Parameter vom Typ INT, z.B. #INDB
dann von IN-Parameter auf Temp-Parameter umwandeln
2. Möglichkeit:Code:L #INDB T #MEINDB AUF DB[#MEINDB]
IN-Parameter vom TYP BLOCK_DB deklarieren
An einen aufgerufenen FB kann man einen IN.BLOCK_DB weitergeben (aus FB und FC), an einen FC geht es nicht.Ich denke eher, es sollte nur die 1. Möglichkeit benutzt werden.
Bei der 2. Möglichkeit kann man den FC nicht mehr aus einem übergeordneten FC heraus aufrufen und den DB weiterleiten, egal wie die DB-Nr. vorliegt. Geht es doch irgendwie? -> Bitte um Aufklärung
VAR_INPUT
DBNr : BLOCK_DB ;
Offset : INT ;
END_VAR
[COLOR="Red"] L #DBNr // Anweisung nicht erlaubt für BLOCK_DB-Befehls-Operanden
LAR1 P##DBNr // Symbol DBNr nicht gefunden oder nicht erlaubt in Anweisung mit Adress-Operator P#[/COLOR]
L P##DBNr // das ist erlaubt
LAR1 // ergibt aber einen sinnlosen Pointer ohne Bereichskennung
L #Offset // das ist erlaubt - muß ja auch
[COLOR="red"] LAR1 P##Offset // Symbol Offset nicht gefunden oder nicht erlaubt in Anweisung mit Adress-Operator P#[/COLOR]
L P##Offset // das ist erlaubt
LAR1 // ergibt einen Pointer auf die vorherigen Lokaldaten
Da gibt es doch so clevere Programmierer, die machen jeglichen Datentransfer zwischen DB mit so einem Baustein:Wie das mit den Referenzdaten ist, weiß ich nicht. Ist es irgendwie möglich, mehr als die Tatsache, dass DB X
übergeben wurde, nachzuvollziehen? Werden AUF-Befehle nicht mit erfasst?
VAR_INPUT
Source_DB : INT ; // müsste korrekterweise WORD sein,
Source_Offset : INT ; // aber INT läßt sich viel bequemer
Dest_DB : INT ; // mit dezimalen Aktualwerten versorgen
Dest_Offset : INT ; // (da muß der Programmierer nicht in Hex denken)
Len : INT ;
END_VAR
L #Source_DB
T MW 200 // sogar zu faul, ein TEMP-WORD anzulegen!
AUF DB [MW 200]
L #Dest_DB
T MW 200
AUF DI [MW 200]
// indirekte BYTE-Kopierschleife (möglichst uneffizient geproggt)
// ...
VAR_INPUT
Source_DB : BLOCK_DB ;
Source_Offset : INT ;
Dest_DB : BLOCK_DB ;
Dest_Offset : INT ;
Len : INT ;
END_VAR
AUF #Dest_DB
TDB
AUF #Source_DB
// ( DBNO=#Source_DB / DINO=#Dest_DB )
// indirekte BYTE-Kopierschleife
// ...
Na, wenigstens schreibst Du die DB-Nummer als INT nicht direkt in den CALL ...Die Parameterübergabe geht am einfachsten so:
AUF "db_whatever";
L DBNO;
T #tmp_int;
CALL ... := tmp_int, ...
Auch hier kenne ich keine bessere Möglichkeit, gibt es eine? Bei Direktübergabe würde der DB-Name nicht mehr im Code stehen.
CALL FC12
DBNr :="db_whatever" //z.B. DB123 eintippen
Ja, diese AUF-Befehle sind in den Referenzdaten.Jetzt muss ich nur noch prüfen, ob AUF "konstanter_db" in die Referenzdaten kommt ...
Kannst du mal genauer erklären was du meinst? Und für was?Wie aber läuft die Übergabe von optimierten variablen DBs an FCs und FBs für die 1500er Steuerungen
Das könntest du beispielsweise per "Array[0..X] of DB_ANY" realisieren.Die Datenstruktur bleibt die Gleiche, nur brauche. ich die Funktionalität mehrfach und die FiFOs liegen in verschiedenen DBs für verschiedene Linien.
Der DB Name soll an de FB übergeben werden.
- Variant / Ref_TOWie aber läuft die Übergabe von optimierten variablen DBs an FCs und FBs für die 1500er Steuerungen.
Damit hast du dann aber keinen symbolischen Zugang zu deinem DB-Inhalt...
Was den FIFO angeht stimme ich dir ebenfalls zu....was spricht für dich gegen meinen Vorschlag?
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen