Schalten Magnetventile SSR-Platine Multi-MCU: Unterschied zwischen den Versionen

Aus Technische Beeinflussbarkeit der Geschmacksache Kaffee
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
= Melina Scherf, 14.06.2023 =
Um die Magnetventilschaltung wie im [[Adaption an Multi-MCU - Neuprogrammierung MATLAB® GUI|Programmcode in der MATLAB® GUI]] beschrieben zu ermöglichen, muss der MicroPythoncode der SSR ergänzt werden. Dazu wurde zunächst eine Matrix mit den Ventilnamen und den zugehörigen Pin-Nummern definiert:
  ventile = [["Y01", 16],
              ["Y03", 14],
              ["Y04", 15],
              ["Y05", 13],
              ["Y06", 12],
              ["Y07", 10],
              ["Y08", 11],
              ["Y09", 7],
              ["Y13", 5]]
Nun können die Ventile im automatischen Modus geschaltet werden, dabei werden alle übergebenen Ventile auf 0 gesetzt und alle nicht übergebenen auf 1:
  def ventile_schalten_automatisch(*args):
      args = list(args)
   
      ventile_namen = [row[0] for row in ventile]
      ventile_pins = [row[1] for row in ventile]
   
      anzuschaltende_ventile = []
      for index, string in enumerate(ventile_namen):
          if string in args:
              anzuschaltende_ventile.append(index)
   
      for index in anzuschaltende_ventile:
          ventil_off(ventile_pins[index]) #tauschen?
   
      auszuschaltende_ventile = [x for x in range(9) if x not in anzuschaltende_ventile]
   
      for index in auszuschaltende_ventile:
          ventil_on(ventile_pins[index])
Der Funktion kann eine unbekannte Anzahl an Eingaben übergeben werden, die in der Liste args gespeichert werden. Anschließend wird abgefragt, bei welchen Indizes die in args enthaltenen Ventilnamen in der zuvor definierten Ventilmatrix auftauchen. Die zweite Spalte aller dieser Indizes (mit den zuvor definierten Pin-Nummern) wird nacheinander der Funktion ventil_off() übergeben, sodass diese auf 0 geschaltet werden. Von allen dort nicht enthaltenen Indizes werden die Pin-Nummern an die ventil_on()-Funktion übergeben. <br>
Für den manuellen Modus wurde der Code bis zur Übergabe an die Funktionen übernommen:
  def ventile_schalten_manuell(*args):
      args = list(args)
   
      ventile_namen = [row[0] for row in ventile]
      ventile_pins = [row[1] for row in ventile]
   
      zu_schaltende_ventile = []
      for index, string in enumerate(ventile_namen):
          if string in args:
              zu_schaltende_ventile.append(index)
           
      for index in zu_schaltende_ventile:
          ventile_schalten_manuell_2(ventile_pins[index]) 
Hier wird nun eine weitere Funktion aufgerufen:
  def ventile_schalten_manuell_2(pin):
        aktueller_zustand = pin.value()
        neuer_zustand = not aktueller_zustand
        pin.value(neuer_zustand)
Der aktuelle Zustand des übergebenen Pins wird invertiert.       
= Noureddine Ait Ouhamou, 16.05.2023 =
= Noureddine Ait Ouhamou, 16.05.2023 =
Das Skript zum schalten Magnetventile wurde erstellt. Dabei werden die benötigten Pins erst initialisiert und anschließend mit zwei Befehlen können die zugehörigen Schalter an oder ausgeschalten werden.
Das Skript zum schalten Magnetventile wurde erstellt. Dabei werden die benötigten Pins erst initialisiert und anschließend mit zwei Befehlen können die zugehörigen Schalter an oder ausgeschalten werden.

Version vom 14. Juni 2023, 22:55 Uhr

Melina Scherf, 14.06.2023

Um die Magnetventilschaltung wie im Programmcode in der MATLAB® GUI beschrieben zu ermöglichen, muss der MicroPythoncode der SSR ergänzt werden. Dazu wurde zunächst eine Matrix mit den Ventilnamen und den zugehörigen Pin-Nummern definiert:

  ventile = [["Y01", 16],
             ["Y03", 14],
             ["Y04", 15],
             ["Y05", 13],
             ["Y06", 12],
             ["Y07", 10],
             ["Y08", 11],
             ["Y09", 7],
             ["Y13", 5]]

Nun können die Ventile im automatischen Modus geschaltet werden, dabei werden alle übergebenen Ventile auf 0 gesetzt und alle nicht übergebenen auf 1:

  def ventile_schalten_automatisch(*args):
      args = list(args)
   
      ventile_namen = [row[0] for row in ventile]
      ventile_pins = [row[1] for row in ventile]
   
      anzuschaltende_ventile = []
      for index, string in enumerate(ventile_namen):
          if string in args:
              anzuschaltende_ventile.append(index)
   
      for index in anzuschaltende_ventile:
          ventil_off(ventile_pins[index]) #tauschen?
   
      auszuschaltende_ventile = [x for x in range(9) if x not in anzuschaltende_ventile]
   
      for index in auszuschaltende_ventile:
          ventil_on(ventile_pins[index])

Der Funktion kann eine unbekannte Anzahl an Eingaben übergeben werden, die in der Liste args gespeichert werden. Anschließend wird abgefragt, bei welchen Indizes die in args enthaltenen Ventilnamen in der zuvor definierten Ventilmatrix auftauchen. Die zweite Spalte aller dieser Indizes (mit den zuvor definierten Pin-Nummern) wird nacheinander der Funktion ventil_off() übergeben, sodass diese auf 0 geschaltet werden. Von allen dort nicht enthaltenen Indizes werden die Pin-Nummern an die ventil_on()-Funktion übergeben.
Für den manuellen Modus wurde der Code bis zur Übergabe an die Funktionen übernommen:

  def ventile_schalten_manuell(*args):
      args = list(args)
   
      ventile_namen = [row[0] for row in ventile]
      ventile_pins = [row[1] for row in ventile]
   
      zu_schaltende_ventile = []
      for index, string in enumerate(ventile_namen):
          if string in args:
              zu_schaltende_ventile.append(index)
           
      for index in zu_schaltende_ventile:
          ventile_schalten_manuell_2(ventile_pins[index])  

Hier wird nun eine weitere Funktion aufgerufen:

  def ventile_schalten_manuell_2(pin):
       aktueller_zustand = pin.value()
       neuer_zustand = not aktueller_zustand
       pin.value(neuer_zustand)

Der aktuelle Zustand des übergebenen Pins wird invertiert.

Noureddine Ait Ouhamou, 16.05.2023

Das Skript zum schalten Magnetventile wurde erstellt. Dabei werden die benötigten Pins erst initialisiert und anschließend mit zwei Befehlen können die zugehörigen Schalter an oder ausgeschalten werden.

Armin Rohnen, 16.02.2023

Auf Anweisung vom Basisboard oder der MATLAB®-GUI werden die Magnetventile über die SSRs geschaltet. Einzelne SSRs können auch via PWM für andere Schalt- und Dimmvorgänge verwendet werden.

Informationen für die Programmierung sind unter Grundfunktionen der MCU und in [40] zu finden.