You are on page 1of 5

SIMATIC

997204\SIMATIC 300\PLC 317-2DP\...\FC86 - <offline>

09/26/2011 04:42:06 PM

FC86 - <offline>
Family: SPL Version: 3.0 Block version: 1 02/20/2008 12:07:50 PM Time stamp Code: 02/20/2008 12:07:50 PM Interface: Lengths (block/logic/data): 00810 00588 00002 Gehringe "" Name: Author:

Object properties: S7_language


Name IN start clear num_axis test_axis_1 test_axis_2 test_axis_3 test_axis_4 test_axis_5 test_axis_6 test_axis_7 test_axis_8 OUT IN_OUT req_test_ext_nck aux_dword ready serror error TEMP db_axis RETURN RET_VAL Int Bool DWord Bool Bool Bool Bool Bool Int Int Int Int Int Int Int Int Int

9(1) Englisch (USA)


Data Type Address 0.0 0.0 0.1 2.0 4.0 6.0 8.0 10.0 12.0 14.0 16.0 18.0 0.0 0.0 20.0 22.0 26.0 26.1 26.2 0.0 0.0 0.0 0.0

11/08/2004 04:26:54 PM

Comment

Start des Teststop Rcksetzen aller Hilfsmerker (aux_dword) Anzahl der parametrierten/zu testenden Achsen Achsnummer der als erstes zu testenden Achse Nummer beliebig wenn sie nicht im Bereich num_axis liegen

PLC-Ausgang / Variable -> Test externe Abschaltung NCK Hilfsdwort (ED,MD,DB.DBDnn,usw.),mu fr jeden Aufruf unterschiedlich sein !!! Ready Meldung als Flanke Fehler : Startbedingungen nicht gegeben : Impulse bereits gelscht Fehler bei Parametrierung, keine Zeitberwachung (wenn z.B. Rckmeldesignale fe

Block: FC86

Zwangsdynamisierung der Abschaltpfade (max. 8 Achsen)

Zwangsdynamisierung der externen Abschaltung (Safety Integrated) max. 8 Achsen parallel Ersterstellung: 01/02 Martin Gehringer A&D B14

Funktion: -------------------------------------------------------------------------------Es knnen pro Bausteinaufruf acht Achsen parallel getestet werden. Die Kommunikation zur NCK ("Test externe Abschaltung") erfolgt entweder ber - PLC-Ausgang oder - Systemvariable (DPR, DB10, DB18) (SI Stufe I) (SI Stufe II)

Serielles Testen von mehr als 8 Achsen bzw. Achsen auf gleichen Modulen (Doppelachsmodulen) kann ber ein Kaskadieren der Bausteinaufrufe erreicht werden. => ('ready' des vorhergehenden Bausteines startet den nchsten) Ablauf: --------------------------------------------------------------------------------

Seite 1 von 5

SIMATIC

997204\SIMATIC 300\PLC 317-2DP\...\FC86 - <offline>

09/26/2011 04:42:06 PM

STEP 0: Prfen der Startbedingungen Signal an NCK: req_test_ext_nck SETZEN STEP 1: Abfrage der Rckmeldung auf PLC-Nahtstelle <Achs-DB>.DBX108.2 fr alle Achsen = 1 Test externe Abschaltung ber Signal an NCK: 'req_test_ext_nck' RCKSETZEN STEP 2: Abfrage der Rckmeldung auf PLC-Nahtstelle <Achs-DB>.DBX108.2 fr alle Achsen = 0 'ready'-Signal ausgeben Parametrierung: -------------------------------------------------------------------------------Eingangssignale 'start' und 'clear' werden intern als Flanke ausgewertet. Sie knnen daher statisch oder dynamisch anstehen, wenn sichergestellt ist, da es keinen weiteren Flankenwechsel vor der 'ready' Meldung des Bausteines gibt. Es erfolgt eine berprfung des Eingangsparameters 'num_axis' auf Anzahl > Anzahl im System definierter Achsen 0 < Anzahl <= 8 Im Fehlerfall wird das 'error' Bit gesetzt. Im STEP 0 werden die Startbedingungen fr die Ausfhrung der Testroutine geprft und im Fehlerfall wird das 'serror' Bit gesetzt Nicht berprft wird der Fall: num_axis > test_axis_n >< 0. Es drfen nur die Achsen mit der Achsnummer 0 parametriert werden, die nicht im Bereich num_axis liegen (sonst PLC Stop !!!). Belegung des aux_dwort: Bit 0.0 : Bit 0.1 : Bit 0.2 : Bit 1.6 : Bit 1.7 : Byte 2 Byte 3 : : Schrittmerker S T E P Schrittmerker S T E P Schrittmerker S T E P Flankenmerker 'clear' Flankenmerker 'start' Zwischenmerker "Impulse nicht gelscht"(ext. Absch. NCK) Zwischenmerker "Impulse gelscht" (ext. Absch. NCK) 0 1 2

Network: 1 L LAR1 L LAR2

Ablaufsteuerung P##test_axis_1 P##aux_dword // // // // Lade Zeiger auf -> Sichern nach Lade Zeiger auf -> Sichern nach Eingangsvariable 1 AR1 Hilfswort AR2

// berprfung der Eingangsparameter L L <I JC L >I JCN TAK L >I JC A R A FP JC // S T E P A FP S DB5.DBW 24 #num_axis err 0 err 8 err #ready #ready #clear [AR2,P#1.6] clr 0 // Fehler ausgeben: num_axis > 8 // Ready-Signal wird als Impuls (nur 1 Zyklus) ausgegeben // Flankenauswertung CLEAR-Eingang // FM AR2: aux_dword -> Bit 0.6 // Fehler ausgeben: num_axis nicht > 0 // Achsanzahl im System // >max Achs // Fehler ausgeben : num_axis > Achsanzahl

e i n l e i t e n // Flankenauswertung START-Eingang // FM AR2: aux_dword -> Bit 0.7 // HM AR2: aux_dword -> Bit 0.0 (S T E P

#start [AR2,P#1.7] [AR2,P#0.0]

0) setzen

// Schrittsteuerung

Seite 2 von 5

SIMATIC

997204\SIMATIC 300\PLC 317-2DP\...\FC86 - <offline>

09/26/2011 04:42:06 PM

L LAR1 L A JC A JC A JC BEU Network: 2

P##test_axis_1 #num_axis [AR2,P#0.0] db00 [AR2,P#0.1] db01 [AR2,P#0.2] db02

// Lade Zeiger auf Eingangsvariable 1 // -> Sichern nach AR1 // Schleifenzaehler (AKKU1) mit num_axis vorbelegen // S T E P // S T E P // S T E P 0 1 2 bearbeiten bearbeiten bearbeiten

// Bausteinende wenn kein Schritt aktiv S T E P 0

******************************************************************************* **** *** S T E P 0 : Prfung der Startbedingungen -> Im Fehlerfall 'serror' = 1 *** ******************************************************************************* **** db00: L INC T TAK OPN AN = JCN +AR1 +AR2 LOOP L LAR2 L DEC JL JU JU JU JU JU JU JU JU ck0x: JU // S T E P ck08: A ck07: A ck06: A ck05: A ck04: A ck03: A ck02: A ck01: A A R S S BEU Network: 3 W [AR1,P#0.0] 30 #db_axis DB [#db_axis] DBX 108.2 [AR2,P#2.0] serr P#2.0 P#0.1 db00 P##aux_dword #num_axis 1 ck0x ck01 ck02 ck03 ck04 ck05 ck06 ck07 ck08 end 1 // // // // // AR1: test_axis_n INT-Wert (Achsnummer) (AKKU1alt -> AKKU2) Offset fr Achs-DB aufaddieren Nr. Achs-DB ist in Temporrvar. db_axis hinterlegt Aktueller Stand des Schleifenzhlers wieder -> AKKU1 Achs-DB der aktuellen Achse ffnen

// Rckmeldung "Impulse nicht gelscht" abfragen // HM AR2: aux_dword Byte 2 (611D) : Impulse nicht gelscht Bit 0: Achse 1 -> Bit 7: Achse 8 // Fehler Startbedingungen // AR1 [test_axis_n] auf nchstes Wort test_axis(n+1) setzen // AR2 [aux_dword] auf nchstes HM-Bit fr nchste Achse setzen // AKKU1-L -> -1 und springe, wenn AKKU1-L <> 0) // Lade Zeiger auf Hilfswort // -> Sichern nach AR2 // // // // // // // // // // // Anzahl der Achsen laden Anpassung an Sprungverteiler (Beginn bei 0) Default Sprungziel (Fehlerfall) Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen

= = = = = = = =

1 2 3 4 5 6 7 8

e i n l e i t e n // 1 // 1 // 1 // 1 // 1 // 1 // 1 // 1 // // // // // Statusbits Impulslschung werden abgefragt Bit7: Achse 8 -> Bit0: Achse Statusbits Impulslschung werden abgefragt Bit6: Achse 7 -> Bit0: Achse Statusbits Impulslschung werden abgefragt Bit5: Achse 6 -> Bit0: Achse Statusbits Impulslschung werden abgefragt Bit4: Achse 5 -> Bit0: Achse Statusbits Impulslschung werden abgefragt Bit3: Achse 4 -> Bit0: Achse Statusbits Impulslschung werden abgefragt Bit2: Achse 3 -> Bit0: Achse Statusbits Impulslschung werden abgefragt Bit1: Achse 2 -> Bit0: Achse Statusbits Impulslschung werden abgefragt Bit0: Achse 1 -> Bit0: Achse HM AR2: aux_dword HM AR2: aux_dword HM AR2: aux_dword Test der externen Bausteinende -> Bit 0.0 (S T -> Bit 0.0 (S T -> Bit 0.1 (S T Abschaltung auf E P 0) E P 0) rcksetzen E P 1) setzen NCK-Seite anstoen

[AR2,P#2.7] [AR2,P#2.6] [AR2,P#2.5] [AR2,P#2.4] [AR2,P#2.3] [AR2,P#2.2] [AR2,P#2.1] [AR2,P#2.0] [AR2,P#0.0] [AR2,P#0.0] [AR2,P#0.1] #req_test_ext_nck

S T E P

******************************************************************************* *****************

Seite 3 von 5

SIMATIC

997204\SIMATIC 300\PLC 317-2DP\...\FC86 - <offline>

09/26/2011 04:42:06 PM

*** S T E P 1 : Status "Impulse gelscht" ber PLC-Nahtstelle <Achs-DB>.DBX108.2 abfragen *** ******************************************************************************* ***************** db01: L INC T TAK OPN A = +AR1 +AR2 LOOP L LAR2 L DEC JL JU JU JU JU JU JU JU JU ck1x: JU // S T E P ck18: A ck17: A ck16: A ck15: A ck14: A ck13: A ck12: A ck11: A A R S R BEU W [AR1,P#0.0] 30 #db_axis DB [#db_axis] DBX 108.2 [AR2,P#3.0] P#2.0 P#0.1 db01 P##aux_dword // // // // // AR1: test_axis_n INT-Wert (Achsnummer) (AKKU1alt -> AKKU2) Offset fr Achs-DB aufaddieren Nr. Achs-DB ist in Temporrvar. db_axis hinterlegt Aktueller Stand des Schleifenzhlers wieder -> AKKU1 Achs-DB der aktuellen Achse ffnen

// Rckmeldung "Impulse gelscht" abfragen // HM AR2: aux_dword Byte 3 (NCK) : Impulse gelscht Bit 0: Achse 1 -> Bit 7: Achse 8 // AR1 [test_axis_n] auf nchstes Wort test_axis(n+1) setzen // AR2 [aux_dword] auf nchstes HM-Bit fr nchste Achse setzen // AKKU1-L -> -1 und springe, wenn AKKU1-L <> 0) // Lade Zeiger auf Hilfswort // -> Sichern nach AR2 // // // // // // // // // // // Anzahl der Achsen laden Anpassung an Sprungverteiler (Beginn bei 0) Default Sprungziel (Fehlerfall) Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen

#num_axis 1 ck1x ck11 ck12 ck13 ck14 ck15 ck16 ck17 ck18 end 6

= = = = = = = =

1 2 3 4 5 6 7 8

e i n l e i t e n // 1 // 1 // 1 // 1 // 1 // 1 // 1 // 1 // // // Statusbits Impulslschung werden abgefragt Bit7: Achse 8 -> Bit0: Achse Statusbits Impulslschung werden abgefragt Bit6: Achse 7 -> Bit0: Achse Statusbits Impulslschung werden abgefragt Bit5: Achse 6 -> Bit0: Achse Statusbits Impulslschung werden abgefragt Bit4: Achse 5 -> Bit0: Achse Statusbits Impulslschung werden abgefragt Bit3: Achse 4 -> Bit0: Achse Statusbits Impulslschung werden abgefragt Bit2: Achse 3 -> Bit0: Achse Statusbits Impulslschung werden abgefragt Bit1: Achse 2 -> Bit0: Achse Statusbits Impulslschung werden abgefragt Bit0: Achse 1 -> Bit0: Achse HM AR2: aux_dword -> Bit 0.1 (S T E P HM AR2: aux_dword -> Bit 0.1 (S T E P HM AR2: aux_dword -> Bit 0.2 (S T E P 1) 1) rcksetzen 2) setzen

[AR2,P#3.7] [AR2,P#3.6] [AR2,P#3.5] [AR2,P#3.4] [AR2,P#3.3] [AR2,P#3.2] [AR2,P#3.1] [AR2,P#3.0] [AR2,P#0.1] [AR2,P#0.1] [AR2,P#0.2] #req_test_ext_nck

// Bausteinende

Network: 4

S T E P

******************************************************************************* ***************** *** S T E P 2 : "Impulse gelscht" ber <Achs-DB>.DBX108.2 abfragen = nicht mehr aktiv *** ******************************************************************************* ***************** db02: L INC T TAK OPN AN = +AR1 +AR2 LOOP W [AR1,P#0.0] 30 #db_axis DB [#db_axis] DBX 108.2 [AR2,P#2.0] P#2.0 P#0.1 db02 // // // // // AR1: test_axis_n INT-Wert (Achsnummer) (AKKU1alt -> AKKU2) Offset fr Achs-DB aufaddieren Nr. Achs-DB ist in Temporrvar. db_axis hinterlegt Aktueller Stand des Schleifenzhlers wieder -> AKKU1 Achs-DB der aktuellen Achse ffnen

// Rckmeldung nicht "Impulse gelscht" abfragen // HM AR2: aux_dword Byte 2 (NCK) : Impulse wieder da Bit 0: Achse 1 -> Bit 7: Achse 8 // AR1 [test_axis_n] auf nchstes Wort test_axis(n+1) setzen // AR2 [aux_dword] auf nchstes HM-Bit fr nchste Achse setzen // AKKU1-L -> -1 und springe, wenn AKKU1-L <> 0)

Seite 4 von 5

SIMATIC

997204\SIMATIC 300\PLC 317-2DP\...\FC86 - <offline>

09/26/2011 04:42:07 PM

L LAR2 L DEC JL JU JU JU JU JU JU JU JU ck2x: JU

P##aux_dword #num_axis 1 ck2x ck21 ck22 ck23 ck24 ck25 ck26 ck27 ck28 end

// Lade Zeiger auf Hilfswort // -> Sichern nach AR2 // // // // // // // // // // // Anzahl der Achsen laden Anpassung an Sprungverteiler (Beginn bei 0) Default Sprungziel (Fehlerfall) Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen Sprungziel bei Anzahl der zu testenden Achsen

= = = = = = = =

1 2 3 4 5 6 7 8

// F e r t i g s i g n a l ck28: ck27: ck26: ck25: ck24: ck23: ck22: ck21: A A A A A A A A A R S JC BEU [AR2,P#2.7] [AR2,P#2.6] [AR2,P#2.5] [AR2,P#2.4] [AR2,P#2.3] [AR2,P#2.2] [AR2,P#2.1] [AR2,P#2.0] [AR2,P#0.2] [AR2,P#0.2] #ready res // // // // // // // // // //

a u s g e b e n Statusbits Impulslschung werden abgefragt Statusbits Impulslschung werden abgefragt Statusbits Impulslschung werden abgefragt Statusbits Impulslschung werden abgefragt Statusbits Impulslschung werden abgefragt Statusbits Impulslschung werden abgefragt Statusbits Impulslschung werden abgefragt Statusbits Impulslschung werden abgefragt HM AR2: aux_dword -> Bit 0.2 (S T E P 2) HM AR2: aux_dword -> Bit 0.2 (S T E P 2) Bit7: Bit6: Bit5: Bit4: Bit3: Bit2: Bit1: Bit0: Achse Achse Achse Achse Achse Achse Achse Achse 8 7 6 5 4 3 2 1 -> -> -> -> -> -> -> -> Bit0: Bit0: Bit0: Bit0: Bit0: Bit0: Bit0: Bit0: Achse Achse Achse Achse Achse Achse Achse Achse 1 1 1 1 1 1 1 1

rcksetzen

// Bausteinende : interne Zustnde ablschen // Bausteinende

Network: 5 serr: = JU err: clr: = JU SET R R L L AD T SET R end: BE

Fehlerbehandlung / Initialisierung #serror res #error res #serror #error #aux_dword DW#16#C00000 #aux_dword #req_test_ext_nck // AUX-Bits (1.7/1.6) fr Flankenerkennung nicht ablschen // Start-Fehler rcksetzen // Fehler rcksetzen

res:

Seite 5 von 5

You might also like