Code:
Declare hD%, hB%, schalt%, statusbar%, OK%, hcombo%
Declare comport%, f%, adresse%, kommando%, Pruefsumme%
Declare chk1%, chk2%, chk3%, chk4%, chk5%, chk6%, chk7%, chk8%
Declare daten%, com$, send$
daten% = 1
adresse% = 1
Proc GetCheckboxStates
If @GetCheck(chk1%)
daten% = SetBit(daten%, 0, 1)
Else
daten% = SetBit(daten%, 0, 0)
EndIf
If @GetCheck(chk2%)
daten% = SetBit(daten%, 1, 1)
Else
daten% = SetBit(daten%, 1, 0)
EndIf
If @GetCheck(chk3%)
daten% = SetBit(daten%, 2, 1)
Else
daten% = SetBit(daten%, 2, 0)
EndIf
If @GetCheck(chk4%)
daten% = SetBit(daten%, 3, 1)
Else
daten% = SetBit(daten%, 3, 0)
EndIf
If @GetCheck(chk5%)
daten% = SetBit(daten%, 4, 1)
Else
daten% = SetBit(daten%, 4, 0)
EndIf
If @GetCheck(chk6%)
daten% = SetBit(daten%, 5, 1)
Else
daten% = SetBit(daten%, 5, 0)
EndIf
If @GetCheck(chk7%)
daten% = SetBit(daten%, 6, 1)
Else
daten% = SetBit(daten%, 6, 0)
EndIf
If @GetCheck(chk8%)
daten% = SetBit(daten%, 7, 1)
Else
daten% = SetBit(daten%, 7, 0)
EndIf
EndProc
Proc GetComInput
Parameters id%
Declare in$
in$ = @ReadCom$(f%,8) ' 8 Zeichen einlesen
Case @Len(in$):SetText statusbar%, "Antwort : " + Str$(ord(in$))
EndProc
Proc Senden
' 4 Byte - Rahmen zum Senden erstellen
Pruefsumme% = XOR(XOR(kommando%, adresse%), daten%)
send$ = Chr$(kommando%) + Chr$(adresse%) + Chr$(daten%) + Chr$(Pruefsumme%)
WriteCom(f%, send$)
ComError(f%)
GetComInput(f%)
Sleep 1000
EndProc
Proc Dialog
'Dialogfenster erzeugen
hD% = @Create("Dialog",%DeskTop,"Relaisplatine 8fach seriell",100,100,600,400)
'Einen Button mit 'ENDE' erzeugen
hB% = @Create("Button",hD%,"&ENDE",10,10,60,25)
schalt% = @Create("Button", hD%, "&Schalten", 100, 10, 80, 25)
chk1% = @Create("CheckBox", hD%, "Relais 1", 350, 10, 100, 25)
chk2% = @Create("CheckBox", hD%, "Relais 2", 350, 40, 100, 25)
chk3% = @Create("CheckBox", hD%, "Relais 3", 350, 70, 100, 25)
chk4% = @Create("CheckBox", hD%, "Relais 4", 350,100, 100, 25)
chk5% = @Create("CheckBox", hD%, "Relais 5", 350,130, 100, 25)
chk6% = @Create("CheckBox", hD%, "Relais 6", 350,160, 100, 25)
chk7% = @Create("CheckBox", hD%, "Relais 7", 350,190, 100, 25)
chk8% = @Create("CheckBox", hD%, "Relais 8", 350,220, 100, 25)
' erste Checkbox setzen
SetCheck chk1%, 1
statusbar% = @Create("StatusWindow", hD%, "Ready !")
Clear OK% ' OK% auf 0 setzen
WhileNot Ok% ' solange OK% gleich 0 ist
' Hier in der Schleife warten wir mit WaitInput auf Benutzer - Eingaben
' Wir verwenden die in XProfan 10 neue Funktion @Clicked() statt @GetFocus()
WaitInput
If @Clicked(hB%)
'ENDE wurde angeklickt, OK% wird auf 1 gesetzt und somit
' die Schleife verlassen, das Fenster gelöscht und das Programm beendet.
Ok% = 1
ElseIf %Key = 2
' Hier wird das 'X' (rechts oben Schließen) ausgewertet
OK% = 1
ElseIf @Clicked(schalt%)
' Relais schalten.
kommando% = 3
adresse% = 1
daten% = 0
GetCheckboxStates ' Checkboxen auswerten u. Bits setzen
Senden
'@MessageBox("Ich bin der Autor : " + Name$, "Info", 0)
EndIf
EndWhile
'Dialogfenster (incl. Button, usw.) entfernen
@DestroyWindow(hD%)
EndProc
' Relaiskarte initialisieren
kommando% = 1
adresse% = 1
daten% = 0
f% = @OpenCom("COM1", 1024, 1024)
SetCom("COM1: 19200, N, 8, 1")
Senden
' Hier wird die Dialogbox (Procedur) aufgerufen
Dialog
' Programm Ende
CloseCom(f%)
End
Lesezeichen