Ein-/Ausgangsparameter einer FC in GRAPH

derbenny

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

ich habe einen GRAPH-FB, der mehrere Ketten beinhaltet. Jede Kette hat immer einen aktiven Schritt. Nun habe ich ein Array, für jede Kette ein Element, das den momentan aktiven Schritt beinhaltet.

Also sowas:

ActStep : Array[1..6] of INT //Aktiver Schritt der Ketten 1-6

Über die GRAPH-Interne Struktur kann ich das auch realisieren (mit SAX[..], G7S[..].SNO, ...). Habe das in einem SCL-FB umgesetzt. Da ich das ganze aber mehrfach brauche, wäre es schöner, wenn ich das in einer Funktion hätte, die folgende Parameter hat:

IN:
SAX : ANY
G7S : ANY

OUT:
ActStep : Array[1..6] of INT


Beides macht allerdings Probleme. SAX/G7S hatte ich als ANY deklariert, da das ja kein "richtiger" Datentyp ist. Die Zuweisung im aufrufenden FB funktioniert auch, allerdings kann ich in der Funktion dann per SAX[index] nicht darauf zugreifen. Geht wohl nur per absolutem Zugriff, was aber wohl nicht brauchbar sein wird.

Das Ausgangs-Array kann ich beim Aufruf nicht zuweisen. In GRAPH erscheint ja dann der Block in dem die Parameter angegeben werden können, aber wenn ich dort ein gleiches Array, auch 1..6 of int zuweisen will, bleibt das dauernd rot. Egal ob ich es mit DBn.Arrayname oder nur mit Arrayname oder mit Arrayname[..] mache, es geht einfach nicht.

Inzwischen habe ich es fast schon aufgegeben, das ganze in eine Funktion zu packen.

Eine zweite Idee war, mit BLOCK_DB als Eingangsparameter der Funktion den Zugriff auf den gesamten GRAPH-DB zu verschaffen, aber dann ist wieder nur absoluter Zugriff mit DBn.DBX1.3 usw möglich und nicht DBn.SAX[index].

Am sinnvollsten wäre es natürlich, wenn ich keine Funktion bräuchte, sondern direkt in GRAPH das gewünschte Array erzeugen könnte, aber mit der primitiven Syntax in GRAPH seh ich da keine Möglichkeit.

Hat jemand Ideen?
Kann ich die Daten doch an eine Funktion übergeben?
Kann ich die Schrittnummern sonstwie rauskriegen? (S_NO ist recht sinnfrei bei mehreren Ketten..)
An was kann es liegen dass ich kein Array zuweisen kann? (In KOP geht es bei derselben Funktion).

Wäre für Ideen dankbar :cool:


By the way: Weiss man schon ab wann GRAPH auch SCL-Aktionen kann?
 
Hi,
hab zwar nicht direkt die Lösung für dein Problem, aber
ich hätte allein schon wegen der Übersicht eher auf 6 Graph FBs gesetzt.
Für jede Kette einen eigenen FB.
Somit macht S_NO wieder Sinn.

(Bin nicht so der Graph Spezi, für meine Bedürfnisse hats bis jetzt gereicht :ROFLMAO: )
Gruss Andy
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Idee hatte ich auch schon, aber dann auch gleich wieder vergessen.
Das würden einfach zu viele werden. Und davon abgesehen frisst es noch deutlich mehr Speicher, wenn ich 6 FBs mit Instanz-DBs anlege, als einen FB/DB mit 6 Ketten. Dazu bräuchte ich dann auch noch 6 mal den Aufruf, 6 mal die Verwaltung (Reset, BA usw),... naja.

Am sinnvollsten wäre es wirklich wenn man das direkt in GRAPH machen könnte. Dann könnte man das Array mit aktiven Schritten als Ausgangsparameter des Graph-FB übergeben. Wäre das schönste. Aber mit den umfangreichen :twisted:, flexiblen :twisted: und vielfältigen :twisted: Möglichkeiten und der tollen Syntax :twisted: in Graph braucht man garnicht daran denken....
 
Hallo,


Also sowas:

ActStep : Array[1..6] of INT //Aktiver Schritt der Ketten 1-6

Über die GRAPH-Interne Struktur kann ich das auch realisieren (mit SAX[..], G7S[..].SNO, ...). Habe das in einem SCL-FB umgesetzt. Da ich das ganze aber mehrfach brauche, wäre es schöner, wenn ich das in einer Funktion hätte, die folgende Parameter hat:

IN:
SAX : ANY
G7S : ANY

OUT:
ActStep : Array[1..6] of INT


Wäre für Ideen dankbar :cool:


By the way: Weiss man schon ab wann GRAPH auch SCL-Aktionen kann?
Versuche es mal, aber hab ehrklich noch nicht so ganz gecheckt, was du eingentlich machen willst.

Dau kannst z.B. bei einem Array von 6 Elementen die Ausgangsparameter einfach einzeln als OUT angeben.
Oder einen UDT mit Schritt 1-6 hinterlegen und diesen verwenden.
Oder obige Funktion schreiben und im Graph-FB unter den Permanten Operationen aufrufen.
Das Werkzeug ANY-Pointer ist imho nicht notwendig.

hth
 
Versuche es mal, aber hab ehrklich noch nicht so ganz gecheckt, was du eingentlich machen willst.

Ich will:
- Das Array SAX aus dem Instanz-DB eines GRAPH-FBs an eine Funktion übergeben.
- Das Array G7S an eine Funktion übergeben
- In der Funktion auf die Elemente zugreifen, verarbeiten und in ein Array schreiben
- Das Array als Ausgangsparameter ausgeben

Dau kannst z.B. bei einem Array von 6 Elementen die Ausgangsparameter einfach einzeln als OUT angeben.
Richtig, das würde funktionieren :)

Oder einen UDT mit Schritt 1-6 hinterlegen und diesen verwenden.
Dann bräuchte ich aber für jeden Funktionsaufruf einen UDT, und das können einige sein

Oder obige Funktion schreiben und im Graph-FB unter den Permanten Operationen aufrufen.
Genau das hatte ich ja versucht, aber GRAPH wollte das Array nicht anzeptieren. Aber zuerst muss ich die Daten rein kriegen, sonst hab ich nix zum auswerten.
 
Zurück
Oben