SFC15-Problem

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Tim,

so, wie Du es geschrieben hast, braucht man 12 Worte, die MoviDrive haben aber nur 6.
Guck mal in meinen Beitrag oben (#22) da ist es schon geändert.

Grüße
Gebs
 
12Oder6Worte

Hallo Gebs,


ich wollte bloß auf die Überschneidung der Adressbereiche aufmerksam machen.

Nicht mehr, nicht weniger.

Bis demnächst.


Gruß Timbo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab's mal als AWL-Quelle exportiert. Interessant ist das oberste und das unterste Netzwerk.

Das mit den 12 Worten war ein Fehler ... da waren alles Doppelworte, was aber in Tat und Wahrheit nicht so ist.

Code:
FUNCTION FC 80 : VOID
TITLE =Ansteuerung SEW-MoviDrive via DP (Erweiterte Buspositionierung)
AUTHOR : 'IT/RSt'
VERSION : 1.1


VAR_INPUT
  Geraete_Adresse : INT ;    
  Freigabe : BOOL ;    
  Reset : BOOL ;    
  Mode_Auto : BOOL ;    //1 = Auto, 0 = Hand
  Start_Ref : BOOL ;    //Mode_Auto muss aktiv sein
  Tippen_Plus : BOOL ;    //Mode_Auto muss 0 sein
  Tippen_Minus : BOOL ;    //Mode_Auto muss 0 sein
  Pos_Anfahren : BOOL ;    //Mode_Auto muss aktiv sein
  Pos : DINT ;    
  Speed : INT ;    
  Rampe : INT ;    
END_VAR
VAR_OUTPUT
  Stoerung : BOOL ;    
  InAutomatik : BOOL ;    
  InPosition : BOOL ;    
  Err : INT ;    
  Akt_Pos : DINT ;    
  Akt_Speed : INT ;    
END_VAR
VAR_TEMP
  PE : STRUCT     
   Status_Code : BYTE ;    
   Endstufe_Freigegeben : BOOL ;    
   Umrichter_Bereit : BOOL ;    
   Referenziert : BOOL ;    
   InPos : BOOL ;    
   Bremse_offen : BOOL ;    
   Stoerung : BOOL ;    
   ES_Rechts : BOOL ;    
   ES_Links : BOOL ;    
   Akt_Pos : DINT ;    
   Akt_Speed : INT ;    
   Akt_Current : INT ;    
   Akt_Auslastung : INT ;    
  END_STRUCT ;    
  PA : STRUCT     
   Start : BOOL ;    
   Tippen_Plus : BOOL ;    
   Tippen_Minus : BOOL ;    
   Mode_Low : BOOL ;    
   Mode_High : BOOL ;    
   CTW_Bit_13 : BOOL ;    
   CTW_Bit_14 : BOOL ;    
   CTW_Bit_15 : BOOL ;    
   Reglersperre : BOOL ;    
   Freigabe_Schnellstop : BOOL ;    
   Freigabe_Halt : BOOL ;    
   CTW_Bit_3 : BOOL ;    
   CTW_Bit_4 : BOOL ;    
   CTW_Bit_5 : BOOL ;    
   Reset : BOOL ;    
   CTW_Bit_7 : BOOL ;    
   Pos : DINT ;    
   Speed : INT ;    
   Start_Rampe : INT ;    
   Stop_Rampe : INT ;    
  END_STRUCT ;    
  Addr : WORD ;    
  Returncode_SFC14 : INT ;    
  Returncode_SFC15 : INT ;    
  ModAuto : BOOL ;    
  ModRef : BOOL ;    
  ModTip : BOOL ;    
END_VAR
BEGIN
NETWORK
TITLE =Prozeßeingangsdaten aufbereiten

      L     #Geraete_Adresse; // Int 536
      SLD   3; // Pointer bilden (letzte 3 Stellen sind Bit-Adresse)
      LAR1  ; // Im Adressregister 1 ablegen

      L     PEW [AR1,P#0.0]; 
      T     LW     0; 

      L     PED [AR1,P#2.0]; 
      T     #PE.Akt_Pos; 

      L     PEW [AR1,P#6.0]; 
      T     #PE.Akt_Speed; 

      L     PEW [AR1,P#8.0]; 
      T     #PE.Akt_Current; 

      L     PEW [AR1,P#10.0]; 
      T     #PE.Akt_Auslastung; 



NETWORK
TITLE =Modenanwahl

      SET   ; 
      R     #PA.Reglersperre; 

      U     #Mode_Auto; 
      U     #PE.Referenziert; 
      =     #ModAuto; 
      S     #PA.Mode_Low; 
      S     #PA.Mode_High; 


      U     #Mode_Auto; 
      UN    #PE.Referenziert; 
      =     #ModRef; 
      R     #PA.Mode_Low; 
      S     #PA.Mode_High; 

      UN    #Mode_Auto; 
      =     #ModTip; 
      S     #PA.Mode_Low; 
      R     #PA.Mode_High; 

NETWORK
TITLE =Mode: Tippen

      U     #ModTip; 
      U     #Tippen_Plus; 
      =     #PA.Tippen_Plus; 

      U     #ModTip; 
      U     #Tippen_Minus; 
      =     #PA.Tippen_Minus; 

NETWORK
TITLE =Mode: Referenzieren

      U     #ModRef; 
      U     #Start_Ref; 
      =     #PA.Start; 
NETWORK
TITLE =Mode: Automatik

// Springe nach No Auto, wenn nicht im Automatik-Modus.   
      UN    #ModAuto; 
      SPB   M002; 

      U     #ModAuto; 
      U     #Pos_Anfahren; 
      =     #PA.Start; 

NETWORK
TITLE =Prozeßausgangsdaten: Sollwerte aufbereiten

M002: U     #Freigabe; //Daten konsistent auf einen DP-Normslave schreiben
      =     #PA.Freigabe_Schnellstop; //Peripherieadresse => Hardwarekonfig.
      =     #PA.Freigabe_Halt; //Quellbereich für die zu schreibenden Nutzdaten

      SET   ; 
      R     #PA.Reglersperre; 
      R     #PA.CTW_Bit_3; 
      R     #PA.CTW_Bit_4; 
      R     #PA.CTW_Bit_5; 
      R     #PA.CTW_Bit_13; 
      R     #PA.CTW_Bit_14; 
      R     #PA.CTW_Bit_15; 

      U     #Reset; 
      =     #PA.Reset; 

      U     #PE.Stoerung; 
      =     #Stoerung; 
      L     #PE.Status_Code; 
      T     #Err; 

      U     #PE.Referenziert; 
      U     #ModAuto; 
      =     #InAutomatik; 

      U     #PE.Referenziert; 
      U     #ModAuto; 
      U     #PE.InPos; 
      =     #InPosition; 

      L     #PE.Akt_Pos; 
      T     #Akt_Pos; 
      L     #PE.Akt_Speed; 
      T     #Akt_Speed; 


      L     #Pos; 
      T     #PA.Pos; 
      L     #Speed; 
      T     #PA.Speed; 
      L     #Rampe; 
      T     #PA.Start_Rampe; 
      T     #PA.Stop_Rampe; 

NETWORK
TITLE =Kommunikationsfehler auswerten
//Ist die Abarbeitung der SFCs fehlerhaft, so werden alle Ausgänge der Funktion 
//abgelöscht
      L     #Geraete_Adresse; // Int 536
      SLD   3; // Pointer bilden (letzte 3 Stellen sind Bit-Adresse)
      LAR1  ; // Im Adressregister 1 ablegen

      L     LW    12; // Steuerwort2
      T     PAW [AR1,P#0.0]; 

      L     #PA.Pos; // Zielposition
      T     PAD [AR1,P#2.0]; 

      L     #PA.Speed; // Speed
      T     PAW [AR1,P#6.0]; 

      L     #PA.Start_Rampe; // Startrampe
      T     PAW [AR1,P#8.0]; 

      L     #PA.Stop_Rampe; // Stoprampe
      T     PAW [AR1,P#10.0]; 
END_FUNCTION
 
Funktioniert nur leider immer noch nicht ... ich sitz hier nun gerade wieder daran,

PD1 - 3 werden geschrieben, 4-6 nicht :/

Ich hab nun nen ganz anderen Bereich genommen ... andere DP-Adresse ... geht alles nicht. PD1-3 werden geschrieben (jedes mal) ... die andern gehen nicht.

Selbst wenn ich's auf's Prozessabbild lege, dann seh ich in den Variabeln die richtigen Werte, und der Regler bekommt die hinteren 3 Doppelworte nicht.

Irgend jemand noch ne Idee ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich richtig sehe ist in NW 7

L LW 12; // Steuerwort2 1. Wort
T PAW [AR1,P#0.0];

L #PA.Pos; // Zielposition DINT also Wort 2+ 3
T PAD [AR1,P#2.0];

L #PA.Speed; // Speed 4. Word INT
T PAW [AR1,P#6.0];

L #PA.Start_Rampe; // Startrampe 5. Wort.
T PAW [AR1,P#8.0];

L #PA.Stop_Rampe; // Stoprampe 6. Wort
T PAW [AR1,P#10.0];

Welche 6 Dopelworte meist du?
Ist dein Zeilbereich richtig angelegt? Also 6 Worte?
Gibt dir der SFC einen Fehler bei RET_VAL aus?

Eine andere Frage ist noch:
Hat jeder Regler einen eigenen Profibusanschluss?
"Denn in der Beschreibung vom SFC15 steht:
Bei einem DB-Normslave mit modularem Aufbau können sie nur auf eine Baugruppe des DB-Slaves zugreifen."

bike
 
SFC15 wird bei dieser Variante nun ja nicht mehr benutzt.

Wenn du die PAW und PAD zusammenzählst, kommst du auf 6 Worte (nicht Doppelworte, sorry)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, jeder Regler hat eine eigene Profibus-Karte.



--> Problem gelöst!

Das Problem war nicht, dass die Datenworte nicht gesendet wurden, sondern, dass der Regler nur die ersten drei Datenworte dauernd aktuallisiert.

PD4-6 wird nur "gelesen", wenn der Regler freigegeben wird und sich der Motor schon fast dreht ... ansonsten bleiben die alten Werte angezeigt, egal, was die Steuerung über Profibus schickt.

Danke euch allen für die helfenden Informationen. Manchmal liegt's aber doch an unbegreifflichen Funktionen von sog. "Bus-Monitoren", welche nicht überall die aktualwerte darstellen *grml*.

Weiterhin ein schönes Weekend
Reto
 
Zurück
Oben