Majestic_1987
Level-1
- Beiträge
- 270
- Reaktionspunkte
- 22
-> Hier kostenlos registrieren
Hallo Leute, habe eine programmiertechnische Problematik zu lösen.
Folgendes ist die Anforderung:
Es existiert ein FB zur Steuerung eines Betriebsmittels. Es dient einer Funktionsauswahl und einer Steuerung eines Ausgangs.
Nun können von diesem Betriebsmittel bis zu X Stück an der Steuerung angeschlossen sein. Die Hardware ist dabei von der Struktur her komplett synchron zur Betriebsmittelnummer.
Heisst z.b.
Eingang 1 des 1. Betriebsmittels liegt auf %IX1.0
Ausgang 1 des 1. Betriebsmittels liegt auf %QX1.0
Eingang 1 des 2. Betriebsmittels liegt auf %IX2.0
Ausgang 1 des 2. Betriebsmittels liegt auf %QX2.0
etc.
Eine maximale Zahl von Betriebsmitteln wird festgelegt.
Darüber hinaus soll eine real vorhandene Betriebsmittelzahl existieren.
Also habe ich als Eingaben für den zu erstellenden FB:
BM_Zahl (die Zahl der angeschlossenen Betriebsmittel von 0 - 100 Stück)
Eingang_Start (Byte-Nummer von Ein- und Ausgang des 1. Betriebsmittels)
Nun soll der FB den ich schreiben will folgendes tun:
Er liest die Anzahl der Betriebsmittel ein
Er ruft BM_Zahl von Instanzen des FB Betriebsmittel_Strg auf
Er parametriert die Input- und Output-Variablen JEDER Instanz automatisch auf %IX(BM_Nummer).0 bzw %QX(BM_Nummer).0
Soll heißen: Wenn ich X gleiche Betriebsmittel habe, die alle gleich angesteuert werden, möchte ich gerne alles andere, sprich zuweisungen von Eingangs und Ausgangsadressen von der Steuerung übernehmen lassen, sodass während des Betriebs per Visu einfach die Zahl der Betriebsmittel umgestellt werden kann ohne dass man das Programm an sich ändern muss.
Verstanden?
Mein Ansatz zum Aufruf der Instanzen war eine Array:
VAR
BM_Zahl: INT;
Zaehler: INT;
Aufruf: ARRAY [1..100] OF Loop_Test;
END_VAR
FOR Zaehler := 1 TO BM_Zahl DO
Aufruf[Zaehler](Eingang := , Ausgang := );
END_FOR;
Loop_Test ist hierbei der Name meines Test-FB welcher einfach Eingang = Ausgang setzen soll um das ganze schnell zu testen.
Problem ist hier: Der Array, in den VAR definiert, erzeugt scheinbar IMMER 100 Instanzen.....
Wer kann mir da helfen? Muss dazu sagen: Fange gerade an, mich mit dem TwinCat/Codesys-System zu befassen. Hatte schon über Pointer nachgedacht, aber absolut keine Ahnung, wie man mit den Dingern umgeht und auch keine ordentliche Dokumentation dazu gefunden....vllt kann mir das mal jemand näher bringen....
Folgendes ist die Anforderung:
Es existiert ein FB zur Steuerung eines Betriebsmittels. Es dient einer Funktionsauswahl und einer Steuerung eines Ausgangs.
Nun können von diesem Betriebsmittel bis zu X Stück an der Steuerung angeschlossen sein. Die Hardware ist dabei von der Struktur her komplett synchron zur Betriebsmittelnummer.
Heisst z.b.
Eingang 1 des 1. Betriebsmittels liegt auf %IX1.0
Ausgang 1 des 1. Betriebsmittels liegt auf %QX1.0
Eingang 1 des 2. Betriebsmittels liegt auf %IX2.0
Ausgang 1 des 2. Betriebsmittels liegt auf %QX2.0
etc.
Eine maximale Zahl von Betriebsmitteln wird festgelegt.
Darüber hinaus soll eine real vorhandene Betriebsmittelzahl existieren.
Also habe ich als Eingaben für den zu erstellenden FB:
BM_Zahl (die Zahl der angeschlossenen Betriebsmittel von 0 - 100 Stück)
Eingang_Start (Byte-Nummer von Ein- und Ausgang des 1. Betriebsmittels)
Nun soll der FB den ich schreiben will folgendes tun:
Er liest die Anzahl der Betriebsmittel ein
Er ruft BM_Zahl von Instanzen des FB Betriebsmittel_Strg auf
Er parametriert die Input- und Output-Variablen JEDER Instanz automatisch auf %IX(BM_Nummer).0 bzw %QX(BM_Nummer).0
Soll heißen: Wenn ich X gleiche Betriebsmittel habe, die alle gleich angesteuert werden, möchte ich gerne alles andere, sprich zuweisungen von Eingangs und Ausgangsadressen von der Steuerung übernehmen lassen, sodass während des Betriebs per Visu einfach die Zahl der Betriebsmittel umgestellt werden kann ohne dass man das Programm an sich ändern muss.
Verstanden?
Mein Ansatz zum Aufruf der Instanzen war eine Array:
VAR
BM_Zahl: INT;
Zaehler: INT;
Aufruf: ARRAY [1..100] OF Loop_Test;
END_VAR
FOR Zaehler := 1 TO BM_Zahl DO
Aufruf[Zaehler](Eingang := , Ausgang := );
END_FOR;
Loop_Test ist hierbei der Name meines Test-FB welcher einfach Eingang = Ausgang setzen soll um das ganze schnell zu testen.
Problem ist hier: Der Array, in den VAR definiert, erzeugt scheinbar IMMER 100 Instanzen.....
Wer kann mir da helfen? Muss dazu sagen: Fange gerade an, mich mit dem TwinCat/Codesys-System zu befassen. Hatte schon über Pointer nachgedacht, aber absolut keine Ahnung, wie man mit den Dingern umgeht und auch keine ordentliche Dokumentation dazu gefunden....vllt kann mir das mal jemand näher bringen....