PB 4.02 und USB-Ansteuerung (offen/geschlossen)
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- Falko
- Admin
- Beiträge: 3531
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Das wäre zu schön um wahr zu sein, wenn es von mir wäreKaeru Gaman hat geschrieben:COMate ist doch von srod ...
Das Einzigste, was ich damit gemacht habe, ist was für viele
Excelfunktionen, wovon leider kein große feedback zurück kam.
Nee, das war die MVCOM (Nicht von mir), die er meinte, die ich nur für
meine Projekte gebraucht habe. Übrigens, die USB2RS232, welche die
einfachste Lösung ist und ebenfalls für einen Lau bei www.pollin.de zu
erhalten ist, lässt sich genauso wie die Serielle Schnittstelle über virtuelle
COM-Ports nutzen, die bei neueren OS automatisch installiert werden. Bei
Win9x ist aber meistens eine CD dabei.
Hier nochmal zur Erinnerung mein alter Thread dazu:
http://www.purebasic.fr/german/viewtopi ... 581#187581
http://www.purebasic.fr/german/viewtopi ... 773#187773
Mit dem aktuellen PB ist leider die MVCOM überflüssig geworden, weil
man damit direkt Funktionen für "Serial Port" enthalten hat.
Gruß Falko
Hallo,
Also das mit den USB->Seriell Konvertern kann
ich bestätigen. Hab da ein Vivanco Kabel und
die 8-fach Relaiskarte von Conrad. Den Treiber,
der dem Kabel beiliegt, installieren und gut ist.
Beim Einstecken des Kabels in den USB Port sieht
man dann in der Systemsteuerung, welcher Com
Port angelegt wurde (bei mir immer COM5).
Mein Programm hatte ich zwar damals in XProfan
geschrieben, denke aber, daß es mit den nativen
SerialPort - Befehlen von PB 4.30 genauso gut geht.
Also das mit den USB->Seriell Konvertern kann
ich bestätigen. Hab da ein Vivanco Kabel und
die 8-fach Relaiskarte von Conrad. Den Treiber,
der dem Kabel beiliegt, installieren und gut ist.
Beim Einstecken des Kabels in den USB Port sieht
man dann in der Systemsteuerung, welcher Com
Port angelegt wurde (bei mir immer COM5).
Mein Programm hatte ich zwar damals in XProfan
geschrieben, denke aber, daß es mit den nativen
SerialPort - Befehlen von PB 4.30 genauso gut geht.
PB 6.10
- HeX0R
- Beiträge: 2962
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 - Kontaktdaten:
Naja, als Programmierer würde man das doch etwas komfortabler gestalten, einfach diesen Callback hier verwenden und das Programm bekommt mitgeteilt, wenn der Adapter gesteckt/entfernt wird:H.Brill hat geschrieben:Hallo,
[...]
Beim Einstecken des Kabels in den USB Port sieht
man dann in der Systemsteuerung, welcher Com
Port angelegt wurde (bei mir immer COM5).
[...]
Code: Alles auswählen
#DBT_DEVICEARRIVAL = $8000
#DBT_DEVICEQUERYREMOVE = $8001
#DBT_DEVICEQUERYREMOVEFAILED = $8002
#DBT_DEVICEREMOVEPENDING = $8003
#DBT_DEVICEREMOVECOMPLETE = $8004
#DBT_DEVICETYPESPECIFIC = $8005
#DBT_DEVNODES_CHANGED = $0007
#DBT_QUERYCHANGECONFIG = $0017
#DBT_CONFIGCHANGED = $0018
#DBT_CONFIGCHANGECANCELED = $0019
#DBT_USERDEFINED = $FFFF
#DBT_DEVTYP_OEM = $0000
#DBT_DEVTYP_VOLUME = $0002
#DBT_DEVTYP_PORT = $0003
#DBT_DEVTYP_DEVICEINTERFACE = $0005
#DBT_DEVTYP_HANDLE = $0006
Procedure MyWindowCallback(WindowID, Message, wParam, lParam)
Protected Result, a$, K
Protected *db.DEV_BROADCAST_HDR
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_DEVICECHANGE
If wParam = #DBT_DEVICEARRIVAL
*db = lParam
If *db\dbch_devicetype = #DBT_DEVTYP_PORT
a$ = PeekS(*db + SizeOf(DEV_BROADCAST_HDR))
K = Val(RemoveString(a$, "COM", #PB_String_NoCase))
Debug "COM-Port " + Str(K) + " eingesteckt"
EndIf
ElseIf wParam = #DBT_DEVICEREMOVECOMPLETE
*db = lParam
If *db\dbch_devicetype = #DBT_DEVTYP_PORT
a$ = PeekS(*db + SizeOf(DEV_BROADCAST_HDR))
K = Val(RemoveString(a$, "COM", #PB_String_NoCase))
Debug "COM-Port " + Str(K) + " ausgesteckt"
EndIf
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}
Hallole und Danke an alle für die Beiträge.
Ich werde mir dann erst mal einen USB<=>COM Adapter besorgen. Dann es mal mit der MVCOM-Lib versuchen. Ich habe ja 2 Aufgaben:
1.) Aus Excel Werte auslesen ( wo ich den DispHepler verwende - was schon fertig ist und in Anwendung, aber eben nicht in PB 4.30 funktoniert )
2.) Eine Erweiterung: Bei einem bestimmtem Ereignis in der Exceltabelle das nicht nur auf dem Bldschirm, sondern auch noch ausserhalb mit einer Lampe darstellen ( als Warnhinweis )
Ich werde mir dann erst mal einen USB<=>COM Adapter besorgen. Dann es mal mit der MVCOM-Lib versuchen. Ich habe ja 2 Aufgaben:
1.) Aus Excel Werte auslesen ( wo ich den DispHepler verwende - was schon fertig ist und in Anwendung, aber eben nicht in PB 4.30 funktoniert )
2.) Eine Erweiterung: Bei einem bestimmtem Ereignis in der Exceltabelle das nicht nur auf dem Bldschirm, sondern auch noch ausserhalb mit einer Lampe darstellen ( als Warnhinweis )
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
- HeX0R
- Beiträge: 2962
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 - Kontaktdaten:
Seit PB4.2(?) brauchst du keine MVCOM-Lib mehr, das kann PB mittlerweile selbst.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}
- Falko
- Admin
- Beiträge: 3531
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
>>> 1.) Aus Excel Werte auslesen ( wo ich den DispHepler verwende - was
>>>schon fertig ist und in Anwendung, aber eben nicht in PB 4.30 funktoniert )
Zu PB 4.3 und Excelfunktionen, da hätte ich noch einen Tip. Somit könnte man
die Excelfunktionen als auch die eigenen SerielPort - Funktionen nutzen.
http://www.purebasic.fr/german/viewtopi ... 466#239466
Gruß Falko
>>>schon fertig ist und in Anwendung, aber eben nicht in PB 4.30 funktoniert )
Zu PB 4.3 und Excelfunktionen, da hätte ich noch einen Tip. Somit könnte man
die Excelfunktionen als auch die eigenen SerielPort - Funktionen nutzen.
http://www.purebasic.fr/german/viewtopi ... 466#239466
Gruß Falko
Hallo,
Ich will mal die Conrad Relais Karte mit PB
ansteuern, komme aber irgendwie nicht weiter.
Die Schnittstellenparameter stimmen soweit.
Habs auch schon mit versch. Variablentypen usw.
probiert.
In XProfan sieht das so aus :
Ausprobieren ist zwar für euch nicht möglich, aber vielleicht sieht
ja jemand meinen Fehler. Stimmt das so mit der XOR-Verknüpfung ?
Hier mal der Code :
Ich will mal die Conrad Relais Karte mit PB
ansteuern, komme aber irgendwie nicht weiter.
Die Schnittstellenparameter stimmen soweit.
Habs auch schon mit versch. Variablentypen usw.
probiert.
In XProfan sieht das so aus :
Code: Alles auswählen
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
ja jemand meinen Fehler. Stimmt das so mit der XOR-Verknüpfung ?
Hier mal der Code :
Code: Alles auswählen
Global comPort.l, comID.l, Daten.i, Adresse.i, Pruefsumme.i, Kommando.i, Send.s
Macro TestBit(value,bit)
(value>>bit&1)
EndMacro
Macro SetBit(value,bit)
(1 << bit | value)
EndMacro
Macro ClrBit(value,bit)
(~(1 << bit) & value)
EndMacro
Daten = 0
Kommando = 1
Adresse = 1
Procedure Senden()
Dim Buffer.b(4)
Send = Space(4)
Pruefsumme = (Kommando XOr Adresse) XOr Daten
Send = Chr(Kommando) + Chr(Adresse) + Chr(Daten) + Chr(Pruefsumme)
Buffer(0) = Kommando
Buffer(1) = Adresse
Buffer(2) = Daten
Buffer(3) = Pruefsumme
WriteSerialPortData(comID, @Send, 4)
EndProcedure
If OpenWindow(0, 10, 10, 400, 400, "Schalt - Relais", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ButtonGadget(1,5, 10,100, 20, "Ende")
ButtonGadget(2,120, 10, 100, 20, "Setze")
CheckBoxGadget(10, 120, 100, 100, 20, "Relais 1")
CheckBoxGadget(11, 120, 130, 100, 20, "Relais 2")
CheckBoxGadget(12, 120, 160, 100, 20, "Relais 3")
CheckBoxGadget(13, 120, 190, 100, 20, "Relais 4")
CheckBoxGadget(14, 120, 220, 100, 20, "Relais 5")
CheckBoxGadget(15, 120, 250, 100, 20, "Relais 6")
CheckBoxGadget(16, 120, 280, 100, 20, "Relais 7")
CheckBoxGadget(17, 120, 310, 100, 20, "Relais 8")
Quit = 0
comID = OpenSerialPort(#PB_Any, "COM5", 19200, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
If comID And IsSerialPort(comID)
Senden()
MessageRequester("Info", "COM5: verfügbar !", 0)
Else
MessageRequester("Fehler", "COM5: NICHT verfügbar !", 0)
End
EndIf
Repeat
; Hier kommt die Event - Schleife
EventID.l = WaitWindowEvent()
; Event abwarten und auswerten
Select EventID
Case #PB_Event_CloseWindow
; X im rechts oben für Schließen gedrückt.
Quit = 1
Case #PB_Event_Gadget ; Event für Gadgets
Select EventGadget()
Case 1
; Ende - Button gedrückt
Quit = 1
Case 2
; Setzen - Button gedrückt
If GetGadgetState(10) = 1
Daten = SetBit(Daten, 0)
Else
Daten = ClrBit(Daten, 0)
EndIf
If GetGadgetState(11) = 1
Daten = SetBit(Daten, 1)
Else
Daten = ClrBit(Daten, 1)
EndIf
If GetGadgetState(12) = 1
Daten = SetBit(Daten, 2)
Else
Daten = ClrBit(Daten, 2)
EndIf
If GetGadgetState(13) = 1
Daten = SetBit(Daten, 3)
Else
Daten = ClrBit(Daten, 3)
EndIf
If GetGadgetState(14) = 1
Daten = SetBit(Daten, 4)
Else
Daten = ClrBit(Daten, 4)
EndIf
If GetGadgetState(15) = 1
Daten = SetBit(Daten, 5)
Else
Daten = ClrBit(Daten, 5)
EndIf
If GetGadgetState(16) = 1
Daten = SetBit(Daten, 6)
Else
Daten = ClrBit(Daten, 6)
EndIf
If GetGadgetState(17) = 1
Daten = SetBit(Daten, 7)
Else
Daten = ClrBit(Daten, 7)
EndIf
Kommando = 3
Adresse = 1
Senden()
EndSelect
EndSelect
Until Quit = 1
EndIf
CloseSerialPort(comID)
End
PB 6.10
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
nope!H.Brill hat geschrieben:Stimmt das so mit der XOR-Verknüpfung ?Code: Alles auswählen
Pruefsumme = (Kommando XOr Adresse) XOr Daten
du musst schon eine bitweise Verknüpfung benutzen, keine logische.
du schreibst ja auch nicht
Code: Alles auswählen
(value >> bit And 1)
Code: Alles auswählen
(1 << bit Or value)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- Falko
- Admin
- Beiträge: 3531
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten: