Array befüllen (ST)

timdw123

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

ich habe ein Programm in der Sprache Funktionsbaustein geschrieben. Dort habe ich eine Variable Typ Array in der verschiedene Positionen(REAL) auf den einzelnen Plätzen hinterlegt sind. Da es relativ aufwendig ist die Positionen in Funktionsbaustein den Indexnummer der Variable zuzuweisen, möchte ich das jetzt in einem neuen Netzwerk(ST) machen. Ist es möglich, dass Netzwerke mit verschiedenen Sprachen in einem Programm zusammen arbeiten? Probiert habe ich schon ein bisschen, kenne mich aber kaum mit strukturiertem Text aus.

Danke schonmal!
Tim
 
Das geht. Ich hatte es häufig, dass ein Kunde den oberen Teil in FUP erstellt hat und die FBs dann in ST.
Korrektur, wenn Du das Ganze innerhalb eines FBs meinst dann nicht. Aus einem FB der in FUB ist kannst Du aber andere FBs aufrufen die jeweils in einer anderen Sprache sind.

Von irgendwas mit Internetzugang gesendet.
 
Zuletzt bearbeitet:
Häaaah?!
Was meinst Du jetzt genau? Wie Du in ST einem Array-Element einen Wert zuweisen kannst?
ArrayVar [Index] := Postion;

Von irgendwas mit Internetzugang gesendet.
 
Zuletzt bearbeitet:
So habe ich es ausprobiert aber es funktioniert nicht. Die Variable bekommt keine Werte. Fehlt da vielleicht noch etwas davor oder dahinter? Ich kenne mich fast garnicht mit ST aus.
 
Ich weiß leider nicht was du mit Breakpoint, Einzelschritt oder Code senden meinst. Mein Programm ist ja in Funktionsbausteinsprache. Gibt es da einen Code?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ne, aber Du hast doch die Frage gestellt, wie Du es mit ST lösen kannst und ich dachte da läuft es nicht. Ein Breakpoint ist, einfach ausgedrückt, eine Markierung an der das Programm anhält und man sich dann verschiedenes ansehen kann und das Programm in einzelnen Schritten fortsetzen kann. An echten Anlagen sollte man allerdings genau wissen was man tut, ehe man Breakpoints nutzt. Im Falle von FUP mach mal einen Screenshot.

Von irgendwas mit Internetzugang gesendet.
 
Ich weiß gerade nicht wie das bei PC Worx funktioniert deshalb schreib ich mal was ich gemacht habe.
Als erstes habe ich einen Dateityp als Array angelegt der von 0..2 get. Dann habe ich in FBS eine globale Variable im Dateityp des Arrays erstellt mit einer enthaltenden Index Variable durch eckige Klammern. In einen neuen ST Netzwerk habe ich folgendes geschrieben:
VarArray[0] := 1;
VarArray[1] := 5;
VarArray[2] := 8;
Wenn ich den Index im laufenden Betrieb dann hoch zähle nimmt die Variable in FBS keinen Wert an.
Der Array funktioniert aber. Ich habe die Variablen mit den verschiedenen Indexnummern auch mal in FBS den Zahlen zugewiesen.
Kannst du da einen Fehler erkennen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Array funktioniert aber. Ich habe die Variablen mit den verschiedenen Indexnummern auch mal in FBS den Zahlen zugewiesen.

Ist vielleicht der Programmteil mit den anderen Zahlen (dem FBS-Teil) noch aktiv und überschreibt deine Versuche? Sowas kann man mit dem genannten Breakpoint rausfinden.
 
Wenn du in zwei verschiedenen Programmteilen (z.B. ein Funktionsbaustein in FBS und einer in ST) jeweils auf die gleiche globale Variable zugreifst (dein array), dann wird das Array am Ende des Zyklus immer den zuletzt bearbeiteten Wert annehmen.
Werden nun beide FBs in unterschiedlichen Tasks bearbeitet aber greifen auf die gleiche globale Variable zu, kann es sein, dass dein Array "umherspringt" zwischen den Werten aus dem einen und dem anderen task, je nach Zykluszeiten.

Ich würde dir empfehlen, dass du mal die Schreibbedingungen auf das Array an eine Änderung des Wertes bindest, also sowas wie

Code:
IF myVarOld <> myVar THEN
myArray[1]:=myVar;
myVarOld:= myVar;
END_IF;

Damit stellst du schonmal sicher, dass dir der andere FB nicht die Werte überschreibt.

Oder aber, was etwas eleganter ist: Du schaust, dass du wirklich nur eine Stelle im Programm hast, bei welcher dein Array beschrieben wird.
Du kannst dir immer einfach die Querverweise einer Variable anzeigen lassen mit Rechtsklick darauf und "Querverweise anzeigen". Dort siehst du dann, ob du versehentlich an mehreren Stellen beschreibst.

Gruß,
Flo
 
Zurück
Oben