[vb.net] data retrieval
Geplaatst: ma 20 feb 2012, 21:11
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
ik doe bovenaan de klasse "Private withEvents oTag as clsTag"
en dan de handler die dus ook in clsMain staat
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!
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)
...
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)
...
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!