# [Step7] Simulation eines DC-Motors



## Mr Floppy (18 April 2009)

Hey Leute ein schickes Forum habt Ihr hier, ich finde es klasse das hier erfahrene SPSler den SPS Neulingen helfen. Echt super!  

Ich hab hier leider ein kleines programmiertechnisches Problem zu lösen: 
Ein Gleichstrommotor für eine einschleifige Lageregelung hab ich zu *simulieren*.

Die Regelung will ich über den PID Baustein SFB 41 realisieren.
*Anstatt des hardware Motors muss ein Algorithmus her, der mir den Motor simuliert.*

Der Sollwert des Reglers kommt über ein WINCC Programm, der Stellwert (+/- 10V) wird an die AO Baugruppe gegeben, der Istwert (+/- 10V) kommt von der AI Baugruppe.

Ich will eine Siemens S7-300 mit der CPU 315 2 DP für dieses Projekt verwenden.

Meine Gedanken gehen in die folgende Richtung:
Den Motor hab ich als IT1 Strecke bzw. I Strecke identifiziert (logisch, läuft konstant hoch)
Um die Strecke jetzt mit Step7 zu simulieren muss ja eigentlich nur eine Variable mit unterschiedlicher Geschwindigkeit hoch- bzw. bei "Umpolung" runterzählen.
Je nach Stellwert (Spannung) muss nach meiner Idee ein Takt variiert werden der den Zähler schaltet.

Habt Ihr vielleicht eine bessere, einfachere oder andere Idee wie ich das hinbekommen könnte?
Und wenn nicht wie kann ich das in Step7 realisieren, also einen Takt über eine Eingangsspannung zu variieren?

Über einen Denkanstoß in eine andere Richtung oder gar eine komplette Lösung würde ich mich verdammt freuen 
Falls Ihr noch Daten braucht, schreibt ein paar Zeilen 


Ich sag schon mal Danke und lass auch einen freundlichen Gruß da

mfg

Floppy


----------



## IBFS (18 April 2009)

...den Takt würde ich konstant halten 
aber dafür den 2 ten Summand variieren


So nach der Art:

Altwert:= Altwert + variabler Summand

wobei

variabler Summand := von -100% bis 100% (je max. Drehzahlwinkel pro ZeitTakt)

Ich hoffe ich habe mich halbweg verständlich ausgedrückt.


Gruß

Frank


----------



## Mr Floppy (19 April 2009)

Ja moin, 
erstmal danke für die fixe Antwort.

Ich hab mir heute während des Frühstücks mir dein Vorschlag durch den Kopf gehen lassen und ich muss sagen, der gefällt mir besser wie meiner.
Vor allem ist er auch leichter umzusetzen 

Wäre ich jetzt wahrscheinlich so nicht drauf gekommen... haste Du mal so ein ähnliches Problem gehabt?

Man müsste nur den variablen Summanden mit einem Faktor multiplizieren, um die Steigung des I-Verhaltens mehr oder weniger exakt nachbilden bzw. einstellen zu können, oder?

Schon mal danke für die Idee 

Gruß

Floppy


----------



## IBFS (19 April 2009)

Mr Floppy schrieb:


> Man müsste nur den variablen Summanden mit einem Faktor multiplizieren, um die Steigung des I-Verhaltens mehr oder weniger exakt nachbilden bzw. einstellen zu können, oder?


 
..deshalb habe ich ja auch geschrieben:

-100% bis 100% (je max. Drehzahlwinkel pro ZeitTakt)

d.h. da stehen dann nicht max. +100 oder min. -100 sondern z.B.


OB35 (100ms) 

3000U/min / 60 Sekunden / 10 = max 5 Umdrehungen pro Zeittakt(100ms)

ersetze: +100% => + 5 U und - 100% > - 5 U


Entweder du rechnest mit REAL oder du muß alles mit 100 oder 1000 Mulipizieren sonst wird logischerweise zu "grob-rasterisch".



Gruß


----------



## Mr Floppy (25 April 2009)

Auch wenn es jetzt blöde klingt:

Aber wie lauten die Befehle um eine analoge Spannung +- 10V prozentual anzugeben

also + 10 Volt => +100% und -10 Volt => -100%

Ich bekomme es gerade gar nicht auf die Reihe!
ungefähr so??



> L PEW 288
> ITD // Wert in 32 Bit Ganzzahl
> DTR // Wert in Gleitpunktzahl
> L 2.7648e+4
> ...


----------



## Ralle (25 April 2009)

Wozu soll *900+100 gut sein?
nach der Division einfach noch mit 100 Multiplizieren.

Oder gleich:
L 2.7648e+2
/R


----------



## Mr Floppy (26 April 2009)

Ahhhhhh
jetzt klappt es so wie ich will 

Eine REAL Zahl sind zwei Byte und nicht nur eins 
Vielleicht sollte man dann nicht die Doppelwörtern MD11 und MD12 verwenden um mit den Werten zu arbeiten.

Jetzt passt alles und es läuft wie es soll!

Danke Jungs!


----------



## IBFS (26 April 2009)

Mr Floppy schrieb:


> Eine REAL Zahl sind zwei Byte und nicht nur eins


 
Eine REAL Zahl sind ZWEI WORTE oder VIER BYTE, soviel Zeit muß sein 

Gruß


----------

