Hallo Leute,
ich weiß, dass da hier eigentlich nicht der richtige Platz für Visual
Basic ist. Es sei gesagt: Ich bin ein Absoluter Newbie im Umgang mit
Microsoft Visual Basic 2010 Express.
Mein Ziel ist es, über COM1 ein einfaches "e" zu senden. Nach Tutorials
in Internet ist dies alles kein Problem, bei mir stellt es das
allerdings dar. In Sämtlichen Tutorials wird die Serielle Schnitstelle
mit "SerialPort1." angesteuert.
Bei mir funktioniert das leider nicht und im ErrorLog wird die Meldung
"Fehler 2 "SerialPort1" wurde nicht deklariert. Auf das Objekt kann
aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden."
ausgeworfen.
Der Befehl "SerialPort" wird vom Ediotor allerdings erkannt und besitzt
Eigenschaften und Methoden wie "BaudRate","Open" oder "Close".
Kann mir jemand Weiterhelfen und Tips geben, wie ich das zum laufen
bekomme ? Wäre euch sehr Dankbar!
Gruß
Maximilian
du musst ja estmal ein Objekt vom Type SerialPort anleigen. In C# macht
man es mit.
SerialPort SerialPort1 = new SerialPort("Com1");
so jetzt muss du es nur noch nach VB übersetzen.
@Peter II: oder einfach auf CIL ;)
Du musst das Objekt natürlich vorher anlegen mit Dim
Als Empfehlung: nimm kein VB. Die Sprache ist absolut Müll. Ich habe in
der MSDN Code-Schnipsel gesehen, bei der das VB fast zu C# wechselte,
weil es nicht mehr mit VB beschrieben werden konnte.
Ziehs dir halt aus der Toolbox rein. Du hast das Objekt SerialPort noch
garnicht in die Form gezogen.
Hier wie es geht: http://www.youtube.com/watch?v=wsMMHaSvvRU&t=292Brater schrieb:> Als Empfehlung: nimm kein VB. Die Sprache ist absolut Müll. Ich habe in> der MSDN Code-Schnipsel gesehen, bei der das VB fast zu C# wechselte,> weil es nicht mehr mit VB beschrieben werden konnte.
Das Problem ist, dass die wenigsten gut programmieren können. Die
meisten machen Klick n' Run. Das führt immer zu graussamen Programmen.
Objektorientiertheit ist nicht jeder man Sache.
Zu deinem Kommentar - das ist natürlich völliger Blödsinn. C# und VB.net
sind mit Ausnahme des Syntax absolut gleichwertig. Es gibt jede Struktur
vom Point bis zum Mashall in beiden Sprachen. Es gibt sogar
Onlineübersetzer. Das ist 1:1 das gleiche. Ein anderer Syntax und fertig
ist die andere Sprache.
Michael schrieb:> Das Problem ist, dass die wenigsten gut programmieren können
Hmpf... ja. Kann an einer Allergie durch mehrjährige VBA-Programmierung
liegen (wobei ich heute statt VBA lieber gleich ein Office-Addin in VS
programmieren würde). Und dabei ist C# schon sehr sicher im Vergleich zu
nativen C/C++.
Michael schrieb:> Es gibt sogar> Onlineübersetzer.
Das kannte ich noch gar nicht aber interessant, dass es sowas gibt.
Wieder was gelernt...
Michael schrieb:> Das ist 1:1 das gleiche.
Auf CIL-Ebene kannte ich das. Allerdings ist das ja eine Ebene tiefer
(in Richtung ASM).
Maxi schrieb:> In Sämtlichen Tutorials wird die Serielle Schnitstelle> mit "SerialPort1." angesteuert.
Sprich: die greifen alle auf eine Instanz der Klasse zu. Und so sollte
es auch sein.
> Bei mir funktioniert das leider nicht.
Weil du nirgendwo eine Instanz der Klasse erzeugst.
> Der Befehl "SerialPort" wird vom Ediotor allerdings erkannt und besitzt> Eigenschaften und Methoden wie "BaudRate","Open" oder "Close".
Natürlich. Der Typ der Instanzvariablen ist ja per Deklaration
vereinbart. Das System kann nicht wissen, daß du zu doof dazu bist, zur
Laufzeit die Referenz auf eine gültige Instanz der Klasse zeigen zu
lassen.
> Kann mir jemand Weiterhelfen und Tips geben, wie ich das zum laufen> bekomme ? Wäre euch sehr Dankbar!
Wenn du den Scheiß nicht als schwachsinnigen Screenshot, sondern als
einfachen Text geposted hättest, hätte ich mich vielleicht sogar
aufgerafft, diesen Bullshit zu korrigieren. Aber so: Nö.
Brater schrieb:> Du musst das Objekt natürlich vorher anlegen mit Dim
Blödsinn. Die Objektreferenz hat er angelegt, sogar mit Dim. sie zeigt
bloß nicht auf eine Instanz, weil er niemals eine erzeugt.
> Als Empfehlung: nimm kein VB. Die Sprache ist absolut Müll.
Du bist Müll.
Weil du garnix begreifst. Z.B. nicht die Tatsache, daß bei .net die
verwendete Sprache nahezu keine Rolle spielt. Das ist nur Zuckerl rund
um's Framework.
c-hater schrieb:>> Du musst das Objekt natürlich vorher anlegen mit Dim> Blödsinn. Die Objektreferenz hat er angelegt, sogar mit Dim. sie zeigt> bloß nicht auf eine Instanz, weil er niemals eine erzeugt.
wo soll er das denn gemacht haben?
c-hater schrieb:> Peter II schrieb:>> wo soll er das denn gemacht haben?> Wohl im GUI. Sollte in der Form1.Designer.vb zu finden sein.
das hat er vermutlich nicht - das wird auch das Problem sein. Du hast
aber behaupter er hat sie anglegt und das kannst du unmöglich wissen.
Peter II schrieb:> das hat er vermutlich nicht
Dann würde aber der Editor nicht die Methoden/Eigenschaften "kennen",
wie er es zumindest lt. Angabe des OP tut.
Oops, Kommando zurück. Nach nochmaligem Lesen des ziemlich kruden
Ausgangspostings gebe ich dir nunmehr vollkommen Recht. Der OP behauptet
nicht, daß der Editor das für für SerialPort1 tun würde, nur, daß er es
für SerialPort tun würde. Sprich: das waren "shared"-Geschichten der
Klasse und der OP hat den Kram, (wohl weil es nicht funktioniert hat)
dann einfach in SerialPort1 unbenannt.
Wodurch es natürlich auch nicht funktioniert, aber nunmehr auch die
Klassenproperties und -methoden nicht mehr kennen dürfte, was der OP
aber natürlich nicht erwähnt hat...
> Hier wie es geht: Youtube-Video "Visual Basic Serial COM Port Tutorial (Visual
Studio 2010) - Part 2"
Dieses Video war unter anderem der Ursprung meines Vorhabens. Ich habe
es genauso gemacht, wie in dem TuTo und es funktioniert nicht. Im
Tutorial wird der Serial Port auch nicht angelegt! Wie ich es auch
anstelle, "SerialPort1" kann bei mir nicht erkannt werden -.- Was mache
ich nur falsch ?
> Natürlich. Der Typ der Instanzvariablen ist ja per Deklaration> vereinbart. Das System kann nicht wissen, daß du zu doof dazu bist, zur> Laufzeit die Referenz auf eine gültige Instanz der Klasse zeigen zu> lassen.> Wenn du den Scheiß nicht als schwachsinnigen Screenshot, sondern als> einfachen Text geposted hättest, hätte ich mich vielleicht sogar> aufgerafft, diesen Bullshit zu korrigieren. Aber so: Nö.
Schön dass du dich so herablassend geäußert hast. So hast du dir
wenigstens die Mühe gemacht, mich zu beleidigen, das zeigt ne ziemliche
schwäche. Ich bin nunmal nicht mit vb vertraut, darum frage ich. Bitte
unterlasse deartige POsts in der Zukunft, die helfen keinem was.
Brater, dir Danke erstmal für die Antworten. Anscheinend will mir ja
wenigstens einer helfen (:
ich habe unter anderem auch mit einem anderen Tutorial gearbeitet.
http://www.youtube.com/watch?v=1YQM30r8Nuo Ab 2:55 ist der Code zu
sehen. Der sieht so aus:
[c]Imports System.IO.Ports
Public Class Form1
Private Sub TextBox1_TextChanged(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles TextBox1.TextChanged
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Try
SerialPort1.PortName = TextBox1.Text
SerialPort1.BaudRate = TextBox2.Text
SerialPort1.Open()
Button1.Enabled = False
Button2.Enabled = True
Button3.Enabled = True
Catch ex As Exception
MsgBox("Verbindungsaufbau gescheitert")
End Try
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If SerialPort1.isopened = True Then
SerialPort1.Close()
End If
End Sub
Private Function SerialPort1() As Object
Throw New NotImplementedException
End Function
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
SerialPort1.write("e" & vbCr)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
SerialPort1.write("a" & vbCr)
End Sub
End Class
[c]
Aber auch dieser geht nicht. Und auch hier wird "SerialPort1" nicht neu
angelegt. Irgendwelche Tips ? Ist wirklich wichtig!
Danke schonmal (:
Maxi schrieb:> Aber auch dieser geht nicht. Und auch hier wird "SerialPort1" nicht neu> angelegt. Irgendwelche Tips ? Ist wirklich wichtig!
wir wissen nicht unter welchen namen du das Objekt SerialPort angelegt
hast. (WEnn du es überhaupt angelegt hast!)
Mach mal ein screenshot von die Formular damit mit den Serialport sehen
kann.
Und wenn man Programmiert sollte man sich wenigsten ein paar grundlagen
aneignet - nein videos sind dafür nicht geignet. Du weisst ja nicht mal
woher das SerialPort kommen soll.