Ankündigung

Einklappen
Keine Ankündigung bisher.

Suche Hilfe beim Erstellen eines HSL2.0-Baustein

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #31
    Vermute eher das zweite rote “ bei der Version

    Kommentar


      #32
      Zitat von Axel Beitrag anzeigen
      Vermute eher das zweite rote “ bei der Version
      Ah, Du hattest Recht, danke!
      Habe es geändert, nur leider nimmt mir der HS-experte, das trotzdem nicht an.
      Weist du vl, wie ich den Code in eine HSL Datei umwandle ?

      Kommentar


        #33
        Endung ändern ? welche Endung hast du jetzt?

        Kommentar


          #34
          Zitat von Axel Beitrag anzeigen
          Endung ändern ? welche Endung hast du jetzt?
          Habe die Python Datei, mit "Speichern unter" als .hsl Datei abgespeichert.

          Kommentar


            #35
            Könnten wir evtl. zum Topic zurück kommen und etwas über HSL2.0 und der Erstellung von Logiken kommen?
            Vorsatz fürs Jahr 2022 und jetzt dürfen alle Programmierer, denen ich etwas böses in der E-Technik getan habe, fleißig auf mein einhaken und mir erklären wie blöd ich bin.

            Ich bitte um die Korrektur/Bestätigung folgender Aussagen, wenn ich diese falsch verstanden habe, weil irgendwie komme ich damit nicht weiter:
            1. Aussage: HSL2.0 ist auch nur Python!
            ABER, wenn ich fleißig Python Tuts anschaue, durchlese und probiere. Inkl. Pycharm Installation. Dann klappt das Wissen aus den Tuts wunderbar in Pycharm, aber wenn ich das auf die HSL2.0 Beispiele von Gira/Dacom anwende, dann ist da überhaupt nichts aus Python?

            Was ich meine?
            Ich würde gerne kapiere, was hat es mit diesem self. auf sich? Das wird z.b. auf keiner Python Webseite erklärt. Was ist das? Wo kommt das her?

            Dann habe ich mir vorgenommen, mit eigenen Mittel/Verstand, das Beispiel des Subtraktionsbeispieles in einen Additionsbaustein umzuwandeln. Also das, was es in HSL1.0 bereits gibt und was bestimmt 1000% ist, einfach nochmal im HSL2.0.

            Im Beispiel wird über 2 Variablen gerechnet. Diese Variablen werden bei der Initialisierung auf 0 gesetzt und anschließend wird bei einem Eingang Event gerechnet. Ersetze ich diesen Code 1:1 über die direkten 2 Inpus auf das Output, passiert nichts. Ist das einfach nur schlechter Stil oder ist das überhaupt Blödsinn und wo kann man so etwas nach lesen?

            Ähm, ich suche gleich mal heraus was ich meine und was ich zusammen gestümpert habe...
            Dieser Beitrag enthält keine Spuren von Sarkasmus... ich bin einfach so?!

            Kommentar


              #36
              Ich habe noch etwas herum probiert.

              1:1 Versuch von Gira übernommen und nur das mathematische Zeichen ersetzten:
              Code:
              # coding: utf-8
              ##!!!!############################################ ################################################## ####
              #### Own written code can be placed above this commentblock . Do not change or delete commentblock! ####
              ################################################## ################################################## ####
              ##** Code created by generator - DO NOT CHANGE! **##
              
              class AdditionsUEbung19111(hsl20_4.BaseModule):
              
              def __init__(self, homeserver_context):
              hsl20_4.BaseModule.__init__(self, homeserver_context, "addition")
              self.FRAMEWORK = self._get_framework()
              self.LOGGER = self._get_logger(hsl20_4.LOGGING_NONE,())
              self.PIN_I_INPUT_A=1
              self.PIN_I_INPUT_B=2
              self.PIN_O_ERGEBNIS=1
              self.REM_VALUE_1=1
              self.REM_VALUE_2=2
              
              ################################################## ################################################## ####
              #### Own written code can be placed after this commentblock . Do not change or delete commentblock! ####
              ################################################## #################################################! !!##
              
              tmp_result = 0
              
              def on_init(self):
              self.REM_VALUE_1 = 0.0
              self.REM_VALUE_2 = 0.0
              
              def on_input_value(self, index, value):
              if index == 1:
              self.REM_VALUE_1 = value
              else:
              self.REM_VALUE_2 = value
              
              self.calc_result()
              
              def calc_result(self):
              tmp_result = self.REM_VALUE_1 + self.REM_VALUE_2
              self._set_output_value(self.PIN_O_ERGEBNIS, tmp_result)a
              Was ich schmutzig probiert hatte:
              Code:
              # coding: utf-8
              ##!!!!############################################ ################################################## ####
              #### Own written code can be placed above this commentblock . Do not change or delete commentblock! ####
              ################################################## ################################################## ####
              ##** Code created by generator - DO NOT CHANGE! **##
              
              class AdditionsUEbung19111(hsl20_4.BaseModule):
              
              def __init__(self, homeserver_context):
              hsl20_4.BaseModule.__init__(self, homeserver_context, "addition")
              self.FRAMEWORK = self._get_framework()
              self.LOGGER = self._get_logger(hsl20_4.LOGGING_NONE,())
              self.PIN_I_INPUT_A=1
              self.PIN_I_INPUT_B=2
              self.PIN_O_ERGEBNIS=1
              self.REM_VALUE_1=1
              self.REM_VALUE_2=2
              
              ################################################## ################################################## ####
              #### Own written code can be placed after this commentblock . Do not change or delete commentblock! ####
              ################################################## #################################################! !!##
              
              tmp_result = 0
              
              def on_init(self):
              self.REM_VALUE_1 = 0.0
              self.REM_VALUE_2 = 0.0
              
              def on_input_value(self, index, value):
              if index == 1:
              self.REM_VALUE_1 = value
              else:
              self.REM_VALUE_2 = value
              
              self.calc_result()
              
              def calc_result(self):
              self.PIN_O_ERGEBNIS = self.PIN_I_INPUT_A + self.PIN_I_INPUT_B
              self._set_output_value(self.PIN_O_ERGEBNIS, tmp_result)
              Das geht nicht, ich vermute weil dort am Ende steht "self.PIN_O_ERGEBNIS", tmp_result -> was hat es mit diesem " xxx, tmp_result" auf sich? Das war das Ergebnis von Varialbe 1 + Variable 2. Warum können diese Werte nicht direkt auf die IOs geschrieben werden? Wenn das so ist, dann akzeptiere ich das als gegeben und arbeite weiter mit Variablen.
              Dieser Beitrag enthält keine Spuren von Sarkasmus... ich bin einfach so?!

              Kommentar


                #37
                tmp_result initialisierst Du am Anfang mit 0, und genau das gibst Du in der letzten Zeile auf den Ausgang aus. Ich hab zwar keine Ahnung, aber ich befürchte es kommt immer 0 am Ausgang an.


                self.PIN_O_ERGEBNIS sagt das es Ausgang 1 ist (wurde ja vorher so deklariert), der auf den Wert von tmp_result gesetzt wird.
                Zuletzt geändert von vento66; 05.01.2022, 22:16.

                Kommentar


                  #38
                  Ich habe noch etwas weiter gelesen.. ich habe jetzt kapiert warum ich überall self. davor schreiben muss (also denke ich, da die Funktion hsl20_4.BaseModul initialisiert wird. Der Aufruf ist dann immer self. index, value.

                  Daraus wurde jetzt:
                  Code:
                  # coding: utf-8
                  ##!!!!############################################ ################################################## ####
                  #### Own written code can be placed above this commentblock . Do not change or delete commentblock! ####
                  ################################################## ################################################## ####
                  ##** Code created by generator - DO NOT CHANGE! **##
                  
                  class AdditionsUEbung19111(hsl20_4.BaseModule):
                  
                  def __init__(self, homeserver_context):
                  hsl20_4.BaseModule.__init__(self, homeserver_context, "addition")
                  self.FRAMEWORK = self._get_framework()
                  self.LOGGER = self._get_logger(hsl20_4.LOGGING_NONE,())
                  self.PIN_I_INPUT_A=1
                  self.PIN_I_INPUT_B=2
                  self.PIN_O_ERGEBNIS=1
                  self.REM_VALUE_1=1
                  self.REM_VALUE_2=2
                  
                  ################################################## ################################################## ####
                  #### Own written code can be placed after this commentblock . Do not change or delete commentblock! ####
                  ################################################## #################################################! !!##
                  
                  
                  def on_init(self):
                  pass
                  
                  def on_input_value(self, index, value):
                  sum = self.PIN_I_INPUT_A + self.PIN_I_INPUT_B
                  self._set_output_value(self.PIN_O_ERGEBNIS, sum)

                  Kann mir Jemand, evtl. für Doofe (ich wurde heute schon als "Häuslebauer, der fragt wie die ETS funktioniert?" bezeichnet, was ein vollkommen zutreffender Vergleich ist!) erklären, warum im Beispiel Baustein (ja, ich weiß, das ist ein Teiler) folgende Funktion aufgerufen wird:
                  Code:
                  def on_input_value(self, index, value):
                  if index == 1:
                  self.REM_VALUE_1 = value
                  else:
                  self.REM_VALUE_2 = value
                  Klar, wenn es am Eingang rein kommt, dann wird das aufgerufen. Aber was ist "value"? Wo kommt das her und wo wird es nochmal verwendet?
                  Der Original Code ist:
                  Code:
                  tmp_result = 0
                  
                  def on_init(self):
                  self.REM_VALUE_1 = 0.0
                  self.REM_VALUE_2 = 0.0
                  
                  def on_input_value(self, index, value):
                  if index == 1:
                  self.REM_VALUE_1 = value
                  else:
                  self.REM_VALUE_2 = value
                  
                  self.calc_result()
                  
                  def calc_result(self):
                  try:
                  tmp_result = self.REM_VALUE_1 / self.REM_VALUE_2
                  self._set_output_value(self.PIN_O_RESULT, tmp_result)
                  except ZeroDivisionError:
                  self._set_output_value(self.PIN_O_ERROR, 1.0)
                  Zuletzt geändert von BadSmiley; 06.01.2022, 12:56.
                  Dieser Beitrag enthält keine Spuren von Sarkasmus... ich bin einfach so?!

                  Kommentar


                    #39
                    Hir mal eine Interpretation:


                    Code:
                    // Wenn an einem Eingang ein Wert ankommt
                    // Index = Nummer des Eingangs
                    // value = Wert an dem Eingang
                    
                    def on_input_value(self, index, value):
                    
                    // Wenn der Index (Nummer) des Einganges 1 ist:
                    if index == 1:
                    
                    // Speichere den empfangenen wert nach REM_VALUE_1
                    self.REM_VALUE_1 = value
                    
                    // sonst
                    else:
                    
                    // Speichere den empfangenen wert nach REM_VALUE_2
                    self.REM_VALUE_2 = value

                    Kommentar


                      #40
                      hier noch der Rest nach deiner Änderung??

                      Code:
                      //function calc_result aufrufen:
                      self.calc_result()
                      
                      
                      // Funktionsdefinition calc_result
                      def calc_result(self):
                      
                      //versuche
                      try:
                      
                      //setze die Variable tmp_result auf das Ergebniss von REM_VALUE_1 / REM_VALUE_2
                      tmp_result = self.REM_VALUE_1 / self.REM_VALUE_2
                      
                      //setze PIN_O_RESULT auf den Wet von tmp_result
                      self._set_output_value(self.PIN_O_RESULT, tmp_result)
                      
                      // Falls division / 0
                      except ZeroDivisionError:
                      
                      // setzte den PIN_O_ERROR
                      self._set_output_value(self.PIN_O_ERROR, 1.0)

                      Kommentar


                        #41
                        Danke Micha, ich nehme übrigens alles zurück. Mein Baustein funktioniert, weil als Ergebnis immer 3 heraus kommt und ich 1+2 gerechnet habe. Rechne ich dagegen jede, beliebige andere Konstellation aus Zahlen zusammen, bleibt das Ergebnis 3. Ich gehe nochmal zurück auf die Schulbank. Oder ich betitelt den Baustein einfach als "immer drei". Mal sehen was zielführender ist.
                        Dieser Beitrag enthält keine Spuren von Sarkasmus... ich bin einfach so?!

                        Kommentar


                          #42
                          Stimmt da läuft was schief, eigentlich müsste da ja 42 rauskommen

                          Kommentar


                            #43
                            Hm, ist jetzt nur geraten, aber an sich schreibt das der Logikbenerator ja genau so in den Baustein:
                            Code:
                            def __init__(self, homeserver_context):
                            hsl20_4.BaseModule.__init__(self, homeserver_context, "addition")
                            self.FRAMEWORK = self._get_framework()
                            self.LOGGER = self._get_logger(hsl20_4.LOGGING_NONE,())
                            self.PIN_I_INPUT_A=1
                            self.PIN_I_INPUT_B=2
                            Wieder was gelernt! Jetzt hänge ich also am Eingang, nicht am Ausgang.
                            Dieser Beitrag enthält keine Spuren von Sarkasmus... ich bin einfach so?!

                            Kommentar


                              #44
                              Danke an vento66 und ets3-user die mir etwas in den Hintern treten.
                              Nachdem ich kapiert hatte, das ich mit self._set_output_value (self.ausgangpin, Wert) zuweise, kam ich nicht weiter mit dem 1+2=3 Problem.
                              Christian meinte, ich muss mit den Wert des Eingangs über self._geht_input_value(self.eingangpin, Wert) holen,so steht es auch in der Hilfe. ABER ich bin nicht darauf gekommen, wie die Herren von Gira/Dacom das in ihrem Beispiel machen.
                              Gehe ich richtig in der Annahme die machen das hier:

                              Zitat von vento66 Beitrag anzeigen
                              // Wenn der Index (Nummer) des Einganges 1 ist:
                              if index == 1:
                              // Speichere den empfangenen wert nach REM_VALUE_1
                              self.REM_VALUE_1 = value

                              Hat Jemand evtl. passenden Python Hilfe Seiten mit irgendwie passenden Aufgabe und Beispielen? Sonst beömmel ich euch einfach hier weiter, irgendwer wird schon Mitleid zeigen. Es gibt so viele Hilfeseiten für Python, aber irgendwie passt nichts davon so richtig zu dem wie der HS funktioniert oder ich habe es noch nicht kapiert. Ich stümpere mal weiter..
                              Dieser Beitrag enthält keine Spuren von Sarkasmus... ich bin einfach so?!

                              Kommentar

                              Lädt...
                              X