vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Variablen anhand Stringinhalt bearbeiten??? 
Autor: kinglazee
Datum: 15.03.10 23:23

Hallo,

habe mich bereits bei Google versucht, leider fallen mir zu dem was ich hier vor habe keine Vernünftigen Suchbegriffe ein. Ich finde keinen Anhaltspunkt.

Ich habe durch einen Timer einen immer wieder kehrenden Zyklus der Werte einer Steuerung abfrägt, bloß binäre Nullen und Einsen.
Habe eine Flankenerkennung dazu programmiert.

z.B. Für das Signal "Linie Taktet" benutze ich 2 Bool Var's:
bLinTaktet & bLinTaktetBefore

Meine Sub schaut in etwa so aus:

bLinTaktetBefore = bLinTaktet
bLinTaktet= LeseWert() (eigene fertige Funktion zum einlesen der Daten)

und dann kann ich abfragen:
if bLinTaktetBefore = False and bLinTaktet then
...
end if

Soweit so gut!

Nun muss ich das ganze Gerüst so oft wiederholen das ich mir dachte ob ich mir nicht eine Funktion schreiben kann die mir die Flanken erkennen kann indem ich die "StammVariable" übergebe und bekomme in Bool-Form True oder False zurück.

Demnach müsste ich aber bei der Übergebenen Variable immer dessen Namen um "Before" erweitern...??? (Ich möchte nicht umbedingt immer beide Var's übergeben müssen, denn wenn ich die StammVar übergebe kommt ja IMMER dieses "Before" hintendran.
Und genau das iss meine grosse Frage... Wie kann ich das anstellen? Ich steh echt voll auf'm Schlauch damit!

Ich hoffe mein Problem verständlich erklärt zu haben.
Bin für jeden Tipp dankbar.

Gruß,
kinglazee
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Variablen anhand Stringinhalt bearbeiten??? 
Autor: Manfred X
Datum: 16.03.10 06:31

Hallo!

Klar ist mir nicht, was Du meinst.
Was bedeutet "Stammvariable"?

Du filterst anscheinend aus den vier möglichen
Abfolge-Varianten 00 01 10 11 die Variante 01 aus.

Meinst Du vielleicht irgendwie so was?

public function Flanke() as boolean
    static val_before as boolean
 
    dim val_now as boolean = LeseWert()
 
    if not val_before and val_now then 
         val_before = val_now
         return true
    else
         val_before = val_now
         return false
    end if
end function
Du siehst: Ich kapiere nichts ...
Aber vielleicht wird Dir jetzt klarer, worin die
möglichen Mißverständnisse bestehen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Variablen anhand Stringinhalt bearbeiten??? 
Autor: ModeratorDaveS (Moderator)
Datum: 16.03.10 11:27

Warum machst du nicht einfach eine Funktion?

xxbefore = Func(xxbefore)

und gibst den ursprünglichen Wert wieder zurück. (Ginge auch mit ByRef, aber das vermeidet man besser). Nicht, dass ich wirklich eine Ahnung von Flankenerkennung bei binären Signalen habe.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Variablen anhand Stringinhalt bearbeiten??? 
Autor: kinglazee
Datum: 16.03.10 11:34

Hi Manfred X,

mal Danke für den Hinweis das es doch noch etwas besser umschrieben werden muss damit es verständlicher wird.

Also ich habe in meinem Programm sowas:

            '-----> LINIE BEGINNT TRANSPORT
            'Überprüfung auf Positive Flanke von Signal "Linie taktet"
            If bLinTaktetBefore = False And bLinTaktet Then
                SchreibeInDB()
            End If
Da ich diese Abfrageblöcke immer wieder (und auch oft verschachtelt) hab möcht ich das ganze versuchen etwas zu vereinfachen mit einer Funktion die in etwa so aussehen könnte:

Statt dem oberen Source dann diesen: If FlankePos(bLinTaktet) then...

Die Funktion sollte dann automatisch den Wert von bLinTaktet und bLinTaktetBefore (!) entsprechend abfragen. Wobei ich aber nur bLinTaktet (die von mir gedachte "Stammvariable") angeben möchte und die Funktion auf die "Stammvariable"&"Before" abfragen sollte.

Dazu muss ich aber einer übergebenen Variable ein Stück Text anhängen ("Before") und sie anschliessend abfragen können.
Wird es nun verständlicher? Ich hoffe doch...

Ich weiß das ich sowas auch mal in VB6 gemacht hab, aber das iss schon ne soooo ewige Zeit her das ich einfach nicht mehr weiß wie ich das Kind beim Namen nennen kann. Finde auch leider das Projekt nicht mehr wo ich dies Angewendet hab.

Hoffe mir kann geholfen werden.

P.S. Mir fiel gerade auf das mein Thread-Name wohl auch nicht der passendste dafür war. Sorry!

Best regards,
kinglazee
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Variablen anhand Stringinhalt bearbeiten??? 
Autor: Manfred X
Datum: 16.03.10 13:07

Hallo!

Das Problem ist die schnelle "Vermittlung" zwischen
den Funktionen "LeseWert" und "SchreibeInDB" - immer dann
wenn eine Signalflanke auftritt?

Liegen die Gründe für den von Dir angezielten Optimierungsversuch
darin, dass ein Pufferspeicher fehlt, weil "LeseWert" sehr viel
schneller arbeitet als "SchreibeInDB"?

Woran erkennt "Lesewert" den Signaltakt? Wartet Deine
Anwendung auf das nächste Signal?

Wie kommt es zu verschachtelten Aufrufen?
Hast Du keine "äußere" Taktschleife im Programm?

MfG Manfred

Beitrag wurde zuletzt am 16.03.10 um 13:10:45 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Variablen anhand Stringinhalt bearbeiten??? 
Autor: kinglazee
Datum: 16.03.10 20:49

Okay, jetzt zum simpelsten vom simpelsten:

ich hab ne Bool-Var die lautet bLinTaktet und eine die heisst bLinTaktetBefore (beide sind vorab definiert)

Wie kann ich jetzt die Variable bLinTaktetBefore ansprechen ohne ihren richtigen Namen zu benutzen? Also ich möchte ihn zusammenbasteln aus bLinTaktet und dem String-Anhängseln "Before" und anschliessend abfragen können.

str = "Before"
bTemp = Wert von(bLinTaktet & str)

OK???

Dieses Prinzip möchte ich gern. Mehr eigentlich nicht.
Ich hab alles nur so weit umschrieben damit verständlich wird warum ich das möchte, aber ich glaub der Schuss ging nach hinten los, denn ihr driftet durch meine größzügige Umschreibung, meiner eigentlichen Frage ab. (Oder ich hab mich einfach nur SAAAAAUUUUU-Dämlich ausgedrückt ^_^ )



DaveS: Binäre takte sind ja nichts anderes als Bool-Variablen in einer Steuerung, dort werden sie eben als 0 oder 1 angezeigt. Eine Zustandsänderung von 0 --> 1 im nächsten Zyklus der Steuerung wird als positive Flanke gesehen, eine Zustandsänderung von 1 --> 0 im nächsten Zyklus wird als negative Flanke gesehen oder bezeichnet. Aber ich bin relativ sicher das du das bereits wusstest. Aber mehr gibt es dazu auch schon garnicht. (Außer man ginge jetzt in Mikrosekunden-Bereiche und möchte die Flankenanstiegs- oder Flankenabfallszeiten bestimmen und auswerten.)

ManfredX: Mein Programm bzw. der eigentliche aufbau dessen ist soweit schon konstruiert. Zur Zeit wird noch alles von einer Form gehandlet. (Später ohne Form und nur über Module) Ein Timer ruft immer wieder eine Abfrage-Routine auf. Diese liest Werte aus einer Siemens SPS und schreibt sie mir in ein Byte Array. Anschließend wandle ich die einzelnen Bytes von Zahlenwerte in einen 8-stelligen String Wert der nur aus Nullen und Einsen besteht. Über die Funktion Mid(String, Start, Länge) bekomm ich die einzelnen Werte in Bool-Variablen. (Das prinzip werde ich bei zu großem Zeitverlust noch überarbeiten, ich weiß das geht Chiptechnisch schneller wenn ich sie direkt in bool's stecke.) Aber dann hab ich es komplizierter diese für's menschlische Auge sichtbar zu machen - was ich zu develope-Zeiten einfach noch brauche.
Da ich zur Zeit auch noch nicht mit Threads Arbeite, bzw. es auch noch garnicht versucht hab, kann es Programmtechnisch nicht passieren das die Abfrage zu langsam ist um anschliessend Daten in eine DB zu schreiben. Ich habe also nur einen Programmzeiger.

Wenn wir gerade bei Threads sind... Hat jemand gerade nützliche Links zur Hand? Habe gehört in VB2008 Express wäre es sehr einfach damit um zu gehen. Stimmt das überhaupt?

Trotzdem Danke für die netten Anregungen. Sie bringen weitere Ideen ^^

Gruß kinglazee
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Variablen anhand Stringinhalt bearbeiten??? 
Autor: Manfred X
Datum: 16.03.10 22:06

Hallo!

Vielleicht solltest Du statt einer Reihe von Variablen
eine generische Dictionary verwenden: Typ = (of String, Boolean)

Den "Variablennamen" weist Du der TKey-Eigenschaft zu,
der aktuelle Wert steht jeweils in der TValue-Eigenschaft
des einzelnen Elementes der Dictionary-Auflistung.

Den Variablen-Namen (=Key) kannst Du dann zusammensetzen,
wie du willst.

Die Dictionary-Instanz sollte global im Formular vereinbart sein.
Zur Laufzeit kannst Du bei jeder Abfrage auch Elemente anfügen und
abgearbeitete Elemente wieder löschen (wg. der verschachtelten
Aufrufe).

TKey-Belegungen müssen eindeutig sein, aber das gilt für
Variablennamen ebenfalls.
Die Dictionary arbeitet intern mit einer Hashtable und ist
deshalb sehr effizient - kein relevanter Rechenzeitverlust.

Beitrag wurde zuletzt am 16.03.10 um 22:13:07 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Variablen anhand Stringinhalt bearbeiten??? 
Autor: kinglazee
Datum: 17.03.10 01:23

Supi...

Das hier iss schonmal der erste richtig Gute Ansatz zu dem ganzen was ich machen will.
Dankeschön =)

Ich hab das jetzt mal mehr oder weniger überflogen und ich glaub das ganze kann man etwas mit dem SVerweis von Excel vergleichen. Bloß das man hier natürlich unzählig viele Variablentypen benutzen kann. Wenn ich es richtig seh sogar ganze Controls mit reinpacken kann. Oder?
Denn ich hab natürlich auch ne ganze Reihe LED's (PictureBoxen) in meinem Projekt.

Ich werd mir das heute nicht mehr antun. Aber ich werd morgen mittag mal versuchen das ganze zu testen. Allerdings kann ich nix versprechen da noch en Roboter drauf wartet umprogrammiert zu werden.

Habe aber mal für alle die es auch interessiert den MSDN Link rausgesucht:
http://msdn.microsoft.com/de-de/library/xfhwa508.aspx

Und Google liefert mit "Generic Dictionary" oder "generische Klasse" mehr Ergebnis als wahrscheinlich nötig.
Mir fehlte bloß der Suchbegriff. ^^

Besten Dank Manfred X!
Gruß kinglazee
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Variablen anhand Stringinhalt bearbeiten??? 
Autor: ModeratorDaveS (Moderator)
Datum: 17.03.10 09:31

Flankenerkennung kenne ich nur aus Bildbearbeitung und viel Interesse daran habe ich nicht. Es geht mir darum zu verstehen was du genau machst, weil deine zwei Erklärungen ziemlich unterschiedlich sind. Wenn das sehr schnell gehen soll willst du bestimmt nicht mit Strings und Dictionaries rumhantieren. Wie ich das bis jetzt mehr oder weniger verstanden habe hast du mehrere boolischen Variablen, willst bei einer solchen Variable einen neuen Wert einlesen, aus den neuen und alten Werten einen booleschen Wert als Ergebnis berechnen und den alten Wert mit dem neuen ersetzen. Das ginge eventuell am besten mit einer kleinen Klasse, die du statt einfacher Variablen benutzen kannst, so in der Art
    Public Structure EVC
        Private val As Boolean
 
        Public Function NewVal() As Boolean
            Dim val1 As Boolean = LeseWert()
            Dim res As Boolean = Not val And val1
            val = val1
            Return res
        End Function
 
        Public Function LeseWert() As Boolean
            ' neuen Wert einlesen und zurückgeben
        End Function
 
    End Structure
Aufruf
    Dim vala As EVC ' Variable
    Dim valb As EVC ' Variable
 
    If vala.NewVal() Then
        ' ...
    End If
Dann sind die Operationen in Zusammenhang mit solchen Werten in dieser Klasse (oder Structure) zusammengefasst. Falls das irgendwie in deinem Sinne ist.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Variablen anhand Stringinhalt bearbeiten??? 
Autor: Manfred X
Datum: 17.03.10 11:05

Hallo Dave!

So wie ich es verstanden habe, geht es insbesondere
auch um die Verwaltung der Reihenfolge dieser Variablen-Werte
bei verschachtelten Aufrufen der Lesefunktion - nicht einfach um
das möglichst "OOP-konforme" Verpacken der Einzel-Informationen.

Und da könnte eine System.Collections.generic.List(Of EVC)
nützlich sein - oder vielleicht sogar eine Queue.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Variablen anhand Stringinhalt bearbeiten??? 
Autor: ModeratorDaveS (Moderator)
Datum: 17.03.10 11:10

Es geht nicht darum OOP-Konform zu sein, was immer das bedeuten mag, sondern darum eine gute praktische Lösung zu haben. Was man mit der Klasse dann anstellt bei einer bestimmten Anwendung ist natürlich ganz offen.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Variablen anhand Stringinhalt bearbeiten??? 
Autor: Manfred X
Datum: 17.03.10 11:24

Nur zur Ergänzung:
Bei den Signalen handelt es sich wohl um eine Reihung.
Die EVC-Klasse müßte deshalb vermutlich noch eine
Property zur einfachen Zuweisung/Abfrage des aktuellen
Wertes besitzen, damit der "Staffelstab" in der Reihung
von einer Instanz zur nächsten lückenlos weitergegeben
werden kann.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Variablen anhand Stringinhalt bearbeiten??? 
Autor: Manfred X
Datum: 17.03.10 12:30

.... sorry!
gemeint war: der Wert vor dem aktuellen Wert (val1)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel