Array

rainer-step5

Level-1
Beiträge
23
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.
Ich habe da ein Problem das ganze ist eine Übung aus einem Siemens Kurs OKPPRO2.
Folgendes:
Ich erstelle ein UDT5 mit 2 Parametern in BOOL " Start" , "Stop".
Dann ein FC 23 mit in_out Variablen ein Array [1..3] of UDT5.
Danach habe ich ein kleines Prog im FC23 geschrieben um die beiden Variablen zu verarbeiten.
Bis hier geht es ja noch.
Rufe ich den FC23 im OB1 auf und will er einen Aufrufparameter in Form eines Array´s haben.Ich finde trotz intensiver suche keine Lösung. Wie muss dieser Parameter geschrieben werden?

Ich habe schon versucht ein DB zu erstellen mit der Vorlage des UDT5.
Aber Parameter in Form von DB1.DBD0 o. ä. nimmt der FC 23 auch nicht an.

Bitte um Eure Hilfe. Danke

Gruß Rainer
 
Hallo Rainer,

schließe mal alle Editoren und markiere den Bausteinordner. Dann Bearbeiten-Bausteinkonsistenz prüfen und "Alles übersetzen".


Gruß, Onkel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
1- ein DB erstellen z.B DB 123
2- In diesem DB dann eine Array-Variable definieren z.B VAR[1..3] Typ UDT5
3- Wenn du im FC 23 als InVariable ein Array vom gleichen Typ definiert hast, kannst du beim Aufruf von FC 23 als Variable DB123.VAR übergeben (ohne Index, nur den Namen der Variablen)
-------------
Für Wertezuweisung oder Abfrage im FC 23 dann

U InVariable[x].Start
UN InVariable[y].Stop
= IrgendEtwas


Willst du die Werte vor dem Aufruf manipulieren, dann
.....Bedingung 1
.....Bedingung 2
= DB 123.VAR[1].Start


usw.....
 
Da komme ich noch nicht so recht mit weiter.
Als Hinweis nochmal im FC 23 habe ich eine IN_OUT Variable mit dem Namen "Antrieb" Array[1..3]of UDT5.
Dann ein Prog mit RS Baustein und schalte ein Ausgang das ganze 3 mit den entspr. Parameter.
Wird jetzt der FB 23 im OB1 aufgerufen verlangt er einen IN_OUT Parameter "Antrieb" in Form eines "ARRAY´s". Ansonsten gibt es nur noch EN und ENO.
Meine Frage ist wie der Parameter "Antrieb" geschrieben werden muss.
Oder ist das ganze Bspl. daneben?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Rainer,

deklariere den IN_OUT der FC als UDT, nicht als ARRAY[1..3] of UDT, dann kannst du den Parameter in Form von "MEINDB".MEINUDT[1] anlegen. Hoffe, ich habe dein Anliegen richtig verstanden.
Mit Parameter als ARRAY hätte es nach SinusQuadrat aber gehen müssen! Hast du mal meinen ersten Hinweis befolgt?

Gruß, Onkel
 
Zuletzt bearbeitet:
1. erstelle deinen UDT wie du ihn brauchst
gib ihr unebdingt einen Symbolischen Namen

2. erstelle einen Datenbaustein
der aus einem Array besteht aus diesem Udt

STRUCT
Motor : ARRAY [1 .. 3 ] OF "Test";
END_STRUCT ;

Test heißt in meinem Fall der UDT

3. erstelle die INOUT Variable mit dieser UDT


4. Bausteinaufruf sieht dann so aus und wird Symbolisch eingegeben

CALL FC 1000
Motor:="Test_DB1".Motor[1]

oder so: das Array muss aber so eingegeben werden

CALL FC 1000
Motor:=DB1000.Motor[1]

5. fertig
 
Danke erstmal für die ganzen Antworten
Alle Versionen die Ihr mir geschrieben habt funktionieren.
Aber meine Frage ist eigentlich immer noch nicht beantwortet. Es ist wohl so das ich ein Tippfehler habe.
Das mit der Konsistenz habe ich auch schon durchgespielt.
Aber weiter bin ich immer noch nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So jetzt geht es. Warum ?? Irgend ein Fehler beim Übernehmen oder soetwas. Ähnliche Fehler habe ich schonmal auf Lehrgänge gehabt wenn mann den ganzen Tag daran rumbastelt, löscht und neu schreibt usw.
Danke an Sinus Quadraht. Das war der Richtige Weg.
 
Zurück
Oben