TIA Array Nummer ausfündig machen (symbolischer Datenbaustein)

Rappenberger

Level-2
Beiträge
25
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,

ich habe an einen Baustein mehrere Strukturen übergeben.

z.B. Input 1: Motor[1]
Input 2: Motor[2]
....
....

Kann ich dann im Funktionsbaustein Die Index Nummer der Zugehörigen Datenstruktur anfügen?
 
Vermutlich geht das nicht. Braucht vermutlich auch niemand außer dir - wozu soll das eigentlich gut sein? Wofür ist die Index-Nummer interessant?
Eventuell kann man des Symbol des angeschalteten Aktualparameters ermitteln.

Du könntest den Index zusätzlich übergeben.
Dann bräuchtest du in dem Beispiel eigentlich nicht jede Struktur einzeln übergeben, sondern nur das ganze Array und könntest mit dem Index die entsprechende(n) Struktur(en) im FB einlesen bzw. in die Strukturen zugreifen.

Die allerwichtigsten Angaben fehlen mal wieder: Für welche CPU soll das sein? Baustein mit Standard-Zugriff oder "optimiert"?
 
Schau mal ob du mit "getSymbolName" weiterkommst.
Hab das aber selbst noch nie verwendet.
Vermute aber, dass du damit nur den Namen des Formal Parameters bekommst, nicht aber den Aktualparameter (also nicht das was "draußen" dran hängt).

Edit:
Hab eben nochmal nach geschaut.
Du bekommst wirklich den Aktualparameter als String.
Den musst du halt noch entsprechend zerlegen um an die Nummer des Index zu kommen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Diese Idee hatte ich auch schon.
Leider ohne brauchbares Ergebnis.
 
Du hast also das DriveArray[1..200] und willst über einen Parameter Drive_No = 5 übergeben das der Baustein dann in DriveArray[5] die Datein schreibt oder ausliest?
 
Edit:
Hab eben nochmal nach geschaut.
Du bekommst wirklich den Aktualparameter als String.
Den musst du halt noch entsprechend zerlegen um an die Nummer des Index zu kommen.
Was kommt da wohl bei rum wenn am Eingang sowas hängt #myArrray[#myMember] ?Der Datenpunkt symbolisch und der inhalt von myMember "#myArrray[4]"? Oder wirklich so "#myArrray[#myMember]" das muss ich mal ausprobieren
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wir haben das so im Einsatz, man muss schlussendlich nur die beiden [] suchen.

Code:
REGION Variablenname lesen
    #tempVarName := GetSymbolName(variable := #iSetup, size := 60);
END_REGION


REGION Zeiger auf Zeilennummer
    #tempStelle1 := FIND(IN1 := #tempVarName, IN2 := #constKlammerAuf);
    #tempStelle2 := FIND(IN1 := #tempVarName, IN2 := #constKlammerZu);
    #tempStelle2 := #tempStelle2 - #tempStelle1;
    #tempStelle1 += 1;
    #tempFunktionsnummer := WSTRING_TO_INT(MID(IN := #tempVarName, L := #tempStelle2, P := #tempStelle1));
END_REGION

In tempFunktionsnummer steht schlussendlich die Nummer des parametrierten Array-Index
 
Du hast also das DriveArray[1..200] und willst über einen Parameter Drive_No = 5 übergeben das der Baustein dann in DriveArray[5] die Datein schreibt oder ausliest?
Nein, meine Idee war eine andere.

Mein Ziel war es, die Index-Nummer in der Status- und Fehlermeldung als eindeutige ID zu verwenden. Die Programmierumgebung war Beckhoff. Die Fehlerbehandlung hat ähnlich wie „Programm-Alarm“ in TIA funktioniert.

Ersatz-Lösung:
C-ähnlich:
// 1) Einmalige Initialisierung beim ersten Task-Zyklus
IF AktualTaskInfo.FirstCycle THEN
    FOR i := 1 TO 200 DO
        Antrieb[i].Init(Id := i);  // fortlaufende Ident-Nummer eintragen
    END_FOR
END_IF

// 2) Normale zyklische Verdrahtung/Abarbeitung bleibt wie gehabt
Antrieb[1]( ...Signale... );
Antrieb[2]( ...Signale... );
// ...
 
Zuletzt bearbeitet:
Was kommt da wohl bei rum wenn am Eingang sowas hängt #myArrray[#myMember] ?Der Datenpunkt symbolisch und der inhalt von myMember "#myArrray[4]"? Oder wirklich so "#myArrray[#myMember]" das muss ich mal ausprobieren
Du bekommst den symbolischen Namen der Variable.
Ich würde daher konsequenterweise "#myArrray[#myMember]" als String erwarten.
Das könnte ja @Rappenberger für uns Testen (⁠◠⁠‿⁠・⁠)⁠—⁠☆
 
Zurück
Oben