- Beiträge
- 6.451
- Reaktionspunkte
- 1.512
-> Hier kostenlos registrieren
Hallo,
ich muss zugeben, der erste Teil des Titels des Threads ist etwas verwirrend, denn wie kann eine Kontante zu konstant sein, aber Aufklärung folgt.
In einem Projekt erhalten einige FBs Konfigurationsparameter via FB_init. Die Parameter können einzelne Variablen sein, aber auch Arrays von Strukturen und genau letztere bereiten mir gerade Kopfzerbrechen.
Einzelne Werte kann man ja direkt bei der Deklaration des FBs angeben, bei Arraya geht dies aber nicht, da muss man eine Variable angeben. Diese ist in meinem Fall eine Konstante. Hier mal ein Beispiel der Deklaration der Konstanten und des FBs:
Ich habe nun bei der ersten Struktur xPermanentOpen auf FALSE und bei der Vierten auf TRUE gesetzt. Danach habe ich die Hardware neu aktiviert und gleichzeitig das Bootprojekt geladen. Danach bin ich Online gegangen und musste feststellen, dass die Variable noch Ihren alten Wert hatte. Ich habe einiges probiert, aber nichts hat geholfen. Erst als ich die Projektmappe bereinigt habe waren die neuen Werte da, aber das kann es doch nicht sein, oder?
Hat da einer eine Idee?
ich muss zugeben, der erste Teil des Titels des Threads ist etwas verwirrend, denn wie kann eine Kontante zu konstant sein, aber Aufklärung folgt.
In einem Projekt erhalten einige FBs Konfigurationsparameter via FB_init. Die Parameter können einzelne Variablen sein, aber auch Arrays von Strukturen und genau letztere bereiten mir gerade Kopfzerbrechen.
Einzelne Werte kann man ja direkt bei der Deklaration des FBs angeben, bei Arraya geht dies aber nicht, da muss man eine Variable angeben. Diese ist in meinem Fall eine Konstante. Hier mal ein Beispiel der Deklaration der Konstanten und des FBs:
C-ähnlich:
VAR CONSTANT
asDilutionNames01 : ARRAY[1..5] OF STRING(20) := ['N2 Stack 1', '', '', '', ''];
astDilutionValveData01 : ARRAY[1..5, 1..6] OF ST_DilutionPanelValveData := [ (xPermanentOpen := TRUE, usiValveGroup := 0, usiValve := 4, rFlow := 20.0),
(xPermanentOpen := FALSE, usiValveGroup := 0, usiValve := 5, rFlow := 50.0),
(xPermanentOpen := FALSE, usiValveGroup := 0, usiValve := 7, rFlow := 100.0),
(xPermanentOpen := FALSE, usiValveGroup := 0, usiValve := 8, rFlow := 200.0),
(xPermanentOpen := FALSE, usiValveGroup := 0, usiValve := 6, rFlow := 400.0),
(xPermanentOpen := FALSE, usiValveGroup := 0, usiValve := 3, rFlow := 1000.0),
(* Die weitere Deklaration wurde gekürzt *)
];
END_VAR
VAR
// Dilution panel
// Devices
fbDilutionPane01 : FB_DilutionPanel(asName := asDilutionNames01, astValveData := astDilutionValveData01);
END_VAR
Hat da einer eine Idee?