Mehrere Profibusslaves mit SFC12 passievieren

Fenix

Level-1
Beiträge
77
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo erstmal!

Ich möchte 3 Profibusslaves mit dem SFC12 passivieren oder auch aktivieren.

Kann ich die 3 SFC12 Aufrufe einfach nacheinander programmieren und die laufen parallel ab, oder muss ich einen Aufrufen und dann warten bis sein Busy-Signal eine negative Flanke aufweißt, und ich dann den 2. Aufruf des SFC12 starte (den 3. Aufruf nach Beendigung des 2. SFC12-Aufrufes entsprechend)?
 
Hallo Fenix,

wenn ich die S7-Hilfe richtig gelesen habe, kann man den SFC 12 mehrfach aufrufen:

So lange ein oder meherere SFC 12-Aufträge aktiv sind, können Sie keine geänderte Konfiguration vom PG in die CPU laden ...


Grüße
Gebs
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das kannst du ruhig so machen
hier ein codeausschnit aus einem programm
Code:
      CALL  "D_ACT_DP"                  // Slave 12 "Maschinen-SFG box 2"
       REQ    :="RCDB SYS".Anlage_ohne_Slave_12    
       MODE   :=B#16#2
       LADDR  :=W#16#3F4                // 1012 = W#16#3F4
       RET_VAL:=#_RET_VAL_SFC12
       BUSY   :=#_BUSY
      L     #_RET_VAL_SFC12
      U     #_BUSY
      SPB   SDAe
 
      CALL  "D_ACT_DP"                  // Slave 11 "Maschinen-SFG box 1"
       REQ    :="RCDB SYS".Anlage_ohne_Slave_11     
       MODE   :=B#16#2
       LADDR  :=W#16#3F3                // 1011 = W#16#3F3
       RET_VAL:=#_RET_VAL_SFC12
       BUSY   :=#_BUSY
      L     #_RET_VAL_SFC12
      U     #_BUSY
      SPB   SDAe
      CALL  "D_ACT_DP"                  // Slave 6 "Trichter H113 bis H116"
       REQ    :="RCDB SYS".Anlage_ohne_Slave_06    
       MODE   :=B#16#2
       LADDR  :=W#16#3EE                // 1006 = W#16#3EE
       RET_VAL:=#_RET_VAL_SFC12
       BUSY   :=#_BUSY
      L     #_RET_VAL_SFC12
      U     #_BUSY
      SPB   SDAe

      CALL  "D_ACT_DP"                  // Slave 5 "Trichter H109 bis H112"
       REQ    :="RCDB SYS".Anlage_ohne_Slave_05    
       MODE   :=B#16#2
       LADDR  :=W#16#3ED                // 1005 = W#16#3ED
       RET_VAL:=#_RET_VAL_SFC12
       BUSY   :=#_BUSY
      L     #_RET_VAL_SFC12
      U     #_BUSY
      SPB   SDAe
      CALL  "D_ACT_DP"                  // Slave 4 "Trichter H105 bis H108"
       REQ    :="RCDB SYS".Anlage_ohne_Slave_04             
       MODE   :=B#16#2
       LADDR  :=W#16#3EC                // 1004 = W#16#3EC
       RET_VAL:=#_RET_VAL_SFC12
       BUSY   :=#_BUSY
      L     #_RET_VAL_SFC12
      U     #_BUSY
      SPB   SDAe
SDAe: NOP   0
 
das kannst du ruhig so machen
hier ein codeausschnit aus einem programm
Code:
      CALL  "D_ACT_DP"                  // Slave 12 "Maschinen-SFG box 2"
       REQ    :="RCDB SYS".Anlage_ohne_Slave_12    
       MODE   :=B#16#2
       LADDR  :=W#16#3F4                // 1012 = W#16#3F4
       RET_VAL:=#_RET_VAL_SFC12
       BUSY   :=#_BUSY
      L     #_RET_VAL_SFC12
      U     #_BUSY
      SPB   SDAe
 
      CALL  "D_ACT_DP"                  // Slave 11 "Maschinen-SFG box 1"
       REQ    :="RCDB SYS".Anlage_ohne_Slave_11     
       MODE   :=B#16#2
       LADDR  :=W#16#3F3                // 1011 = W#16#3F3
       RET_VAL:=#_RET_VAL_SFC12
       BUSY   :=#_BUSY
      L     #_RET_VAL_SFC12
      U     #_BUSY
      SPB   SDAe
      CALL  "D_ACT_DP"                  // Slave 6 "Trichter H113 bis H116"
       REQ    :="RCDB SYS".Anlage_ohne_Slave_06    
       MODE   :=B#16#2
       LADDR  :=W#16#3EE                // 1006 = W#16#3EE
       RET_VAL:=#_RET_VAL_SFC12
       BUSY   :=#_BUSY
      L     #_RET_VAL_SFC12
      U     #_BUSY
      SPB   SDAe
 
      CALL  "D_ACT_DP"                  // Slave 5 "Trichter H109 bis H112"
       REQ    :="RCDB SYS".Anlage_ohne_Slave_05    
       MODE   :=B#16#2
       LADDR  :=W#16#3ED                // 1005 = W#16#3ED
       RET_VAL:=#_RET_VAL_SFC12
       BUSY   :=#_BUSY
      L     #_RET_VAL_SFC12
      U     #_BUSY
      SPB   SDAe
      CALL  "D_ACT_DP"                  // Slave 4 "Trichter H105 bis H108"
       REQ    :="RCDB SYS".Anlage_ohne_Slave_04             
       MODE   :=B#16#2
       LADDR  :=W#16#3EC                // 1004 = W#16#3EC
       RET_VAL:=#_RET_VAL_SFC12
       BUSY   :=#_BUSY
      L     #_RET_VAL_SFC12
      U     #_BUSY
      SPB   SDAe
SDAe: NOP   0

Aber wenn er den Slave 12 passiviert ist ja Busy auf true und er springt zu SDAe. Im nächsten durchlauf fängt er dann denn nicht wieder bei Slave 12 an und versucht den nochmals zu passivieren und setzt Busy wieder für eine gewisse Zeit auf true? Werden dann Slave 11, 6, 5 und 4 denn überhaupt passiviert? Weil ja Busy dann wieder true ist und er zur Sprungmarke SDAe springt???
 
Zurück
Oben