Drehzahlregelung über Analogausgang S7/300

MJB

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

erstmal möchte ich Euch mal danklen, dass ihr hier im Forum echt gute beiträge postet.
Mein kollege und ich entwickeln seit einiger zeit eine steuerung für eine "UPS Blistermaschine" und bei dieser Lebensaufgabe hat uns das SPS-Forum schon sehr viel weitergeholfen.

Nun zum projekt, wir haben diese woche mit dem umbau (Ausbau der steuerung von 1981 und einbau der neuen komponente,...) begonnen und bis jetzt läuft alles recht gut. Der Hauptantrieb erfolgt über einen 2,2kW getriebemotor, welcher über einen Siemens Micromaster 420 FU angesteuert wird.

Zur hardware, wir haben einen Industrie PC mit 12"Touch Paneel, und die SPS ist eine S7/300, und wie gesagt haben wir einen Micromaster 420.

Die Drehzahlsteuerung haben wir zur zeit über das motorpotenziometer realisiert, wobei wir am Touchi über die software WinCC flexible, eine plus und minus taste gemacht haben. -> das funktioniert auch recht gut.

Leider sind wir jedoch zur erkenntnis gekommen, das es viele vorteile hat, wenn wir die drehzahl über ein analogsignal 0-10V machen würden, da man dann beim ausschalten auch eine rampenfunktion realisieren könnte, damit die maschine in der 0-Position sanft stehen bleibt (angesteuert über ein nockenschaltwerk)

Leider hab ich jedoch noch nie einen analogausgang parametriert. Wir haben natürlich das SPS Forum dursucht und einige dinge ausprobiert, jedoch will es einfach nicht klappen, dass wir eine spannung aus der SM332 bekommen.

Vielleicht könntet ihr uns helfen :confused:

Die gewünschte lösung wäre in WinCC ein Schieberegler, mit welchem wir die Drehzahl steuern können.

Ich danke euch schon im voraus für eure beiträge
lg michael
 
(ich habs nicht so mit warmen willkommens worten also direkt rein ins getümmel)

0. Baugruppe ist richtig verdrahtet, mit Spannung versorgt und mit Rückwandbusverbinder versehen?
1. HardwareKonfiguration passt?
2. die 2 bis 8 Kanäle haben eine Ausgangsadresse zugeordnet?
3. diese Adressen befinden sich innerhalb oder außerhalb des Prozessabbildes?
3. a) wenn innerhalb: habt ihr mit dem FC106 (UNSCALE..) auf das entsprechende AW geschrieben?
3. b) wenn außerhalb: habt ihr mit dem FC106 (UNSCALE..) auf das entsprechende PAW geschrieben?
4. den Wert dann von der Visualisierung zum FC106 zu bringen sollte die geringste Herausforderung sein ... oder?

BTW: im moment sprechen wir immer noch von steuern, geregelt wird dann, wenn du die gemessene drehzahl mit der soll-drehzahl vergleichst und entsprechend nachführst...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, danke für die rasche antwort!

Ich bin zwar erst am montag früh wieder vor der SPS, aber einige fragen kann ich dir gleich beantworten.

Zu
0. Ja wurde richtig gemacht
1. Ja passt
2. Ja haben die Adressen in der HW-Konfig zugeordnet -> beginnend bei AW100
3. Weiß ich leider nicht -> wann ist es innerhalb und wann auserhalb?

mit dem FC106 haben wir schon herumversucht.... leider erfolglos

Ich glaub, dass wir was mit dem FC106 falsch machen

4. Die visualisierung mit WinCC, glaub ich auch, dass das nicht sooo schwierig ist

Und ja, ich hab bewusst steuern geschrieben, da ich nicht vor hab einen regelkreis zu machen.

Genauere beschreibung werde ich am Montag posten!

______________________________________________________________

Aber ich hab noch eine frage.

Ich muss eine taktanzeige visualisieren, wobei ein takt = eine umdrehung ist wobei ich natürlich die Takte/min brauch also U/min.

Ich hab eine Nocke von einem Nockensteuerwerk als eingang an die SPS angeschlossen. Ich kann die Nocke beliebig konfigurieren, da es sich um ein elektronisches nockensteuerwerk handelt, derzeit habe ich pro 30° einen wechsel von Hi auf Lo konfiguriert.

-> gibt es eventuell einen fertigen FC, der das kann???

Ich hab mich erfolglos mit einem vorwärtszähler und einem zeitglied versucht, habs nach ca. 3 stunden aufgegeben.

Danke und LG
Michael
 
zur analogfrage: zeig einfach mal, was du mit dem FC106 machst...

zur U/min frage: von welchen umdrehungen reden wir hier? 3U/min ... 1000U/min .... ??? evtl. wird hier eine zählerkarte notwendig.
 
Ich hab da mal was gebastelt ^^
sollte bis ca 3000U/min gut funktionieren

Lade es gleich mal hoch

Wann wird nochmal das Prozessabbild erneuert??
Ich arbeite mit nem OB38
Muß ich dann ein PEW laden
und das entsprechende Bit maskieren??
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab da mal was gebastelt ^^
sollte bis ca 3000U/min gut funktionieren
Bei einem Signal alle 30°? Das sind 3000*12 Signale in der Minute, eine tolle PLC ist das.

Wann wird nochmal das Prozessabbild erneuert??
Ich arbeite mit nem OB38
Muß ich dann ein PEW laden
und das entsprechende Bit maskieren??
Also das PAE wird am Anfang des OB 1 aktualisiert.
Ja, du musst das PEW laden, doch glaub ich nicht, dass das so schnell mit einer S7/300 geht.
Bei 10ms sind das theoretisch max. 6000 Impulse, aber es sind doch 36000 nach den Vorgaben?


bike
 
Bei einem Signal alle 30°? Das sind 3000*12 Signale in der Minute, eine tolle PLC ist das.


Also das PAE wird am Anfang des OB 1 aktualisiert.
Ja, du musst das PEW laden, doch glaub ich nicht, dass das so schnell mit einer S7/300 geht.
Bei 10ms sind das theoretisch max. 6000 Impulse, aber es sind doch 36000 nach den Vorgaben?


bike

richtig - ich arbeite mit nur einer Nocke
Wenn ich das richtig verstanden habe
sind die Nocken programmierbar
 
Hallo,

das Pogramm mit dem FC106 lade ich am Montag rauf!

Zur Drehzahl Frage:

Es handelt sich um max. 60 U/min. Ich hab die 30° Schritte deswegen gemacht, damit ich bei eine höhere Auflösung bekomme, da es sonst ziemlich lange dauert, bis sich das Signal bei zB 5 U/min wieder wiederholt.

lg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
richtig - ich arbeite mit nur einer Nocke
Wenn ich das richtig verstanden habe
sind die Nocken programmierbar
Habe ich auch so gelesen.
Doch muss das Signal länger als 10 ms anstehen da es sonst passieren kann, dass du den einen oder anderen Impuls nicht mitbekommst.
Aber wie ich gerade lese sind es nur 60 1/min dann sollte es funktionieren.


bike
 
Versuchs mal damit

Ich hab dem Baustein im OB35 aufgerufen
(da meine CPU315/2DP keinen OB38 hat)
und hab diesen auf 10ms in der Hardwarekonfiguration eingestellt

Über Feedback würde ich mich freuen :ROFLMAO:

NICHT RUNTERLADEN !!!!
 

Anhänge

  • Spsforum.zip
    17,4 KB · Aufrufe: 46
Zuletzt bearbeitet:
Wenn Feedback explizit gewünscht wird, bitte schön!

Über Feedback würde ich mich freuen :ROFLMAO:

Noch lachst Du!

Wir fangen oben an und arbeiten uns langsam durch:

Bausteinbeschreibung - nicht vorhanden!
Symbolik - uneindeutig!
Kommentare - Fehlanzeige!
Struktur - nicht erkennbar!
Zeiten - fix, Mehrwert des Bausteins nicht gegeben!

Hast fein gemacht, gefällt mir - 6 setzen!

Ich kriegs kotzen!
 
Noch lachst Du!

Wir fangen oben an und arbeiten uns langsam durch:

Bausteinbeschreibung - nicht vorhanden!
Symbolik - uneindeutig!
Kommentare - Fehlanzeige!
Struktur - nicht erkennbar!
Zeiten - fix, Mehrwert des Bausteins nicht gegeben!

Hast fein gemacht, gefällt mir - 6 setzen!

Ich kriegs kotzen!

Wie, Bausteinbeschreibung??
Hab den Baustein doch mit "Dreh_Zahl_Richtung"
genannt.
Kann ich für einen Baustein eine richtige Beschreibung schreiben??
Wenn ja - wie??

OK die Schnittstelle hätte ich noch Kommentieren können...

Aber im Baustein habe ich die Netzwerke so benannt,
das ich ein zusätzliches Kommentar nicht notwendig fand!?

Keine Struktur!?
Wieso meinst Du??

Die Zeiten sind fix - ja
weil ich es nicht notwendig finde
diese zu ändern
Die Zeit an der Stillstandserkennung TOF
ist nur, damit irgendwann auch mal gewährleistet ist,
das der Ausgang "A_umschaltfreigabe" für eine Drehrichtungsänderung
1 wird und der Drehzahlpuffer gelöscht wird
Die Zeit TON ist dafür, das der Ausgegebene Wert Ablesbar ist
wenn ich auf der Anzeige nur 8888 sehe,
hab ich auch nix davon

Dafür, das ich (nur) Inbetriebnehmer bin
und die Bucks der Programmierer ausbügeln muß,
find ich den Baustein gut.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie, Bausteinbeschreibung??
Hab den Baustein doch mit "Dreh_Zahl_Richtung"
genannt.
Kann ich für einen Baustein eine richtige Beschreibung schreiben??
Wenn ja - wie??

hab es nicht runtergeladen aber ich kann mir vorstellen, dass du die kleinen grauen felder in den einzelnen netzwerken kennst, das ganze gibts für die gesamte funktion auch, ganz oder unterm titel...
 
wie sieht denn ein Baustein bei Dir aus???

Oh, eine Herausforderung.
Anbei ein Beispiel früher Jahre zum selber übersetzen.

Code:
FUNCTION_BLOCK "M_1DRCT"
TITLE =1 DIRECTION DRIVE
//this function_block realize the control of a one direction drive.
//all functions of the drive are monitored and avaible at wRetVal.
//an error also will switch off the EN0 of the function_block.
//
//wRetVal - status
//----------------
//0000 - enable and ready to go
//0001 - start drive
//0003 - start drive and contactor on
//0007 - drive run and all functions ok
//
//wRetVal - error
//---------------
//8000 - no extern enable
//8001 - protectswitch off
//8002 - repairswitch off
//8003 - protectswitch and repairswitch off
//8004 - contactor had not switched in time or is gone
//8005 - motioncontrol had not switched in time or is gone
//
//DATE:     05.08.1997
//AUTHOR:   fd
//VERSION:  V0.1 BasicVer
AUTHOR : 'fd'
VERSION : 0.1


VAR_INPUT
  xPlcPulse : BOOL ;	//plug the Mx.0 with 10Hz here
  xEnable : BOOL ;	//extern enable input (1=ON)
  xProtectSwitch : BOOL ;	//(1=OK)
  xRepairSwitch : BOOL ;	//(1=OK)
  xContactor : BOOL ;	//(1=ON)
  xMotionControl : BOOL ;	//(1=OK)
  xStart : BOOL ;	//(1=START)
  iContactorTime : INT ;	//normally a small number, maybe 10 (mean 1s)
  iMotionControlTime : INT ;	//a little more than the time the drive needs to run fullspeed
END_VAR
VAR_OUTPUT
  xContactorOut : BOOL ;	//the output for the drive
  wRetVal : WORD ;	//status/error information
END_VAR
VAR
  xHelpFlagEnable : BOOL ;	
  xHelpFlagPlcPulse : BOOL ;	
  xTimeEnable : BOOL ;	
  xAllFine : BOOL ;	
  iTimer : INT ;	
END_VAR
BEGIN
NETWORK
TITLE =

     
// 
//enable and init the function_block
// 

      UN    #xEnable; //if enable false then
      R     #xAllFine; //reset intern start enable
      R     #xContactorOut; //make sure contactor is off
      SPBN  nore; 
      L     W#16#8000; 
      T     #wRetVal; //write status information
      SPA   end; //and leave the function

nore: UN    #xStart; //if start not and
      SPBN  ston; 
      R     #xTimeEnable; 
      L     W#16#0; //only enable and all switches on
      T     #wRetVal; //wRetVal = 0000
NETWORK
TITLE =

//
//init and take ready for trigger
//

ston: U     #xEnable; //enable true
      U     #xStart; //and start
      FP    #xHelpFlagEnable; //new
      SPBN  nonw; 
      L     W#16#1; //then
      T     #wRetVal; //write status information
      L     0; //initialize
      T     #iTimer; //timer with zero
      S     #xTimeEnable; //and make enable
      S     #xAllFine; //set the intern enable
NETWORK
TITLE =

// 
//check the function
// 

nonw: UN    #xProtectSwitch; 
      SPBN  pok; 
      L     W#16#8001; //if protectswitch off
      UN    #xRepairSwitch; 
      SPBN  ron; 
      L     W#16#8003; //if protectswitch and repairswitch off
ron:  T     #wRetVal; //write error information
      R     #xAllFine; 
      R     #xContactorOut; //make sure contactor is off
      SPA   err; //and leave the function

pok:  UN    #xRepairSwitch; 
      SPBN  rok; 
      L     W#16#8002; //if repairswitch off
      T     #wRetVal; //write error information
      R     #xAllFine; 
      R     #xContactorOut; //make sure contactor is off
      SPA   err; //and leave the function
NETWORK
TITLE =

// 
//trigger the drive
// 

rok:  U     #xStart; //if start on
      U     #xAllFine; //and intern enable also
      =     #xContactorOut; //do the drive
NETWORK
TITLE =

// 
//start the timer for drive connections
// 

      U     #xTimeEnable; 
      U     #xAllFine; //the intern enable
      U     #xPlcPulse; //do with the PlcPulse
      FP    #xHelpFlagPlcPulse; 
      SPBN  equ; 
      L     #iTimer; //a timer
      +     1; 
      T     #iTimer; 
NETWORK
TITLE =
//
//stop if neccessary - contactor
//
equ:  U(    ; 
      L     #iTimer; //if the time
      L     #iContactorTime; //bigger than the settime
      >=I   ; //for the contactor
      )     ; 
      UN    #xContactor; //and the contactor off
      SPBN  cook; 
      L     W#16#8004; //write wRetVal
      T     #wRetVal; 
      R     #xAllFine; //and reset the intern enable
      SPA   err; 
NETWORK
TITLE =
//
//write status, if contactor OK
//
cook: U     #xContactor; 
      U     #xStart; 
      SPBN  noco; //contactor on
      L     W#16#3; //means 3
      T     #wRetVal; 
NETWORK
TITLE =
//
//stop if neccessary - motion control
//      
noco: U(    ; 
      L     #iTimer; //if the time
      L     #iMotionControlTime; //bigger than the settime
      >=I   ; //for the motion control
      )     ; 
      UN    #xMotionControl; //and the motion control
      SPBN  mook; 
      L     W#16#8005; //write wRetVal
      T     #wRetVal; 
      R     #xAllFine; //and reset the intern enable
      SPA   err; 
NETWORK
TITLE =
//
//write status if motion control OK
//
mook: U     #xMotionControl; 
      U     #xStart; 
      SPBN  tim; //motion control on
      L     W#16#7; //means 7
      T     #wRetVal; 
NETWORK
TITLE =
//
//stop the timer
//
tim:  L     #iMotionControlTime; //the big time
      L     100; //+100
      +I    ; 
      L     #iTimer; 
      <=I   ; 
      SPBN  end; 
      SET   ; 
      R     #xTimeEnable; //switch off the timer
NETWORK
TITLE =
// 
//EN0-handling
// 

end:  L     #wRetVal; //if the wRetVal
      L     W#16#8000; //bigger than 8000
      >D    ; //then is an error
      SPB   err; //and the EN0 are false
      SET   ; //else the EN0 are true
      SAVE  ; 
err:  NOP   0; 
END_FUNCTION_BLOCK
 
@fd

Code:
U     #xEnable; //enable true

Na ja, Kommentare in allen Ehren, aber man kanns auch locker mal übertreiben. :ROFLMAO:
 
Zurück
Oben