Step 7 SFC12 - PN Teilnehmer Status abfragen

Pico1184

Level-2
Beiträge
332
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich möchte über den SFC12 den Status (Aktiv / Inaktiv) mehrerer PN Teilnehmer abfragen.
Dazu benötige ich die Rückmeldung des BUSY Signals zur Auswertung ob die Abfrage beendet wurde.

Leider kommt dieses Busy Signal in meinem Fall nie, wie kann das sein (im RET VAL steht aber das Ergebnis)?

Mein Code:

Code:
T_RET_VAL:= D_ACT_DP(REQ := b_Aktiv,
           MODE :=  B#16#0,
           LADDR := INT_TO_WORD(IO_INT_StartAdresse),
           BUSY :=  b_Busy);   

FC_Pulse(In_Var := b_Busy 
         ,Pulse_pos_Var := fp_busy 
         ,Pulse_neg_Var := fn_busy 
         ,Edge_flag_pos :=  mem_busy_fp
         ,Edge_flag_neg :=  mem_busy_fn);  
                   
    IF T_RET_VAL = 1 AND fn_busy THEN
        BufferSlaves[IO_INT_Anfang].Active := TRUE;
        BufferSlaves[IO_INT_Anfang].Inactive := FALSE;
    ELSIF T_RET_VAL = 2 AND fn_busy THEN
        BufferSlaves[IO_INT_Anfang].Active := FALSE;
        BufferSlaves[IO_INT_Anfang].Inactive := TRUE; 
    END_IF;

Grüße Pico
 
Prinzipiell arbeitet der SFC ja asynchron zum Zyklus, d.h. die bearbeitung startet "sofort" und endet irgendwann.
Desweiteren ist es prinzipiell ziemlich sinnlos das Busy-Flag so zu verwenden wie du es hier tust.
Solange Busy Aktiv ist, sind die Ausgaben des Bausteins nicht auszuwerten, das heißt ein simples "AND NOT b_busy" ist vollkommen ausreichend.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Solange Busy Aktiv ist, sind die Ausgaben des Bausteins nicht auszuwerten, das heißt ein simples "AND NOT b_busy" ist vollkommen ausreichend.

Woher weiß ich dann wann der Auftrag sicher abgearbeitet ist? Ich möchte nach jedem abgearbeiteten Auftrag einen neuen starten. In serieller Reihenfolge.
Aber dazu muss ich wissen wann der Auftrag fertig ist.

Was soll dann das Busy wenn ich es nicht so nutzen kann?

Grüße Pico
 
Du weißt, wann du den Auftrag startest, und weißt dann in der Folge wenn Busy falsch ist, dann ist der Auftrag abgearbeitet.

b_Aktiv AND NOT b_Busy = Fertig ...
 
Was sagt denn die Bausteinhilfe des SFC12?
Ich meine mich zu erinnern, daß da der Fakt extra erwähnt ist, daß bei der Abfrage-Funktion sofort beim ersten Aufruf schon das Ergebnis geliefert wird, ohne daß BUSY aktiv wird. Schließlich braucht die SFC nur ein Bit aus einer SZL lesen und versucht überhaupt keine Kommunikation mit dem PN-Teilnehmer - was soll da länger dauern?

Ansonsten zeigt Beitrag #4 von MSB, wie BUSY korrekt ausgewertet wird - man muß abfragen, ob BUSY nicht (mehr) aktiv ist.

Harald
 
Zurück
Oben