TIA 4 Sollwerte Variabel 4 Ausgängen zuordnen

TIA_TESTER

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

bin jetzt auch bei TIA gelandet, habe hier V12 laufen und direkt mal eine Frage bzw. bräuchte Anregung zum Lösungsweg.

Gegeben: 4 Sollwerte, 4 Analogausgänge
Gefordert: 4 Verschiedene zuordnungen (config´s) der Sollwerte zu den Ausgängen.
Bsp.:

Config 1:
Soll1 -> AO1
Soll2 -> AO2
Soll3 -> AO3
Soll4 -> AO4

Config 2:
Soll1 ->AO3
Soll2 ->AO2
...
...

Ich denke ihr wisst was ich meine.

Hab ich mir jetzt so gedacht und auch angefangen:

Die 4 Configs werden über die VISU gebildet: 4 Grafische E/A Felder die in aufeinanderfolgenden Bytes versch. Bit setzten.

Habe dann für

0001: Sollwert 1 (Byte 1)
0010: Sollwert 2 (Byte 2)
0100: Sollwert 3 (Byte 3)
1000: Sollwert 4 (Byte 4)

Ausgang 1: Byte 1
Ausgang 2: Byte 2
Ausgang 3: Byte 3
Ausgang 4: Byte 4


das DWord würde dann so aussehen: 1000 0100 0010 0001 und ist ja quasi meine Config.

Jetzt bräuchte ich etwas das mir die 4 byte zu einem DWord zusammensetzt wie oben beschrieben. Und je nach gewählter Config (einfaches bit) das ganze in den entsprechenden DB ablegt.

DB1.Config 1 Dword
DB2.Config 2 Dword
...
...

Ein Baustein der je nach byte-inhalt die sollwerte den ausgängen zuordnet hab ich (FUP, ist aber auch recht unübersichtlich).

Hauptfrage ist: Wie krieg ich byte´s zu Dword zusammengesetzt und wieder auseinandergenommen(Gern auch in AWL, aber dann müsste es ein wenig genauer erklärt sein was genau gemacht wird). Oder habt ihr eine andere idee wie ich das ganze viel einfacher lösen kann?


Vielen Dankschonmal, ich hoffe mir kann jemand weiterhelfen
 
Ich würd' da im DB ein Array [1..4] of Byte für die Sollwerte selbst anlegen plus ein Array [1..4] of Int für die Zuordnung der Sollwerte zu den Ausgängen und im FB/FC dann einfach
Code:
FOR x := 1 TO 4 BY 1 DO
  AB[x] := Sollwert[ Sollwert_zu_Ausgang[ x ] ];
END_FOR;
Bei den EA-Feldern für jedes Ausgangsbyte den Wert 1 bis 4 für die Zuordnung des entsprechenden Sollwerts auswählen.
Falls keine doppelte Zuordnung erlaubt ist, dann im Programm entsprechend reagieren.
 
Hallo und danke für die schnelle Antwort.

Was Array´s angeht etc muss ich mich erstmal belesen,...

Könntest du aber dein code etwas genauer erleutern? Ist das SCL oder AWL? Sorry bisher war das nicht meine Welt:)

Danke schonmal, Gruß T.
 
Die Sache mit den Array muss ich mir nochmal anschauen, hab mich immer darum gedrückt. kannst du den code genauer erläutern bitte.

Das mit Datentypsicht schau ich mir gleich auch noch an.

Danke euch
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mal als Beispielinhalt im DB:
Code:
Sollwert[1] = 64
Sollwert[2] = 18
Sollwert[3] = 22
Sollwert[4] = 5
Sollwert_zu_Ausgang[1] = 4
Sollwert_zu_Ausgang[2] = 2
Sollwert_zu_Ausgang[3] = 1
Sollwert_zu_Ausgang[4] = 3

Dann machen die Schleife und Zuweisung aus obigen Code folgende Ersetzungen:
Code:
1. Durchlauf x=1:  AB[1] := Sollwert[ Sollwert_zu_Ausgang[ 1 ] ] := Sollwert[ 4 ] := 5
2. Durchlauf x=2:  AB[2] := Sollwert[ Sollwert_zu_Ausgang[ 2 ] ] := Sollwert[ 2 ] := 18
3. Durchlauf x=3:  AB[3] := Sollwert[ Sollwert_zu_Ausgang[ 3 ] ] := Sollwert[ 1 ] := 64
4. Durchlauf x=4:  AB[4] := Sollwert[ Sollwert_zu_Ausgang[ 4 ] ] := Sollwert[ 3 ] := 22


Mal angenommen, Du trägst dann über's HMI für Sollwert_zu_Ausgang[4] statt der jetzigen 3 eine 1 ein, steht dann im Durchlauf der FOR-Schleife bei x=4:
Code:
...
4. Durchlauf x=4:  AB[4] := Sollwert[ Sollwert_zu_Ausgang[ 4 ] ] := Sollwert[ 1 ] := 64



Ich hoffe, das ist so für Dich verständlich.
Arrays bieten halt die Möglichkeit, gleichartige (-namige) Variablen über eine Nummer zu selektieren.


PS: Ganz vergessen, der Code ist SCL.
 
Zuletzt bearbeitet:
Hallo und danke,...

jetzt habe ich verstanden was gemacht wird und jetzt kommt mir auch wieder das ich sowas schonmal gesehn hab:)

Code:
FOR x := 1 TO 4 BY 1 DO //x ist einfach die Variable wie oft das ganze durchlaufen wird, muss ich "x" n der schnittstelle als Variable definieren?
  AB[x] := Sollwert[ Sollwert_zu_Ausgang[ x ] ]; //Was ist "AB"? Die Darauf folgende Anweisung schiebt einfach nur die Sollwerte entsprechend zu den Ausgängen?
END_FOR;

Code:
Sollwert[1] = 64 //der eigentliche Sollwert
Sollwert[2] = 18 //der eigentliche Sollwert
Sollwert[3] = 22 //der eigentliche Sollwert
Sollwert[4] = 5 //der eigentliche Sollwert
Sollwert_zu_Ausgang[1] = 4 //Der Bereich wo ich mein Sollwert zu Ausgang 1 im weiteren Programm abhole???
Sollwert_zu_Ausgang[2] = 2 //Der Bereich wo ich mein Sollwert zu Ausgang 1 im weiteren Programm abhole???
Sollwert_zu_Ausgang[3] = 1 //Der Bereich wo ich mein Sollwert zu Ausgang 1 im weiteren Programm abhole???
Sollwert_zu_Ausgang[4] = 3 //Der Bereich wo ich mein Sollwert zu Ausgang 1 im weiteren Programm abhole???

Jetzt fehlt aber ein Bereich wo meine Info liegt welcher Sollwert zu welchem Ausgang soll Ich habe ja 3 Variablen ? Sollwerte kommend, Info wohin und Sollwerte neu sortiert?

Danke schonmal für weitere erklärung.

Gruß T.
 
Es geht, habe es aber nicht verstanden!

INFO:
Code:
"Config".Sollwerte (Mein Array für die 4 Sollwerte)
"Config".Zuweisung Sollw. (Mein Array für die Zuweisungen der Sollwerte, hier ist also 1, 2, 3, o. 4 von der Visu hinterlegt)
"Config".Ausgang (Mein Array wo die sortierten Sollwerte abgelegt  werden, und ich Sie im Programm für die weiterverarbeitung  abhole)

So sieht das ganze jetzt bei mir aus:
Code:
FOR #x := 1 TO 4 BY 1 DO
  "CONFIG".Ausgang[#x] := "CONFIG".Sollwerte["CONFIG"."Zuweisung_Sollw."[#x] ];
END_FOR;


Kann es mir jemand aber genau erklären? X wird doch bei jedem durchlauf um 1 hochgezählt? Dann würde meine Schleife so aussehen:

Code:
"CONFIG".Ausgang[#1] := "CONFIG".Sollwerte["CONFIG"."Zuweisung_Sollw."[#1] ];
"CONFIG".Ausgang[#2] := "CONFIG".Sollwerte["CONFIG"."Zuweisung_Sollw."[#2] ];
"CONFIG".Ausgang[#3] := "CONFIG".Sollwerte["CONFIG"."Zuweisung_Sollw."[#3] ];
"CONFIG".Ausgang[#4] := "CONFIG".Sollwerte["CONFIG"."Zuweisung_Sollw."[#4] ];
Wieso findet jetzt die zuordnung entsprechend der in "CONFIG".Zuweisung_Sollw. hinterlegten Werte 1,2,3,o. statt und nicht 1 zu 1wenn ja hinten auch steht: ""CONFIG"."Zuweisung_Sollw."[#4]"


Kann ich einzelne Durchläufe der Schleifen beobachten? Oder immer nur den ersten?

Dankeschön, Gruß T
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Schleife lässt sich nicht so gut beobachten. Vermutlich siehst Du da nur einen Durchlauf.

Du kannst den Code ja zum Testen auch ohne FOR-Schleife dafür dann 4x schreiben, so wie Du's jetzt in Deinem Post getan hast. Nur das # vor den Zahlen weglassen, da es ja keine Variablen sondern Zahlen sind.


Das Ganze funktioniert so, das die Variablen der Reihe nach durch ihren Wert ersetzt werden, bis sie komplett aufgelöst sind.
 
Jetzt hab ichs verstanden!! Ist ja eine einfache zuweisung und wenn es durchläuft sieht es dann so aus:

1.
Code:
"CONFIG".Ausgang[1] := "CONFIG".Sollwerte["CONFIG"."Zuweisung_Sollw."[1] ];
"CONFIG".Ausgang[2] := "CONFIG".Sollwerte["CONFIG"."Zuweisung_Sollw."[2] ];
"CONFIG".Ausgang[3] := "CONFIG".Sollwerte["CONFIG"."Zuweisung_Sollw."[3] ];
"CONFIG".Ausgang[4] := "CONFIG".Sollwerte["CONFIG"."Zuweisung_Sollw."[4] ];

Anschließend bzw. so ist es ja wird aus
Code:
"CONFIG"."Zuwesung_Sollw."[4]           ->  1 , 2, 3, oder 4

Sprich:

2.
Code:
"CONFIG".Ausgang[1] := "CONFIG".Sollwerte[1];
"CONFIG".Ausgang[2] := "CONFIG".Sollwerte[2];
"CONFIG".Ausgang[3] := "CONFIG".Sollwerte[3];
"CONFIG".Ausgang[4] := "CONFIG".Sollwerte[4];

Eine einfache Zuweisung. Meine Werte 1-4 sind sozusagen die Array "Adressen" des zu ladenden Wertes?

Hab ich das so richtig verstanden (einfach ausgedrückt)

Vielen Dank für die Super Hilfe!!!!!!
 
Zurück
Oben