Step 7 Probleme Parametrierbarer Baustein FC

sps-welt

Level-1
Beiträge
75
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo


Ich habe mir den FC130 als Parametrierbaren Baustein angelegt.
Er soll in meheren Maschinen kontrollieren ob ein Nagel fehlt, sobald 10 Stk magaziniert werden.

Dieser Funktioniert allein in der CPU (OB1,FC130 und DB80) einwandfrei.

Wenn ich den doppelt aufrufe und auch als Kopie (FC131)
kommen nur noch Fehlfunktionen zustande.

Habe ich die Bits aus den TEMP Variablen richtig geschrieben?
Die Sprünge (Sprungmarken) habe ich auch schon umbenannt genauso wie die Flankenmerker als IN Variable angelegt.


Woran könnte das liegen? Was habe ich falsch gemacht?
Bin schon 2 Tage daran und schon fast am verzweifeln...


Hier mal das Step7 V5.5 Programm zum Dearchivieren aus Step7

Anhang anzeigen Nagelfallkontrolle.zip


Gruss Stefan
 
Hallo Stefan,

Ja, das ist eine ganze menge an Tempvariabelen die du da benutzt.
Es prinzip ist erst die Temp. Schreiben und dann lesen
Ohne es ins Detail an zu schauen kann du es folgende mal versuchen :
Die temp. Variabelen am Anfang des Bausteines auf Null schreiben.

persönlich würde ich hier einen FB mit statische Variabelen bevorzugen.

Bram
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich weiß nicht wie in einem FC eine Temp Variable gespeichert werden kann.
Dein Start kann so wie es überblicke so nicht funktionieren.
Mache es wie Bram geschrieben hat einen FB daraus und dann einen IDB und dann kannst du auch den Status besser beobachten.

bike
 
Hallo.

Also wie schon geschrieben funktioniert der fc130 einwandfrei.
Lediglich wenn ich ihn 2X aufrufe oder als Kopie aufrufe habe ich
Probleme mit den FCs.
Erstes Problem ist allein schon wenn der fc130 einen Nagelfehler ausgibt am A12.0 geht auch bei dem anderen der Nagelfehler A12.7 an.
Obwohl hier die Kontrolle über den E0.7 gar nicht gestartet wurde...

Gruss Stefan
 
Am Anfang resetierst du #Fehler bedingt. Das ist schonmal schlecht an einem Temp. Wenn die Bedingung nicht erfüllt ist, dann kann #Fehler irgendeinen Zustand haben.
Später überspringst du #Fehler noch zweimal Bedingt. Gilt dasselbe wie beim bedingt resetieren.
Bei der Abfrage ganz am Schluss kann also #Fehler irgendeinen Zustand haben wenn du nicht 100% sicher bist dass er durch den aktuellen FC gesetzt oder zurückgesetzt wird, macht das irgendein anderer Baustein im Stack für dich.

Dein Programm ist überhaupt etwas Wirr.
Was soll das:
Code:
      CLR   
      =     #tb_rc1                     //Null setzen für neuen Zyklus
Und das:
Code:
     SET         =     #tb_rc1

überspringen und wenn nicht gesprungen setzen ist sehr unübersichtlich. Da biste nur am Sprungbedingungen Suchen.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten morgen

@ Rene
Den genauen zusammenhang im Programm kann ich nicht sagen, da mir die tiefgreifenden Programmierkenntnisse fehlen.

Bin eher in der Instandhaltung aktiv. Muss aber Betriebsbedingter lage auch so kleine Programmierungen tätigen.

Den Baustein habe ich aus einer Maschine kopiert und wollte Ihn anpassen.

Vll. Kann mir ja einer einen guten Lösungsansatz zeigen...

Funktionsablauf sollte folgendermassen sein:

Kontrolle muss Ein-Ausschaltbar sein. Bool
Resetfunktion Bool
Startfunktion der Kontrolle Bool

10 Eingänge zum Auswerten als Bool (Ringinitiator)

max 10 Nägel (Kanäle zum auswerten).
Vorwählbar als Bit. (auszuwertende Kanäle werden im HMI vorgewählt über Variable Bool invertieren.)
Fehlermeldeausgang als Bool.

Kontrollzeit vorwählbar.

Ablauf:

Nach dem Startbefehl
werden alle 10 Ausgänge der Kontrollleds eingeschaltet.
nach ablauf der Kontrollzeit wird angezeigt welcher Nagel (Ringinitiator) nicht gefallen ist.

Bei den deaktivierten Kanälen wird nur die LED eingeschaltet solange die Kontrollzeit aktiv ist.
Ein Auswertung findet dann nicht statt.

Ist alles OK erlöschen alle LEDs.
Wenn nicht wird angezeigt welcher Nagel fehlt bzw. nicht gefallen ist.

Über Reset wird der Fehlerausgang und die LEDs wieder weggeschaltet.

Wäre echt sehr dankbar wenn einer helfen könnte...

Gruss Stefan
 
Ich war mal so fei und hab über der quelle des FC`s eine FB draus gemacht.
Probiere es einfach mal aus.

lege dir erst in der Symboltabelle einen FB an mit der Name "Nagelfallkontrolle_FB"


Code:
FUNCTION_BLOCK "Nagelfallkontrolle_FB"
VERSION : 0.1

VAR_INPUT
  NFK_Ein : BOOL ; 
  NFK_Start : BOOL ; 
  NFK_Reset : BOOL ; 
  NFK_Lampentest : BOOL ; 
  NFK_Nagelmaske : DWORD ; 
  S5_Timer : TIMER ; 
  NFK_Kontrollzeit : S5TIME ; //In dieser Zeit müssen alle Nägel gefallen sein
  INI1 : BOOL ; 
  INI2 : BOOL ; 
  INI3 : BOOL ; 
  INI4 : BOOL ; 
  INI5 : BOOL ; 
  INI6 : BOOL ; 
  INI7 : BOOL ; 
  INI8 : BOOL ; 
  INI9 : BOOL ; 
  INI10 : BOOL ; 
  FM1 : BOOL ; 
  FM2 : BOOL ; 
END_VAR
VAR_OUTPUT
  NFK_aktiv : BOOL ; 
  NFK_Nagelfehler : BOOL ; 
  LED1 : BOOL ; 
  LED2 : BOOL ; 
  LED3 : BOOL ; 
  LED4 : BOOL ; 
  LED5 : BOOL ; 
  LED6 : BOOL ; 
  LED7 : BOOL ; 
  LED8 : BOOL ; 
  LED9 : BOOL ; 
  LED10 : BOOL ; 
END_VAR
VAR
  tb_rc1 : BOOL ; //zeigt an dass die Nagelfallkontrolle 1 einen Fehler gefunden hat
  tb_kontrolle_start : BOOL ; 
  td_auswertung : DWORD ; 
  SOLLMASKE : DWORD ; 
  ISTMASKE : DWORD ; 
  AUSWERTEMASKE : DWORD ; 
  Fehler : BOOL ; 
  Reset : BOOL ; 
  Start : BOOL ; 
END_VAR
BEGIN
NETWORK
TITLE =Nagelfallkontrolle aus
      U     #NFK_Ein; 
      =     #NFK_aktiv; 
NETWORK
TITLE =Nagelfallkontrolle aus
      UN    #NFK_Ein; 
      R     #Fehler; 
NETWORK
TITLE =Nagelfallkontrolle Reset
      U     #Fehler; 
      U(    ; 
      U     #NFK_Reset; 
      FP    #FM2; 
      )     ; 
      =     #Reset; 
NETWORK
TITLE =Auszuwertende Nagelmaske Nägel Nur AWL Ansicht!!!
//Wird von TP177 vorgegeben
// U     "high"
// =     "Nagelfallkontrolle_".NK1
// =     "Nagelfallkontrolle_".NK2
// =     "Nagelfallkontrolle_".NK3
//=     "Nagelfallkontrolle_".NK4
//=     "Nagelfallkontrolle_".NK5
//=     "Nagelfallkontrolle_".NK6
//=     "Nagelfallkontrolle_".NK7
//=     "Nagelfallkontrolle_".NK8
//=     "Nagelfallkontrolle_".NK9
// =     "Nagelfallkontrolle_".NK10
NETWORK
TITLE =Auszuwertende Nagelmaske einlesen
      L     #NFK_Nagelmaske; 
      T     #SOLLMASKE; 
      NOP   0; 
NETWORK
TITLE =Nagelfallkontrolle zurücksetzen
      U     #Reset; 
      U     #NFK_Ein; 
      R     #LED1; 
      R     #LED2; 
      R     #LED3; 
      R     #LED4; 
      R     #LED5; 
      R     #LED6; 
      R     #LED7; 
      R     #LED8; 
      R     #LED9; 
      R     #LED10; 
      R     #Fehler; 
NETWORK
TITLE =Nagelfallkontrolle starten
//Alle LED Nagelkontrolle einschalten 
      U     #NFK_Ein; 
      UN    #Reset; 
      U(    ; 
      U     #NFK_Start; 
      FP    #FM1; 
      )     ; 
      UN    #Start; 
      =     L     19.0; 
      U     L     19.0; 
      =     #tb_kontrolle_start; 
      U     #tb_kontrolle_start; 
      S     #Start; 
      U     L     19.0; 
      SPBNB _001; 
      L     0; 
      T     #ISTMASKE; 
_001: NOP   0; 
NETWORK
TITLE =LEDs Nagelkontrolle Kanal 1-10 einschalten
      U     #tb_kontrolle_start; 
      SPBN  NFK1; 
      SET   ; 
      =     #LED1; 
      =     #LED2; 
      =     #LED3; 
      =     #LED4; 
      =     #LED5; 
      =     #LED6; 
      =     #LED7; 
      =     #LED8; 
      =     #LED9; 
      =     #LED10; 
NFK1: NOP   0; 
NETWORK
TITLE =Timer Nagelfallkontrolle
//Innerhalb 1sek. müssen alle Nägel gefallen sein
      U     #Start; 
      L     #NFK_Kontrollzeit; 
      SE    #S5_Timer; 
      NOP   0; 
      NOP   0; 
      NOP   0; 
      NOP   0; 
NETWORK
TITLE =Ist-Maske einlesen
//Ist-Maske = MD84
//E8_ES_NK1 ist das rechte Bit
//E8_ES_NK24 ist das linke Bit
      U     #Start; 
      UN    #S5_Timer; 
      UN    #Reset; 
      U     #NFK_Ein; 
      U(    ; 
      L     #SOLLMASKE; 
      L     L#0; 
      <>D   ; 
      )     ; 
      U     #Start; 
      SPBN  NFK2; 
      U     #INI1; 
      S     L     13.0; 
      U     #INI2; 
      S     L     13.1; 
      U     #INI3; 
      S     L     13.2; 
      U     #INI4; 
      S     L     13.3; 
      U     #INI5; 
      S     L     13.4; 
      U     #INI6; 
      S     L     13.5; 
      U     #INI7; 
      S     L     13.6; 
      U     #INI8; 
      S     L     13.7; 
      U     #INI9; 
      S     L     12.0; 
      U     #INI10; 
      S     L     12.1; 
      L     0; 
      T     LW    10; //mit 0 überschreiben da nicht verwendet
      CLR   ; 
      =     L     12.2; // rücksetzen da nicht verwendet
      =     L     12.3; // rücksetzen da nicht verwendet
      =     L     12.4; // rücksetzen da nicht verwendet
      =     L     12.5; // rücksetzen da nicht verwendet
      =     L     12.6; // rücksetzen da nicht verwendet
      =     L     12.7; // rücksetzen da nicht verwendet
      =     #Fehler; 
NFK2: NOP   0; 
NETWORK
TITLE =Ausgänge wieder wegschalten und Ist-Maske auswerten
//isTimer am ende zurücksetzen
      CLR   ; 
      =     #tb_rc1; //Null setzen für neuen Zyklus
      U     #Start; 
      U     #S5_Timer; 
      UN    #Reset; 
      U     #NFK_Ein; 
      SPBN  NFK3; 
      CLR   ; 
      =     #LED1; 
      =     #LED2; 
      =     #LED3; 
      =     #LED4; 
      =     #LED5; 
      =     #LED6; 
      =     #LED7; 
      =     #LED8; 
      =     #LED9; 
      =     #LED10; 
//Nagelkontrolle Kanal 10
      L     #ISTMASKE; 
      L     #SOLLMASKE; 
      XOD   ; 
      T     #AUSWERTEMASKE; 
      L     #SOLLMASKE; 
      L     #AUSWERTEMASKE; 
      UD    ; 
      T     #AUSWERTEMASKE; 
      L     L#0; 
      <>D   ; 
      SPBN  NFK4; 
// Ausgabe bei Fehler
      U     L     17.0; //Bit aus Auwerte Maske
      U     L      9.0; // Bit aus Sollmaske
      =     #LED1; 
      U     L     17.1; 
      U     L      9.1; 
      =     #LED2; 
      U     L     17.2; 
      U     L      9.2; 
      =     #LED3; 
      U     L     17.3; 
      U     L      9.3; 
      =     #LED4; 
      U     L     17.4; 
      U     L      9.4; 
      =     #LED5; 
      U     L     17.5; 
      U     L      9.5; 
      =     #LED6; 
      U     L     17.6; 
      U     L      9.6; 
      =     #LED7; 
      U     L     17.7; 
      U     L      9.7; 
      =     #LED8; 
      U     L     16.0; 
      U     L      8.0; 
      =     #LED9; 
      U     L     16.1; 
      U     L      8.1; 
      =     #LED10; 
      SET   ; 
      =     #tb_rc1; 
NFK4: NOP   0; 

      NOP   0; 
      U     #tb_rc1; 
      =     #Fehler; 
NFK3: NOP   0; 
NETWORK
TITLE =fertig Nagelfallkontrolle
      U     #Start; 
      U     #S5_Timer; 
      UN    #Reset; 
      U     #NFK_Ein; 
      R     #Start; 
NETWORK
TITLE =Störung Nagelfallkontrolle
      U     #Fehler; 
      =     #NFK_Nagelfehler; 
END_FUNCTION_BLOCK

Grüß Bram
 
Zuletzt bearbeitet:
Hallo Bram

Danke...
Im Netzwerk nagelfallkontrolle starten wird ein bitte L19.0 verarbeitet.
Kann es sein das es daran liegt da dies nicht in der Schnittstelle des Bausteins eingetragen ist?
KönnTeilen dies auch auswirkungen auf den anderentsprechenden FC haben?
Bzw. Auch im FB Probleme machen?

Gruss Stefan
 
Hallo Bram

Habe jetzt Probleme aus der Quelle einen FB zu erzeugen...
Wegen fehlender Symbole in der Symboltabelle...

Du hast nur die Temp. Variablen aus dem FC in Stat. im FB geändert??

Gruss Stefan
 
Zurück
Oben