SEW Movidrive, Positionieren und Drehmoment

Sinix

Level-1
Beiträge
1.588
Reaktionspunkte
216
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Experten,

bin zur Zeit in der Planungsphase und möchte mit einem SEW-Movidrive einen Servo zum einen Positionieren und zum anderen ein Werkstück verpressen.

Im Einzelnen soll die Achse in eine Vorab-Position verfahren werden. Dann soll ein Werkstück auf ein anderes gepresst werden und bis zu 10 Sekunden angedrückt werden. Dazu würde ich zunächst positionieren und anhand des Stromes erfassen, wenn das Werkstück angedrückt ist. Nun muss bei Ist=Sollposition das Moment aufrecht erhalten werden. Anschließend soll die Achse in die Homeposition zurückverfahren.

Steuerung ist eine S7. Takt und Zykluszeit zweitrangig.
Für die Positionierung soll die erweiterte Buspositionierung eingesetzt werden. Für das Andrücken würde ich gerne die Parametrierung über Profidrive Datensatz 47 (Read/Write Record) anwenden.
Als Grundlage habe ich zur Zeit das Beispiel von SEW(FB100). Und hier nun die Fragen an euch:

Wer hat das so ähnlich gemacht und kann mir Tipps geben?
Insbesondere welche Parameter müsste ich für die Momentenregelung angreifen?
Wo finde ich Informationen, bei SEW gibts so einige Applikationen, aber dazu habe ich nichts gefunden.

PS.: Änderungen an der Hardware oder IPOS-Programmierung stehen derzeit nicht zur Diskussion.

Vielen Dank für Antworten
Mäuseklavier
 
.....
bin zur Zeit in der Planungsphase
...
bei SEW gibts so einige Applikationen, aber dazu habe ich nichts gefunden.
...

Solche Aufgabenstellungen würde ich immer erst mal mit den SEW-Experten besprechen.
Im allgemeinen wird so etwas am Ende an SEW outgesourced.
Die haben Servicetechniker, ehe du dass weißt, was die Wissen (MÜSSEN)...

Frank
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Frank,

diese Vorgehensweise ist prinzipiell richtig und praktizieren wir oft auch.
SEW würde hier auf eine selbstentwickelte IPOS-Programmierung zurückgreifen. Das ist aber nicht in meinem Sinne, ich möchte die Programmierung selbst in der Hand haben, zum einen wegen späterer Diagnose, zum anderen zur Vermeidung von Problemen bei Gerätetausch. Warum soll ich also nicht eine Lösung entwickeln, die auf vorhandene Programmierstrategien zurückgreift. An und für sich ist die Anwendung auch nicht zu kompliziert um ausgesourced zu werden. Kenne ich die Parameter die ich angreifen muss und funktioniert die Parametrierung über Datensatz 47 ist der Rest nur noch Gutenberg.

MfG
MK
 
keiner hier eine Ahnung?

Hi,

bin jetzt einen Schritt weiter und kann die Betriebsart im Parameter 8574 von Servo&IPOS auf Servo&Momentenregelung umschalten. Leider geht dies im Moment nur wenn ich an DI0 die Reglerfreigabe wegnehme. Weiß jemand eine Möglichkeit ohne über die Reglerfreigabe an der Klemmleiste in den Betriebszustand 1 zu kommen?

Gruß MK
 
Warum nicht IPOS ? ... du kannst du die Erweiterte Buspositionierung anwenden um zu positionieren und beim Pressen musst du einen Wert angeben der "im Werkstück" liegt. Den Pressdruck stellt du über den Parameter Drehmoment aus deiner Steuerung ein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum nicht IPOS ? ... du kannst du die Erweiterte Buspositionierung anwenden um zu positionieren und beim Pressen musst du einen Wert angeben der "im Werkstück" liegt. Den Pressdruck stellt du über den Parameter Drehmoment aus deiner Steuerung ein.

Kein IPOS, siehe oben.
Welchen Parameter Drehmoment meinst du?

Zur Zeit schalte ich ja die Betriebsart um, da wird statt der Sollposition der Sollstrom in %In vorgegeben.
 
Wenn du dir nicht den eigenen Weg mit IPOS verstellen würdest, könntest
du mit ganz einfachen Mitteln den Parameter direkt in die Peripherie legen.
Ich würde wirklich mal bei SEW anfragen, das ist kein Hexenwerk und für
dich später eine einfache und schnelle Lössung.
 
Hallo Helmut,

und von welchem Parameter schreibst du?

Wie schon oben beschrieben funktioniert das ganze und so kompliziert ist es in der S7 nicht. Zum Fc140 kommt der FB100 mit 3 Netzwerken zur Umschaltung dazu. Ich sehe da nur Vorteile. Zwei Probleme Beschäftigen mich noch. Erstens das ich beim Umschalten der Betriebsart die Reglerfreigabe wegnehmen muss. Zweitens die Auflösung des Iststroms in der S7.

Wie würde sowas in einem IPOS-Programm aussehen? Gebe ich da Position und Strom gleichzeitig in der Betriebsart Servo&IPOS vor?

Mfg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Mäuseklavier,
du kannst ja jeden Parameter auf die Profibusschnittstelle ziehen und auch
direkt beschreiben, also währe es möglich auch zur Laufzeit den Maximal
Strom zu ändern. Ich habe mal ein IPOS Programm geschrieben um mit den
Dezentralen FU's MQP (Igel) ein Positionierung durchzuführen. Hier ein Teil
zur Variabeln Deklaration und wie Werte in den Feldbus umgeladen werden.

Code:
/*==================================================================================================
              IPOS-Quelldatei
    Erstellt am 25.11.05 Helmut_von_der_Reparatur
 
Ansteuerung Antrieb durch die SPS/Application (DP-Prozessausgangsdaten)
--------------------------------------------------------------------------
Wenn bei den Sollwerten Geschwindigkeit oder Rampe eine "0" vorgegeben wird
fährt der Antrieb mit Wert aus den Parametern.
1.   Wort   =   Steuerwort
2/3. Wort   =   Zielposition
4.   Wort   =   Soll-Geschwindigkeit
5.   Wort   =   Hochlaufzeit
6.   Wort   =   Tieflaufzeit
7.   Wort   =   IPOS-Ausgänge
Belegung Steuerwort
15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Reglersperre /Freigabe
|  |  |  |  |  |  |  |  |  |  |  |  |  |  Freigabe /Schnellstop
|  |  |  |  |  |  |  |  |  |  |  |  |  Freigabe /Halt
|  |  |  |  |  |  |  |  |  |  |  |  reserviert
|  |  |  |  |  |  |  |  |  |  |  reserviert
|  |  |  |  |  |  |  |  |  |  reserviert
|  |  |  |  |  |  |  |  |  Reset
|  |  |  |  |  |  |  |  reserviert
|  |  |  |  |  |  |  Referenzieren
|  |  |  |  |  |  Automatik
|  |  |  |  |  Tippen plus
|  |  |  |  Tippen minus
|  |  |  reserviert
|  |  reserviert
|  reserviert
reserviert
Belegung IPOS-Ausgänge
15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  DO0
|  |  |  |  |  |  |  |  |  |  |  |  |  |  DO1
----           reserviert           ----
Rückmeldung Antrieb an die SPS/Application (DP-Prozesseingangsdaten)
--------------------------------------------------------------------------
1.   Wort   =   Statuswort
2/3. Wort   =   Ist-Position
4.   Wort   =   Ist-Geschwindigkeit
5.   Wort   =   frei
6.   Wort   =   Geräteauslastung
7.   Wort   =   IPOS-Eingänge
Belegung Statuswort
15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Motor-Dreht
|  |  |  |  |  |  |  |  |  |  |  |  |  |  Umrichter Betriebsbereit
|  |  |  |  |  |  |  |  |  |  |  |  |  Antrieb referenziert
|  |  |  |  |  |  |  |  |  |  |  |  Zielposition erreicht
|  |  |  |  |  |  |  |  |  |  |  Bremse geöffnet
|  |  |  |  |  |  |  |  |  |  Fehler
|  |  |  |  |  |  |  |  |  Endschalter rechts
|  |  |  |  |  |  |  |  Endschalter links
Umrichterstatus / Fehler-Code
Belegung IPOS-Eingänge
15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  DI0
|  |  |  |  |  |  |  |  |  |  |  |  |  |  DI1
|  |  |  |  |  |  |  |  |  |  |  |  |  DI2
|  |  |  |  |  |  |  |  |  |  |  |  DI3
----         reserviert       ----
==================================================================================================*/
#include <const.h>
#include <io.h>
#pragma initials  90 127
#pragma globals  210 300
#pragma var      301 400
//-----  Movilink - Profil  -----
MOVCOM      mc;
MCPDATA     mcd;
MCPARADATA  mcpara;
MOVLNK      ml;
MLDATA      mld;
GSPODATA10  DP_OUT;
SSPIDATA10  DP_IN;
//-----  Algemeine Variablen  -----
#define   Betriebsart                   H0
#define   Rueckgabe_betriebsart         H1
#define   Statuswort                    H2
#define   Schnellstop_Rampe             H3
#define   Soll_Speed                    H7
#define   START                         _BitSet(mcd.PO1, 2)
#define   STOP                          _BitClear(mcd.PO1, 2)
long Freigabe, Servicebetrieb, Schmier_T1, Schmier_T2;
//-----  Variablen Skalierung  -----
#define   Faktor_Position               H10
#define   Divisor_Position              H11
#define   Faktor_Speed                  H12
#define   Divisor_Speed                 H13
//-----  Variablen Status  -----
#define   Linkslauf                     H20
#define   Rechtslauf                    H21
#define   IST_Speed                     H22
#define   Motor_dreht_SET               _BitSet(Statuswort, 0)
#define   Motor_dreht_RESET             _BitClear(Statuswort, 0)
#define   Motor_dreht                   (Statuswort & 0x1)
#define   Bereit_SET                    _BitSet(Statuswort, 1)
#define   Bereit_RESET                  _BitClear(Statuswort, 1)
#define   Bereit                        (Statuswort & 0x2)
#define   Bremse_SET                    _BitSet(Statuswort, 4)
#define   Bremse_RESET                  _BitClear(Statuswort, 4)
#define   Bremse                        (Statuswort & 0x10)
long H511_speicher, H511_differenz;
//-----  Variablen Endlagen  -----
#define   SW_endschalter_links          H25
#define   SW_endschalter_rechts         H26
#define   HW_endschalter_links_aktiv    H27
#define   HW_endschalter_rechts_aktiv   H28
#define   Endschalter_links             ((InputLevel >> 2) & 1)
#define   Endlage_links_SET             _BitSet(Statuswort, 7)
#define   Endlage_links_RESET           _BitClear(Statuswort, 7)
#define   Endlage_links                 (Statuswort & 0x80)
#define   Endschalter_rechts            ((InputLevel >> 3) & 1)
#define   Endlage_rechts_SET            _BitSet(Statuswort, 6)
#define   Endlage_rechts_RESET          _BitClear(Statuswort, 6)
#define   Endlage_rechts                (Statuswort & 0x40)
long SW_endschalter_aktiv, SW_Endlage_links, SW_Endlage_rechts,
     SW_endschalter_links_MM, SW_endschalter_rechts_MM,
     HW_Endlage_links, HW_Endlage_rechts;
//-----  Variablen Tippen  -----
#define   Tippen_links_Speed            H30
#define   Tippen_links_Rampe_auf        H31
#define   Tippen_links_Rampe_ab         H32
#define   Tippen_rechts_Speed           H33
#define   Tippen_rechts_Rampe_auf       H34
#define   Tippen_rechts_Rampe_ab        H35
//-----  Automatik  -----
#define   Auto_Speed                    H41
#define   Auto_Rampe_auf                H42
#define   Auto_Rampe_ab                 H43
#define   Pos_erreicht_SET              _BitSet(Statuswort, 3)
#define   Pos_erreicht_RESET            _BitClear(Statuswort, 3)
#define   Pos_erreicht                  (Statuswort & 0x8)
long Auto_Schmier;
//-----  Zielregelung  -----
#define   Reg_Fenster                   H51
#define   Reg_Divisor_Rampe_min         H52
#define   Reg_Divisor_Rampe_max         H53
#define   Reg_Faktor_Rampe              H54
#define   Reg_Divisor_Rampe             H55
#define   Reg_Mindestdrehzahl           H56
#define   Reg_Lose                      H57
#define   Verz_Ziel                     H58
long Reg_Schmier, Reg_Differenz, Reg_Speed, Reg_Lose_fahren,
     Reg_Lose_gefahren;
//-----  Referenzieren  -----
#define  Referenziert_SET               _BitSet(Statuswort, 2)
#define  Referenziert_RESET             _BitClear(Statuswort, 2)
#define  Referenziert                   (Statuswort & 0x4)
//-----  Position Speicher  -----
#define  Start_Pos_Speicher              H90
long Start_Pos_Schmier;
MOVLNK   Start_Pos;
//-----  Störung  -----
#define  Sammelstoerung_SET             _BitSet(Statuswort, 5)
#define  Sammelstoerung_RESET           _BitClear(Statuswort, 5)
#define  Sammelstoerung                 (Statuswort & 0x20)
#define  MM_OVER_CURRENT                1
#define  MM_DC_LINK                     7
#define  MM_THERM_OV_OUT                11
#define  MM_THERM_OV_MOT                84
#define  MM_THERM_OV_BRAKE              85
#define  MQX_IPOS_ILLOP                 10
#define  MQX_SYSTEM_FAULT               91
#define  FEHLER_RESET                   (DP_OUT.PO1 & 0b1000000)
#define  STOERUNG_MM                    (mcd.PI1 & 0b100000)
#define  TIMEOUT_MOVIMOT                0x05000002
long MQX_Fehler, Fehler;
//-----  Betriebsarten  -----
#define  Referenzieren         1
#define  Automatik             2
#define  Hand_rechts           4
#define  Hand_links            8
 
/*=============================================
       Funktion Task2
===============================================*/
Funktion_Task2()
  {
  //-----  Bei Servicebetrieb = "0", Feldbussignale an MQX  -----
  if(!Servicebetrieb)
    _GetSys(DP_OUT, GS_PODATA );
    _SetSys(SS_PIDATA, DP_IN );
  //-----  Freigabe  ----
  _BitMove(mcd.PO1, 6, DP_OUT.PO1, 6);
  if((DP_OUT.PO1 & 0x6) == 6)
    {
    _BitSet (mcd.PO1, 1);
    Freigabe = 1;
    }
    else
    {
    _BitClear (mcd.PO1, 1);
    mcd.PO3 = Schnellstop_Rampe;
    Freigabe = 0;
    }
  //-----  Rueckmeldungen an die SPS  -----
  if(Sammelstoerung)
    Schmier_T2 = Fehler << 8;
    else
    Schmier_T2 = Rueckgabe_betriebsart << 8;
  DP_IN.PI1 = Schmier_T2 | Statuswort;
  Schmier_T2 = ActPos_Mot * Divisor_Position / Faktor_Position;
  DP_IN.PI2 = Schmier_T2 >> 16;
  DP_IN.PI3 = Schmier_T2 & 0xFFFF;
  DP_IN.PI4 = IST_Speed;
  DP_IN.PI6 = mcd.PI2;
  DP_IN.PI7 = H483;
  //-----  Steuersignale an den MQX  -----
//  StdOutpIPOS = DP_OUT.PO6;
  H481 = DP_OUT.PO7;
  //-----  Betriebsart auswählen  -----
  Betriebsart = (DP_OUT.PO1 & 0xFF00) >> 8;
  //-----  Allgemeine Verwaltung  -----
  Funktion_Status();
  Funktion_Endlage();
  Funktion_Start_Pos();
  Fehlerauswertung();
  }
 
....teil 2

Code:
/*=============================================
    Funktion Task 1
===============================================*/
Funktion_Task1()
  {
    Funktion_Hand_rechts();
    Funktion_Hand_links();
    Funktion_Automatik();
    Funktion_Referenzieren();
    STOP;
  }

/*=============================================
                   Task2
===============================================*/
Task2()
  {
  //Funktion_Task1();
  Funktion_Task2();
  }
/*=============================================
              Interrupt-Routine
===============================================*/
Interrupt()
  {
    Funktion_Geschwindigkeit();
  }
/*=============================================
   Hauptfunktion (IPOS-Eintrittsfunktion)
===============================================*/
main()
  {
  /*-------------------------------------
             Initialisierung
  --------------------------------------*/
  Statuswort = 0;
  Rueckgabe_betriebsart = 0;
  Servicebetrieb = 0;
  //-----  Initialisierung des Prozeßausgangsdatenpuffers  -----
  DP_OUT.BusType = 3;             // Bus Type: Feldbus
  DP_OUT.Len     = 10;            // Länge 10 Worte
  //-----  Initialisierung des Prozeßeingangsdatenpuffers  -----
  DP_IN.Len      = 10;            // Länge 6 Worte
  //-----  Struktur Verbindung MQX <-> Movilink initalisieren  -----
  mc.BusType     = ML_BT_S1;      // Komunikation via RS-485 zum Movilink
  mc.Address     = 1;             // Umrichteradresse
  mc.Format      = ML_FT_3;       // 3 Prozessdatenworte
  mc.PdPointer   = numof(mcd);    // Pointer auf Proßessdaten
  mc.ParaPointer = numof(mcpara); // Pointer auf Parameterdaten
  mcd.PO1        = 0;             // Mowimot Statuswort auf "0" setzen
  _MovCommDef(mc);                // Einrichten der Kommunikationsbeziehung
  _MovCommOn();                   // Start der zyklischen Kommunikation
  //-----  Struktur Verbindung Position_Speicher <-> Movilink initalisieren  -----
  Start_Pos.BusType  = ML_BT_S1;
  Start_Pos.Address  = 253;
  Start_Pos.Format   = ML_FT_PAR;
  Start_Pos.Service  = ML_S_WR;
  Start_Pos.Index    = 11090;
  Start_Pos.DPointer = numof(Start_Pos_Speicher);
  //-----  gesicherte Position zurückspeichern  -----
  H511 = Start_Pos_Speicher;
  if(H511 !=0)
    Referenziert_SET;
    else
    Referenziert_RESET;
  //-----  Task2 aktivieren  -----
  _SetTask2(T2_START, Task2);
  //-----  Interrupt-Routine aktivieren  -----
  _SetInterrupt(SI_TIMER0, Interrupt);     // Ermittlung der Geschwindigkeit
   T0_Reload = 50;
  //----- Schleife Task 1 aufrufen  -----
  while(1)
    {
     Funktion_Task1();
     //Funktion_Task2();
    }
  }
 
Hallo Helmut,

danke für deinen Beitrag.


Wann/Wo wird bei deinem Beispiel das Steuerwort-Bit 0 gesetzt?


mfG Mäuseklavier
 
Hallo Helmut,

danke für deinen Beitrag.


Wann/Wo wird bei deinem Beispiel das Steuerwort-Bit 0 gesetzt?


mfG Mäuseklavier


ich lade "h6" ins Steuerwort, das Bit bearbeite ich nicht extra
Code:
 if((DP_OUT.PO1 & 0x6) == 6)
    {
    _BitSet (mcd.PO1, 1);
    Freigabe = 1;
    }
    else
    {
    _BitClear (mcd.PO1, 1);
    mcd.PO3 = Schnellstop_Rampe;
    Freigabe = 0;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und Danke an alle.

@Tigerente: super, Auflösung um ein Zehntel genauer ;-)

@Lipperlandstern: Das ist ja ein super Lösungsansatz, da bräuchte ich die Betriebsart nicht umschalten und die Sache ist geritzt. Probier ich morgen gleich aus.

@Helmut: Steuerwort ist bei dir 6dez = 0000 0110bin
Was ist nun mit Bit 0 Reglerfreigabe?

Mfg Mäuseklavier
 
das ist doch invertiert bei SEW das ist ja eigentlich nicht freigabe,
sondern Reglersperre. SEW kenzeichnet das doch mit den "/".
Siehe folgendes:

Code:
Belegung Steuerwort
15 14 13 12 11 10 9  8  7  6  5  4  3  2  1  0
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Reglersperre [COLOR=red]/Freigabe
[/COLOR]|  |  |  |  |  |  |  |  |  |  |  |  |  |  Freigabe [COLOR=red]/Schnellstop
[/COLOR]|  |  |  |  |  |  |  |  |  |  |  |  |  Freigabe [COLOR=red]/Halt
[/COLOR]|  |  |  |  |  |  |  |  |  |  |  |  reserviert
|  |  |  |  |  |  |  |  |  |  |  reserviert
|  |  |  |  |  |  |  |  |  |  reserviert
|  |  |  |  |  |  |  |  |  Reset
|  |  |  |  |  |  |  |  reserviert
|  |  |  |  |  |  |  Referenzieren
|  |  |  |  |  |  Automatik
|  |  |  |  |  Tippen plus
|  |  |  |  Tippen minus
|  |  |  reserviert
|  |  reserviert
|  reserviert
reserviert
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Letzter Schliff?

ok Parameter 304 entsprechend angepasst und Paramter Drehzahlüberwachung ausgeschaltet. Nun passiert es, dass Positioniert wird bis Drehmomentgrenze erreicht. Soweit so gut.

Wird aber die Last wieder reduziert (bzw. Leerlauf) geht der Motor bis zur virtuellen Istposition mit scheinbar Vmax durch (virtuell = als wäre er weiter mit normaler Geschwindigkeit gelaufen, da Steuerbit Positionieren noch ansteht).

Was ist noch zu tun?

MfG Mäuseklavier
 
ich denke das er ja noch im Positonier Mode ist, wenn du ihn jetzt mit
Strom gegen einen Festanschlag fahren lassen möchtest, versucht der
Regler ja die position zu erreichen, kann es aber nicht.
Vlt. solltest du auf Tippbetrieb umstellen und dann den Strom auswerten,
wenn er eine gewisse Zeit an der Stromgrenze liegt, den Antrieb abschalten.
 
Für diese Variante aber auch den Parameter 732 (Bremseneinfallzeit) nicht aus den Augen verlieren -> die Bremse muss vollständig einfallen ehe der Regler abgeschaltet wird. Ggf. auch die Haltekraft der Bremse beachten.

Nachtrag zum Steuerwort: h6 geht auf jeden Fall. Falls Du zwischen Normalhalt und Schnellstop einen Unterschied machen möchtest, würde ich aber die Bitvariante empfehlen. Ist aber auch Geschmackssache.
 
Zurück
Oben