ich habe mal einen Code für eine 2-Kanal-Relaiskarte (Ausgänge am Port: DTR, RTS), die auch zwei Eingänge (DSR, CTS) hat, erstellet.
Der Code funktioniert gut (Schaut ihn aber bitte troztdem auf Fehler durch), aber mit dem Thread bin ich mir nicht ganz sicher, ob das so richig ist.
Denn diesen Befehl "KillThread(...)" soll man ja nicht verwenden; aber wie soll ich es dann machen?
Code: Alles auswählen
;{**********-Konstanten, Variablen, Strings, ...; laden von Fonts, Bildern,...-**********
;*****-Konstanten für Fenster-*****
Enumeration
#HauptFenster
EndEnumeration
#HauptFensterWidth = 365
#HauptFensterHeight = 165
#HauptFensterFlags = #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget
;*****-Konstanten für Gadgets-******
Enumeration
#GadgetFrame3D1
#GadgetFrame3D2
#GadgetTextInput1
#GadgetTextInput2
#GadgetTextRelais1
#GadgetTextRelais2
#GadgetImageInput1
#GadgetImageInput2
#GadgetButtonRelais1Ein
#GadgetButtonRelais1Aus
#GadgetButtonRelais2Ein
#GadgetButtonRelais2Aus
#GadgetButtonBeenden
EndEnumeration
;*****-Konstanten für Bilder-*****
Enumeration
#ImageInput1
#ImageInput2
EndEnumeration
;*****-Sonstige Konstanten, Variablen, Strings, ...-******
#AnwendungName = "2 Relais-Relaiskarte"
#VersionName = "2 Relais-Relaiskarte 1.0"
Global ComPort.l
Global Thread.l
;*****-Bilder erstellen-*****
CreateImage(#ImageInput1, 30, 30)
CreateImage(#ImageInput2, 30, 30)
;}
Procedure ReChargeInputs()
If ComGetDSR(ComPort) = 0
If StartDrawing(ImageOutput(#ImageInput1))
Box(0, 0, 30, 30, RGB(228, 48, 27))
StopDrawing()
EndIf
Else
If StartDrawing(ImageOutput(#ImageInput1))
Box(0, 0, 30, 30, RGB(136, 207, 78))
StopDrawing()
EndIf
EndIf
If ComGetCTS(ComPort) = 0
If StartDrawing(ImageOutput(#ImageInput2))
Box(0, 0, 30, 30, RGB(228, 48, 27))
StopDrawing()
EndIf
Else
If StartDrawing(ImageOutput(#ImageInput2))
Box(0, 0, 30, 30, RGB(136, 207, 78))
StopDrawing()
EndIf
EndIf
SetGadgetState(#GadgetImageInput1, ImageID(#ImageInput1))
SetGadgetState(#GadgetImageInput2, ImageID(#ImageInput2))
EndProcedure
Procedure Thread()
Repeat
ReChargeInputs()
Delay(250)
ForEver
EndProcedure
Procedure HauptFenster()
If OpenWindow(#HauptFenster, 0, 0, #HauptFensterWidth, #HauptFensterHeight, #AnwendungName, #HauptFensterFlags)
;{*****-Gadgets erstellen-*****
If CreateGadgetList(WindowID(#HauptFenster))
TextGadget(#GadgetTextInput1, 20, 20, 60, 15, "Eingang 1", #PB_Text_Center)
ImageGadget(#GadgetImageInput1, 35, 40, 30, 30, 0, #PB_Image_Border)
TextGadget(#GadgetTextInput2, 20, 90, 60, 15, "Eingang 2", #PB_Text_Center)
ImageGadget(#GadgetImageInput2, 35, 110, 30, 30, 0, #PB_Image_Border)
Frame3DGadget(#GadgetFrame3D1, 100, 15, 2, 140, "", #PB_Frame3D_Single)
TextGadget(#GadgetTextRelais1, 130, 20, 70, 15, "Relais 1", #PB_Text_Center)
ButtonGadget(#GadgetButtonRelais1Ein, 130, 40, 30, 30, "Ein")
ButtonGadget(#GadgetButtonRelais1Aus, 170, 40, 30, 30, "Aus")
TextGadget(#GadgetTextRelais2, 130, 90, 70, 15, "Relais 1", #PB_Text_Center)
ButtonGadget(#GadgetButtonRelais2Ein, 130, 110, 30, 30, "Ein")
ButtonGadget(#GadgetButtonRelais2Aus, 170, 110, 30, 30, "Aus")
Frame3DGadget(#GadgetFrame3D2, 230, 15, 2, 140, "", #PB_Frame3D_Single)
ButtonGadget(#GadgetButtonBeenden, 260, 105, 80, 35, "Beenden")
EndIf
;}
ReChargeInputs()
Beenden_HauptFenster = 0
Thread = CreateThread(@Thread(), 0)
Repeat
Event_HauptFenster = WaitWindowEvent()
If Event_HauptFenster = #PB_Event_Gadget
Select EventGadget()
Case #GadgetButtonRelais1Ein
ComSetDTR(ComPort, 1)
Case #GadgetButtonRelais1Aus
ComSetDTR(ComPort, 0)
Case #GadgetButtonRelais2Ein
ComSetRTS(ComPort, 1)
Case #GadgetButtonRelais2Aus
ComSetRTS(ComPort, 0)
Case #GadgetButtonBeenden
Beenden_HauptFenster = 1
EndSelect
EndIf
If Event_HauptFenster = #PB_Event_CloseWindow
Beenden_HauptFenster = 1
EndIf
Until Beenden_HauptFenster <> 0
Else
MessageRequester("Fehler", "Fenster konnte nicht geöffnet werden.", #MB_ICONERROR)
End
EndIf
KillThread(Thread)
CloseWindow(#HauptFenster)
ComClose(ComPort)
End
EndProcedure
ComPort = ComOpen("COM1: baud=9600 parity=N data=8 stop=1", #HandShakeModeNone, 0, 0)
ComSetDTR(ComPort, 0)
ComSetRTS(ComPort, 0)
HauptFenster()