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
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
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
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!
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
Hi, ich meine man konnte direkt in VB das Zeichen in Ascii wandeln. Glaube es war der Asc Befehl.
"nicht mehr über dieses MsComm..." Was hat dir denn daran nicht gefallen? Toni
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 :-)
Wollte noch fragen wie man bei VB 2005 Express einzelne Pixel setzen kann...wär mir jetzt grad fast wichtiger :-)
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.
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 :-(
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
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
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
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.
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
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.
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% ;-)
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...
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 ....
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.
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
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
unsigned char beutzen. unsigned char Wertebreich: 0....255 char Wertebereich: -127 ... +127
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.