Step 7 Kübler Drehgeber an Profibus

hub

Level-1
Beiträge
251
Reaktionspunkte
17
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich will für einen Kübler Drehgeber mit Profibus das Programm erstellen.
- Typ 7068
- Multiturn
- vergleichbar mit Typ 5868

In der Hardwarekonfig ist der Drehgeber mit Profibus DP verbunden.
Es gibt 2 Steckplätze für Module.
Als Module gibt es:
- Universalmodul
- 16 Bit Input, consistent
- 16 Bit Input/Output, consistent
- 32 Bit Input, consistent
- 32 Bit Input/Output, consistent
- MUR=13 Bit, TMR=25 Bit
- Speed (RPM) = 16 Bit Input
- Speed (Steps/sec) = 32 Bit Input

Mir ist nicht ganz klar, in welchem Modul welcher Wert in welchem Format übertragen wird.
Ich brauche den Positions-Istwert und eine Nullstellfunktion.
Geschwindigkeit wäre auch nicht schlecht. Kann ich aber auch in der SPS berechnen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Beschreibung.
Ich habe natürlich bereits bei Kübler nach Beschreibungen gesucht.
Ich finde in der Beschreibung aber nicht, wo z.B. der Istwert übertragen wird.

Bei den einzelnen Modulen steht nur global, dass eine bestimmte Anzahl an Wörtern übertragen wird.
z.B. steht beim Modul “32Bit In/Output“, dass 2 Eingangsworte und 2 Ausgangworte übertragen werden.
Was in diesen Wörtern enthalten ist, fehlt aber.

Bei FU´s ist z.B. genau festgelegt, wo Steuersignale, Sollwert, Istwert, usw. liegen.

Leider habe ich zurzeit weder den Drehgeber noch eine Steuerung zur Hand, um es einfach auszutesten.
 
Es gibt nur 2 Istwerte + 1 Ausgangswert + 1 Steuersignal. Die sind m.E. im Manual ausreichend erklärt.

1. Modul: Die zwei Eingangsworte sind die Encoder-Position. Die optionalen zwei Ausgangsworte sind der Preset-Wert, davon das MSB (Bit 31 bzw. Bit 15) das einzige Steuersignal: 0-1-Flanke für Übernahme des Preset-Wertes.
2. Modul: Will man auch noch die Geschwindigkeit, dann muß man in der HW Konfig das zweite Modul "Speed ..." stecken.

Du steckst also:
1. Modul: "32 Bit Input/Output, consistent" (Input: Position / Output: Preset)
2. Modul: "Speed ..." (Input: Geschwindigkeit)

Nullsetzen:
DW#16#80000000 (oder DW#16#80 ???) auf das Ausgangs-Doppelword geben. Vorher 0 ausgeben.
Hier ist die Beschreibung für mich ein bisschen konfus ("rising edge of Bit 32 (=Bit 7 of data byte 3)"), kann aber leicht ausprobiert werden, welches Bit tatsächlich das höchstwertige MSB ist.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn Sie ein Multiturn encoder habe nemen sie dan 32 Bits In/Output end wenn Sie fur der speed pulsen/sec wolllen 32 bit input in das 2e feld.
Eine preset zahlerstand geben sie mit die 32 bit ausgangengen durch in byte 1-3 die preset wert zu setsen weiter steuren Sie das bit 7 von byte 0 von 0 auf 1 und der wert wurde in der encoder ubernommen.
z.b.
32bit In/OUt sind ED300 und AD 300 und die speed ist ED304.
Wenn Sie Die Encoder ein preset wert von 2000 wolte ubergeben machen Sie dieser code.

Code:
FUNCTION FC 109 : VOID
TITLE =
//Preset waarde laden in Simodrive,Fraba en Lika encoders
VERSION : 0.1

VAR_INPUT
  Adres_I_Q : INT ; //ingangs en uitgangs adres (als adress PED 300 en PAD 300 is dan 300 invullen)
  Waarde_Preset : INT ; //Waarde waarop encoder gezet moet worden
  Preset_Laden : BOOL ; //encoder op nulstellen
END_VAR
VAR_IN_OUT
  Flank_Preset : BOOL ; //Flankmerker tbv preset waarde laden
  HulpMerker : BOOL ; //Hulpmerker tbv preset waarde laden
END_VAR
VAR_TEMP
  adres_DW : DINT ; //Pointer van I/O adres
END_VAR
BEGIN
NETWORK
TITLE =
//Preset waarde laden in Simodrive< Fraba en Lika encoders
      UN    #Preset_Laden; 
      UN    #HulpMerker; 
      R     #Flank_Preset; 
      BEB   ; 
      L     #Adres_I_Q; 
      ITD   ; 
      SLD   3; 
      T     #adres_DW; 
      U     #Preset_Laden; 
      UN    #Flank_Preset; 
      SPB   pres; 
      UN    #Preset_Laden; 
      U     #HulpMerker; 
      SPB   x1; 
      L     PED [#adres_DW]; 
      L     DW#16#FFFFFF; 
      UD    ; // filter 24bit
      L     #Waarde_Preset; 
      ITD   ; 
      <>D   ; 
      BEB   ; // bouwsteeneinde als Input <> PresetWaarde
x1:   NOP   0; 
      SET   ; 
      R     #HulpMerker; 
      L     DW#16#0; 
      T     PAD [#adres_DW]; 
      BEA   ; 
pres: SET   ; 
      S     #HulpMerker; 
      S     #Flank_Preset; 
      L     #Waarde_Preset; 
      ITD   ; 
      L     DW#16#80000000; 
      OD    ; 
      T     PAD [#adres_DW]; 
END_FUNCTION

Gruss Joop
 
Ungefähr so dachte ich mir das schon.
Meine benötigten Funktionen sind mir somit klar.

Ich verstand halt nur nicht, für was es da 8 unterschiedliche Module gibt.
Speziell das Modul "MUR/TMR"

Ich habe da noch 2 Fragen:
In der Parametrierung der Module gibt es eine Scale-Funktion.
Kann ich damit den Istwert auf Grad oder 1/10-Grad normieren?

Wird beim Speed(RPM)-Modul nur ganze Upm's übertragen oder gibt es da auch eine Nachkommastelle?

@Joop:
Danke für den Code.
 
Normal konte Sie auf grad oder 1/10 grad normieren.
Die total auflosung last sich auch ein stellen. Ich wisse nich of die rpm mit nachkoma stellen Ausgegeben konte worden.

Verstuurd vanaf mijn GT-I9301I met Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Inzwischen habe ich den Drehgeber und eine Steuerung zum Testen.
Istwert auslesen funktioniert problemlos.
Auch das Nullstellen funktioniert, solange ein OB86 vorhanden ist, problemlos.

Ohne OB86 geht die CPU beim Nullstellen in STOP. ???
In der Steuerung ist noch kein Programm. Alles nur mit „Variable steuern“ getestet.
 
Was Gibson er nach stop in buffer von SPS?
Nulstand mussen auch nicht jede cyclus machen da die encoder dass in eeprom schreib und dass eeprom kan ein bestimt anzahl scheibcyclus an.
Gruss Joop

Verstuurd vanaf mijn GT-I9301I met Tapatalk
 
Zurück
Oben