COM-Port-Ausgabe funktioniert bedingt

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

 

DataAKrobat

Betreff: COM-Port-Ausgabe funktioniert bedingt

BeitragMo, Nov 06, 2006 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Nov 08, 2006 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,


hab doch was gefunden ! Smile

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

BeitragMi, Nov 08, 2006 23:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

DataAKrobat

BeitragDo, Nov 09, 2006 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group