Player-Ben
Level-2
- Beiträge
- 86
- Reaktionspunkte
- 3
-> Hier kostenlos registrieren
Liebe SPS-Gemeinde,
ich versuche seit ein paar Stunden mir einen Funktionsblock zu basteln, welcher mit einem Taster (angeschlossen an die SPS), einem KNX-Taster und der Gira X1 Visu funktioniert. Grundsätzlich ist das Problem, dass die Visu den Zustand des Lichts nur bei der Funktion „Umschalten“ anzeigt und dieses über die SPS realisiert werden musste. Das klappt soweit auch alles ganz gut. Nun zu meinem Hindernis:
Der Funktionsblock enthält aktuell den benötigten KNX-Datenpunkt als Globale Variable, dieses würde ich gerne umgehen.
Gibt es die Möglichkeit den Datenpunkt dem Funktionsblock zu übergeben (Innerhalb des Programms) oder wäre die Sache mit dem DPT-Baustein-Array die schickere Lösung. Letzteres habe ich schon versucht, leider ohne Erfolg.
Freue mich auf ein paar Ideen.
Viele Grüße
Ben
Aufruf im Programm:
Deklaration der Globalen Variablen:
ich versuche seit ein paar Stunden mir einen Funktionsblock zu basteln, welcher mit einem Taster (angeschlossen an die SPS), einem KNX-Taster und der Gira X1 Visu funktioniert. Grundsätzlich ist das Problem, dass die Visu den Zustand des Lichts nur bei der Funktion „Umschalten“ anzeigt und dieses über die SPS realisiert werden musste. Das klappt soweit auch alles ganz gut. Nun zu meinem Hindernis:
Der Funktionsblock enthält aktuell den benötigten KNX-Datenpunkt als Globale Variable, dieses würde ich gerne umgehen.
Gibt es die Möglichkeit den Datenpunkt dem Funktionsblock zu übergeben (Innerhalb des Programms) oder wäre die Sache mit dem DPT-Baustein-Array die schickere Lösung. Letzteres habe ich schon versucht, leider ohne Erfolg.
Freue mich auf ein paar Ideen.
Viele Grüße
Ben
Code:
FUNCTION_BLOCK FBLatchedRelayKNX
VAR_INPUT
xButton :BOOL; (*Button for switching || Tastsignal *) (*PAR_OP*)
xCentralOn :BOOL; (*central on || Zentral EIN *) (*PAR_OP*)
xCentralOff :BOOL; (*central off || Zentral AUS *) (*PAR_OP*)
KNX :BOOL; (*Schaltsignal von der Gruppenadresse*)
bKNX_Master :BYTE:=1;
dwIndex_DPT :DWORD;
iActuator :BOOL;
END_VAR
VAR_INPUT CONSTANT
T_on_max :TIME := T#0s; (*Wird nach der Zeit automatisch abgeschaltet*)
END_VAR
VAR_OUTPUT
oActuator :BOOL; (*Digital signal for relay || Ausgangsschaltsignal *) (*physical output L*)
END_VAR
VAR
status: BOOL:=FALSE;
FBTOF: TOF;
FTrigButton :F_TRIGER;
RTrigButton :R_TRIGER;
FTrigExtern :F_TRIGER;
RTrigExtern :R_TRIGER;
T_on :TIME;
tx :TIME;
(*DPT_Switch01 :FbDPT_Switch;*)
typDPT : typDPT;
init :BOOL:=TRUE;
END_VAR
----------------------------------------------------------------------------
(*IF init THEN
init:=FALSE;
DPT01( xSwitch_IN:=oActuator , dwIndex_DPT:=dwIndex_DPT , bKNX_Master:=bKNX_Master , typDPT:=typDPT );
IF dwIndex_DPT>0 THEN
dwIndex_DPT:=dwIndex_DPT*1000+0;
END_IF
ELSE
DPT_Switch01( dwIndex_DPT:=dwIndex_DPT , bKNX_Master:=bKNX_Master , typDPT:=typDPT );
END_IF
*)
X1_seg_01_01( bKNX_Master:=bKNX_Master );
tx := DT_TO_TIME(SysRtcGetTime(TRUE)); (* systemzeit zum Startpunkt setzten für auto abschaltung*)
RTrigButton();
RTrigExtern();
FTrigExtern();
RTrigButton.CLK:=xButton;
IF X1_seg_01_01.xUpdate_PLC THEN
oActuator:=X1_seg_01_01.xSwitch_OUT;
ELSIF RTrigButton.Q THEN
IF NOT iActuator THEN
oActuator:=TRUE;
ELSIF iActuator THEN
oActuator:=FALSE;
END_IF;
ELSE
X1_seg_01_01.xSwitch_IN:=iActuator;
END_IF
Aufruf im Programm:
Code:
Programm KNX
VAR
X1_test :FBLatchedRelayKNX;
END_VAR
----------------------------------------------------------------------------
X1_test(xButton:=seg01_1 OR test_Guest ,iActuator:=deg01,dwIndex_DPT:=3,oActuator=>deg01);
Deklaration der Globalen Variablen:
Code:
X1_seg_01_01 :FbDPT_Switch;(*Virtueller Schalter Gästezimmer*)