# SSI Geber an SPS...



## Jochen Kühner (14 März 2007)

Hallo, Ich soll einen Seillängengeber mit SSI Schnitstelle an einer SPS Betreiben.

In welchem DBD Steht da der istwert?? wie kann ich diesen Teachen?? Ist das geberabhänig oder ist die SSI Schnittstelle standartisiert...


----------



## PeterEF (14 März 2007)

Jochen Kühner schrieb:


> Hallo, Ich soll einen Seillängengeber mit SSI Schnitstelle an einer SPS Betreiben.
> 
> In welchem DBD Steht da der istwert?? wie kann ich diesen Teachen?? Ist das geberabhänig oder ist die SSI Schnittstelle standartisiert...


 
Soviele Fragen 

-keine Ahnung in welchem DBD der Istwert landet (Deine Angaben sind nicht gerade umfassend ), Gegenfrage: welche Hardware verwendest Du denn?

-Was verstehst Du unter Teachen in Zusammenhang mit der Abfrage einer Position?

-SSI ist standardisiert, da immer die gleiche Physik der Schnittstelle (RS422/RS485) verwendet wird und die Daten immer seriell und synchron übertragen werden. 
Unterschiede gibt es in der Taktrate des Synchrontakts und in der Auflösung, d.h. wieviele Bits Nutzdaten übertragen werden - das ist dann wieder geberabhängig.


----------



## Jochen Kühner (14 März 2007)

*weis auch nicht mehr...*

habe bis jetzt auch nicht mehr informationen bekomen.

also ich soll den geber auslesen. und ich soll den geber teachen (den nullpunkt) können.


----------



## OHGN (14 März 2007)

*SSI Baugruppe*

Also um den Geber auslesen zu können brauchst Du auf jeden Fall eine SSI-Baugruppe auf der SPS.
Für die S7-300 wäre das die SM 338 (6ES7 338-4BC01-0AB0).
Diese Baugruppe ermöglicht den Anschluss von 3 SSI-Gebern.
In die SPS wird das ganze als Peripherieeingangsdoppelwort (PED)eingelesen.
In der Regel haben SSI- Geber einen Preset- Eingang, mit dem der Geber
an jeder beliebigen Stelle auf den Wert 0 gesetzt werden kann.


----------



## Skotti71 (17 November 2010)

Nach meinen Informationen haben SSI-Geber *keinen* Nullsetz-Eingang, da das SSI-Protokoll keinen Rückkanal vorsieht. Es wird immer eine Absolut-Position relativ zu einem werksseitig vorgegebenen Nullpunkt ausgegeben. Offsets müssen entsprechend in der Steuerung verarbeitet werden.

Ich kämpfe mit dem Problem, daß ein rotativer SSI-geber an einer Linearachse montiert, ja nach Einbau-Lage irgendwo im Verfahrbereich einen Über-/Unterlauf haben kann. Wie erfasse ich das korrekt?


----------



## maxi (17 November 2010)

Hallo,

wir haben stets Inkremental- und Absolutencoder (Gleich welche Schnitstelle) so gewählt das im Verfahrbereich kein Übersprung möglich ist.

0 Parametrierungen am Geber kenne ich persönlich nur von Magnetgebern (Zylinderabfragen), bei denen es meist durch die hohen Tolleranzen (+/- 1-2mm der Zylinderposition) ohnehin nicht auf das hundertstel ankommt. Kann hier aber sein das die Technik sich mitlerweile weiterntwickelt hat.

Zur Programmierung und Parametrierung von SSI-Gebern kann ich das Siemens Tool "Easy Motion Control" empfehlen. Es geht aber je nach Anwendung auch ohne gut.

Glaube mich erinnern zu können das auf der Siemens Support seite einige Beispiele vorhanden waren. 

Hoffe es ist holfreich,


euer Maxi.


----------



## MSB (17 November 2010)

Skotti71 schrieb:


> Nach meinen Informationen haben SSI-Geber *keinen* Nullsetz-Eingang, da das SSI-Protokoll keinen Rückkanal vorsieht. Es wird immer eine Absolut-Position relativ zu einem werksseitig vorgegebenen Nullpunkt ausgegeben. Offsets müssen entsprechend in der Steuerung verarbeitet werden.


Das ist weniger eine Frage des Protokolls, sondern eine Frage ob der Hersteller des Gebers das in der Geber-Elektronik vorgesehen hat.
Es gibt SSI Geber die haben einen Hardware-Preset Eingang, oder auch welche,
die sich mittels einer Software parametrieren lassen, also z.B. Richtung Preset ...
Das alles hat aber mit der SSI-Schnittstelle ansich nichts zu tun, da es da wie du ja korrekt festgestellt hast, nur eine Komm-Richtung gibt.



Skotti71 schrieb:


> Ich kämpfe mit dem Problem, daß ein rotativer SSI-geber an einer Linearachse montiert, ja nach Einbau-Lage irgendwo im Verfahrbereich einen Über-/Unterlauf haben kann. Wie erfasse ich das korrekt?


Kämpfst du jetzt mit den Problem, weil sich dein Linearantrieb zu oft drehen muss, und du deswegen einen Über/Unterlauf erhältst,
oder ist der Geber einfach ungünstig montiert?
Kurzum einene Überlauf sollte man wenn irgend möglich vermeiden, ansonsten ist das eigentlich nur ein wenig Logik,
wann der Über/Unterlauf stattfindet, und wie man darauf reagiert.

Mfg
Manuel


----------



## peter(R) (17 November 2010)

@ Jochen Kühner

Als Modul zum Erfassen SM338 POS_INPUT 6ES7338-4CB01-0AB0 für bis zu 3 SSI Geber.
Wird in der Hardware Konfig zB. 256 als Eingangsadresse gewählt, so steht der Geber Istwert im PEW258.
Zur Nullung an beliebeiger Stelle einfach über Modulo einen "Kreis" mit beliebiger Auflösung definieren ( über Modulo gab es vor kurzem mal einen Thred ) Da kann man dann ganz einfach über einen Offset an beliebiger Stelle nullen.
Bei Interesse hätte ich da auch ein Prorgrämmchen das bbei mir in verschidenen Produkten seit Jahr und Tag läuft.

peter(R)


----------



## peter(R) (17 November 2010)

@ skotty71
wie groß ist denn der Überlauf ???
Eine Umdrehung und ein bischen oder eine Umdrehung und sehr viel ??

peter(R)


----------



## maxi (17 November 2010)

Habe mir gerade ein Datenblatt angeschaut,

die FM352-5 kommt anscheinend mit Überlauf der Geber klar.

Sehr interessante Baugruppe. Bisher leider noch nie in den Händen gehabt.


----------



## peter(R) (17 November 2010)

@ Maxi
die Baugruppe ist sehr leicht zu konfigurieren. SSI Daten in der HW Konfig eingeben, ( Achtung die kann nur 13, 21 oder 25 bit ), Codeart ( binär oder gray ), Schritte  je Umdrehung, Adressen auswählen anschliessen und das Ding rennt.

Das habe sogar ich auf Anhieb geschafft.

peter(R)


----------



## maxi (17 November 2010)

Kommt die FM352-5 auch mit Überlauf klar?

Wäre ja endlich mal was neues.
Was ich mich früher schon teils mit Positionieungen und Mivis gespielt hatte.


----------



## peter(R) (17 November 2010)

@ maxi

da haben wir aneinander vorbei geredet. Ich meinte die FM338 !!
Die FM352 ist ja nur ein Nockenschaltwerk !! Nockenschaltwerke mit Überlauf sind mir noch nicht begegnet.


peter(R)


----------



## JoopB (17 November 2010)

Wir brauchen die Et200S 6ES7 138-4DB0x-0AB0 baugruppe. Mit u.a. Siemens Gebers von 25Bit (Multi turn) und 13Bit (Single turn), Sick seilgebers 25Bit multiturn und MTS liniar encoders . Wir haben eine programm gemacht fur soft nullstellen und umrechnung von Puls nach mm oder grad. Hierunter die code

```
FUNCTION_BLOCK FB 300
TITLE =SSI_Encoders
{ S7_language := '19(1) Niederländisch (Niederlande)  10.05.2005  00:03:02' }
VERSION : 0.2

VAR_INPUT
  Nulstellen : BOOL ; //Aanstoten nulstellen
  Adres : INT ; //Adres SSI moduul
END_VAR
VAR_OUTPUT
  AktPlaats : DINT ; 
END_VAR
VAR
  AantalBits : INT  := 25; //Aantal bits geldig encoder
  Puls_Omw : INT  := 8192; //Aantal pulsen per omwenteling encoder
  MM_Omw : REAL  := 1.000000e+000; //MM per omwenteling van encoder
  AktWaarde : DINT ; //AktueleWaarde encoder
  RefWaarde : DINT ; //Referentiewaarde nulstellen
  StatusUP : BOOL ; //Status UP STS_UP
  StatusDN : BOOL ; //Status DN STS_DN
  StatusDI : BOOL ; //Status DI STS_DI
  ERR_24V : BOOL ; //Kortsluiting opnemerstroomverzorging 24V
  ERR_SSI : BOOL ; //Fout absoluut encoder
  ERR_PARA : BOOL ; //Parameter fout
  RDY : BOOL ; //Bedrijfsgereed
  Res47 : BOOL ; //gereserveert
  STS_LOAD : BOOL ; //Laadfunctie loopt
  ERR_LOAD : BOOL ; //Fout bij laadfunctie
  CMP : BOOL ; //Vergelijkingswaarde 1 bereikt
  CMP2 : BOOL ; //Vergelijkingswaarde 2 bereikt
  Res54 : BOOL ; //gereserveert
  Res55 : BOOL ; //gereserveert
  Res56 : BOOL ; //gereserveert
  Res57 : BOOL ; //gereserveert
  CMP_VAL1 : BOOL ; //Vergelijkingswaarde 1 laden
  CMP_VAL2 : BOOL ; //Vergelijkingswaarde 2 laden
  ResQ42 : BOOL ; 
  ResQ43 : BOOL ; 
  ResQ44 : BOOL ; 
  ResQ45 : BOOL ; 
  LATCH_ACK : BOOL ; //Bevestigen Latch functie
  EXTF_ACK : BOOL ; //Bevestiging foutmelding
  Fout : BOOL ; //Fout in SSI
  Reset_Fout : BOOL ; //Aansturen reset fout
  MetSnelheid : BOOL ; //Snelheid berekenen = 1
  NulstellenKlaar : BOOL ; 
  CMP_VAL : DINT ; //Vergelijkingswaarde naar SSI moduul
  WaardeNulstellen : DINT ; //Waarde die gewenst wordt bij nulstellen
  Copy_Plaats : DINT ; 
  Snelheid : DINT ; //Snelheid in uitgangseenh/sec
  SampleTime : REAL ; 
END_VAR
VAR_TEMP
  Schuiven : INT ; 
  Tussengeheugen : DINT ; 
  Pulsen : DINT ; 
  bits13 : BOOL ; 
  R_fout : BOOL ; 
END_VAR
BEGIN
NETWORK
TITLE =
      U     #Reset_Fout; 
      U     #Fout; 
      =     #EXTF_ACK; 
// reset fout
      L     32; 
      L     #AantalBits; 
      -I    ; 
      T     #Schuiven; 
      L     #AantalBits; 
      L     13; 
      ==I   ; 
      =     #bits13; 
      L     #Adres; 
      SLW   3; 
      LAR1  ; 
      L     PEW [AR1,P#4.0]; 
//status meldingen uit SSI moduul
      T     DIW   24; 

      O     #ERR_PARA; 
      O     #ERR_SSI; 
      O     #ERR_24V; 
      UN    #Fout; 
      =     #R_fout; 
      O     #ERR_PARA; 
      O     #ERR_SSI; 
      O     #ERR_24V; 
      =     #Fout; 
      U     #Reset_Fout; 
      U     #Fout; 
      O     #R_fout; 
      =     #EXTF_ACK; 
      UN    #CMP_VAL1; 
      UN    #CMP_VAL2; 
      O     #ERR_LOAD; 
      O     #STS_LOAD; 
      SPB   m2; 
      L     #CMP_VAL; 
//vergelijkings waarde naar SSI moduul   
      T     PAD [AR1,P#0.0]; 
m2:   L     DIB   26; 
//Stuurbits naar SSI moduul
      T     PAB [AR1,P#4.0]; 
      UN    #RDY; 
      U     #Fout; 
      SPB   eind; 
// als er een fout is dan oude waarde uitgeven 
      L     PED [AR1,P#0.0]; 
      T     #AktWaarde; 
//Waarde encoder
      L     #Schuiven; 
      TAK   ; 
      SLD   ; 
      T     #Tussengeheugen; 
      UN    #Nulstellen; 
      O     #NulstellenKlaar; 
      SPB   m001; 
// nulstellen
      L     #WaardeNulstellen; 
      DTR   ; 
      L     #Puls_Omw; 
      DTR   ; 
      *R    ; 
      L     #MM_Omw; 
      /R    ; 
      RND   ; 
      L     #Schuiven; 
      TAK   ; 
      SLD   ; 
      NEGD  ; 
      L     #Tussengeheugen; 
      +D    ; 
      NEGD  ; 
      T     #RefWaarde; 
      L     #Tussengeheugen; 
m001: L     #RefWaarde; 
      +D    ; 
      L     #Schuiven; 
      TAK   ; 
      SSD   ; 
      T     #Pulsen; 
      UN    #bits13; 
      SPB   z1; 
      L     L#-1250; 
      >=D   ; 
      TAK   ; 
      SPB   z1; 
      L     L#8192; 
      +D    ; 
// bij 13 bit bereik tussen -1250 tot 6942
z1:   DTR   ; 
      L     #MM_Omw; 
      *R    ; 
      L     #Puls_Omw; 
      DTR   ; 
      /R    ; 
      RND   ; 
      T     #AktPlaats; 
      U     #Nulstellen; 
      =     #NulstellenKlaar; 
eind: UN    #MetSnelheid; 
      O     #Fout; 
      SPB   end; 
      U     #Nulstellen; 
      UN    #NulstellenKlaar; 
      SPB   end; 
      L     #Copy_Plaats; 
      L     #Pulsen; 
      T     #Copy_Plaats; 
      -D    ; 
      NEGD  ; 
      DTR   ; 
      L     #MM_Omw; 
      *R    ; 
      L     #Puls_Omw; 
      ITD   ; 
      DTR   ; 
      /R    ; 
      L     #SampleTime; 
      /R    ; 
      RND   ; 
      T     #Snelheid; 
      SPA   EIND; 
end:  L     0; 
      T     #Snelheid; 
EIND: U     #Nulstellen; 
      =     #NulstellenKlaar; 
END_FUNCTION_BLOCK
```
 
MVG,

Joop


----------



## rostiger Nagel (17 November 2010)

Hilfe Marlob, kannst du das mal übersetzen, ich dacht alle 
Holländer können Deutsch 



JoopB schrieb:


> Wir brauchen die Et200S 6ES7 138-4DB0x-0AB0 baugruppe. Mit u.a. Siemens Gebers von 25Bit (Multi turn) und 13Bit (Single turn), Sick seilgebers 25Bit multiturn und MTS liniar encoders . Wir haben eine programm gemacht fur soft nullstellen und umrechnung von Puls nach mm oder grad. Hierunter die code
> 
> ```
> FUNCTION_BLOCK FB 300
> ...


----------



## maxi (17 November 2010)

peter(R) schrieb:


> @ maxi
> 
> da haben wir aneinander vorbei geredet. Ich meinte die FM338 !!
> Die FM352 ist ja nur ein Nockenschaltwerk !! Nockenschaltwerke mit Überlauf sind mir noch nicht begegnet.
> ...


 

Ich meinte diese hier:

http://www.automation.siemens.com/m...nktionsbaugruppen/FM352-5/Seiten/Default.aspx

(Noch nie in die Hände bekommen bisher)

Im Siemens Datenblatt stand etwas ob diese einen Überlauf/Übersprung kann mit : Ja 

Die FM 338 kenne ich und habe ich schon sehr oft verwendet.
Bei der 338 haben wir grundsätzlich ohne (und weit entfernt vom) Überlauf gearbeitet.

Jemand schon verwendet und mit dieser Karte/CPU wirklich ein Überlauf kein Problem?


----------



## peter(R) (17 November 2010)

Ganz schön teuer das Ding !!  Wenn man nicht unbedingt Höchstgeschwindigkeit braucht ( und nur dafür ist das Modul gebaut ) kann man für den Preisunterschied schon ein weilchen Programmieren.
Ich denke mal den Über- Unterlauf kann man - wenn er sich in Grenzen hält ( kleiner eine Umdrehung ) - programmtechnisch ohne große Mühe erschlagen.

peter(R)


----------



## Oberchefe (17 November 2010)

Wenn man mehrere Umdrehungen des Gebers hat nimmt man üblicherweise Multiturn Geber. Die können im Unterschied zu den Singleturn Gebern die Umdrehungen auch noch ermitteln und dann zur Auswertung gebracht werden.


----------



## Skotti71 (18 November 2010)

@MSB
An der Maschine, wo ich zuletzt SSI-Multiturn-Drehgeber an einer Linearachse hatte, waren alle so eingebaut, daß im Verfahrbereich kein Überlauf eingetreten ist. Ich wollte halt lediglich am Bediengerät eine Möglichkeit schaffen nach Gebertausch den referenz-Offset neu eingeben zu können. Und dabei fragte ich mich, was passiert wenn der Geber halt so eingebaut ist, daß ein Über- oder Unterlauf eintritt.


> ...eigentlich nur ein wenig Logik...


Genau, aber dabei hatte ich irgendwie eine Denkblockade und bin nicht auf eine anständige Lösung gekommen. 

@peter(R)
Wie oben schon geschrieben: Ist ein Multiturngeber, der den gesamten Verfahrbereich innerhalb der 4096 Umdrehungen abdeckt. Mein Problem handelt nur von einer ungünstigen Einbaulage.

@JoopB
Vielen Dank für den Code. Ich habe die niederländisch benannten Variablen und Kommentare mal in Google ins englische übersetzen lassen und in S7 eingelesen. Falls Interesse besteht könnte ich die übersetzte Quelle hier posten.

Gruß,
Skotti


----------



## nekron (18 November 2010)

Hi ...

also die FM352-5 (das Nockenschaltwerk) kommt prima mit einem Überlauf eines rotatorischen SSI-Gebers klar, wir setzen das Teil bei Extenter-Pressen ein, ist wenn man sich damit auseinandersetzt auch recht einfach zu programmieren (okok - das erste mal und ohne Lesen der Doku bestimmt nicht  )

Aber auch mit einer SSI-Karte auf der ET200S (zur Not wenn man mehrere braucht auch auf der S7-300 direkt) kann man sicher ohne Probleme einen Überlauf abfangen, in dem man sich entweder genau beim Nulldurchgang / bzw. beim Durchlauf des größten wertes) entweder das Richtungssignal anschaut (das die Karte als bit gibt) oder die Richtung anhand der letzten Änderung ermittelt ... somit kann man dann Intern mit einem (jenachdem wie gross man es braucht) Int  / Dint die Überläufe zählen und dann mit dem Istwert multiplizieren.

Oder man nimmt jeweils die Geberdifferenz zwischen 2 Zyklen (eventuell via OB3x mit dem hätte man gleich noch Geschwindigkeit) und addiert dieses zu einem DINT dazu, sollte auch funktionieren ?!?

Nur geht hier bei beiden Varianten beim Überlauf und anschliessender Spannungslosigkeit (ok den wert kann ich remanent speichern, aber wer sagt mir das da keiner mehr als eine Runde am Geber dreht) eventuell die Position flöten. 

Gruss,
michael


----------

