XP verweigert Zugriff auf Com-Port, selbstgeschriebenes VB-Programm

Im Unterforum Off-Topic - Beschreibung: Alles andere was nirgendwo reinpasst

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 29 11 2024  16:40:47      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Off-Topic        Off-Topic : Alles andere was nirgendwo reinpasst


Autor
XP verweigert Zugriff auf Com-Port, selbstgeschriebenes VB-Programm

    







BID = 385043

Steppenwolf

Schreibmaschine



Beiträge: 1757
Wohnort: Zürich, Schweiz
Zur Homepage von Steppenwolf
 

  


Hallo zusammen,

ich habe in Visual Basic ein kleines Projekt am Laufen, es soll ein kleines Hyperterminal werden, indem ich Daten an die serielle Schnittstelle senden und auch von ihr empfangen kann.
Wenn ich das Programm (.Exe-File) auf dem PC ausführe, dann kommt eine Fehlermeldung, die besagt, dass der Zugriff auf den Com-Port verweigert wurde.
Mit anderen, "fertigen" Terminalprogrammen funktioniert der Dateiaustausch über den Com1 tadellos. Nur wenn ich mein Programm starten will, kommt diese Fehlermeldung...
So kann ich auch nicht testen, ob es funktioniert...
Die Windows-Firewall ist abgeschaltet.

Hat jemand eine Ahnung, wie man dies beheben könnte? Wieso wird der Zugriff verweigert?
Die Verweigerung tritt schon auf, wenn ich im Compiler debugge, es kommt die Fehlermeldung, dass der Zugriff verweigert wurde.

Herzlichen Gruss
Mario

_________________
Meine Projekte:
http://mauerer.m.googlepages.com

[ Diese Nachricht wurde geändert von: Steppenwolf am 12 Nov 2006  0:53 ]

BID = 385046

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

 

  

Poste mal den Code.
Ich kann VB, vllt. hast du nen Bug drin.


Wie greifst du auf den COM-Port zu? Benutzt du die fertigen Objekte (Windows Comm-Controls) oder verschaffst du dir über die IO-Adressen direkt Zugriff - Das wird so nicht gehen.

Ich würds wenn dann mit dem Comm-Control machen, da wird auch ein Interrupt ("Event" in VB) ausgeführt, wenn sich etwas tut, u.a. auch, wenn Daten eingehen.

Hab ich alles schon gemacht unter XP, damit funktioniert das.

Edit:
Oder lade mal das ganze Projekt hoch.

_________________


[ Diese Nachricht wurde geändert von: DonComi am 12 Nov 2006  1:54 ]

BID = 385048

Steppenwolf

Schreibmaschine



Beiträge: 1757
Wohnort: Zürich, Schweiz
Zur Homepage von Steppenwolf

Oh, vielen Dank für die Hilfe!

Ich machs mit den IO-Zugriffen, hab ich irgendwo im WWW gefunden.
Ich programmeier mit dem 2005 express.

Im Anhang das Projekt. (was davon brauchst du? :))


_________________
Meine Projekte:
http://mauerer.m.googlepages.com

BID = 385051

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Hallo Mario,

Eiderdaus, hat sich ja viel geändert mit VB... Ist das VB.NET? Das habe ich nicht mehr, ab da wurde mir die Sprache zu abstrakt .

Dennoch kann ich den Code verstehen, auch wenn die ursprüngliche Basic-Syntax nur noch teilweise beibehalten wurde.

Was mir spontan auffällt: Wird der Com-port überhaupt geöffnet oder initialisiert? WEnn nein, dann kann man auch nicht auf ihn zugreifen. Schau mal, ob es ne Funktion/Prozedur gibt, mit denen man den Port öffnet. Du erstellst im Printip mit dem Aufruf



Code :


IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM4")



ein Objekt, aber es wird nicht geprüft, ob auch beim Erstellen des Objektes alles glatt gelaufen ist (Statuscodes!)

Weiterhin kann dein Programm nicht funktionieren. Denn einmal wird die Variable returnStr in ReceiveSerialData deklariert, und zwar nur lokal, also nur in der Funktion/Prozedur verfügbar, und dann später nochmal in Form1_Load. Dort wird zwar die Funktion ReceiveSerialData aufgerufen, jedoch wird in returnstr immer "" stehen, da sich der Wert nicht ändern kann!


Überdenke nochmals die Struktur. Du pollst ja permanent, ob ein Zeichen im Empfangsregister ist. Das kostet viel Rechenzeit des eh schon langsamen Programms.

Wenn du auch nur irgendwie die Möglichkeit hast, dann nimm ne andere Sprache, dieser VB.NET-Kram ist zu abstrakt.



PS: Alles was ich schrieb ist bezogen auf gleichen Code in VB. Dort würde das Programm so nicht laufen!

Tipp: Schau dich mal um, wie man in deiner Umgebung Objekte einfügen kann und dann nimm das Comm-Control-Object. Das ist relativ gut und ist Event-gesteuert.

_________________

BID = 385077

Steppenwolf

Schreibmaschine



Beiträge: 1757
Wohnort: Zürich, Schweiz
Zur Homepage von Steppenwolf

Hmm, Objekte einfügen...
Ich hab da eine Toolbox, da sind z.B. die Buttons, Textfelder etc. drin. Da hats auch eines, das heisst "Serial Port". Ich kann das dann in die Form ziehen, und unter der Form gibts dann das Icon "Serial Port".
Rechts kann ich dann Sachen wie Baudrate, Parity etc. einstellen.
Doch wie er verwendet wird wird nicht "erzeut"...

Beim laufenlassen des Programms kommt eine Fehlermeldung, wenn ich auf "details" klicke, kommt das:

************** Ausnahmetext **************
System.UnauthorizedAccessException: Der Zugriff auf den Anschluss COM4 wurde verweigert.
bei System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
bei System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
bei System.IO.Ports.SerialPort.Open()
bei Microsoft.VisualBasic.Devices.Ports.OpenSerialPort(String portName)
bei Hyperterminal.Form1.ReceiveSerialData() in C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio 2005\Projects\Hyperterminal\Hyperterminal\Form1.vb:Zeile 15.
bei Hyperterminal.Form1.Form1_Load(Object sender, EventArgs e) in C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio 2005\Projects\Hyperterminal\Hyperterminal\Form1.vb:Zeile 40.
bei System.EventHandler.Invoke(Object sender, EventArgs e)
bei System.Windows.Forms.Form.OnLoad(EventArgs e)
bei System.Windows.Forms.Form.OnCreateControl()
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl()
bei System.Windows.Forms.Control.WmShowWindow(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
bei System.Windows.Forms.ContainerControl.WndProc(Message& m)
bei System.Windows.Forms.Form.WmShowWindow(Message& m)
bei System.Windows.Forms.Form.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Geladene Assemblys **************
mscorlib
Assembly-Version: 2.0.0.0.
Win32-Version: 2.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Fr......dll.
----------------------------------------
Hyperterminal
Assembly-Version: 1.0.0.0.
Win32-Version: 1.0.0.0.
CodeBase: file:///C:/Dokumente%20und%20Einste......exe.
----------------------------------------
Microsoft.VisualBasic
Assembly-Version: 8.0.0.0.
Win32-Version: 8.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSI......dll.
----------------------------------------
System
Assembly-Version: 2.0.0.0.
Win32-Version: 2.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSI......dll.
----------------------------------------
System.Windows.Forms
Assembly-Version: 2.0.0.0.
Win32-Version: 2.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSI......dll.
----------------------------------------
System.Drawing
Assembly-Version: 2.0.0.0.
Win32-Version: 2.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSI......dll.
----------------------------------------
System.Runtime.Remoting
Assembly-Version: 2.0.0.0.
Win32-Version: 2.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSI......dll.
----------------------------------------
System.resources
Assembly-Version: 2.0.0.0.
Win32-Version: 2.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSI......dll.
----------------------------------------
System.Windows.Forms.resources
Assembly-Version: 2.0.0.0.
Win32-Version: 2.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSI......dll.
----------------------------------------
mscorlib.resources
Assembly-Version: 2.0.0.0.
Win32-Version: 2.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Fr......dll.
----------------------------------------

************** JIT-Debuggen **************
Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
Konfigurationsdatei der Anwendung oder des Computers
(machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.

Zum Beispiel:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

Wenn das JIT-Debuggen aktiviert ist, werden alle nicht behandelten
Ausnahmen an den JIT-Debugger gesendet, der auf dem
Computer registriert ist, und nicht in diesem Dialogfeld behandelt.


Vielleicht hilfts ja was

_________________
Meine Projekte:
http://mauerer.m.googlepages.com

BID = 385118

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Hallo Mario,

ich habe mir damals VB mit VisualBasic 6.0 beigebracht. Das ist schon recht alt im Gegensatz zu dem, was du benutzt. Damit kann ich leider nicht mehr viel anfangen.


Aber ich denke, dass auch Objekte, die man auf die Form zieht, gewisse Routinen beinhalten, welche man so aus dem Programm heraus aufrufen kann.

Da müsste es eine Routine geben, die PortOpen heißt:

Das Objekt ist com (MS-COMM-Objekt)

com.PortOpen = True 'Jetzt kann man erst Daten senden und empfangen
com.Output = "Gesendete Zeichenkette"
com.PortOpen = False 'Port wieder schließen

-

Ist halt die normale Basic-Objekt-Sprache, aber leider kenn ich mich mit allen Nachfolgeversionen nach VB6.0 nicht mehr aus, kann also nur raten, wie man das dort macht.

Vielleicht wendest du dich mit deinem Problem mal an:
www.vbarchiv.de
.

Dort war ich mal im Forum, aber ist schon ein bischen her .

_________________

BID = 385133

HeinzVogel

Schreibmaschine

Beiträge: 1580
Wohnort: Welt

Burkhard Kainka hatte in der Elektor mal was, google mal noch port.dll oder port dll

Damit lässt sich RS232 eigentlich ganz bequem ansteuern

mfg

_________________
Nein, Frau Bundeskanzlerin. Dezidiert Nein.

BID = 385155

Steppenwolf

Schreibmaschine



Beiträge: 1757
Wohnort: Zürich, Schweiz
Zur Homepage von Steppenwolf

Oder andersrum:
Wo kann man VB 6 noch downloaden?

Gegockelt hab ich, fand aber nix..

_________________
Meine Projekte:
http://mauerer.m.googlepages.com

BID = 385160

HeinzVogel

Schreibmaschine

Beiträge: 1580
Wohnort: Welt

VB 6 hab ich als Ablaufmodell (also keine EXE's) noch auf CD, das müsste irgendwo im Netz kursieren.

VB als Voll oder Enterprise Version ist meines wissens nicht offen verfügbar, wenn du ein paar Tipps willst müsstest du mir ne PN schreiben.

mfg

_________________
Nein, Frau Bundeskanzlerin. Dezidiert Nein.

BID = 385212

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Hallo HeinzVogel,

an der Ports.dll ist blöd, dass keine Interrupts ausgeführt werden können.

Deshalb rate ich nochmals zu dem von mir genannten Objekt "Microsoft Comm Control 6.0"

Das bietet Interrups für alle möglichen Events innerhalb der seriellen Schnittstelle an.


Programmiert habe ich damit oft. Kenn mich also damit auch aus, nur halt eben mit dieser neuen Version von VB nicht! Die ist ja komplett bescheuert geworden. Frust pur.


VB Enterprise Edition sollte man recht günstig bekommen. Und dort ist auch VC++ dabei.
Damit lassen sich recht schnell recht gute Windows-Applikationen entwickeln.

Wenn man was "richtiges" will, sollte man eher plattform-unabhängiges C++ nehmen.

_________________

BID = 385546

Steppenwolf

Schreibmaschine



Beiträge: 1757
Wohnort: Zürich, Schweiz
Zur Homepage von Steppenwolf

Hmm, das .net hat eine eigene Klasse (serialPort)...
Wie ich dieses CommControl bei mir finde hab ich auch nicht rausgefunden...
Steht irgendwie erstaunlich wenig über diese Serialport Klasse im Netz..
Mal weitersuchen und probieren.

_________________
Meine Projekte:
http://mauerer.m.googlepages.com


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag       heute wurden bisher 24 Beiträge verfasst
© x sparkkelsputz        Besucher : 182424172   Heute : 3214    Gestern : 5459    Online : 430        29.11.2024    16:40
7 Besucher in den letzten 60 Sekunden        alle 8.57 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0366489887238