PDA

Vollständige Version anzeigen : system.io.ports comport


Gaertner
04.08.2008, 19:52
:(
Hallo zusammen,

bin schon völlig ausgelaugt und hab schon Glubschaugen...:mad:

Möchte gerne die Ansteuerung der seriellen Schnittstelle lernen, aber...
alle Versuche und Messungen die ich bisher unternommen habe halten sich begrenzt an einen Erfolg.
Kann man die Register eigentlich noch manuell auf 0 oder 1 setzen, so wie unter DOS ???
Wer kennt ne Seite die das ganze veranschaulicht?

Ich bin jedenfalls am Ende mit meinem Latein....:rolleyes:

Robert_Zenz
04.08.2008, 20:30
Moin.

Eigentlich geht das ganz einfach. Du schreibst in den Serial-Stream und wartest danach bis was zurückkommt. :)

Ich bin mir nicht sicher ob der Code unten funktioniert...ich hab gerade keine IDE zum testen. ^^


'let's start...
Dim port as New System.IO.Ports.SerialPort("COM1")
Dim response as String = ""

'we'll wait 1.5 seconds for an answer, then an exception is throwen
port.TimeOut = 1500

'set the end of a line
port.newLine = vbNewLine

'open it...or was it connect?
port.Open()

'send our message...we can use three different types, Byte(), Char() and String. If we use WriteLine, the message will be automatically extended with the NewLine-Symbol.
port.WriteLine("Hallo da drüben!")

'this will read until the next newLine Symbol, or till the TimeOut runs out...whatever comes first.
response = port.ReadLine()

port.close()
port.Dispose()

'that's it. :)


Grundsätzlich musst du natürlich aufpassen was du damit ansprichst. vbNewLine z.B. besteht aus einem Cr (Carriage Return) und Lf (Line Feed), wenn das Gerät ein anderes Anweisungs-Ende erwartet, musst du das natürlich wissen...sonst wirst du ewig auf deine Antwort warten. Grundsätzlich gilt hier die Dokumentation vom Hersteller abzugreifen. ;)

Wenn du wirklich einzelne Pins ansprechen willst, so fürchte ich dass das komplizierter wird. Grundsätzlich würde cih für so ein Vorhbaen nach den entsprechenden API-Befehlen ausschau halten.

Rob

Gaertner
17.08.2008, 17:23
@ ROB,
vielen Dank für die Kurzfassung - die übrigens super funktioniert.

Habe mich trotzdem ein bißchen mit API beschäftigt.

Klappt aber nur soweit das ich zwar schreiben kann:
' schreibe Daten nach COM1
Console.WriteLine("Schreibe folgende Daten nach COM1: Test")
Success = WriteFile(hSerialPort, Buffer, Buffer.Length, BytesWritten, IntPtr.Zero)
If Success = False Then
Throw New CommException("Kann nicht auf COM1 schreiben")
End If
aber das mit dem einlesen haut irgendwie nicht so richtig hin:
' lese Daten von COM1
Success = ReadFile(hSerialPort, Buffer, Buffer.Length, BytesRead, IntPtr.Zero)
Console.WriteLine("Lese folgende Daten von COM1:" & Success)
If Success = False Then
Throw New CommException("Kann nicht von COM1 lesen")
End If
Ich bekomme zwar die Info, das Daten anliegen - Ja (True) aber ich finde irgendwie keinen rechten Weg diese dann anzuzeigen.:(

Vielleicht weiß jemand was ich da falsch mache?

Gaertner
18.08.2008, 09:04
@All,

hab vergessen zu erwähnen:
Bekomme beim lesen die Mitteilung oder das Ergebnis:
wenn True dann wurden 4 Bytes gelesen - wo ich nicht weiß wie ich die Anzeigen kann.
wenn False dann bekomme ich eine 0 zurück.

Wie komme ich an den Wert dieser 4 Bytes?

Robert_Zenz
18.08.2008, 10:20
Moin.

Kommt ganz darauf an was diese vier Bytes darstellen. Schau dir mal die System.BitConverter and System.Text.Encoding Klassen an.

System.BitConverter.toInt16(Buffer, 0) 'Short
System.BitConverter.toInt32(Buffer, 0) 'Integer
'...

System.Text.Encoding.Default.GetString(Buffer, 0, 4)

Rob

Gaertner
19.08.2008, 16:46
DANKE, @ Rob !!

Ich glaub jetzt hab ich´s.

Wesentlich einfacher ist die Umsetzung tatsächlich mit .Net.
Mittels API und kernel32.dll ist das ganze recht umfangreich, aber Hallo....
es funktioniert trotzdem genauso gut.

Schade das MicrosoftPress(Löffelmann) und andere Autoren(Koffler, Monadjemi) nicht mehr dieses Thema unterstützen, und die Microsoft win32api.txt ist wohl nie so richtig bearbeitet worden?!

Hilfreich:
http://www.activevb.de/rubriken/apikatalog/index-apikatalog.html
http://www.vbforums.com/showthread.php?t=277596

Robert_Zenz
20.08.2008, 07:43
Moin.

Freut mich das ich helfen konnte.
Wenn du nach API-Dokumentation suchst, bist du bei PInvoke (http://www.pinvoke.net) am besten aufgehoben. Einfach nur eine geniale Seite.

Rob