-> Hier kostenlos registrieren
Hallo Zusammen,
ich hätte mal eine prinzipielle Frage zum Thema Handshake zw. Panel und PLC.
Wie realisiert ihr den Handshake? Setzte ihr auf 2-Wege, 3-Wege - Handshake um z.B. Button Interaktionen oder Daten zu transferieren?
Ich hab mir hierzu exemplarisch mal ein 3-Wege-Handshake runtergeschrieben, dass nur die Kommunikation von Modul 1 zu Modul 2 abdeckt (vice versa von Modul 2 nach Modul 1)
Gibt es da eine einfache Herangehensweise oder eine Optimierung dafür? Wie handhabt ihr das mit allen Übergabeparameter zw. HMI und PLC? Theoretisch wäre dies ja ein unendlicher Aufwand dies für jede einzelne Variable zu realisieren?
Gruß,
Biiebs
ich hätte mal eine prinzipielle Frage zum Thema Handshake zw. Panel und PLC.
Wie realisiert ihr den Handshake? Setzte ihr auf 2-Wege, 3-Wege - Handshake um z.B. Button Interaktionen oder Daten zu transferieren?
Ich hab mir hierzu exemplarisch mal ein 3-Wege-Handshake runtergeschrieben, dass nur die Kommunikation von Modul 1 zu Modul 2 abdeckt (vice versa von Modul 2 nach Modul 1)
Code:
FUNCTION_BLOCK FB_Module_1
VAR_INPUT
xResSignal : BOOL;
iResData : INT;
END_VAR
VAR_OUTPUT
xReqSignal : BOOL;
xReqAck : BOOL;
iReqData : INT;
END_VAR
VAR
_xStart : BOOL;
_iHandshake : INT;
_rTrig : Standard.R_TRIG;
END_VAR
Code:
_rTrig(CLK := _xStart);
// Send Signal to Client 2
CASE _iHandshake OF
0: // Initial / Idle
IF _rTrig.Q THEN
_iHandshake := 1;
iReqData := 5;
END_IF
1: // Set Request
xReqSignal := TRUE;
_iHandshake := 2;
2: // Waiting for Response
IF xResSignal THEN
IF iResData = iReqData THEN
xReqAck := TRUE;
_iHandshake := 3;
END_IF
END_IF
3: // Clear
xReqSignal := FALSE;
xReqAck := FALSE;
iReqData := 0;
_xStart := FALSE;
_iHandshake := 0;
END_CASE
Code:
FUNCTION_BLOCK FB_Module_2
VAR_INPUT
xResSignal : BOOL;
iResData : INT;
xResAck : BOOL;
END_VAR
VAR_OUTPUT
xReqSignal : BOOL;
iReqData : INT;
END_VAR
VAR
_xStart : BOOL;
_iHandshake : INT;
END_VAR
Code:
// Get Signal from Client 1
CASE _iHandshake OF
0: // Initial / Idle
IF xResSignal THEN
_iHandshake := 1;
END_IF
1: // Set Request
iReqData := iResData;
xReqSignal := TRUE;
_iHandshake := 2;
2: // Waiting for Response
IF xResAck THEN
_iHandshake := 3;
END_IF
3: // Clear
xReqSignal := FALSE;
iReqData := 0;
_xStart := FALSE;
_iHandshake := 0;
END_CASE
Gibt es da eine einfache Herangehensweise oder eine Optimierung dafür? Wie handhabt ihr das mit allen Übergabeparameter zw. HMI und PLC? Theoretisch wäre dies ja ein unendlicher Aufwand dies für jede einzelne Variable zu realisieren?
Gruß,
Biiebs