| |
VB.NET - Ein- und UmsteigerVariablen 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 | |
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. | |
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 | |
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. | |
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 | |
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. | |
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 | |
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. | |
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. | |
Re: Variablen anhand Stringinhalt bearbeiten??? | | | Autor: Manfred X | Datum: 17.03.10 12:30 |
| .... sorry!
gemeint war: der Wert vor dem aktuellen Wert (val1) | |
| 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 |
|
|
sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|