- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: Einfache Zeitsteuerung / M-Unit

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    29.01.2006
    Beiträge
    101
    Anzeige

    Powerstation Test
    Hallo!


    Ich habe mir dein Listing mal angesehen und eine Auffälligkeit entdeckt:

    #Programm1
    Pumpe2 = off
    Pumpe1 = on
    for Minuten = 1 to Anzeit
    next Minuten
    Pause 45000 ' 15 min Auszeit
    return

    Hier läuft eine Schleife (for Minuten...) genau 30 mal (Anzeit = 30),
    aber sie führt nichts aus (Die schleife benötigt sicher weniger als eine Sekunde um vollständig durchzulaufen) dann kommt erst eine richtige Verzögerung von 15Minuten

    Um das zu erreichen was zu vorhast, würde ich die Schleife gegen folgendes ersetzen:

    -------------------------------------
    #Programm1
    Pumpe2 = off
    Pumpe1 = on

    Pause 90000 ' 30 min An Zeit

    Pumpe1 = off

    Pause 45000 ' 15 min Auszeit

    goto Programm1
    -------------------------------------

    Also im gesamten Listing:



    Code:
    ' ---------- Definitionen ---------- 
    ' 
    'Ausgänge 
    define Pumpe1 port[1] 'ohne Pullup-Widerstand 
    define Pumpe2 port[2] 'ohne Pullup-Widerstand 
    ' 
    'Eingänge 
    define Taster1 port[3] 'mit Pullup-Widerstand 
    define Taster2 port[4] 'mit Pullup-Widerstand 
    define Taster3 port[5] 'mit Pullup-Widerstand 
    define Taster4 port[6] 'mit Pullup-Widerstand 
    ' 
    ' 
    define Minuten Word 
    define Anzeit 30 ' 30 min 
    ' 
    ' ---------- Programmoperationen ---------- 
    Pumpe1 = off 
    Pumpe2 = off 
    Taster1 = on 
    Taster2 = on 
    Taster3 = on 
    Taster4 = on  
    
    'Manfs Code:
    #Loop
    - 
    if Taster1 = off then goto Programm1 'Achtung: jetzt goto Befehle!
    if Taster2 = off then goto Programm2 
    if Taster3 = off then goto Programm3 
    if Taster4 = off then goto Programm4 
    - 
    goto Loop
    
    'Code von oben
    #Programm1 
    Pumpe2 = off 
    Pumpe1 = on 
    Pause 90000 ' 30 min An Zeit
    Pumpe1 = off
    Pause 45000 ' 15 min Auszeit 
    goto Programm1

    Die anderen Programmblöcke würde dann ähnlich dem ersten sein.

    Wie Manf allerdings schon geschrieben hat, gibt es keine Möglichkeit, das Program nach einem Start zu ändern, ohne nicht vorher die Unit zu resetten.

    Um einen Programmwechsel zu ermöglichen, muss der Code erweitert werden, und da musst du dann auch von langen Pause-Befehlen absehen

    Man kann führ Zeit-Aufgaben die Uhr verwenden, die im Hintergrund der Unit läuft

    Wenn du möchtest, kann ich dir noch ein paar Ideen über diese Methode geben

    Gruß
    Jörn Arne

  2. #12
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    72
    Beiträge
    13.136
    Eine Kleinigkeit ist noch das Goto am Ende von Programm1, das soll sicher zu Loop gehen.
    Nach Beendigung der jeweiligen Programmschleife soll es in die Hauptschleife zurückkehren.
    Manfred

  3. #13
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.09.2004
    Beiträge
    264
    "Taster1 = on
    Taster2 = on
    Taster3 = on
    Taster4 = on
    "

    Du weist hier einem Eingang einen Wert zu ! Weg damit.

    Über die Pullups sind die Eingänge doch high und werden bei Betätigung des Tasters auf Masse gezogen.
    Über eine Widerstandskette kann man alle Taster an einem AD Port betreiben, falls Deine Ports knapp werden.

    mfg

    Stefan

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    07.02.2006
    Ort
    Saarbruecken
    Alter
    63
    Beiträge
    22
    DANKE @ all,
    ich habe jetzt sämtliche Verbesserungsvorschläge und Ideen in meinen neuen Code gebracht. Das Programm läuft jetzt. Wichtig war wirklich, das ich auch die ON-Zustände der Taster ausgeklmammert habe, es war sonst kein Starten der einzelnen Programme möglich. Aber es wurde auch schon bemerkt, das man nicht so einfach einen Programmwechsel vornehmen kann, es muss tatsächlich jeweils vorher resettet werden. Ich könnte zwar mit diesem kleinen Schönheitsfehler leben, würde mich aber freuen, wenn wir diese Funktion hier auch noch lösen könnten.

    Grüße Michael

    Hier noch der aktuelle Code:

    '************************************************* *******************************
    '
    ' C-Control Basic pumpe.bas
    ' Aufgabe:
    '
    ' Taste 1 steuert Pumpe 1 für 30 min - dann 15 min Pause
    '
    ' Taste 2 steuert Pumpe 2 für 30 min - dann 15 min Pause
    '
    ' Taste 3 steuert Pumpe 1 dann Pumpe 2 mit den gleichen Zeiten
    '
    ' Taste 4 steuert Pumpe 1 und 2 gleichzeitig mit den gleichen Zeiten wie oben
    '
    '************************************************* *******************************
    ' ---------- Definitionen ----------
    '
    'Ausgänge
    define Pumpe1 port[1] 'ohne Pullup-Widerstand
    define Pumpe2 port[2] 'ohne Pullup-Widerstand
    '
    'Eingänge
    define Taster1 port[3] 'mit Pullup-Widerstand
    define Taster2 port[4] 'mit Pullup-Widerstand
    define Taster3 port[5] 'mit Pullup-Widerstand
    define Taster4 port[6] 'mit Pullup-Widerstand
    '
    ' ---------- Programmoperationen ----------
    Pumpe1 = off
    Pumpe2 = off
    'Taster1 = on
    'Taster2 = on
    'Taster3 = on
    'Taster4 = on

    #loop

    if Taster1 = off then goto Programm1
    if Taster2 = off then goto Programm2
    if Taster3 = off then goto Programm3
    if Taster4 = off then goto Programm4

    goto loop

    #Programm1
    Pumpe2 = off
    Pumpe1 = on
    Pause 90000 ' 30 min Anzeit
    Pumpe1 = off
    Pause 45000 ' 15 min Auszeit
    goto Programm1

    #Programm2
    Pumpe1 = off
    Pumpe2 = on
    Pause 90000 ' 30 min Anzeit
    Pumpe2 = off
    Pause 45000 ' 15 min Auszeit
    goto Programm2

    #Programm3
    Pumpe1 = on
    Pumpe2 = off
    Pause 90000 ' 30 min Anzeit
    Pumpe1 = off
    Pumpe2 = on
    Pause 90000 ' 30 min Anzeit
    goto Programm3

    #Programm4
    Pumpe1 = on
    Pumpe2 = on
    Pause 90000 ' 30 min Anzeit
    Pumpe1 = off
    Pumpe2 = off
    Pause 45000 ' 15 min Auszeit
    goto Programm4
    zugeschnitte Drähte sind immer zu kurz.
    Oszillatoren schwingen nie, Verstärker immer.

  5. #15
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    72
    Beiträge
    13.136
    Zitat Zitat von Manf
    Eine Kleinigkeit ist noch das Goto am Ende von Programm1, das soll sicher zu Loop gehen.
    Nach Beendigung der jeweiligen Programmschleife soll es in die Hauptschleife zurückkehren.
    Manfred
    Goto loop am Ende jeder Schleife.
    Manfred

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    29.01.2006
    Beiträge
    101
    Hallo!

    Ein 'goto Loop' würde das Program nur einmal ausführen (dann wäre auch die Pause am Ende eines Programs überflüssig), da die Programme aber periodisch laufen sollen (so habe ich das verstanden)

    Taste 1 = Pumpe 1 soll 30 min laufen, dann 15 min Pause. Dann wieder von vorn beginnen.
    muss ein Rücksprung auf das jeweilige Programm erfolgen

    Gruß
    Jörn Arne

  7. #17
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    72
    Beiträge
    13.136
    Ja wenn das so ist, ich konnte mir einen solchen Ablauf ohne weitere Eingriffsmöglichkeit nicht so recht vorstellen.

    Dann ist es wohl umso interessanter eine Tastenabfrage in den Programmablauf einzubinden.
    Manfred

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    29.01.2006
    Beiträge
    101
    Eine Idee hätte ich, man könnte eine Art Fortschalteautomatik programmieren, wie bei einer Waschmaschine.

    Man unterteilt die Programme in Programmschritte

    Nach Ablauf einer Zeit wird in den nächsten Programmschritt weitergeschaltet, das Programm kehrt in die Hauptschleife zurück, wo es die Tasten abfragt und die Zeit überwacht.

    Überlegt hab ich mir da was und habe mal ein Testprogramm gebastelt, ich habe es noch nicht ausgiebig getestet, es gibt bestimmt noch eine Dinge die man verbessern kann:

    Code:
    ' --------------------------
    ' 
    ' Projekt:
    'Brunnensteuerung 
    ' Beschreibung:
    'Fortschalteautomatik
    'byJ.A.
    '---------------------------
    
    ' ---------- Definitionen ---------- 
    ' 
    'Ausgänge 
    define Pumpe1 port[1] 'ohne Pullup-Widerstand 
    define Pumpe2 port[2] 'ohne Pullup-Widerstand 
    ' 
    'Eingänge 
    define Taster1 port[3] 'mit Pullup-Widerstand 
    define Taster2 port[4] 'mit Pullup-Widerstand 
    define Taster3 port[5] 'mit Pullup-Widerstand 
    define Taster4 port[6] 'mit Pullup-Widerstand 
    
    define desiredDelay byte        'Verzögerungszeit in Minuten
    define selectedProgram byte     'Ausgewähltes Programm
    define programStep byte         'Aktuellerprogrammschritt
    define maxSteps byte            'Anzahl der Programmschritte des jeweiligen Programms
    ' 
    ' ---------- Programmoperationen ---------- 
    Pumpe1 = off 
    Pumpe2 = off  
     
    
    ' Programmteil
    
    #Main
    if Taster1 = off then gosub initProgramm1 
    'if Taster2 = off then gosub initProgramm2 
    'if Taster3 = off then gosub initProgramm3 
    'if Taster4 = off then gosub initProgramm4 
    
    
    if ((minute => desiredDelay) and (selectedProgram >0)) then gosub nextStep    'Nach Ablauf der Verzögerungszeit wird einen Schritt weiter geschaltet
                                                                                  'Prüfen ob Programm gewählt wurde
    
    goto main
    
    ' Unterprogramme
    
    '---------Programm1-------------------------------
    #initProgramm1
    
    selectedProgram = 1    'Ausgewähltes Programm festlegen 
    programStep = 0        'Ausgangsposition festlegen
    maxSteps = 2           'Anzahl der Programmschritte
    minute = 0             'Systemzeit zurücksetzen
    
    'läuft direkt weiter zum 1. Programmschritt
    
    'Programmschritte:
    
    #program1Step0
    Pumpe2 = off        'Pumpenzustände einstellen 
    Pumpe1 = on
    desiredDelay = 30    'gewünschte Zeit bis zum nächsten Schritt
    return
    
    
    #program1Step1
    Pumpe2 = off        'Pumpenzustände einstellen 
    Pumpe1 = off
    desiredDelay = 15    'gewünschte Zeit bis zum nächsten Schritt
    return
    
    'weitere Schritte möglich
    
    '---------Programm2-------------------------------
    '#initProgramm2
    '....
    
    
    '-------------------------------------------------
    #nextStep
    programStep = programStep + 1                     'Programmschritt um 1 erhöhen
    if programStep = maxSteps then programStep = 0    'Maximalschritt erreicht? Dann wieder von vorn
    minute = 0
    
    if selectedProgram = 1 then on programStep gosub program1Step0, program1Step1   'Gewähltes Programm abfragen dann Springen in den jeweiligen Programmschritt
    'if selectedProgram = 2 then on programStep gosub program2Step0, program2Step1
    '....
    return
    Vielleicht kann man das ja gebrauchen

    Jörn Arne

  9. #19
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.09.2004
    Beiträge
    264
    Nimm doch lieber einer 5-stufigen Drehschalter (4 Programme und Aus).
    Da dann das gewünschte Programm dauerhaft dem Controller signalisiert wird, brauchst Du nach Ablauf der Zeit immer nur ins Hauptprogramm zu springen und dann entsprechend dem Schalter wieder in ein Unterprogramm.

    mfg

    Stefan

  10. #20
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.09.2004
    Beiträge
    264
    Das Programm hat noch mehr Fehler und ist sehr unkomfortabel.
    Eine Pause 90000 ist zu groß, bei 65535 ist Schluß.

    Besser wäre es, einfach in Minuten zu rechnen (über die Zeitfunktionen in Basic: hour, minute).

    Zeit bei Start merken, Stop-Zeit = Startzeit + 30 (Wenn >59, dann 60 abziehen) so kann man zwischendurch immer die Taster/Schalter abfragen um ggfs ein anderes Programm zu wählen.

    mfg

    Stefan

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress