Guten Morgen zusammen bin mir gerade ein kleines App am basteln, und bin auf folgende Probleme gestoßen. 1. wenn ich if /elseif /elseif benutze dann geht der immer in den ersten elseif Schritt der möglich ist und fängt danach wieder bei if an anstatt alle elseif Befehle weiter abzuarbeiten die noch weiter unten stehen und auch alle Bedingungen erfüllt haben, ist das normal? O.o 2. wie bekomme ich es hin das ich das Programm verzweigen kann, sprich ich lasse gleichzeitig nen Timer von 5 sek ablaufen und solange blinkt ne Led mit 1 Hz? Ich hab es jetzt so hinbekommen, mit nem Counter aber finde das nicht so schön, deshalb wüsste ich gerne wie ich zwei parallele Stränge im Programm einbauen kann die gleichzeitig abgearbeitet werden. Mit freundlichen Grüßen der Bascom Noob :D
Zeig doch mal deinen Code... :-/ Florian P. schrieb: > geht der immer in den ersten elseif Schritt der möglich ist Das ist das gewünschte Verhalten einer if-elsif-Kette. Du wirst vermutlich eine andere Vorgehensweise wählen müssen. > deshalb wüsste ich gerne wie ich zwei parallele Stränge im Programm > einbauen kann die gleichzeitig abgearbeitet werden. Richtig parallel geht das nicht. Du hast nur 1 Prozessor, dun der kann nur jeweils 1 Befehl abarbeiten. Du wirst also (wie Windows und jedes andere Multitasking-OS) deine Rechenzeit auf die verschiedenen Aufgaben aufteilen müssen. Am einfachsten geht das, indem du in einer Dauerschleife anfangs die Eingänge einliest, dann schnellstmöglich die Ausgänge berechnest, und die Werte zum Schluss rausschreibst. So wie auch eine "übliche" SPS arbeitet.
Ja schön das ist mir auch schon so ziemlich klar gewesen aber mit welchen Befehlen erzeug ich eben den Effekt, das es scheint als ob er es parallel abarbeitet? wie würde ein Programm aussehen bei dem 2 Led in unterschiedlichen Frequenzen blinken? und mit welchen Anweisungen umgehe ich den Effekt von elseif das er auch noch die nachfolgenden Schritte abarbeitet?
select, case, ist auch ne schöne Struktur. Naja, 4Hz und 1Hz "parallel" da langweilt sich der µC aber mächtig dazwischen. Du kannst zwei Timer verwenden und unterschiedlich preloaden, dann nen Zähler hoch counten und schon läuft die Geschichte. Kannst aber auch alles aus einem Timer heraus generieren.
@weinbauer könntest du zu beidem vielelicht mal ein paar Zeilen Beispiel Programm schreiben? ^^ das wäre super, danke
Florian P. schrieb: > und mit welchen Anweisungen umgehe ich den Effekt von elseif das er auch > noch die nachfolgenden Schritte abarbeitet? das else im elseif einfach weglassen...
in der Hilfe steht es so: [...] If A = 10 Then Print "New in BASCOM" If A = 10 Then Goto Label1 Else print "A<>10" [...] also kein elseif, weil das wird immer ausgeführt wenn die If bedinung nicht passt, sondern nur mit if .. then .. den Bedinung-erfüllt-Fall abfragen und das für jede Bedinung. Oder Select .. Case .. ist auch ganz gut für sowas.
Elseif und Select Case sind zur Auswahl 1 aus x geeignet. Sobald ein Fall zutrifft, werden die restlichen nicht mehr geprüft. Wenn Du alle Fälle prüfen willst und mehrere Fälle zur gleichen Zeit zutreffend sein können, dann musst Du eben für jeden Fall eine eigene If-Then-Endif-Abfrage schreiben. MfG
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.