PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unverständlichkeit bei IF AND ODER programmierung



Tangier
27.04.2008, 23:45
Hi,

bin ganz neu auf dem Gebiet
und muss aber eine kleine Logik machen,
nächste erweiterung wäre dann die Verknüpfung von Frequenz.
Sie sollte gemessen werden und < >= mit einer Zahl verglichen werden.
Hoffe das krieg ich noch hin...

Noch aber sollte ein fach Auswertung der Schaltzustände gemacht werden:

Ports:
1 oder
2 oder
7 oder
5
oder
Ports:
3 und 8
oder
Ports:
3 und 8 und 4

Wenn diese Kombination gegeben ist, soll die LED leuchten.
Ansonnsten soll sie aus sein.

Einfache IF Verknüpfung funzt, aber in dieser Kombination
funktionier das garnicht wie gewollt. LED bleibt leuchten wenn ODER Fall eintritt und geht aus wenn die Taster aus der UND Kombination gedrückt werden.

Kann mir da wer helfen? Danke.

PicNick
28.04.2008, 06:57
(3 und 8 und 4) kannst du schmeissen, wenn er bei (3 und 8) eh schon leuchtet

Tangier
28.04.2008, 07:12
(3 und 8 und 4) kannst du schmeissen, wenn er bei (3 und 8) eh schon leuchtet

jup, das ist dann optimierung :)

aber die led geht nicht aus, wenn die oder taster losgelassen werden.
es funktioniert wenn nur eine oder verknüpfung da ist. aber wenn man die "und" verknüpfungen hinzufügt, ist die funktion durcheinander.
komme noch nicht dahinter....

PicNick
28.04.2008, 08:18
..komme noch nicht dahinter....
Überleg mal, unter welchen Umständen du zurZeile LED1 = OFF hinkommst

Ich würde da mal ein ELSE einfügen





IF (reverse = ON) OR (low = ON) OR (tcase6x6 = ON) OR (axle123 = ON) THEN

LED1 = ON
PAUSE 10

ELSE

IF (high = ON) AND (nu10km = ON) THEN
LED1 = ON
PAUSE 10
ELSE
IF (high = ON) AND (nu10km = ON) AND (tcase6x4) THEN
LED1 = ON
PAUSE 10
ELSE
LED1 = OFF
END IF
END IF
END IF

Tangier
28.04.2008, 15:41
also nach dem altem code leuchtet led dauernd, wenn man:
Taster an den Ports:
1 oder
2 oder
7 oder
5
betätigt.

Und geht erst aus, wenn Taster an den Ports:
3, 4 oder 8 betätigt wird.

MfG

@PicNick, danke, werd ich mal ausprobieren.

PS: soll eine Steuerung werden, die die Leistung vom Motor drosselt, in abhängigkeit von Geschwindigkeit und Verteilgetriebestellung.

Tangier
04.05.2008, 12:24
grmr, led geht net von selbst aus, wenn taster losgelassen werden...

PicNick
04.05.2008, 13:23
Geh', dann zeig' doch mal deine komplette (aktuelle) IF-erei her.
Von so einem Silizium-Dödi darf man sich nicht quälen lassen.

Tangier
04.05.2008, 19:49
so schauts grad aus.
aber nix von tastfunktion, wie davor schon beschrieben.
oder taster machen es an, und taster machen es aus...

Tangier
04.05.2008, 20:20
Habe so gemacht:
und es scheint zu funktionieren.
ist nur etwas mehr zu schreiben...

Tangier
14.05.2008, 12:46
eigentlich ist so nicht richtig, da die led dann theoretisch flackert, was man auch merkt, wenn man pausenzeiten einfügt.
problem gelöst, alles verschachtelt
mfg

Tangier
16.07.2008, 21:11
Hallo mal wieder.

Hab mal wieder Problem:

Habe das Programm nun laufen, aber das komische:
Normal werden Schalteingänge als ON erkannt, wenn sie nach Masse gezogen werden.
Habe über 4011 die Signale extra dafür invertiert. Nun waren die Ausgänge aber nun invertiert. Ich musste also Low als OFF programmieren, damit der ausgang ON ist.
Das entzieht sich meinem Verständnis..

ZB: Define Schalter1 Port[1], (nun wird er nach masse als aktiv gezogen=
If .... = OFF dann Ausgang = ON
nur so geht das, ansonnsten funzt es alles verkehrtrum....

WARUM?

jeffrey
17.07.2008, 11:13
Hallo mal wieder.

Hab mal wieder Problem:

Habe das Programm nun laufen, aber das komische:
Normal werden Schalteingänge als ON erkannt, wenn sie nach Masse gezogen werden.
Habe über 4011 die Signale extra dafür invertiert. Nun waren die Ausgänge aber nun invertiert. Ich musste also Low als OFF programmieren, damit der ausgang ON ist.
Das entzieht sich meinem Verständnis..

ZB: Define Schalter1 Port[1], (nun wird er nach masse als aktiv gezogen=
If .... = OFF dann Ausgang = ON
nur so geht das, ansonnsten funzt es alles verkehrtrum....

WARUM?
hoi,
ob die led leuchtet bei 0 oder 1 hängt von der verschaltung der hardware ab. musst sie halt andersrum anschließen, wenn es dich so stört.
mfg jeffrey

Tangier
17.07.2008, 19:33
nein, es heisst ja dass die ausgänge dann high activ sind,
also wenn eingang auf 0 gezogen wird ist es als "on" gemeint und damit kann ich gleichzeitig einen ausgang als "on" programmieren.
Also im buch steht das genau umgekehrt, die leds waren mir da eine hilfe, da ich nicht verstand, warum die schaltung umgekehrt funktioniert hatte.
habe extra einen 4011 vor die eingänge angeschlossen, da es nach programm die eingänge low-activ sind.
######
mfg


DEFINE reverse AS PORT[8] 'Rückwärtsgang
DEFINE high AS PORT[2] 'Verteilgetriebe Modus HIGH
DEFINE low AS PORT[3] 'Verteilgetriebe Modus LOW
DEFINE tcase6x6 AS PORT[4] 'Verteilgetriebe Modus 6x6
DEFINE axle_lock AS PORT[5] 'Achsensperre aktiv
DEFINE Torque_red AS PORT[9] 'Ausgang für Drehmom.-Reduzierung
DEFINE LED_Torque AS PORT[10] 'Ausgang für LED Kontrolle Torquered.
DEFINE LED_Speed AS PORT[11] 'Geschwindigkeitskontrolle
DEFINE LED_High AS PORT[12] 'LED bei Modus High aktiv
DEFINE LED_Low AS PORT[13] 'LED bei Modus LOW aktiv
DEFINE LED_6x6 AS PORT[14] 'LED bei Modus 6x6 aktiv
DEFINE LED_Axle AS PORT[15] 'LED bei Modus Achsensperre
DEFINE LED_Power AS PORT[16] 'LED Blinkt bei Versorgung
DEFINE Speed AS WORD
DEFINE LastLEDToggle AS WORD 'Zeitpunkt, an dem die LED zuletzt umgeschaltet wurde
CONFIG.INIT
CONFIG.PUT 00001000b
CONFIG.OFF
LED_Torque = OFF
LED_Speed = OFF
LED_High = OFF
LED_Low = OFF
LED_6x6 = OFF
LED_Axle = OFF
LED_Power = OFF
Torque_red = OFF
Speed = 0 'Frequenzmessung 42Hz ca. 15km/h
LastLEDToggle = Timer
DO
Speed = FREQ
IF (Timer - LastLEDToggle) > 50 THEN
LastLEDToggle = Timer
TOG LED_Power
END IF
IF (reverse = OFF) OR (low = OFF) OR (tcase6x6 = OFF) OR (axle_lock = OFF) THEN
Torque_red = ON
LED_Torque = ON
ELSE
IF (high = OFF) AND (Speed <= 42) THEN
Torque_red = ON
LED_Torque = ON
ELSE
Torque_red = OFF
LED_Torque = OFF
END IF
END IF