Microsoft Small Basic

Program Listing: QCX116-1
' Bitte die 2 Progs vor Testen an ======== auf 2 Blätter auftrennen
' LDIO~ Commands deaktiviert und dafür Consolenausgabe

' Prog1
GraphicsWindow.Show()
GraphicsWindow.Title = "1.Warriorprogramm"
'c = LDIOWarrior.Initialise()
GraphicsWindow.DrawBoundText(420,20,200,"c" + " Gerät(e) angeschlossen") ' c temp als String
'a = LDIOWarrior.GetSerialNumber(1)
GraphicsWindow.DrawBoundText(10,20,200,"Seriennummer: " + "a") ' a temp als String
'b = LDIOWarrior.GetName(1)
GraphicsWindow.DrawBoundText(220,20,200,"Gerätename: " + "b") ' b temp als String
GraphicsWindow.DrawBoundText(30,80,50,"Rel 1")
Zeitbox = Controls.AddTextBox(80,80)

aus = Controls.AddButton ("Relais aus",350,70)
Controls.SetSize(aus,150,30)
ge = Controls.AddButton("Gerät einschalten",350,120)
Controls.SetSize(ge,150,30)
ga = Controls.AddButton("Geräte trennen",350,170)
Controls.SetSize(ga,150,30)
s1 = Controls.AddButton("Start",250,70)

' Ereignisse global
Controls.ButtonClicked = Rel
'NEU
Timer.Tick = Zeit
'NEU

Sub Rel
TextWindow.WriteLine(Controls.LastClickedButton)
' LastBtn = Controls.LastClickedButton ' ev. zuvor ButtonVar definieren

If Controls.LastClickedButton = s1 Then
'LDIOWarrior.GetReportSize(0)
r[1] = 0
r[2] = 254
r[3] = 255
'LDIOWarrior.Write(1,0,r)

'NEU
ZeitSek = Controls.GetTextBoxText(Zeitbox)
ZeitMil = ZeitSek*1000
Timer.Interval = ZeitMil

TextWindow.WriteLine(ZeitSek + " bzw. " + ZeitMil)
'NEU

ElseIf Controls.LastClickedButton = aus Then
'LDIOWarrior.GetReportSize(0)
r[1] = 0
r[2] = 255
r[3] = 255
'LDIOWarrior.Write(1,0,r)

ElseIf Controls.LastClickedButton = ga Then
'LDIOWarrior.Detatch()

ElseIf Controls.LastClickedButton = ge Then
'LDIOWarrior.Initialise()
EndIf

TextWindow.WriteLine(r)
EndSub

'NEU
Sub Zeit
TextWindow.WriteLine("Timer abgelaufen")
Timer.Pause()

'LDIOWarrior.GetReportSize(0)
r[1] = 0
r[2] = 255
r[3] = 255
'LDIOWarrior.Write(1,0,r)
TextWindow.WriteLine(r)
EndSub
'

'=========================================================================
' Prog2

'IM FOLGENDEM HABE ICH DEIN PROGRAMM ETWAS UMSTRUKTURIERT. DADURCH KANNST DU DAS WIEDERHOLEN VON CODE VERMEIDEN!
'WENN DU FRAGEN ETC. HAST, KANNST DU MIR GERNE EINE E-MAIL SCHICKEN: timo-soechtig@hotmail.de

'IO_ini()
Grafikfenster()

' Zur Fehlerbehandlung: Ev. noch Textbox-Eingabe beschränken auf: 0-9 und ev. Kommapunkt .
'Ereignisse() ' besser global im MainProg als in Sub -> sonst ev. Parallelprozesse

Controls.ButtonClicked = Rel
Timer.Tick = Zeit

Sub IO_ini
c = LDIOWarrior.Initialise()
a = LDIOWarrior.GetSerialNumber(1)
b = LDIOWarrior.GetName(1)
EndSub

Sub Grafikfenster
GraphicsWindow.Title = "1.Warriorprogramm"
GraphicsWindow.BrushColor = "Black"

GraphicsWindow.DrawBoundText(420,20,200,c + " Gerät(e) angeschlossen")
GraphicsWindow.DrawBoundText(10,20,200,"Seriennummer: " + a)
GraphicsWindow.DrawBoundText(220,20,200,"Gerätename: " + b)
GraphicsWindow.DrawBoundText(30,80,50,"Rel 1")

Zeitbox = Controls.AddTextBox(80,80)

aus = Controls.AddButton ("Relais aus",350,70)
Controls.SetSize(a,150,30)
ge = Controls.AddButton("Gerät einschalten",350,120)
Controls.SetSize(ge,150,30)
ga = Controls.AddButton("Geräte trennen",350,170)
Controls.SetSize(ga,150,30)
s1 = Controls.AddButton("Start",250,70)
EndSub

Sub Ereignisse
Controls.ButtonClicked = Rel
Timer.Tick = Zeit
EndSub

Sub Rel
LCB = Controls.LastClickedButton 'Dadurch wird die Geschwindigkeit erhöht. Sonst müsste jedes Mal überprüft werden welcher der zuletzt geklickte Button ist. Bei einem so kleinem Programm fällt dies zwar kaum ins Gewicht, aber es ist gut wenn man sich dies für spätere, größere Projekte aneignet
TextWindow.WriteLine(LCB)
If LCB = s1 Then
Start()
ElseIf LCB = aus Then
Ausschalten()
ElseIf LCB = ga Then
'LDIOWarrior.Detatch()
ElseIf LCB = ge Then
'LDIOWarrior.Initialise()
EndIf
EndSub

Sub Zeit
TextWindow.WriteLine("Timer abgelaufen")
Timer.Pause()
Ausschalten()
EndSub

Sub Start
'LDIOWarrior.GetReportSize(0)
r[1] = 0
r[2] = 254
r[3] = 255
'LDIOWarrior.Write(1,0,r)
TextWindow.WriteLine(r)

ZeitSek = Controls.GetTextBoxText(Zeitbox)
ZeitMil = ZeitSek*1000
TextWindow.WriteLine(ZeitSek + " bzw. " + ZeitMil)
Timer.Interval = ZeitMil
EndSub

Sub Ausschalten
'LDIOWarrior.GetReportSize(0)
r[1] = 0
r[2] = 255
r[3] = 255
'LDIOWarrior.Write(1,0,r)
TextWindow.WriteLine(r)
EndSub