Ankündigung

Einklappen
Keine Ankündigung bisher.

von VB.net mit Falcon über Weinzierl 332 zum KNX-Bus

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

    #16
    Hallo,

    VB und C# sind doch bis auf wenige Unterschiede gleich.
    Aus dem Beispiel für die Verbindung wäre folgendes mal frei Übersetzt:
    Code:
    Dim bus As Bus = New Bus(UsbConnectorParameters.FromAddress("1.1.200"))
    bus.Connect()
    Dim localConfiguration As LocalConfiguration = bus.GetLocalConfiguration()
    
    If localConfiguration.Medium = MediumTypes.Tp Then
        // Verbindung wurde hergestellt
    End If
    Dazu gibt es gute online Converter wie http://converter.telerik.com/
    Dort muss man aber die "Using" in normale deklarationen umwandeln.

    Das Objekt Bus hat dann auch das Event "GroupValueReceived", welches auf schreibzugriffe einer GA reagiert.


    Gruß
    Mike
    OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

    Kommentar


      #17
      Hallo zusammen,

      Danke an Mike, das war für mich der entscheidende Hinweis - ich habe inzwischen mein Testprogramm in VB.net laufen und kämpfe jetzt mit folgendem Problem:

      wie kann ich den Datentyp bei WriteValue bestimmen?

      Dieses Problem ist auch mit dem in Falcon enthaltenen FalconDemo-Project nachvollziehbar - es ist also nicht VB.net spezifisch - wenn ich dort auf eine Gruppenadresse den Wert 1 schreibe, so wird dies als Typ "1.001 Schalten" geschrieben (im ETS4-Gruppenmonitor nachvollziebar) - das gilt auch für Werte bis x3F - erst ab x40 wird dann der Typ "1Byte, besser gesagt 5.001 Prozent" geschrieben

      Ich will/muss aber auch Werte unter x40 als Byte schreiben können - dazu muss ich den Datentyp je nach GA beim schreiben selbst festlegen können - und ich finde nicht wie...

      Und daher bitte ich wieder um Hilfe.
      Danke, freundliche Grüsse
      Franz


      Kommentar


        #18
        Hallo Franz,

        zeig doch mal ein Beispiel wie du das Byte auf den Bus schreibst.


        Gruß
        Mike
        OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

        Kommentar


          #19
          here we are...

          Dim GA As String = "9/3/1" 'GA = ein Spot

          Dim daten As GroupValue
          'GroupValue.TryParse(CStr(90), daten) 'Wert 90 = x5A funktioniert
          GroupValue.TryParse(CStr(3), daten) 'Wert 3 funktioniert nicht

          bus.WriteValue(GA, daten)
          Zuletzt geändert von FranzBeranek; 06.03.2020, 16:50. Grund: typo korrigiert

          Kommentar


            #20
            Code:
            bus.WriteValue("1/1/2", New GroupValue(3))
            Oder vielleicht (bin nicht so fit in VB...)
            Code:
            bus.WriteValue("1/1/2", New GroupValue(CByte(3)))
            Zuletzt geändert von Klaus Gütter; 07.03.2020, 06:51. Grund: CByte ergänzt

            Kommentar


              #21
              Danke Klaus, gleich probiert:

              Bringt leider einen Sytntaxfehler
              "BC30521 Fehler bei der Überladungsauflösung, da keine zugreifbare "New" für diese Argumente am spezifischsten ist:
              "Public Overloads Sub New(value As TwoBit)": Nicht spezifisch genug.
              "Public Overloads Sub New(value As FourBit)": Nicht spezifisch genug.
              "Public Overloads Sub New(value As SixBit)": Nicht spezifisch genug."

              Kommentar


                #22
                Was macht es wenn du folgendes mit gibst?

                bus.WriteValue("1/1/2", New GroupValue((byte)3))
                oder
                bus.WriteValue("1/1/2", New GroupValue(0x03))
                Aus dem Grund weil ich die Falcon-Lib seltsam finde hab ich meine eigene geschrieben. Allerdings in C#. Weiß nicht ob man die in WinForm Anwendungen einbinden kann.
                OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

                Kommentar


                  #23
                  Hallo Mike,

                  leider auch nicht besser - diverse Syntax-Fehler - ich habe aber das Gefühl, dass dies der richtige Weg ist, mit "Byte" - nur wie die genaue Syntax ist, kreig ich aus Deinen Vorschlägen und zahlreichen Versuchen meinerseits, nicht raus - vielleicht hast Du (oder jemand) ein simples Beispiel in C#?

                  Deine eigene Lib würde mich natürlich auch interessieren, von c# nach VB.net ist es ja nicht sooo weit.

                  Danke, freundliche Grüsse
                  Franz

                  Kommentar


                    #24
                    Hallo Franz,

                    ich habe oben in meiner Antwort jetzt noch ein CByte ergänzt, vielleicht hilft das dem VB.net-Compiler auf die Sprünge

                    Gruß, Klaus

                    Kommentar


                      #25
                      Moin.
                      Zitat von proggerKA Beitrag anzeigen
                      hab ich meine eigene geschrieben. Allerdings in C#.
                      Da hätte ich auch Interesse dran, da mir C# mehr liegt als VB.

                      Kommentar


                        #26
                        Heureka, das wars! VIELEN DANK an Klaus und Mike!

                        Das "New GroupValue(CByte(3))" war der Durchbruch - bin ich mir zumindest fast sicher - nur fast, weil ich blöderweise vorher von Falcon 5.7.322 auf 5.7.426 hochgerüstet habe, sollte einem alten Hasen (siehe unten) nicht passieren - aber eigentlich ist mir das wurscht, Hauptsache es geht - Danke nochmals - Beispielcode folgt unten

                        zum Thema Alter Hase - ich habe da jetzt einige Wochen immer wieder dran getüftelt - und vor einer Woche hab ich mir gesagt, diese Woche muss es klappen - und es hat geklappt - Dank an Euch - und das freut mich deswegen so, weil ich morgen 65 werde - und ich so mein Fest noch mehr geniessen kann - Prost!

                        Liebe Grüsse
                        Franz

                        Kommentar


                          #27
                          und hier der Code (es wird hier der Spot1 in meinem Büro auf Spot3 gespiegelt):


                          Private Sub BusOnGroupValueReceived(ReceivedValue As GroupValueEventArgs)
                          '
                          ' ein KNX-Telegramm wurde empfangen - es steht in ReceivedValue in der Struktur GroupValueEventArgs
                          ' -------------------------------------------------------------------------------------------------

                          ' Gruppenadresse auf String GA umwandeln
                          Dim GA As String
                          GA = ReceivedValue.Address.ToString

                          ' die Daten im Object Daten spiechrn - das ist ein Array von Bytes
                          Dim daten
                          daten = ReceivedValue.Value.Value

                          ' die Daten (Byte Array) in eine Hexzahl umwandeln - in HexText
                          Dim HexText As String = ""
                          Dim i As Integer
                          Dim ht As String
                          For i = LBound(daten) To UBound(daten)
                          ht = "00" & Hex(daten(i))
                          ht = ht.Substring(Len(ht) - 2, 2) 'führende 0 sicherstellen
                          HexText = HexText & ht
                          Next i

                          ' Spot 1 auf Spot 3 spiegeln
                          ' ..........................

                          Dim DezWert As Integer
                          If GA = "9/5/1" Then ' 9/5/1 ist die Wert-Rückmeldung von Spot1
                          DezWert = Convert.ToInt32(HexText, 16)
                          'MsgBox(DezWert)
                          bus.WriteValue("9/3/3", New GroupValues.GroupValue(CByte(DezWert))) '9/3/3 ist der Dim-Wert von Spot 3
                          End If

                          End Sub

                          Kommentar


                            #28
                            Zitat von FranzBeranek Beitrag anzeigen
                            von c# nach VB.net ist es ja nicht sooo weit.
                            Vom Syntax her ja. Aber inwieweit du NugetPakete in VB.Net Projekte einbinden kannst weiß ich nicht.
                            OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

                            Kommentar


                              #29
                              Hallo Mike, ja das geht schon - auch Falcon 5.0 ist eine NuGet-Paket in c# - die Funktionen kann ich dann trotzdem in VB.net verwenden, Gruss, Franz

                              Kommentar


                                #30
                                Warum konvertierst du so viel hin und her? Ein
                                Code:
                                bus.WriteValue("9/3/3", ReceivedValue.Value)
                                sollte eigentlich reichen, um den empfangenen Wert auf eine andere GA zu senden.

                                Kommentar

                                Lädt...
                                X