Com Schnitstelle von Blitz aus.
Übersicht
BlitzBasic
Allgemein|
|
tftBetreff: Com Schnitstelle von Blitz aus. |
Antworten mit Zitat |
|---|---|---|
|
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 !!!!!! |
||
|
|
TheShadowModerator |
Antworten mit Zitat |
|---|---|---|
|
probier evtl. das hier:
http://www.logix4u.cjb.net/ |
||
| AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 | ||
|
|
tft |
Antworten mit Zitat |
|---|---|---|
|
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 |
Antworten mit Zitat |
|---|---|---|
|
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 |
Antworten mit Zitat |
|---|---|---|
|
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 |
Antworten mit Zitat |
|---|---|---|
|
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 Hier das Tutorial: http://support.microsoft.com/d...roduct=vb6 mfg olli |
||
| vertex.dreamfall.at | GitHub | ||
|
|
tft |
Antworten mit Zitat |
|---|---|---|
|
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 |
Antworten mit Zitat |
|
|---|---|---|
| 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 |
Antworten mit Zitat |
|---|---|---|
|
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 |
Antworten mit Zitat |
|---|---|---|
|
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 |
Antworten mit Zitat |
|---|---|---|
|
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 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 |
Antworten mit Zitat |
|---|---|---|
|
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 !!!!!! |
||
Übersicht
BlitzBasic
Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group
