COM-Port-Ausgabe funktioniert bedingt
Übersicht

DataAKrobatBetreff: COM-Port-Ausgabe funktioniert bedingt |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Leute,
hab da ein Problem mit dem COM-Port. Liegt vielleicht am der Parametrierung. Ich möchte Werte über den COM-Port ausgeben, was auch über folgenden Code funktioniert: Code: [AUSKLAPPEN] bnkTest=CreateBank(10)
com1 = OpenFile("COM1:57600, N, 8") PokeByte bnkTest,0,1 PokeByte bnkTest,1,0 PokeByte bnkTest,2,1 PokeByte bnkTest,3,2 PokeByte bnkTest,4,1 PokeByte bnkTest,5,2 PokeByte bnkTest,6,3 PokeByte bnkTest,7,4 PokeByte bnkTest,8,249 PokeByte bnkTest,9,255 WriteBytes bnkTest, com1, 0, 10 CloseFile com1 FreeBank bnkTest Das Problem ist, dass die Ausgabe erst funktioniert, wenn ich mit einer anderen(fremden) Anwendung einmalig auf den COM-Port zugreife, und dann die B+ Anwendung starte, sonst kommt nur Datenmüll raus ?!? Ich vermute, dass die COM-Port-Parametrierung nicht explizit genug ist. Es fehlen z.B. die Angaben über das Stoppbit, Empfangs- und Sendepuffergrösse. Aber wie und in welcher Reihenfolge man das Angibt, darüber habe ich hier keine Infos gefunden. Ich benutze B+ Demo und B2D Demo unter Win2000 und WinXP. Hat vielleicht jemand ein Tip für mich ? Bis denn dann DataAKrobat |
||
DataAKrobat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Leute,
hab doch was gefunden ! ![]() Hier (m)ein Beispiel-Code ( beschränkt sich auf's Wesentliche ): Code: [AUSKLAPPEN] ;********************************************************** ;* Beispiel-Code um Binärdaten über die serielle ;* Schnittstelle zu senden ( Com-Port ) ;* Anwendung: Kommunikation mit Mikrocontrollern ;* ;* Getestet unter: Win98-2000-XPprof :-) ;* ;********************************************************** Const GENERIC_READ = $80000000 Const GENERIC_WRITE = $40000000 Const OPEN_EXISTING = 3 Const INVALID_HANDLE_VALUE = -1 array=CreateBank(10) PokeByte array,0,1 PokeByte array,1,0 PokeByte array,2,1 PokeByte array,3,2 PokeByte array,4,1 PokeByte array,5,2 PokeByte array,6,3 PokeByte array,7,4 PokeByte array,8,249 PokeByte array,9,255 ;********************************************************** ;* Main ;********************************************************** ComPort% = OpenComPort(1) ; 57600 Baudrate ; N Parität nein ; 8 Datenbits ; 1 Stoppbit SetComPort( ComPort%, "57600, N, 8, 1" ) WriteComPort( ComPort%, array, 10 ) CloseComPort(ComPort%) FreeBank array End ;********************************************************** ;* Funktion OpenComPort() ;********************************************************** Function OpenComPort%(PortNbr%) Local ComPort% ComPort% = apiCreateFile("COM" + PortNbr%, GENERIC_READ Or GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0) If ComPort% = INVALID_HANDLE_VALUE Then Return -1 Else Return ComPort% EndIf End Function ;********************************************************** ;* Funktion CloseComPort() ;********************************************************** Function CloseComPort%(ComPort%) Return apiCloseHandle(ComPort%) End Function ;********************************************************** ;* Funktion SetComPort() ;********************************************************** Function SetComPort%(ComPort%, Settings$) Local DCB% DCB% = CreateBank(28) ; Get States If apiGetCommState(ComPort%, DCB) = 0 Then FreeBank DCB% Return False ElseIf PeekInt(DCB%, 0) <> 28 FreeBank DCB% Return False EndIf ; Build DCB If apiBuildCommDCB(Settings$, DCB%) = 0 Then FreeBank DCB% Return False EndIf ; Set States If apiSetCommState(ComPort%, DCB%) = 0 Then FreeBank DCB% Return False Else FreeBank DCB% Return True EndIf End Function ;********************************************************** ;* Funktion WriteComPort() ;********************************************************** Function WriteComPort%(ComPort%, Buffer%, Size%) Local Count%, Count2% Count% = CreateBank(4) If apiWriteFile(ComPort%, Buffer%, Size%, Count%, 0) = 0 Then FreeBank Count% Return 0 Else Count2% = PeekInt(Count%, 0) FreeBank Count% Return Count2% EndIf End Function Die Einbindung der kernel32.dll / userlibs steht z.B. hier: https://www.blitzforum.de/foru...hlight=com Bis denn dann DataAKrobat |
||
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
das oben scheint bei mir auch zu funktionieren. (Blitz3d)
Wie greift man auf einzelne Pole zu, sofern das möglich ist. Hab bisher nix weiterbildendes, was ich auch verstehe, gefunden. Falls es jemand erklären könnte, danke! |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
DataAKrobat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
man kann die Pins auch einzeln ansprechen. Bei Pin 2 und 3 bin ich mir nicht sicher, weil sie dafür gedacht sind, Daten seriell zu verarbeiten. Zumindest würde es mich nicht wundern, wenn sie kein statisches Logigsignal verarbeiten können. Wie man z.B Pin 7 anspricht, habe ich hier gefunden. https://www.blitzforum.de/foru...ht=comport oder suche nach "SETRTS" Hier hab ich mal die Pinbelegung zusammengefasst. Die Pinnummern stehen üblicher Weise gaaaanz klein an den Pinnen. Pin 1 Carrier detect [CD] Eingang 2 Receive data [RD] Eingang 3 Transmit Data [TD] Ausgang 4 Data terminal ready [DTR] Ausgang 5 Masse 6 Data set ready [DSR] Eingang 7 Request to send [RTS] Ausgang 8 Clear to send [CTS] Eingang 9 Ring indikator [RI] Eingang Bis denn dann DataAKrobat |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group