PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OT: vb.net hier diskutieren?



Unique24
18.12.05, 16:33
Hallo

Nachdem ich die Winswitch Demo endlich beiseite legen will, möchte ich gerne in vb.net mein Visu erstellen.
Da dies aber ein EIB Forum ist, bin ich mir nicht sicher, ob dies hier gern gesehen wird :confused:

Ich würde gerne über das Vorgehen, implentieren, Code-Beispiele, ... hier diskutieren und empfehlungen suchen, sofern manche hier sich mit dieser Thematik auskennen.

Also wenn die Administratoren hier nichts dagegen haben, würde ich gerne dies weiterführen.
Ansonsten aktzeptiere ich natürlich die Meinungen und "bleibe" in einem vb Forum.

Schönen 4. Advent

Hannes

GLT
18.12.05, 23:48
Hallo Hannes,

denke, wenn es bei den reinen EIB-Sachen bleibt und nicht in allg. VB abwandert, werden wir wohl alle interessiert mitlesen.

mfg
GLT

Unique24
21.12.05, 15:22
Danke, werde veruschen nicht zu sehr die EIB Seite zu vernachläßigen ...

Mein Anfang ist schon mal schwer. Ich weiß noch nicht, genau, wie ich die einkommenden Telegramme am besten und effizientesten speichere.
Als Beispiel habe ich diesen Code bekommen:



<code>Public Interface IGeraet
ReadOnly Property TypName() As String
ReadOnly Property Name() As String
ReadOnly Property Status() As String
Sub Action(ByVal Command As String)
End Interface
Public Class Heizung
Implements IGeraet

Private AktuelleIstTemperatur As Double

Protected meinName As String
Public Sub New(ByVal _name As String)
meinName = _name
End Sub

Public Sub Action(ByVal Command As String) Implements IGeraet.Action
AktuelleIstTemperatur = CDbl(Command)
End Sub

Public ReadOnly Property TypName() As String Implements IGeraet.TypName
Get
Return "Heizung"
End Get
End Property
Public ReadOnly Property Name() As String Implements IGeraet.Name
Get
Return meinName
End Get
End Property

Public ReadOnly Property Status() As String Implements IGeraet.Status
Get
Return AktuelleIstTemperatur.ToString()
End Get
End Property
End Class</code>

Ich müßte aber in einem Stack (denk ich mal) die ganze Sache speichern, der eben nur 2 Werte behält.
Außerdem gleich die Uhrzeit/Datum.
Dann kann man schon einmal Flanken auswerten (up/down).

Ich muss so aber wohl für jede Möglichkeit eine Klasse erstellen:
Frostschutz
Komfort
Standby
Nacht
Stellgröße
Ventilstellung
SollTemperatur
...

Die dann für jeden Raum zuweisen. Das Zuweisen würde so funkt.:
meinRaum.Geraete.Add("Küche", New Heizung("Standby"))

Ob das schon mal ein guter Anfang wäre, um darauf eine Visu aufzubauen?
Eure Meinungen und Vorschläge wäre gefragt.

Folgende Funktionen des EIB sollen ja möglich sein:
Flanke auf/ab
(Überprüfen des Stack auf den vorigen Wert)

Treppenhaus
(Setzen eines Aus Befehles in einer DB der Sekündlich abgearbeitet wird)

Schalten
(Wohl das einfachere)

Dimmen
(Da ich nicht selber Dimmer habe, muss ich zur Bedienung sicher später noch nachfragen)

Rollladen
(Ist wohl mit Schaltbefehlen gleichzusetzen)

Standby,Komfort,Nacht
(Hier gibts Unterschiede (Bei meinem Berker IQ und Merten zum Beispiel))

div Werte
(Diese werden eben noch ergänzt)

Hannes

NetFritz
22.12.05, 06:04
Hallo
Speichern würde ich alles bei VB.Net in einen DataSet-DataView.
Gruss NetFritz

Unique24
23.12.05, 17:32
Hallo NetFritz

Man müßte aber dann ja auch den Timestamp miteintragen, bzw für Flanken den vorigen Wert, oder wie würdest du das ganze erstellen?

Gruß

Hannes

NetFritz
23.12.05, 22:22
Hallo Unique24
Zeitstempel, Gruppenadresse und Wert muß eigentlich reichen.
Warum für den vorherrigen Wert die Flanke eintragen ???.
Wenn Du Zeitstempel, Gruppenadresse und Wert nur bei Änderung in das
DataSet einträgts dann hast Du ja immer den Aktuellen Wert.
Z.B. bei Binär
24.12.2005 18:00:00 1/3/22 1
dann war der Wert vor 18:00 0
Gruss NetFritz

ferna1p
23.12.05, 23:02
Hallo,

als EIB neuling habe ich da eine Frage: Gibt es .NET/C++/Linux, it is ..... EIB Software Development Forums ?

Danke
ferna1p

PS: Entschuldigt mein schlechtes deutch, ich schreibe aus Protugal :)

Unique24
24.12.05, 10:59
Hallo NetFritz

Hmmm ... ja das ist klar. Ich hatte zwar vor, jeglichen Busverkehr in der Klasse zu speichern, aber wenn ich den Busverkehr in eine SQL Datenbank speichere und die aktuellen Zust&#228;nde in ein Dataset w&#228;re das Sinngem&#228;&#223;.

Werde mir die Dataset Funktionen einmal genauer ansehen. Vor allem in wie weit man die einzelnen GA&#180;s wieder abrufen kann.

Wie machst du das bei einer Treppenhaus Funktion?
Eine Sekunden Schleife die eine DB abgfragt ob etwas geschaltet werden soll?

Frohe Weihnachten

Hannes

PS: Heute meinte meine Frau ob wir nicht in den "sauren" Apfel bei&#223;en sollen, und uns eine komfortable Visu kaufen :-) Sie Winswitch Demo beendet ja immer nach 1 Stunde.
Und so langsam wird auch meine Frau vom EIB "verw&#246;hnt" ;-)

NetFritz
24.12.05, 16:13
Hallo Unique24


Werde mir die Dataset Funktionen einmal genauer ansehen. Vor allem in wie weit man die einzelnen GA´s wieder abrufen kann
Das geht am besten mit einem DataView.
Das DataWiew kann man dursuchen und sortieren.


Wie machst du das bei einer Treppenhaus Funktion?
Eine Sekunden Schleife die eine DB abgfragt ob etwas geschaltet werden soll?
Mit einer Timer Sub die jede Sekunde aufgerufen wird.
Mit einem EIB-Gerät mit Treppenhaus Funktion arbeitet man am sichersten.

Frohe Weihnachten allen

Gruss NetFritz

Unique24
03.01.06, 16:30
Hallo Netfritz

Inzwischen habe ich mich einmal mit Dataset beschäftigt, aber im Moment bleibe ich noch bei meiner EIB.Klasse

Das senden und anschließende aktualisieren der Controls auf jeder Form funktioniert soweit.

Probleme machen mir noch die Logik:


Dim logik As New Logik
Select Case Gruppenadresse

Case "3/3/3"
If KO("3/3/3").Wert = "1" And KO("3/3/3").FlankeUp = True And KO("1/1/1").Wert = "0" Then GaSet("1/1/1", "1", Date.Now)

Case "5/7/0"
'Bei Dämmerung unter 100 lux Jalousie runterfahren/rauffahren
If CDbl(KO("5/7/0").Wert) < 100 Then
logik.NurBeiVeränderung("3/2/19", "1")
Else
logik.NurBeiVeränderung("3/2/19", "0")
End If

Case Else

End Select

Kommt auf 5/7/0 ein Wert unter 100,dann Jalousie runter bzw über 100 rauf. Das ganze eben nur, falls die Adresse 3/2/19 sich inzwischen geändert hat(Klasse Logik hat die SUB NurBeiVeränderung). Sonst kommen zyklische telegramme auf den Bus

Wenn nun aber die Jalousie auf einer anderen GA hochgefahren wird ist der Status 3/2/19 nicht up-to-date.
Also müßte ich 3/2/19 beim Hochfahren auf den wert der GA die Hochfährt anpassen. Ist aber dann schnell unübersichtlich und eine Menge zu programmieren.

Bei den Controls habe ich es mir "einfach" gemacht.
Bei einem klick:


Private Sub Slider1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Slider1.MouseUp
GaSet(sender.tag, sender.value, Date.Now)
End Sub

Im TAG jedes Control´s sind wie in der ETS die Gruppenadressen eingetragen. Auf die erste wird gesendet, auf die restlichen gehört.
So brauche ich mir keine Sorgen mehr um die aktualisierung zu machen. Jedes Control wird (Projektgrößen unabhängig) beim eintreffen einer GA aktualisiert.

Aber die Logik:
Hat schon jemand eine Logik Klasse entworfen, um dort beim Ausgang ebenso mehrere Gruppenadressen eintragen zu können?
Dachte daran, das man dann ein Arraylist damit füllt.
Für die Verschiedenen Logiken AND,OR,XOR, ...?
Für UND habe ich einmal eine Function getippt, jedoch kann ich eben keine festen Gruppenadressen an den Ausgang legen:


Public Function UND(ByVal sender As String, ByVal Ausgang As String, ByVal Gruppenadressen As ArrayList, Optional ByVal Überschreibbar As Boolean = False, Optional ByVal NurBeiVeränderung As Boolean = True)
If sender = Ausgang And Überschreibbar = False Then Exit Function
Dim result As Boolean
For Each g As eib In Gruppenadressen
If g.Wert = 0 Then result = False : Exit For
Next

If result = False Then
If NurBeiVeränderung = True Then
If KO(Ausgang).Wert <> result Then GaSet(Ausgang, "0", Now)
Else
GaSet(Ausgang, "0", Now)
End If
End If

If result = True Then
If NurBeiVeränderung = True Then
If KO(Ausgang).Wert <> result Then GaSet(Ausgang, "1", Now)
Else
GaSet(Ausgang, "1", Now)
End If
End If

End Function

Ideen?


Hannes