Forum: PC-Programmierung SerialPort bei Visual Basic 2005


von Sebastian K. (basti)


Lesenswert?

Hallo!
Ich habe mir das Visual Basic 2005 Express heruntergeladen, weil ich
endlich mal ein funktionierendes Programm schreiben wollte mit dem ich
über die Serielle Schnittstelle Daten austauschen kann.
Ich hab auf der Microsoft Homepage gelesen das das jetzt alles
einfacher gehen soll (nicht mehr über dieses MsComm...).
Leider bin ich nicht so fit im Programmieren, aber die Grunddinge sind
da.

Kann mir jemand von euch sagen, wie ich mit diesem Visual Basic das mit
der Schnittstelle hinbekomme? Gibt's da Info's (am besten Deutsch)?
Mit der Online Hilfe bin ich nicht weiter gekommen...! Beispielprogramm
würden mir auch sehr weiterhelfen.

MfG
Basti

von Kay P. (kay)


Lesenswert?

Hi,

schau mal bei :

http://www.codeworks.it/net/VBNetRs232.htm

das ist zwar für VB.net, aber ich habe auch VB2005 und man kann es auch
dafür benutzen.

mfg Kay

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

im .NET-Framework 2.0 gibt es die Klasse System.IO.Ports.SerialPort

Du erstellst ein Objekt dieser Klasse und kannst dann ganz einfach die
Serielle benutzen.

Matthias

von Sebastian K. (basti)


Lesenswert?

Hallo!
Nachdem ich mich ein bisschen in die "Classes" eingearbeitet habe
hat's tatsächlich Funktioniert!
Jetzt muss ich es nurnoch fertigbringen, eine ankommende Integerzahl
auch als solche in einem Label o.ä. darzustellen.
Wenn ich mit "Label1.Text = serialport.ReadByte()" ein Byte
darstellen will, kommen nur seltsame Zahlen heraus! Mit einem
Terminalprogramm jedoch wird alles richtig angezeigt. Vielleicht
könntet ihr mir da nochmal helfen...

Ausserdem will ich später mit den ankommenden Werten eine Kurve/Linie
zeichnen (ein ankommendes Byte stellt dann einen Wert dar), gibt's da
ne einfache Funktion in VB?

Danke für eure Hilfe!

von FiveFingers (Gast)


Lesenswert?

Ich kenn mich zwar nicht so mit Seriellen Schnittstellen aus aber zu
deinem Problem könnt ich vielleicht die Lösung finden.

Das Byte das du einliest ist nicht ASCII Konform. Das bedeutet das wenn
zB. das Byte das du einliest den Wert 5 hat, das im ASCII Format nicht
die Zahl 5 ist. Die ASCII Tabelle findest du einfach im Google.

ASCII Tabelle
=============
ByteWert   ASCII Zeichen
48       - 0
49       - 1
50       - 2
51       - 3
52       - 4
53       - 5
54       - 6
55       - 7
56       - 8
57       - 9

Also wenn du ein Byte einliest, würde ich einfach 48 dazuaddieren und
dann solltest du eigentlich die Zahl haben. (Wenn du jedoch eine Zahl
>= 10 hast, musst du ein bisschen umdenken weil du dann ja 2 Zeichen
brauchst. Also Zehnerstelle herausheben und konvertieren und
Einerstelle herausfinden und konvertieren.)

Hoffe ich konnte helfen.
Wenn das klappt, sag bitte bescheid, interessiert mich.

FiveFingers

von Dirk (Gast)


Lesenswert?

Hi,

ich meine man konnte direkt in VB das Zeichen in Ascii wandeln. Glaube
es war der Asc Befehl.

von Toni (Gast)


Lesenswert?

"nicht mehr über dieses MsComm..."

Was hat dir denn daran nicht gefallen?

Toni

von Sebastian K. (basti)


Lesenswert?

Hallo!
Ich dachte wenn Microsoft sagt das es mit .NET einfacher ist mach
ich's gleich damit.
Hast du How-To's oder so zur Hand? Anschauen schadet ja nicht :-)

von Sebastian K. (basti)


Lesenswert?

Wollte noch fragen wie man bei VB 2005 Express einzelne Pixel setzen
kann...wär mir jetzt grad fast wichtiger :-)

von Philipp Kälin (Gast)


Lesenswert?

Hallo
wollte nur mal fragen, ob es ein grosser Umstieg von VB6 auf VB 2005
ist? Habe mir 2005 Express mal runtergeladen, lief aber auf win 2000
nie richtig. Inzwischen habe ich XP und möchte es vieleicht nocheinmal
probieren. Habe von deinem Problem gelesen, vieleicht nützt dir das was


http://www.tools4vb.com/software/sevgraph.php

ist eine OCX mit der man Werte graphisch darstellen kann. Ich habe noch
ein Tutorial gefunden

http://www.vb-fun.de/vb/tutorial/tutorial003.shtml

vieleicht nutzt es dir was.

von Sebastian K. (basti)


Lesenswert?

Hallo!
Danke für den Tip, aber dieses Programm/OCX ist für VB.net nicht
geeignet...schade das das .net nicht zu den anderen Voll-Kompatibel ist
:-(

von Dom (Gast)


Lesenswert?

Hallo!
Hab den beitrag zufällig gefunden und interessiere mich auch wohl für
das Arbeiten mit der seriellen Schnittstelle unter Win XP, allerdings
mit C/C++. Habe Visual Studio 2003. Gibt es da auch fertige Klassen
oder Bibliotheken zum einbinden?

MFG Dom

von Andreas Severin (Gast)


Lesenswert?

Hallo
probiere es docch mal mit

"Label1.Text = serialport.ReadChar"
oder
"Label1.Text = serialport.ReadTo"

es gibt nähmlich 6 verschiedene Read-methoden

MfG Andreas

von raoul (Gast)


Lesenswert?

geht beides nicht bei mir.
mfg

von Philipp Kälin (Gast)


Angehängte Dateien:

Lesenswert?

Kennt Ihr eigentlich die Port.dll vieleicht geht es mit der?

In VB6 muss man diese deklarationen in ein Modul schreiben:

Attribute VB_Name = "Module1"
Declare Function OPENCOM Lib "Port" (ByVal A$) As Integer
Declare Sub CLOSECOM Lib "Port" ()
Declare Sub SENDBYTE Lib "Port" (ByVal b%)
Declare Function READBYTE Lib "Port" () As Integer
Declare Sub DTR Lib "Port" (ByVal b%)
Declare Sub RTS Lib "Port" (ByVal b%)
Declare Sub TXD Lib "Port" (ByVal b%)
Declare Function CTS Lib "Port" () As Integer
Declare Function DSR Lib "Port" () As Integer
Declare Function RI Lib "Port" () As Integer
Declare Function DCD Lib "Port" () As Integer
Declare Sub DELAY Lib "Port" (ByVal b%)
Declare Sub TIMEINIT Lib "Port" ()
Declare Sub TIMEINITUS Lib "Port" ()
Declare Function TIMEREAD Lib "Port" () As Long
Declare Function TIMEREADUS Lib "Port" () As Long
Declare Sub DELAYUS Lib "Port" (ByVal l As Long)
Declare Sub REALTIME Lib "Port" (ByVal i As Boolean)

Es sind übrigens nicht alle, die Port.dll kann noch viel mehr, habe
aber die Deklarationen dazu noch nicht gefunden. (Sollte auch mit
anderen Programiersprachen funktionieren, wenn man die Deklaration ein
bisschen umstellt)
mfg

von Rage (Gast)


Lesenswert?

Hallo,

ich habe ebenfalls meine Probleme mit dem VB.Net 2005 und RS232. Ich
möchte versuchen einen Button mit einer Textausgabe per RS232 zu
verknüpfen. Habs bis jetzt nich hinbekommen. Warum ist das im VB so
komplex? Wenn ich auf Controllerebene Progge, ist das minimaler
Aufwand, aber VB?
Im VB.Net 2005 gibts ein SerialPort-Icon in der Toolbox, jedoch hat mir
dies auch nicht viel gebracht. Schön wäre einfach ein "Print" oder
"Inkey"-Befehl.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

ich seh das Problem nicht. Du legst ein Objekt der Klasse SerialPort an
(nennen wir sie mal mPort) und verwendest dann dieses Objekt. In C#
sieht das etwa so aus:
1
mPort = new SerialPort();
2
mPort.BaudRate = 9600;
3
mPort.DataBits = 8;
4
mPort.StopBits = StopBits.One;
5
mPort.Parity = Parity.None;
6
mPort.Handshake = Handshake.None;
7
mPort.PortName = "COM1";
8
mPort.ReadTimeout = 10000;
9
mPort.Open();

Und dann schreibst du einfach mit
1
mPort.Write("Foo");

einen String auf die Schnittstelle. Alternativ ist Write auch noch mit
einem char[] oder byte[] zu verwenden. Lesen geht mit Read oder dessen
Varianten. Dann gibt es noch Events für verschiedene Ereignisse wie
etwa wenn ein Zeichen empfangen wurde. Wie du das in VB, C# oder
anderen .net Sprachen verwendest ist in

http://msdn2.microsoft.com/en-us/library/system.io.ports.serialport_members.aspx

ausführlich beschrieben. Warum man aber im .net Framework zu VB greifen
kann ist mir etwas unklar. Die Sprache hat IMHO keinen Vorteil gegenüber
C#.

Matthias

von Rage (Gast)


Lesenswert?

Danke für die Antwort. Werd mir heut Abend nochmal versuchen das in Gang
zu bekommen.
Warum es VB wurde kann ich damit begründen, daß ich Grundlegende
Kenntise über Basic besitze. Jedoch ist mir inzwischen klar, das VB nur
noch sehr wenig mit Basic zu tun hat und ich eigentlich eine neue
Sprache lerne. Hätt ich das gewußt, hätte ich vermutlich gleich mit
VC.Net angefangen.

von tom (Gast)


Lesenswert?

Toller thread, genau das was ich suchte.

Einztig stört mich am ende das geseiere wegen VB. Spätestens seit der 
vollen objektorientierung in VB.NET sollte auch der letzte Nerd gemerkt 
haben das VB eine vollwertige Programmiersprache ist und sich einer sher 
großen Anhängerschaft erfreut.

Ausserdem ist es 50% effektiver als C#
Bsp:
VB: Me (2 Char)
C#: THIS (4 CHAR)

Das sind 50% ;-)

von Lolipop (Gast)


Lesenswert?

Bin einfacher MC-Programmierer und schau gerade zufällig mal hier 
vorbei. Was für ein Wahnsinn, was für ein Overhead, mal eben so eine 
simple serielle Schnittstelle anzusprechen ! Einfach nur abschreckend, 
dieser Komplexitätswahnsinn von VB & Co. ! Als ob hier jemand ein 
Interesse daran hat, die Dinge bewußt maximal zu verkomplizieren ! Dann 
macht mal schön weiter hier...

von Der Hubert (Gast)


Lesenswert?

Irgendwie muss man ja die Ingenieursgehälter rechtfertigen .... ;):D

Wenn man bedenkt, wie popelig einfach eine Serielle aufgebaut ist, fragt 
man sich schon, was das soll ....

von Karl H. (kbuchegg)


Lesenswert?

Hä?

Was, bitte, ist daran kompliziert?

Nicht falsch verstehen. Ich bin normalerweise an vorderster
Front, wenn es darum geht über .Net und C# herzuziehen, aber
das ist nun wirklich nicht kompliziert.
Ein Objekt anlegen, die Eigenschaften die man haben möchte
einstellen und die Schnittstelle öffnen. Danach mit Write
schreiben und mit Read empfangen oder eben Funktionen an die
Events anhängen, was in einem GUI System nun wirklich eine
absolut übliche Vorgehensweise ist.

> Bin einfacher MC-Programmierer
Gut. Dann hast du aber auch nicht das Problem, daß du mit
einem Betriebssystem die Modalitäten aushandeln musst. Denn
in einem Multiuser/Multitasking System kann das BS nun mal
nicht erlauben, dass sich jedes popoelige Programm so mir
nichts, dir nichts an den Schnittstellen zu schaffen macht,
wie es gerade lustig ist.

> fragt man sich schon, was das soll ....

Als ob man auf einem AVR nicht ebenfalls die Schnittstelle
konfigurieren und auf Basisfunktionen zum Schreiben bzw einem
Interrupt zum Empfangen aufbauen müsste. Nur musst du dir dort
die untersten Basisfunktionen noch selber schreiben, während
hier das Objekt schon alles fix fertig zur Verfügung stellt.
Wie popelig die Serielle auf einem AVR ist, sieht man wohl
hier jeden Tag an der Anzahl der Fragesteller die sie nicht
zum Laufen bringen. Von funktionierenden Buffer Lösungen, bzw
einem implementiertem Handshake reden wir mal lieber gar nicht.

von Klaus Kehrer (Gast)


Lesenswert?

Hi,
ich kann Karl Heinz nur zustimmen.

bye
Klaus

von Alex W. (a20q90)


Lesenswert?

Hi,

ich habe ein ähnliche Problem mit SerialPort1.Write!

Zeichen von 0 bis 100 (Ascii) kommen am Ziel an! Darüber ist sense!
Ich hab dauernd versucht das Byte "170" zu senden, und am Empfänger ist 
glaub ich 62 oder 63 angekommen.

Com-Einstellungen hab ich schon geprüft! Die passen mit dem Target 
überein!
Was kann das sein?

Ich nutz übrigends VB 2008 Express (gibt es als Iso-img bei Microsoft)

Grüße
Alex

von Alex W. (a20q90)


Lesenswert?

EDIT:

Hab jetzt etwas probiert! Es ist so das 0-127 klappt! Über 128 gehts von 
0 los. Also muss da was miz 7Bit sein! Mal schaun ob ich den Fehler 
finden kann!

EDIT EDIT:

Endweder bin ich zu Müde, oder ich sollte als Anfänger mal etwas mehr 
Zeit ins "Rumprobieren" investieren!

        SerialPort1.Encoding = System.Text.Encoding.Default

Das wars! Von 7 auf 8Bit. Nun werden die Daten richtig übertragen!

Grüße und gut N8
Alex

von Torben (Gast)


Lesenswert?

unsigned char beutzen.

unsigned char Wertebreich: 0....255

char Wertebereich: -127 ... +127

von Chris .. (dechavue)


Lesenswert?

Torben wrote:
> unsigned char beutzen.
>
> unsigned char Wertebreich: 0....255
>
> char Wertebereich: -127 ... +127

Ich hoffe du meinst auf dem µC, unter .Net ist ein char von 0 - FFFF 
(also 2 Byte, da er auch Unicode darstellen kann)

von danczi (Gast)


Lesenswert?

kann man wer einen beispiel code mit unsigned char machen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.