| |
Analog.OCX : Übersicht
Analog.OCX
ist ein Visual Basic UserControl mit dem die Werte der Analog-Eingänge des
fischertechnik Interfaces flexibel dargestellt werden können. Dazu muß es mit
dem Rohwert (rawValue) von EX bzw. EY in regelmäßigen Abständen (z.B. über
einen Timer) aufgerufen (ShowValue) werden.
Die Darstellung erfolgt z.Zt. über die DisplayTypen ftiSegment
(Kreisauschnitt) und ftiVertical (senkrechte Skala). Die Anzeigen sind in
der Größe flexibel. Am unteren Rand können sie mit beschriftet (Description)
werden. Zusätzlich wird hier der aktuelle Meßwert digital angezeigt, die
Maßeinheit kann angegeben werden (Units).
Die Meßwerte können als Rohwerte, d.h. so wie sie vom Interface kommen,
angezeigt werden. Dabei kann der Anzeigebereich gewählt werden ( MinValue,
MaxValue). Außerdem können sie auf einen wählbaren Wertebereich linear
abgebildet werden (MinUnit, MaxUnit). Bei Bedarf kann die
Anzeigerichtung vertauscht werden (Exchanged). Auf diese Weise ist es
z.B. möglich, die von einer Photozelle gemessenen Werte im Bereich von 0 bis
1000 auf Helligkeitswerte im Bereich 20 bis 80 Lumen abzubilden. Da die
Photozelle bei größerer Helligkeit kleinere Werte anzeigt, wird die
Anzeigerichtung vertauscht (Die Beispielwerte wurden mit einer kleinen
Photozelle gemessen, die Umrechnung in Lumen ist erfunden).
Bei Erreichen bestimmbarer Meßwerte (LowArea, HighArea) werden
Ereignisse ausgelöst : GotLow, GotNormal, GotHigh bzw. IsLow,
IsNormal, IsHigh auf die in den entsprechenden Ereignisroutinen
reagiert werden kann. Der Aufruf der Ereignisroutinen kann durch EventsActivated
gesteuert werden.
Eigenschaften
Description |
anzuzeigender MeßwertName |
DisplayType |
Typ des anzuzeigenden Meßinstruments |
EventsActivated |
Aktivieren der Ereignisroutinen |
Exchanged |
Vertauschen der Anzeigerichtung (gößerer Zeigerausschlag, kleinerer Meßwert) |
HighArea |
Beginn des Bereichs der hohen Meßwerte |
LowArea |
Ende des Bereichs der niedrigen Meßwerte |
MaxUnit |
max. anzuzeigender Wert |
MaxValue |
max. zu messender Wert |
MinUnit |
min. anzuzeigender Wert |
MinValue |
min. zu messender Wert |
Units |
anzuzeigende Meßwerteinheit |
Methoden
ShowValue |
Anzeige Instrument mit aktuellem Meßwert |
ValueToUnit |
Umrechnung eines rawValues (Rohwertes, original Meßwertes) in einen unitValue (anzuzeigenden Wert) |
Ereignisse
GotHigh |
akt. Meßwert in die HighArea eingetreten |
GotLow |
akt. Meßwert in die LowArea eingetreten |
GotNormal |
akt. Meßwert in die NormalArea eingetreten |
IsHigh |
akt. Meßwert liegt in der HighArea |
IsLow |
akt. Meßwert liegt in der LowArea |
IsNormal |
akt. Meßwert liegt in der NormalArea |
Beispiel : Testrahmen
Im Beispiel werden die Meßwerte eines Photowiderstandes (32 698) zweimal
dargestellt : links mit DisplayType = ftiVertical die Originalmeßwerte des
Photowiderstandes, rechts die auf eine (fiktive) Raumhelligkeit umgerechneten
Werte mit DisplayType = ftiSegment. Unter dem rechten Display wird zusätzlich
angezeigt, ob sich der Meßwert im Bereich normal, LOW oder HIGH befindet. Die
Grenzwerte sind außerdem in den Skalen mit blau (LOW) und rot (HIGH) markiert.
Das eigentliche Programm konzentriert sich auf die Routine cmdAction_Click :
Private Sub cmdAction_Click()
ana.MinUnit = 20
ana.MaxUnit = 80
ana.MinValue = 0
ana.MaxValue = 1000
ana.Exchanged = True
ft.AnalogScan = True
If ft.OpenInterface("COM1") = ftifehler Then
MsgBox "InterfaceProblem " & "COM1", vbCritical + vbOKOnly, "AnalogAnzeige"
Exit Sub
End If
cmdEnde.Enabled = False
cmdAction.Enabled = False
ana.EventsActivated = True
lblESC.Visible = True
Do
anb.ShowValue ft.Analogs(ftiAEY)
ana.ShowValue ft.Analogs(ftiAEY)
ft.Pause 200
Loop Until ft.Finish(1)
ft.CloseInterface
ana.ShowValue 0
lblESC.Visible = False
cmdAction.Enabled = True
cmdEnde.Enabled = True
cmdEnde.SetFocus
End Sub
- Das Beispielprogramm ist in einer Programmgruppe (ftDisOCX.vbg) abgelegt
mit separaten Projekten für das ftDisplay.OCX (ftDisplay.vbp / Analog.ctl)
und den Testrahmen (ftDisplayTest.vbp / ftAnalogTest.FRM). Es kann auch in
einem einzigen Projekt ftDisplayTest.vbp mit ftAnalogTest.FRM und Analog.CTL
abgelegt werden. Beim Importieren von Analog.CTL wird der Scope dann
automatisch auf private umgestellt (VB_Exposed = False).
- FishFa50.OCX auf der Form plazieren (ein Arbeiten mit umFishEx.BAS ist
genauso möglich)
- Zwei Instanzen von Analog.ctl auf der Form plazieren (ana und anb) und die
Eigenschaften : Description = "Photozelle", Units = "Ohm", DisplayTypes = 2, LowArea = 200, HighArea = 800
für anb und für ana die Eigenschaften : MinUnit = 40, MaxUnit = 80, Exchanged = -1 'True, Description = "Raumhelligkeit", Units = " Lumen"
HighArea = 65 einstellen.
- ana.MinUnit = 20 .... überschreiben die entsprechenden in der
Eigenschaftsliste eingestellten Eigenschaften (nur zu Demozwecken).
- ft.AnalogScan = True ... Verbindung mit dem Interface
- ana.EventsActivated = True Die Eventroutinen werden aktiviert.
- Do ... Loop Until ft.Finish(1) Endlosschleife zur Abfrage und
Anzeige der Analogwerte. Ende der Schleife durch ESC-Taste oder E1 = True
Ereignisroutinen
Private Sub ana_GotHigh(ByVal aktValue As Single)
lblArea = "HIGH"
lblArea.BackColor = vbRed
End Sub
Private Sub ana_GotLow(ByVal aktValue As Single)
lblArea = "LOW"
lblArea.BackColor = vbBlue
End Sub
Private Sub ana_GotNormal(ByVal aktValue As Single)
lblArea = "normal"
lblArea.BackColor = &H8000000F
End Sub
- In den Ereignisroutinen ana_GotHigh, _GotLow, _GotNormal wird nichts
weiter gemacht als in lblArea den aktuellen Wertebereich anzuzeigen. Die
Ereignisroutinen werden nur aufgerufen, wenn sich der Wertebereich ändert,
also nicht bei jedem Meßwert (das wären dann IsHigh ...).
Sources und Zubehör
Die vollständige Source für das Beispiel befindet sich in AnaOCX.ZIP
zusätzlich ist FishFa50.ZIP oder umFishVB.ZIP
erforderlich. Bei umFish.BAS (umFishVB.ZIP) ist statt ft.OpenInterface ...
ftiOpenInterface ... zu schreiben.
|