Computerhilfen.de Logo
Forum
Tipps
News

VB6 wechselntes signal von 1 auf 0

Hallo!!
Kurze Einleitung  :)
Habe über Winsock (UDP-Protokoll) 6 ankommende Signale mit 1 und 0, diese sind mit
If Mid(Zustand,1,1)="1" definiert,
bei einer konstant anstehender 1 geht für jedes seperate Signal ein Label in den Vordergrund und wechselt die Farbe,bei 0 geht es wieder in den Hintergrund.
Jetzt habe ich das Problem das die ankommenden Signale nicht immer konstant sind, sondern von 1 auf 0 dauernd wechseln.Bei diesem dauerhaften wechseln von 1 auf 0 müssen die Labels wie bei einer konstanten 1 in den Vordergrund gehen bis eine dauerhaft anstehende 0 kommt.
Wie kann ich bei wechseln von 0 auf 1 dies programmieren, dass ich wie bei einer konstanten 1 die Labels in den Vordergrund bekomme.
Hier ein Programmauszug:

Private Sub UDPClient_DataArrival

 UDPClient.GetData Zustand  
                       
  If Farbe = vbWhite Then
     Farbe = vbRed
  Else
     Farbe = vbWhite
  End If
 
  If Mid(Zustand, 1, 1) = "1"Then              
       lblVenoeser.BackStyle=1                              lblVenoeser.BackColor = Farbe
  Else
      lblVenoeser.BackStyle=0                            
  End If
 
  If Mid(Zustand, 2, 1) = "1"Then                    
        lblArterieller.BackStyle = 1
        lblArterieller.BackColor = Farbe
  Else
        lblArterieller.BackStyle = 0
  End If

Hoffe es kann jemand damit was anfangen :)

Gruß


Antworten zu VB6 wechselntes signal von 1 auf 0:

Hmm, kannste ja jeweils das erste Paket zwischenspeichern bis das 2te da ist und dann beide vergleichen welche Werte gleichgeblieben sind.

Gruß

Sorry, aber damit kann ich nicht viel anfangen???

Warum nicht?

Brauchst doch nur das erste mit dem 2ten Vergleichen

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 & mid(temp_zustand,x,1)
       endif
    next
  'Aktueller Zustand zwischenspeichern für Abgleich
  temp_zustand=Zustand
endif

Wird dann natürlich ungenauer die Auswertung, weil nur jedes 2te relevant ist dann..

Gruß

« Letzte Änderung: 13.04.04, 18:09:09 von Nighty »

Funktioniert so nicht, habe aber eine andere Idee!!
Habe nun das Problem das die Labels erst in den Hintergrund gehen dürfen, wenn das signal 0 für mindestens 2sec.ansteht.
Da jetzt wie bei 1 auch bei 0 die Labels in den Vordergrund geht.
Wie kann ich sagen
If Mid(SchalterZustand, 1, 1) = "0"   mindestens 2sec. erst dann geht Label in den Hintergrund


If Mid(SchalterZustand, 1, 1) = "1" Then                      
        lblVenoeser.BackStyle = 1                            
        lblVenoeser.BackColor = Farbe
       
  ElseIf Mid(SchalterZustand, 1, 1) = "0" Then
        lblVenoeser.BackStyle = 1
        lblVenoeser.BackColor = Farbe
                             
  End If

Gruß

Du sparst immer ganz schön mit deinen Aussagen, wäre nett wenn du die mal näher ausführen könntest.

'Sorry, aber damit kann ich nicht viel anfangen???'
oder
'Funktioniert so nicht'

...hilft nicht viel weiter

Was funktioniert daran nicht, oder ist es nur nicht praktikabel oder was auch immer?

Zitat
Habe nun das Problem das die Labels erst in den Hintergrund gehen dürfen, wenn das signal 0 für mindestens 2sec.ansteht.

Ne Zeispanne für die Prüfung kannst praktisch garnicht nehmen weil du ja keine Konstante Laufzeit der ankommenden Daten hast.

Dauert die Übertragung eines Paketes mehr als 2sek haste garkeine Daten, dauerts mehr als 1 sek haste die gleiche Situation wie jetzt.

Ergo kannst nur ne bestimmte Anzahl der kompletten angekommenen Daten abgleichen.

Gruß
« Letzte Änderung: 14.04.04, 16:44:56 von Nighty »

Hi,

Sorry, aber meistens denkt man es so einfach wie möglich zu erklären dabei wird es immer komplizierter,

Also,die Signale mit 1 und 0 sind High and Low Signale die von Dioden abgenommen werden und über Optokoppler gesendet werden(über USB-Schnittstelle), ist die Diode aus habe ich 0, leuchtet diese habe ich 1, dass Problem ist das die Diode das blinken anfängt und somit ich dieses wechselnde Signal von 1 und 0 bekomme, dass blinken hat die selbe Bedeutung wie ein konstantes leuchten der Diode, deswegen habe ich ein Intervall von einer sec.beim blinken und wenn jetzt z.B. mindestens 2sec. eine 0 anliegt, kann man sagen die Diode leuchtet nicht und die Labels können in den Hindergrund

Hoffe es ist etwas klarer geworden :)

Gruß

Zitat
Sorry, aber meistens denkt man es so einfach wie möglich zu erklären dabei wird es immer komplizierter,

Naja kompliziert darfs schon sein, solange man genuch Infos hat..dann kan man sich auch ein Bild machen

Zitat
Also,die Signale mit 1 und 0 sind High and Low Signale die von Dioden abgenommen werden und über Optokoppler gesendet werden(über USB-Schnittstelle)

Aber dort wo du die Auswertest, kommen die Daten doch über die Winsock per UDP an oder?
(Habe über Winsock (UDP-Protokoll) 6 ankommende Signale mit 1 und 0)

Zitat
ist die Diode aus habe ich 0, leuchtet diese habe ich 1, dass Problem ist das die Diode das blinken anfängt und somit ich dieses wechselnde Signal von 1 und 0 bekomme

Das is soweit klar...das hatten wir ja schon beim erstenmal vor nem Monat oder so..

Du bekommst also per UDP nen String der die Zustände der Dioden anzeigt, oder?

Zitat
dass blinken hat die selbe Bedeutung wie ein konstantes leuchten der Diode

Also Blinken=1

Zitat
deswegen habe ich ein Intervall von einer sec.beim blinken

Blinken die Dioden also immer im Intervall von 1sec, was dann dem Zustand=1 entspricht?

Wenn ja heisst das aber noch nicht das die Daten auch Konstant geliefert werden oder doch?
Kann ich mir ned vorstellen...wenn UDP

Oder isses ganz anderst?

Zitat
und wenn jetzt z.B. mindestens 2sec. eine 0 anliegt, kann man sagen die Diode leuchtet nicht und die Labels können in den Hindergrund

Ich dachte jetzt gehts um die blinkenden/flackernden, dann liegt doch garnie 2sek lang ne 0 an, wenn die Blinkrate 1sec ist.

Fragen über Fragen *gg

Gruß

Gute
Soweit stimmt das wie Du es verstanden hast, aber zum schluss gibt es noch kleine Verständigungsprobleme!
Und zwar hab ich mit den 2sec. für 0 ein Beispielwert genommen, dass Problem ist das ich irgendwie angeben muß wenn die Dioden aus sind das eine 0 ansteht und die Labels in den Hintergrund gehen, aber beim blinken der Diode habe ich auch kurzzeitig eine 0 anliegen, aber das Label darf nicht in den Hindergrund gehen.

Mit einer If Schleife wo ich zwei Zustände angebe (wenn 1 und 0 dann..) kann ich auch nicht arbeiten, da 1 und 0 nicht gleichzeitig anliegen sondern abwechselnt vorkommen, oder???

Gruß

Naja du hast ja eigentlich 3 Zustände

Flackern
An
Aus

...und willst es mit 2 Zuständen 0/1 beschreiben.

Funktioniert eigentlich nicht...

Wie willst du unterschieden ob es ein Flackern ist wenn 0 und dann 1 für die Diode kommt, oder ob sich der Zustand tatsächlich geändert hat?

ZB.

P1: 010101
P2: 010010
P3: 100110
P4: 001100

Diode1 könnte bedeuten:

Aus->Aus->AN->Aus
oder
Aus->Aus->Flackern
oder
Aus->Flackern->Aus

Irgendne Unterschiedung oder Regel brauchste was den jeweiligen Zustand eindeutig beschreibt.

Gruß

Hi

Habe eigentlich nur 3 Zuszände

1,  1           für LED an
2,  0           für LED aus
3,  10101010    für blinkende LED

Bei Zustand 1 und 2 gibt es keine Probleme,
tritt jetzt Zustand 3 in Kraft, kennt das Programm diesen wechselnden Zustant nicht und  reagiert falsch, da Zustand 3 identisch mit 1 sein muß.
Im moment ist nur Zustand 1 für Label in den Vordergrund gehen und Zustand 0 für Label in den Hintergrund gehen definiert.

Gruß

Zitat
Habe eigentlich nur 3 Zuszände

1,  1          für LED an
2,  0          für LED aus
3,  10101010    für blinkende LED

Ja sag ich ja du hast 3 Zustände, willst die 3 Zustände aber mit 2 Zuständen beschreiben und das funktioniert nicht.

Wenn du sagst der 3 Zustand ist 10 musst auch die andern über 2xDaten definieren ( 00 oder 11)

Du kannst nicht festlegen das 0=aus,1=an und 10 oder 01 flackern ist

Weil die 01 oder 10 für Flackern auch aus/an oder an/aus sein kann.

Zitat
tritt jetzt Zustand 3 in Kraft, kennt das Programm diesen wechselnden Zustant nicht und  reagiert falsch, da Zustand 3 identisch mit 1 sein muß.

Woher soll denn das Programm wissen das die ankommende 0 nicht ein definitves aus ist anstatt der anfang eines Flackerns um das gehts doch weil eine permanenete 0 völlig, zu 100% und absolut identisch ist wie die erste 0 des flackerns...

Gruß
« Letzte Änderung: 15.04.04, 18:00:17 von Nighty »

Ja genau,
aber wie definiere ich jetzt Zustand 1010 oder 01010 so, dass dieser wie bei 1 reagiert und das der Zustand 0 eindeutig ist.
Deswegen war meine einzigste Idee im moment, das ich irgentwie über einen Timer sage wenn ich z.B. für 3sec. eine 0 habe die Labels in den Hintergrund gehen.Da das wechseln des Signal beim Blinken schneller wechselt und ich niemals für 3sec. eine konstande 0 anstehen habe.

Gruß

Könntest dich auch mal anmelden hier ,dann kann man im Chat quatschen...

Hi,
bin angemeldet und habe mich eingeloggt aber komme nicht in den Chat rein, soll mich erst Registrieren, bin ich doch schon ???


« C: Schiffe versenkenRechnen (mod) mit viel zu großer Zahl, umgehen? »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!