| |
Allgemeines
xBase++
ist der moderne Nachfolger der Datenbanksprachen der ersten PC-Stunde (Clipper,
dBase) und erfreut sich regen Zuspruchs. Vertrieben wird xBase++ (aktuell v1.9)
von der Firma Alaska Software.
Rene Nooteboom hat nun den Versuch gewagt Datenbanksprache und fischertechnik
Computing miteinander zu verbinden. Unterstützt werden die fischertechnik
Interfaces 30520 Universal, 30402 Intelligent und die ROBO Serie. Zusätzlich
auch noch das Multiface von Knobloch.
Komponenten
Zentrales Element sind - interfacespezifische - Wrapper-Bibliotheken
(ft30520.obj - ft30402.obj - ftroboii.obj - mface.obj), die die Funktionen von umFish30.DLL
bzw. umFish40.DLL und inpout32.DLL xBase-gerecht kapseln. Für das "DrumRum" werden
noch einige weitere .ch und .prg Files benötigt.
Konsolbeispiel : Interface-Diagnose
Aufbau der Konsol-Anwendung für ein ROBO Interface :
- ftriTest.xpj : Projekt
- ftriTest.arc : Resourcen
- ftriTest.ch : Header
- ftriTest.prg : Die Anwendung
- -- und die Include-Files --
- noot.ch / prg : Allgemeine Funktionen
- ft.ch : fischertechnik Konstanten
- umFish40.ch / prg : Load umFish40.DLL
- ftroboii.obj (ftroboii.ch / prg) : Das Wrapper-Objekt
FUNCTION main()
LOCAL nSelectedMotor:=M1,nkey:=0,i
Initialize()
Set Cursor off
Do WHILE !(LastKey() == K_ESC)
@ 3,60 SAY nSelectedMotor PICTURE "9"
FOR i := E1 TO E8
@ i+2,5 SAY LTOC(FtRSensor(iPortHandle,i))
Next i
@ 19,5 SAY FtRAD(iPortHandle,EX) PICTURE "99999999"
@ 20,5 SAY FtRAD(iPortHandle,EY) PICTURE "99999999"
DO CASE
CASE nkey == asc("1")
nSelectedMotor := M1
CASE nkey == asc("2")
nSelectedMotor := M2
CASE nkey == asc("3")
nSelectedMotor := M3
CASE nkey == asc("4")
nSelectedMotor := M4
Otherwise
EndCase
Do Case
CASE Upper(Chr(nkey)) == "R"
FtRMotor(iPortHandle,nSelectedMotor,MCW)
@ nSelectedMotor+3,44 SAY "MCW "
CASE Upper(Chr(nkey)) == "L"
FtRMotor(iPortHandle,nSelectedMotor,MCCW)
@ nSelectedMotor+3,44 SAY "MCCW"
CASE Upper(Chr(nkey)) == "O"
FtRMotor(iPortHandle,nSelectedMotor,MOFF)
@ nSelectedMotor+3,44 SAY "MOFF"
OTHERWISE
EndCase
UpdateLoops()
nkey := Inkey(0.01) // wait 0.01s
EndDo
CloseApplication()
RETURN NIL |
Codeausschnitt der Anwendung (.PRG) : Die ftroboii Funktionen entsprechen denen von umFish40.DLL, deswegen kann
hierfür auch die umFish40-Doku herangezogen werden.
Windowsbeispiel : Komfort-Ampel
![](images/TrafficLight.jpg)
Procedure StartTrafficLight()
LOCAL nPhase:=0,nEvent:=xbe_None,mp1,mp2,oXbp,
LightPhases_,lPushed:=FALSE
LoadColorBitMaps()
ReadData()
DisableDialogs()
oPB_Stop:enable()
// get the traffic light phases-array
LightPhases_ := CreatePhases()
If lAutomatic // change lights continuously and automatic
// second event loop for controlling traffic lights
Do While TRUE
nEvent := AppEvent(@mp1,@mp2,@oXbp,1)
If nEvent <> xbe_None .AND. !(oXbp == NIL)
oXbp:handleEvent(nEvent,mp1,mp2)
EndIf
Do Case
Case nEvent == xbeP_Quit
CloseApplication()
Case nEvent == xbeP_Close
CloseApplication()
Case lStop
Exit
END // endcase
If nPhase <= 0
nPhase := 1
StartStopWatch()
FtROutput(iHandle,LightPhases_[nPhase][IOUTPUTBYTE])
Else
If ElapsedTime() > LightPhases_[nPhase][ITIME]
If ++nPhase > Len(LightPhases_)
nPhase := 1
EndIf
StartStopWatch()
FtROutput(iHandle,LightPhases_[nPhase][IOUTPUTBYTE])
EndIf
EndIf
EndDo
......... |
Mit entsprechend umfangreicherem Source-Code. Der Windows-Code wird von der
XBase IDE generiert. Er kann zusätzlich von Hand modifiziert werden. Der Code
zum Steuern des Interfaces verschwindet da ein wenig.
Downloads
umFish_xBase.ZIP : XBase++ Sources
und Objects
umFish_xBase.PDF : Übersicht
der benötigten Files (auch im ZIP enthalten).
TrafficLight.PDF : Beschreibung des
Ampel-Programms
und
umFish41.ZIP bzw. umFish30.ZIP
: umFish__.DLL einschl. Dokumentation.
Autor
Rene Nooteboom, eMail : r.nooteboom2(a)chello.nl
Stand : 04.09.2006
|