Handshake | Panel <> PLC

Biiebs

Level-2
Beiträge
28
Reaktionspunkte
7
Zuviel Werbung?
-> 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)

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
 
Ich habe mir hier immer darauf verlassen, dass wenn ich im Panel / Bediengerät einen Wert ändere dieser auch in der SPS / PLC ankommt.

Etwas anderes war umgekehrt - wenn ich also verlässlich Daten KONSISTENT von der SPS einlesen musste - da muss man sich schon des einen oder anderen Tricks bedienen, da die Systeme dies in aller Regel eben nicht konsistent (sondern nach Belieben) machen wollen ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe mir hier immer darauf verlassen, dass wenn ich im Panel / Bediengerät einen Wert ändere dieser auch in der SPS / PLC ankommt.
naja, da die Variablen in den DBs ja beliebig im SPS-Zyklus beschrieben werden könnten:
In der SPS die Variablen, die von extern beschrieben werden könnten, nur EINMAL lesen und nicht beschreiben.

Grundsätzlich aber wie immer die Frage, was will der TE und warum überhaupt machen...
 
Aktuell würde ich mir gerne einfach eine Schnittstelle mit einem Handshake zwischen HMI und PLC generieren, wie ich hier jedoch herauslese ist dies eigentlich eher überflüssig und zu kompliziert gedacht? Ich wollte eigentlich hiermit sicher gehen, dass sämtliche Aktionen / Daten sicher von PLC zu HMI übersendet werden (z.B. QR-Code-Daten).

Etwas anderes war umgekehrt - wenn ich also verlässlich Daten KONSISTENT von der SPS einlesen musste - da muss man sich schon des einen oder anderen Tricks bedienen, da die Systeme dies in aller Regel eben nicht konsistent (sondern nach Belieben) machen wollen ...
Wie ist dies denn zu interpretierten? Hättest du ein Beispiel für so ein "Workaround" bzw. Trick?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wenn die "QR-Code-Daten" was größeres sind, welcher Datentyp? kann es u.U. sein, dass die SPS grad auf den DB schreibt und das HMI gleichzeitig liest, d.h. die Hälfte der Daten sind neu und die andere Hälfte alt...

Früher haben wir am Anfang und Ende vom DB eine Zählvariable eingefügt. Der Datensender zählt bei jedem Schreiben beide Zählwertvariablen identisch hoch. Der Empfänger verwirft die Daten, wenn der gelesene Zählwert vom Anfang und Ende nicht identisch sind...
 
Früher haben wir am Anfang und Ende vom DB eine Zählvariable eingefügt. Der Datensender zählt bei jedem Schreiben beide Zählwertvariablen identisch hoch. Der Empfänger verwirft die Daten, wenn der gelesene Zählwert vom Anfang und Ende nicht identisch sind...

(y) oder ganz old-school eine Prüfsumme (aber eben auch am Anfang und am Ende).

Das Problem ist nicht, dass die Daten (in die eine oder andere Richtung) nicht übertragen werden sondern wie schon von @ducati geschildert die Konsistenz ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei Siemens-S7/HMI gibt es ein fertiges Übertragungsverfahren mit Handshake: Rezeptur-Datensätze übertragen
Man braucht ein "doppeltes" Handshake, weil die Datenquelle während der Übertragung die Quelldaten nicht verändern darf.
Hier hatte ich mal ein Verfahren beschrieben, wie ich 70 kB Daten konsistent in Häppchen von je 880 Byte mit dem HMI aus der CPU hole.

Harald
 
Ich wollte eigentlich hiermit sicher gehen, dass sämtliche Aktionen / Daten sicher von PLC zu HMI übersendet werden
Sämtliche Aktionen ? Also jede Button, Drop-down Menü usw. ?
Für Buttons hat Ducati die sichere und einfache Variante beschrieben.
Zum Thema Button, der HMI-Button setzt die Bool-Variable in der SPS einfach.
Die SPS liest diese Variable und setzt sie zurück.
So macht man das üblicherweise...
Eventuell kann man ein Button oder Schalter konfigurieren mit Checkback. Dann sieht der Anwender ob der Button/Schalter die Zustand wechselt wenn die Button/Schalter betätigt wird.
Ähnlich mit Analogwerte bei Eingabefelder. Die muss man als Ein/Ausgabe Felder konfigurieren. Wenn der Benutzer ein Wert eintippt, funktioniert das Feld als Eingabe. Nach das eintippen funktioniert das Feld as Ausgabe. D.h. man sieht ob die Wert korrekt übertragen wurde. Eventuell wird den Wert von das Anwenderprogramm limitiert, was man dann auf das Feld sehen kann.
Dies ist Gang und Gänge bei HMI Programme.
Es ist der Benutzer der die 'Handshake' macht, indem er sieht ob die Wert korrekt übertragen wird.

(z.B. QR-Code-Daten).
Das wäre typisch ein STRING, d.h. nur 1 Variabel.
Hier wäre es Sinnvoll die STRING auf den HMI zu zeigen. Wenn die QR code mit eine Teil oder Rezept verbunden ist, ist es üblich die dementsprechende Name auf die HMI zu zeigen, und dann mit ein Paar Buttons entweder den Wert akseptieren oder resetten.
 
Zurück
Oben