- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 8 von 8

Thema: zwei Unterprogramme sollen zur gleichen Zeit laufen

  1. #1
    Gast
    Gast

    zwei Unterprogramme sollen zur gleichen Zeit laufen

    Anzeige

    Praxistest und DIY Projekte
    Hi,
    ich schaffe es nicht zwei Unterprogramme auf der CC1 gleichzeitig laufen zulassen.

    z.B die eine LED soll blinken und die andere soll 2 min an sein und danach
    4 min an sein ( später: Motor läuft 2min mit 2 Volt dann 4min mit 4 Volt über PWM)

    Das kann doch nicht so schwer sein!
    Angehängte Dateien Angehängte Dateien

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    10.02.2004
    Beiträge
    29
    Das geht ja auch nicht! Die CC1 ist nicht Multithreadfähig. Auch kein preemptives MT ist vorhanden! So musst Du selber ein preemptives Multithreading erstellen.

    Dazu z.B. einen Zähler laufen lassen, der bei jedem 2. Takt die eine LED an und ausmacht (toggled) und der Zähler soll bei jedem 6. Takt überprüfen, ob er die andere LED an oder ausmachen soll.
    Stell Dir das so vor wie eine Zeitleiste, bei der Du einträgst, wann welcher "Thread" bearbeitet werden soll.

  3. #3
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    71
    Beiträge
    13.051
    Die beiden Unterprogramme gehen nicht gleichzeitig, aber ein Scheduler der alle Events der Reihe nach abarbeitet sollte doch kein Problem sein.

    Wenn es denn zwei getrennte Unterprogramme sein sollen, dann müssen sie halt in der kleinsten Zeiteinheit aufgerufen werden und selbst die notwendigen Ausgaben nach dem zentralen Timer durchführen und die Kontrolle sofort wieder zurückgeben.
    Manfred

  4. #4
    Gast
    Ich dank Euch erstmal und werde alles nocheinmal überdenken.

    Groß Ralf

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    z.B die eine LED soll blinken und die andere soll 2 min an sein und danach
    4 min an sein ( später: Motor läuft 2min mit 2 Volt dann 4min mit 4 Volt über PWM)
    Ich kenn mich zwar mit der C-Control nicht aus, aber ich vermute mal der Befehl "Pause"in deinem Quellcode, wird einfach nur bewirken, dass der Controler für die angegebene Zeit gar nichts macht, bzw. Nullrunden dreht.

    Dass während einer Pause von 2 Minuten das 2. Unterprogramm auch nicht ausgeführt wird ist völlig klar.

    Die C-Control kenn ich wie gesagt nicht, aber auf dem PC würde man den Rechner auch nicht 2 Minuten in einer Leerschleife rumrödeln lassen, sondern die Startzeit in einer Variablen speichern und dann in einer Schleife regelmässig abfragen, ob aktuelle Zeit minus der Startzeit = 2 Minuten ist.

    Irgendsowas ähnliches wird bei der C-Control über einen Timer sicherlich auch möglich sein.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    25.03.2004
    Beiträge
    6
    bin bislang lediglich lesender Teilnehmer dieses spannenden Forums, nun will ich mich auch mal einbringen.

    @Gast

    dein "Problem" läßt sich sich, wenn es wirklich nur um eine zeitabhängige Bedingung geht, wunderbar mit dem mod - Befehl lösen.

    Beispiel:

    Die Minute wird durch 15 geteilt. Bei der Division bleibt kein Rest (MOD 15 = 0) z.B. bei Uhrzeit 30 Minuten geteilt durch 15.

    der code dazu sieht so aus:

    if minute MOD 15 = 0 then goto irgendwohin

    hier wird somit alle 15 minuten die Unterroutine irgendwohin angesprungen.

    Das ganze kann man natürlich mit allen in CCBasic zur Verfügung stehenden Zeiteinheiten machen.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    40
    Beiträge
    614
    Der Haken der Lösung mit MOD ist, dass auch genau in der Minute/Sekunde, die man gerne hätte, die Abfrage stattfinden müsste(wird diese erst in der nächsten Sekunde passiert, holt der Controller die Anweisung nicht nach.).
    Geringfügig aufwändiger aber auch sicherer ist es, immer wenn ein paralllelprogramm aufgerufen wird, die Zeit zu speichern und regelmäíg zu überprüfen, wie lange das schon her ist. So in de Art:
    if zeit > letztesmal + Intervall then...

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    25.03.2004
    Beiträge
    6
    das ist natürlich absolut richtig, der MOD Befehl ist in diesem Fall lediglich der kürzeste Weg um das Szenario mit unterschiedlich blinkenden LED´s in den Griff zu kriegen.

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad