Com Schnitstelle von Blitz aus.

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

tft

Betreff: Com Schnitstelle von Blitz aus.

BeitragSo, Mai 08, 2005 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi...

weis einer wie man die Com Schnitstelle von Blitz aus benutzt. Schreibend wie lesend.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

TheShadow

Moderator

BeitragSo, Mai 08, 2005 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
probier evtl. das hier:

http://www.logix4u.cjb.net/
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

tft

BeitragMo, Mai 09, 2005 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi...

das hilft mir leider nicht weiter....
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

Vertex

BeitragMo, Mai 09, 2005 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Willst du nur die einzelnen Pins ansteuern?
Könnte was für dich auf die Beine stellen, die TXD, RTS und DTR setzen, sowie CTS und DSR auslesen kann per Userlib.
mfg olli
vertex.dreamfall.at | GitHub

tft

BeitragDi, Mai 10, 2005 9:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi....

ich breuchte sowas wie....

a=OpenComPort(1,Baud,Bit,Pri,Pufferleng) öffnet und Inizialisiert den ComPort nur für BB

SendComPort(1,"") sendet einen String an ComPort
a=InfoComPort(1) ermittelt ob im Puffer daten vorhanden sind
b$=ReadComPort(1) list die daten aus dem ComPort
CloseComPort(1) Schliest den Port und gibt ihn für andere
anwendungen frei.

Wichtig dabei währe das der read befehl nicht auf das eintreffen von Daten wartet. Sind keine Daten da dann gibt er "" aus. Ist der puffer foll wird bei einem überlauf die daten ferworfen und InfoComPort gibt eine -1 zurück, ansonsten die mänge der anligenden daten.

Wenn du das machen köntest wäre das toll......
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

Vertex

BeitragMo, Mai 16, 2005 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Ich habe jetzt nochmal Informationen darüber gesammelt, und habe ein gutes Tutorial bei MSDN(man höre und staune!) für VB gefunden.

Also gleich mal vorweg: Das lesen vom Com-Port nur wenn etwas vorhanden ist, geht nicht. Was möglich ist, man kann Timeouts setzen.

Ich hoffe nur, das ich noch mein altes 56Kbit Modem(oh gott, noch aus der Steinzeit Smile) finde, um das zu testen(ATL Befehle waren das doch, zum ansteuern des Modems ?oder)

Hier das Tutorial: http://support.microsoft.com/d...roduct=vb6

mfg olli
vertex.dreamfall.at | GitHub

tft

BeitragDi, Mai 17, 2005 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi....

wegen der abfrage des ComPorts, des wegen habe ich gedacht das ein separater Thread das erledigen muss, mit recht kurzen Timeouts. èber einen Puffer der von BB zu erreichen ist könnte dann separat abgefragt werden ob daten anliegen oder nicht. Ist natürlich nicht ganz einfach.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!
 

ChristianH

BeitragDi, Mai 17, 2005 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
So viel ich weiß werden Com Ports so behandelt wie Dateien. Man müsste eigentlich nur mit WinAPI- (oder BlitzBasic?) Readfile Funktionen den Com Port ansteueren.

tft

BeitragMi, Mai 18, 2005 7:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi....

leider ist das bei Windows nicht ganz zuferlässig. Es kommt vor das daten verschwinden, wenn die Schnittstelle nicht expliziet für die Anwendung reserviert ist. Ich habe da schon das eine oder andere Experiment hintermir.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

Vertex

BeitragSo, Mai 22, 2005 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ersteinmal der Anfang:

Com.decls (muss in den Userlib-Ordner)
Zitat:
.lib "kernel32.dll"


apiCreateFile%(FileName$, DesiredAccess%, ShareMode%, pSecurrityAttribute%, CreationDistribution%, FlagsAndAttributes%, TemplateFile%) : "CreateFileA"
apiCloseHandle%(Object%) : "CloseHandle"

apiWriteFile%(File%, pBuffer*, NumberOfBytesToWrite%, pNumberOfBytesWritten*, pOverlapped%) : "WriteFile"
apiReadFile%(File%, pBuffer*, NumberOfBytesToRead%, pNumberOfBytesRead*, pOverlapped%) : "ReadFile"



apiGetCommState%(File%, pDCB*) : "GetCommState"
apiSetCommState%(File%, pDCB*) : "SetCommState"
apiGetCommTimeouts%(File%, pCommTimeouts*) : "GetCommTimeouts"
apiSetCommTimeouts%(File%, pCommTimeouts*) : "SetCommTimeouts"


Code: [AUSKLAPPEN]
Const GENERIC_READ          = $80000000
Const GENERIC_WRITE         = $40000000
Const OPEN_EXISTING         = 3
Const FILE_ATTRIBUTE_NORMAL = $80
Const INVALID_HANDLE_VALUE  = -1
Const NOPARITY              = 0
Const ONESTOPBIT            = 0

Function OpenCommPort%(Port%)
   Local File%

   If (Port < 0) Or (Port > 255) Then Return -1
   
   ; Open CommPort
   File% = apiCreateFile("COM"+Port%, GENERIC_READ Or GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0)
   If File% = INVALID_HANDLE_VALUE Then
      Return -1
   Else
      Return File%
   EndIf
End Function

Function CloseCommPort%(File%)
   Return apiCloseHandle(File%)
End Function

Function SetCommBaudrate%(File%, Baudrate%)
   Local DCB%
   
   DCB% = CreateBank(28)
   
   ; Get States
   If apiGetCommState(File%, DCB) = 0 Then
      FreeBank DCB%
      Return False
   ElseIf PeekInt(DCB%, 0) <> 28
      FreeBank DCB%
      Return False
   EndIf

   PokeInt  DCB%,  4, Baudrate   ; Baudrate
   PokeByte DCB%, 18, 8          ; Byte Size
   PokeByte DCB%, 19, NOPARITY   ; Parity
   PokeByte DCB%, 20, ONESTOPBIT ; StopBits
   
   ; Set States
   If apiSetCommState(File%, DCB%) = 0 Then
      FreeBank DCB%
      Return False
   Else
      FreeBank DCB%
      Return True
   EndIf
End Function

Function SetCommTimeouts%(File%, ReadTime%, WriteTime%)
   Local TimeOuts%
   
   ; Get timeouts
   Timeouts% = CreateBank(40)
   If apiGetCommTimeouts(File%, Timeouts%) = 0 Then
      FreeBank Timeouts
      Return False
   EndIf
   
   PokeInt Timeouts%,  8, ReadTime%  ; ReadTotalTimeoutConstant
   PokeInt Timeouts%, 16, WriteTime% ; WriteTotalTimeoutConstant
   
   ; Set Timeouts
   If apiSetCommTimeouts(File%, Timeouts%) = 0 Then
      FreeBank Timeouts
      Return False
   Else
      FreeBank Timeouts
      Return True
   EndIf
End Function


Beispiel:
Code: [AUSKLAPPEN]
File% = OpenCommPort(1)

Print File%
Print SetCommBaudrate(File%, 9600)
Print SetCommTimeouts(File%, 1000, 1000)
Print CloseCommPort(File%)
Print CloseCommPort(File%)

WaitKey
End


Klappt bei mir hier unter Win2k ganz gut.

Lesen und schreiben erfolgt dann über apiWrite/ReadFile, kommt bald.

mfg olli
vertex.dreamfall.at | GitHub

Vertex

BeitragSo, Mai 22, 2005 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Function WriteComm%(File%, Buffer%, Size%)
   Local Count%, Count2%

   If Size% > BankSize(Buffer%) Then Return 0
   
   Count% = CreateBank(4)
   
   If apiWriteFile(File%, Buffer%, Size%, Count%, 0) = 0 Then
      FreeBank Count%
      Return 0
   Else
      Count2% = PeekInt(Count%, 0)
      FreeBank Count%
      Return Count2%
   EndIf
End Function

Function ReadComm%(File%, Buffer%, Size%)
   Local Count%, Count2%
   
   If Size% > BankSize(Buffer%) Then Return 0
   
   Count% = CreateBank(4)
   
   If apiReadFile(File%, Buffer%, Size%, Count%, 0) = 0 Then
      FreeBank Count%
      Return 0
   Else
      Count2% = PeekInt(Count%, 0)
      FreeBank Count%
      Return Count2%
   EndIf
End Function


Sollten eigentlich die Anzahl an geschriebenen bzw. gelesenen Bytes zuürck geben, machen sie aber nicht Smile

Wenn ich etwas sende via WriteComm blinkt TxD und DTR auf. Wenn ich etwas lese via ReadComm blinkt DTR auf. (Getestet auf altem ELSA MicroLink 56k Modem)

Naja zumindest funzen die Timeouts.

mfg olli

Edit: Habe den bug gefunden: Hatte Count% statts Count2% zurückgegeben.

Kann mir jemand mal irgend ein AT-Befehl nennen, mit dem ich das Modem mal testen kann?
vertex.dreamfall.at | GitHub

tft

BeitragSo, Mai 22, 2005 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi....

ist ja klasse.......

ihr ein Link zu den AT Befehlen.

http://www.tcp-ip-info.de/tcp_...efehle.htm

MfG TFT
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group