INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> so Dank deiner Hilfe hab ich jetzt den Toleranzbereich erhöht, (mein Poti soll entweder K1 oder K2 schalten) nur jetzt "spackt" meine Station genau in diesem Toleranzbereich ab (wechselndes Anschalten von K1 und K2, also genau das was es nicht soll, beide solln ja aus gehen) > Irgendwie muss da meine Ablaufstruktur falsch sein, haste da ne Idee ob ich das besser mit Unterprogrammen oder was anderen machen kann? Du hast sehr viele überflüssige ifs drin, die die Sache unübersichtlich machen. Nehmen wir mal ein Beispiel: > sollz = winkelangabe*85 > sollx = sollz + 400 > > if sollz > PotiWert*100 THEN K2 = off > if sollx > PotiWert*100 THEN K2 = off Wenn sollz mal größer als PotiWert*100 ist, dann ist sollx aber immer auch größer als PotiWert*100, weil sollx ja noch größer als sollz ist. Wenn das sollz-if also erfüllt ist und der THEN-Teil ausgeführt wird, wird immer auch das sollx-Then ausgeführt. (umgekehrt gilt das natürlich nicht: Bloss weil sollx größer als PotiWert*100 ist, muss sollz noch lange nicht größer sein). Da in beiden THEN-Teilen das gleiche geschieht, ist das sollz-if überflüssig. Daraus folgt, dass Du das "if sollz" ersatzlos streichen kannst, ohne dass sich Dein Programm irgendwie anders verhält. Wenn man jetzt mal alle derartig überflüssige ifs streicht (und ich mich nicht vertue) kommt folgendes dabei heraus: solla = winkelangabe*85 'Berechnung der Toleranz sollb = solla -200 sollc = solla -400 sollz = winkelangabe*85 solly = sollz + 200 sollx = sollz + 400 if sollx > PotiWert*100 THEN K2 = off if sollx > PotiWert*100 then K1 = on if sollc < PotiWert*100 then K1 = off if sollc < PotiWert*100 then K2 = on So. Jetzt hast Du aber noch Statements drin wie: if sollc = PotiWert*100 then K2 = off 'Annäherung von unten if sollb = PotiWert*100 then K2 = off if solla = PotiWert*100 then K2 = off if sollc = PotiWert*100 then K1 = off 'Annäherung von unten if sollb = PotiWert*100 then K1 = off if solla = PotiWert*100 then K1 = off Du hast leider nicht im Code drin, wie Du Deinen Poti-Wert ermittelst, der im EEPROM steht, aber ich vermute, Du liest einen Analog-Port ein? Wer garantiert Dir denn, dass der Wert je exakt gleich sollc oder sollb oder solla ist? Je nachdem, wie schnell Du am Poti drehst, wird ja nicht jeder Wert erfasst. Wenn die Relais im Grenzbereich aus sein sollen, würde ich das so formulieren: if sollc >= PotiWert*100 AND sollx <= PotiWert*100 then K2 = off if sollc >= PotiWert*100 AND sollx <= PotiWert*100 then K1 = off Damit ergäbe sich dann folgendes Programm print " Bitte geben Sie ihren gewünschten Winkel an " input Winkelangabe solla = winkelangabe*85 'Berechnung der Toleranz sollc = solla -400 sollz = winkelangabe*85 sollx = sollz + 400 #loop ' Schleife PotiWert = portx 'Wert des Analog-Ports in die Variable Potiwert if sollx > PotiWert*100 THEN K2 = off if sollx > PotiWert*100 then K1 = on if sollc < PotiWert*100 then K1 = off if sollc < PotiWert*100 then K2 = on if sollc >= PotiWert*100 AND sollx <= PotiWert*100 then K2 = off if sollc >= PotiWert*100 AND sollx <= PotiWert*100 then K1 = off if winkelangabe*85 = PotiWert*100 then end goto loop Irgendwie übersichtlicher, finde ich. Mit Unterprogrammen lassen sich noch die jeweils doppelten ifs vermeiden. HTH Bye Achim |
Antwort schreiben |