Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Vergleich/Gleichsetzung von Variablen Kategorie: Programmierung Basic (von Achim - 29.12.2005 11:01)
 Als Antwort auf Re: Vergleich/Gleichsetzung von Variablen von Butcher - 28.12.2005 15:26
Achim nutzt:  CC1-Station V1.1
> 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

Bisherige Antworten:

Re: Vergleich/Gleichsetzung von Variablen (von Butcher - 29.12.2005 17:49)
    Re: Vergleich/Gleichsetzung von Variablen (von Butcher - 29.12.2005 18:12)
        Re: Vergleich/Gleichsetzung von Variablen (von Achim - 29.12.2005 18:58)
            Re: Vergleich/Gleichsetzung von Variablen (von Butcher - 30.12.2005 10:34)