Gebruikersavatar
RaYK
Artikelen: 0
Berichten: 846
Lid geworden op: vr 09 feb 2007, 14:20

[vb.net] data retrieval

Hey,

ik ben bezig met een programma te schrijven die monitoring doet van verscheidende sensoren.. De data van de sensoren gaan eerst naar een database waar ik ze dan constant uitlees.

ik heb dus een klasse clsMain en clsTag, clsMain is de klasse waar alle berekeningen gebeuren, clsTag is de klasse voor 1 enkele 'tag' of 1 parameter uit de db. Het is dus de bedoeling vanuit clsMain meerdere oTag objecten uit clsTag te maken en in deze tag apart adhv een sqlcommand die ik meegeef de value van de respectievelijke tag uit de db te halen.

In het tagobject heb ik dan een timer die om de 3 seconden de database controleert of de waarde die dan ter beschikking is verschilt met de waarde die ik de vorige keer had gebruikt. Is de waarde niet dezelfde dan wordt een event afgevuurd waarvan de handler in clsMain staat en dus in clsMain wordt uitgevoerd.

code in clsMain waar de tags worden geinitialiseerd

Code: Selecteer alles

For

i = 1 To 15

SelectCase i

Case 1

sTagVar = "dTempLNG"

sTag = "63TI026.PNT"'C

oTag = New clsTag(sTagVar, oServer, sTag)

arrTags.Add(oTag)

Case 2

sTagVar = "dDrukLNG"

sTag = "68PIC007.MEAS"'barg

oTag = New clsTag(sTagVar, oServer, sTag)

arrTags.Add(oTag)

...
ik doe bovenaan de klasse "Private withEvents oTag as clsTag"

en dan de handler die dus ook in clsMain staat

Code: Selecteer alles

Private Sub oTag_gotUpdate (Byval sender As clsTag, Byval dValue As Double) Handles oTag.gotUpdate

SelectCase sender.TagVar

Case"dTempLNG"

dTempLNG = dValue

MessageBox.Show("Var: " & sender.TagVar & " value1: " & dValue)

Case"dDrukLNG"

dDrukLNG = dValue

MessageBox.Show("Var: " & sender.TagVar & " value1: " & dValue)

...
wat er nu precies misloopt is dat als ik het programma run voor alle tagvalues 0 binnenkrijg buiten de laatst geinitialiseerde in die for loop (de 15de tag dus). Ik doe een RaiseEvent in oTag wanneer de nieuwe value uit de database verschillend is van de vorige waarde die ik uit de database gehaald heb. Dit om geen overbodige events af te vuren en de processor nog meer te belasten. In het begin staan alle values op 0 dus zouden ze allemaal moeten een event afvuren en als je de handler bekijkt zou ik dus 15 messageboxen moeten krijgen.. Dit krijg ik dus niet, ik krijg enkel de messagebox van de laatste geinitialiseerde oTag uit die for loop.

Als ik daar bijv die i = 1 to 15 verander naar i = 1 to 2 dan krijg ik enkel een messagebox voor dDrukLNG en niets voor dTempLNG ondertussen ik daar eigenlijk ook een oTag object voor heb die om de 3 seconden kijkt naar een update..

iemand een idee wat er hier zou mis kunnen lopen??

alvast bedankt!
Steun de wetenschap en het forum en versterk ons boinc team! - voor meer info kijk op de hoofdpagina onder 'distributed computing'



"The beginning of knowledge is the discovery of something we do not understand" - Frank Herbert (1920-1986)
Gebruikersavatar
Xenion
Artikelen: 0
Berichten: 2.609
Lid geworden op: za 21 jun 2008, 10:41

Re: [vb.net] data retrieval

Niet zeker maar:

Op msdn lees ik "Specifies that one or more declared member variables refer to an instance of a class that can raise events."

De Withevents is dus gebonden aan de oTag variabele en enkel de instantie van een clsTag die aan die variabele gebonden is zal dan Events kunnen raisen.
ik doe bovenaan de klasse "Private withEvents oTag as clsTag"

oTag = New clsTag(sTagVar, oServer, sTag)
Ik vermoed dat arrTags een soort lijst is waarin je de References naar de gemaakte objecten wil bewaren, maar de Withevents werkt daar dan niet meer op.

Ik heb al jaren geen VB meer gebruikt dus ik weet helaas niet zo direct hoe je het zou kunnen oplossen.

Mss dat je clsTag als subclass kan definiëren binnen clsMain en dat je dan algemeen een handler kan definiëren voor dat update Event?

Wel leuk om te zien dat er nog mensen VB gebruiken ;) Ik vond dat vroeger ook een fijne taal.
Gebruikersavatar
RaYK
Artikelen: 0
Berichten: 846
Lid geworden op: vr 09 feb 2007, 14:20

Re: [vb.net] data retrieval

Hey Xenion

bedankt voor je reactie!

Die arrTags gebruik ik eigenlijk nog niet, ik dacht eraan om die oTag objecten in een arraylist op te slaan om dan later door te sturen naar een ander object maar ben daar nog niet toe gekomen, en zal waarschijnlijk ook niet doorgaan.

Bovenaan declareer ik dus oTag als een clsTag object die withEvents is puur om vanuit oTag events te kunnen afvuren naar clsMain. Ik dacht eerst dat het zou liggen omdat ik in principe maar 1 oTag object declareer ondertussen er eigenlijk 15 zijn en dat hij dan enkel maar de laatste instantie van die for loop linkt met die declaratie ofzo..

Nja ik snap het echt niet, hopelijk kom ik eruit want het is vrij belangrijk dat ik dit werkende krijg.
Steun de wetenschap en het forum en versterk ons boinc team! - voor meer info kijk op de hoofdpagina onder 'distributed computing'



"The beginning of knowledge is the discovery of something we do not understand" - Frank Herbert (1920-1986)
Gebruikersavatar
Xenion
Artikelen: 0
Berichten: 2.609
Lid geworden op: za 21 jun 2008, 10:41

Re: [vb.net] data retrieval

Private Sub oTag_gotUpdate (Byval sender As clsTag, Byval dValue As Double) Handles oTag.gotUpdate

Dit is het probleem, je Handler werkt op oTag.gotUpdate. Specifiek op de instantie van een clsTag die opgeslagen zit in de variabele oTag, de laatste die je invult dus.

Kan je daar misschien clsTag.gotUpdate van maken? Desnoods binnen de class clsTag zelf?
Gebruikersavatar
RaYK
Artikelen: 0
Berichten: 846
Lid geworden op: vr 09 feb 2007, 14:20

Re: [vb.net] data retrieval

Hey,

vandaag zal ik geen internet hebben, maar ik zal eens kijken wat ik zou kunnen doen om het op te lossen.

Bedankt!
Steun de wetenschap en het forum en versterk ons boinc team! - voor meer info kijk op de hoofdpagina onder 'distributed computing'



"The beginning of knowledge is the discovery of something we do not understand" - Frank Herbert (1920-1986)
Gebruikersavatar
RaYK
Artikelen: 0
Berichten: 846
Lid geworden op: vr 09 feb 2007, 14:20

Re: [vb.net] data retrieval

Het is opgelost!

Ik heb die handler weggedaan en een gewone methode geschreven

Code: Selecteer alles

Private sub oTags_gotUpdate(Byval oTag as clsTag, Byval tagvalue as double)
en dan in iedere case heb ik een addhandler toegevoegd

Code: Selecteer alles

Addhandler oTag.gotUpdate, AddressOf Tags_gotUpdate
werkt perfect..

Bedankt Xenion!
Steun de wetenschap en het forum en versterk ons boinc team! - voor meer info kijk op de hoofdpagina onder 'distributed computing'



"The beginning of knowledge is the discovery of something we do not understand" - Frank Herbert (1920-1986)

Terug naar “Informatica en programmeren”