Mach mal die Seite zu und logg dich dann neu ein und klick permanent eingelogg bleiben an dann schreibt er ein Cookie dann müsst eigentlich gehn
Gruß
Haste denn meine persönlichen Nachrichten bekomen?
Steht oben unter dem grossen Banner LOGIN dran nachdem du dich eingeloggt hast?
Wenn du nämlich eingeloggt wärst würde hier dein Name bei deinen geschriebenen Einträgen Blau mit strich darunter also als anklickbaren Link auftauchen.
Ich schätz mal deine Cookie-Einstellungen lassen nicht zu daß das Cookie von Computerhilfen geschrieben werden kann.
Gruß
Hi
habe es ausprbiert wie Du es mir geschrieben hast funktioniert aber nicht ganz?
Muß doch eigentlich den ersten Wert zwischenspeichern wenn
If Mid(SchalterZustand,1,1)="0"
vergleiche mit 2Wert wenn
mid(SchalterZustand,1,1)="1" then
Label geht in den Vordergrund
wenn
mid(SchalterZustand,1,1)="0" then
Label geht in den Hintergrund
wenn eine 1 ansteht wie gehabt
If Mid (SchalterZustand,1,1)="1" Then
Label in Vordergrund
was ich nicht richtig verstehe wie speichere ich den ersten Wert damit ich ihn mit dem nächsten vergleichen kann
Gruß
Jo der Code stimmt auch ned ganz..
If len(temp_zustand)= 0 then
temp_zustand =GetUDPData() 'zwischenspeichern
else
'Abgleich mit vorigem Zustand
zustand=GetUDPData() 'jeweils aktueller Zustand
for x=1 to len(zustand)
if mid(zustand,x,1) = mid(temp_zustand,x,1) then
Valid_Zustand=Valid_Zustand & mid(zustand,x,1)
else
Valid_Zustand=Valid_Zustand & "1"
endif
next
'Temp-Zustand löschen
temp_zustand=""
endif
Und an deinem Code zu den Labels anzeigen brauchste normal nix ändern, du musst ihn nur insoweit verändern das er anstatt jedes paket verarbeitet, mit Valid_Zustand arbeitet.
Praktisch anstatt die Funktion Getdata verwendest den Code der dir Valid_Zustand liefert..
Gruß
Hi
habe jetzt alles mögliche durchprobiert, komme einfach nicht weiter, schicke dir mal den Code von beiden Programmen!!!!
S e r v e r:
Option Explicit
Const AlarmRot = 7
Const WarnungGelb = 6
Const VenoeserDruck = 5
Const ArteriellerDruck = 4
Const Leitfaehigkeit = 3
Const TMP = 2
Const Blutleck = 1
Const Temperatur = 0
Dim ZustandVenoeserDruck,u.s.w. GesamtZustand As String
Private Sub Form_Load()
Ini_USBIO
UDPServer.Protocol = sckUDPProtocol
UDPServer.Bind 6000
lblIP.Caption = "Die eigene IP-Adresse(Server) = " + UDPServer.LocalIP
End Sub
Private Sub tmrSchalterAbfrage_Timer()
If Pegel(VenoeserDruck) Then
ZustandVenoeserDruck = "1"
Else
ZustandVenoeserDruck = "0"
End If
u.s.w.
Private Sub UDPServer_DataArrival(ByVal bytesTotal As Long)
Dim SchalterZustand As String
UDPServer.GetData SchalterZustand
lblEmpfangsDaten.Caption = SchalterZustand
SchalterZustand = GesamtZustand.
C l i e n t
Option Explicit
Dim Farbe
Dim SchalterZustand As String
Private Sub Form_Load()
UDPClient.Protocol = sckUDPProtocol
UDPClient.Bind 6001
UDPClient.RemoteHost = "127.0.0.1"
UDPClient.RemotePort = 6000
lblIP.Caption = "Eigene IP-Adresse(Client) = " + UDPClient.LocalIP
Farbe = vbRed
tmrAbfrageServer.Interval = 500
tmrAbfrageServer.Enabled = True
End Sub
Private Sub tmrAbfrageServer_Timer()
Dim UDPData As String
UDPClient.SendData UDPData
End Sub
Private Sub UDPClient_DataArrival(ByVal bytesTotal As Long)
UDPClient.GetData SchalterZustand
If Farbe = vbWhite Then
Farbe = vbRed
Else
Farbe = vbWhite
End If
If Mid(SchalterZustand, 1, 1) = "1" Then
lblVenoeser.BackStyle = 1
lblVenoeser.BackColor = Farbe
Else
lblVenoeser.BackStyle = 0
End If
u.s.w.
Gruß
Private Sub UDPClient_DataArrival(ByVal bytesTotal As Long)
If Len(temp_zustand) = 0 Then
'zwischenspeichern
UDPClient.GetData temp_zustand
SchalterZustand = ""
Else
'Aktueller Zustand, jeweils erstes Paket nach emp_zustand
UDPClient.GetData zustand
'Abgleich mit vorigem Zustand
For X = 1 To Len(zustand)
If Mid(zustand, X, 1) = Mid(temp_zustand, X, 1) Then
SchalterZustand = SchalterZustand & Mid(zustand, X, 1)
Else
SchalterZustand = SchalterZustand & "1"
End If
Next
'Temp-Zustand löschen
temp_zustand = ""
End If
'Kannste dir aussuchen wie die bedingung ist:
'if SchalterZustand <> "" oder
'if len(SchalterZustand) > 0
'Beide ifs sind dasselbe, weil du nach dem len gefragt hattest, len is schneller als textvergleich
if len(SchalterZustand) > 0 then
If Farbe = vbWhite Then
Farbe = vbRed
Else
Farbe = vbWhite
End If
If Mid(SchalterZustand, 1, 1) = "1" Then
lblVenoeser.BackStyle = 1
lblVenoeser.BackColor = Farbe
Else
lblVenoeser.BackStyle = 0
End If
.
.
.
'Schalterveravrbeitung-Ende
endif ' <-- endif von len(SchalterZustand) > 0
Schalterverarbeitung also nur ausführen wenn Schalterzustand belegt ist und das is nach jedem 2ten paket.
Aso ganz vergessen, temp_zustand musste in der Deklaration dimensionieren oder als static
Gruß
Hi,
komm mir langsam blöd vor aber irgendwie schnall ich das nicht,
SchalterZustand ist jetzt irgendwie nicht mehr belegt
Mit If Mid(SchalterZustand, 1, 1) = "1" Then
hab keine Fehlerangabe aber irgendwie hab ich kein Signal mehr
hab mich nach deinen Daten gehalten
als was muß ich eigentlich For x deklatieren
Private Sub UDPClient_DataArrival(ByVal bytesTotal As Long)
Dim temp_zustand As String
Dim zustand As String
Dim x
UDPClient.GetData SchalterZustand
If Len(temp_zustand) = 0 Then
UDPClient.GetData temp_zustand
SchalterZustand = ""
Else
UDPClient.GetData zustand
For x = 1 To Len(zustand)
If Mid(zustand, x, 1) = Mid(temp_zustand, x, 1) Then
SchalterZustand = SchalterZustand & Mid(zustand, x, 1)
Else
SchalterZustand = SchalterZustand & "1"
End If
Next
End If
If Len(SchalterZustand) < 0 Then
If Farbe = vbWhite Then
Farbe = vbRed
Else
Farbe = vbWhite
End If
If Mid(SchalterZustand, 1, 1) = "1" Then
lblVenoeser.BackStyle = 1
lblVenoeser.BackColor = Farbe
Else
lblVenoeser.BackStyle = 0
End If
Gruß
Nochmal ne Erklärung:
Der Timer ruft UDPClient_DataArrival auf.
Dort wird erstmal geschaut ob in temp_Zustand was ist
( If Len(temp_zustand) = 0 Then )
Also er prüft die länge von Temp_zustand.
Ist die länge 0, ist temp_zustand leer.
Temp_zustand is der Zwischenspeicher mit dem immer das darauf folgende abgeglichen wird.
Also Temp_zustand ist leer, dann wird das erste Paket in Temp_zustand gespeichert
( UDPClient.GetData temp_zustand)
Gleichzeitig wird SchalterZustand auf 0 gesetz:
SchalterZustand = ""
Weil SchalterZustand ja nur beim allerersten paket leer ist.
Da steht ja dann immer das Ergebnis dann bei jedem durchlauf mit dem du arbeiten musst.
Gut und weil jetzt SchalterZustand leer ist, geht er nicht in die Schalterverarbeitung weil ja erst das 2te da sein muss um zu entscheiden, wie der Status der Dioden denn wirklich ist.
Das wird geprüft durch:
if len(SchalterZustand) > 0 then
.
.
.
Endif
Und die Punkte ist der komplette Code der eigentlichen Schalterverarbeitung also in den Vordergrund etc..
Drum macht er jetzt auch garnix und springt aus
UDPClient_DataArrival raus.
Jetzt ruft der Timer die Funktion das 2te mal auf:
Jetzt fragt er wiederab:
If Len(temp_zustand) = 0 Then
Die Bedingung ist falsch weil in Temp_Zustand das erste datenpaket liegt, also ist
len(temp_zustand)=6
drum springt er zum Else
Dort wird das 2te datenpaket abgerufen und Zeichenweise mit dem Temp_zustand verglichen:
Beispiel:
011100 ( 1.aufrufen der Funktion IF-Zweig)
001101 ( 2. Aufruf der Funktion Else-Zweig
Also For x = 1 to Len(Zustand) bedeutet:
Wiederhole solange bis x = Länge des Strings(Zustand) also 6
Du kannst auch For x= 1 to 6 schreiben wenn sich die Länge des ZUstands nie ändert, es also immer 6 Dioden bleiben.
Gut jetzt der Vergleich:
(Z=Zeichen - nur für die Erklärung jetzt)
Temp_Zustand: 011100
Zustand: 001101
x= 1
Verglichen wird 1.Zeichen von Temp_Zustand mit 1.Zeichen von Zustand:
Code dazu:
If Mid(zustand, X, 1) = Mid(temp_zustand, X, 1)
Z1-Temp_Zustand: 0
Z1-Zustand:0
Also identisch,und wenn identisch greift der IF-Zweig:
SchalterZustand = SchalterZustand & Mid(zustand, x, 1)
SchalterZustand is erstmal leer also heisst jetzt:
"" = "" & 0
SchalterZustand="0"
If greift else wird ignoriert->Next
x wird erhöht->X=2
Jetzt kommt wieder:
If Mid(zustand, X, 1) = Mid(temp_zustand, X, 1)
Z2-Temp_Zustand: 1
Z2-Zustand:0
Jetzt isses Unterschiedlich->Else-Zweig
SchalterZustand ist immernoch "0"
Und weils jetzt unterschiedlich ist, hast du ja fesgelegt das es ein flackern ist, und flackern bedeutet: 1/AN
Also Code:
SchalterZustand = SchalterZustand & "1"
"0" = "0" & "1"
Schalterzustand ="01"
Und so gehts weiter bis die Schleife durch is.
Wenn die Schleife durch ist ist Schalterzustand 6 Zeichen lang, genauso lang wie 1 Paket das kommt.
Temp_zustand wird zurückgesetzt ( ="") damit er beim nächsten timer-aufruf von UDPClient_DataArrival erst wieder zwischenspeichert:
If Len(temp_zustand) = 0 Then
Jetzt fragt er wieder ob:
If Len(SchalterZustand) > 0 Then
Das ist jetzt wahr und jetzt kommt die Schalterverarbeitung mit dem abgeglichen Zustand von 2 paketen.
Hoffe jetzt isses verständlicher:
Die Komplette Schalterverarbeitung muss in diese IF Abfrage:
If Len(SchalterZustand) > 0 Then
Endif
Weil er nur schalten darf wenn jeweils das erste mit dem 2ten abgeglichen wurde.
Und temp_zustand muss in die Deklaration oder als static in die Sub
Und die Abfrage heisst:
If Len(SchalterZustand) > 0 Then
Gruß
Hi,
denn Code hab ich so weit verstanden,
aber ich denke das kann so nicht ganz funktionieren,
da sich nicht die komplette länge des gesendeten String verändert sondern nur der jeweilige einzelne wo es eine Veränderung an der LED gibt
001000
000000
oder ich bin auf dem falschen Dampfer:)
oder ich habe noch irgent einen anderen Fehler?
Gruß
Hi,
das zuvor stimmt nicht ganz es ist ja egal ab an dem gesendeten String nur ein Wert verändert wird, da immer mit for X = 1 to 6 dieser durchlaufen wird.
Ich schätze das Problem liegt im "SchalterZustand"
da irgendwie nichts drinsteht oder immer mit 0 belegt ist,
kann eigentlich auch nicht sein da mit
SchalterZustand = SchalterZustand & mid(zustand,x,1) bei gleichem Wert belegt wird
und bei unterschiedlichen Wert mit
SchalterZustand = SchalterZustand& "1" belegt wird
irgendwo muß noch ein Fehler stecken
Gruß
Is die Variable temp_zustand im Deklarationsbereich oder als static in der Sub?
Wenn nicht ist temp_zustand IMMER leer und es wird IMMER nur zwischengespeichert und es kommt nie zum Vergleich
Ansonsten wirf doch maln paar debug.prints rein dann kannste doch verfolgen wann was wo drin ist oder eben nicht.
Gruß
Naja die einzigste wo permanent sein muss ist temp_zustand weil der Wert ja erhalten bleiben muss bis zum nächsten aufruf.
Wenn temp_zustand in der sub steht als normale Variable (dim) verliert sie ihren wert, und dann haste nix zum Vergleichen.
Zustand, X, SchalterZustand sind ganz normale Variablen die in der Sub dimensiniert werden also nicht statisch und nicht auf Deklarationsebene.
Die bekommen ja immer nen aktuellen wert beim Aufruf der Sub
Gruß
« C: Schiffe versenken | Rechnen (mod) mit viel zu großer Zahl, umgehen? » | ||