
|
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 > > jua bestens Dank, das klingt logisch, werd es ausprobieren > mfg Butcher jo das Programm ist jetzt übersichtlicher aber das "Relais Klappern" bleibt leider noch trotzdem besten Dank für deine Anregungen und Mühe |
| Antwort schreiben |