PDA

View Full Version : Frage zum Realisieren einer Steuerung



RedEagle
21.04.2007, 10:46
Hi
Ich muss für die Schule bis Montag eine Steuerung für die S7 realisieren (in GRAPH7 und/oder FUP (wenn AWL besser ist, werde ich das natürlichg auch nehmen, habe aber nur sehr wenig erfahrung in AWL))

Allerdings komme ich mit dieser "Klötzchenbauweise" nicht wirklich gut klar, sodass meine Ideen sich in GRAPH7 / FUP nur sehr schwer realisieren lassen.

Erstmal zur Aufgabenstellung:
Gegeben ist eine Solarzelle. Diese ist auf einem Metalstab befestigt und lässt sich mit einem Motor nach links und rechts drehen.
An dieser Solarzelle sind 2 Sensoren angebracht (links und rechts). Diese Sensoren messen die Sonneneinstrahlung. Je nachdem auf welcher seite diese Sonneneinstrahlung größer ist, soll die Solarzelle dorthinbewegt werden (also im prinzip immer der Sonne nach)
Fällt der Wert beider Sensoren unter eine bestimmte grenze, soll die Solarzelle in ein grundstellung gebracht werden.
Es sind NUR die Beiden Sensoren an der Seite der Solarzelle vorhanden.
Die Solarzelle darf sich NICHT um 360° drehen (aufgrund der Verkabelung).
Links/Rechtslauf wird über 2 Digitale ausgeänge realisiert/ Die sensoren sind an 2 Analogen eingängen angeschlossen.

Was noch zu beachten ist: (leider nimmt der Lehrer es SEHR genau)
Die Trägheit der Solarzelle (also Beschleunigung/Auslaufverhalten)
Messungenauigkeiten der Sensoren
Trägheit der Sensoren (Bis der neue Wert stimmt (nach einer Bewegung))

Frage:
Wie realisiere ich das??
Das anpassen der Analogwerte ist kein Problem. aber wie lasse ich die Solarzelle der Sonne folgen??
Und vorallem, wie bekomme ich sie nachher wider in Grundstellung??

Lösungsansatz:
Ich habe es bis jetzt so gemacht, dass ich erstmal die Differenz der beiden Analogwerte ausrechne, und wenn diese größer einem Bestimmten wert ist, gehe ich in den Zweig zum Drehen des Motors. Dort prüfe ich, welcher wert größer ist, also ob nach links oder rechts gedreht werden muss.
Aber wie drehe ich jetzt??

volker
21.04.2007, 12:01
wenn die sensoren sehr träge sind kannst du das über zeiten machen.
die zeit die der motor dreht könntest du von der differenz der beiden ae abhängig machen. dann eine zeit warten und gucken ob es passt.
oder du fährst grundsätzlich immer eine kurze fest eingestellte zeit, wartest, vergleichst wieder und fährst gegebenenfalls erneut.

grundstellung ohne endlagenendschaltern anfahren ist nur murks.
wer sowas baut bzw bauen lässt hat keine ahnung. das kannst du deinem lehrer von mir ausrichten.
in deinem fall kannst du auch hier nur über zeiten fahren. auf dauer wird die abweichung zur grundstellung aber zwangsläufig immer grösser.
wenn du immer aus der selben endposition in gs fährst nimm eine feste zeit.
wenn nicht addieren die zeiten die du vorgefahren bist und fahre diese zeit dann zurück.

RedEagle
21.04.2007, 20:43
Vielen Dank für die Antwort.
Eine Frage habe ich aber noch:
Wie Kann ich DWORDs oder WORDs Addieren/Subtraieren?? (im FUP)
oder geht das nur mit INTs?? Für die Zeiten würde ich nehmlich gerne einen unsigned-Datentyp verwenden...

ps.: CPU: 314C-2DP

volker
21.04.2007, 21:22
das bitmuster für int/word bzw dint/dword ist logischerweise das gleiche.
word wird im hex-format angezeigt.

am besten arbeitest du mit int/dint oder real. das kann unser hirn am besten verarbeiten. ;) es sei denn du hast ein microimplantat dass das bewältigt :mrgreen:

Ralle
21.04.2007, 23:18
Im KOP/FUP/AWL-Editor auf "Extras/Einstellungen", Reiter "KOP/FUP", Häkchen weg bei "Typüberprüfung von Operanden".

RedEagle
22.04.2007, 07:58
Vielen Dank für eure Hilfe.


[..] am besten arbeitest du mit int/dint oder real. das kann unser hirn am besten verarbeiten [..]

naja... In DWORD und WORD sind die Zahlen nicht umständlich codiert...
Wenn ich das Bitmuster einer WORD-variable sehe, fällt es mir leichter, vorzustellen, welche Dezimalzahl dahinter steckt als bei REAL-Variablen ;)