Frage Hallo, ich möchte über eine RS232 über COM1 Daten auslesen. Das Coding sieht so aus: (VB 2010 Express) With (SerialPort1). PortName = SerialPort1. PortName. BaudRate = 9600 =. Handshake =. ReceivedBytesThreshold = 1. ReadTimeout = (500). DtrEnable = True. RtsEnable = True () End With If = True Then.... Auf meinem Rechner (XP) bekomme ich die Fehlermeldung {System. UnauthorizedAccessException - "Der Zugriff auf den Anschluss COM1 wurde verweigert. "} bei () Wenn ich auf einem anderen Rechner (Vista) z. B. COM5 anspreche läuft alles glatt. Woran könnte das liegen? Systemeinstellung, Firewall...??? Danke und Gruß, Vincent Antworten Als Antwort vorgeschlagen Dienstag, 19. Oktober 2010 09:22 Als Antwort markiert Vincent_P Mittwoch, 20. Oktober 2010 20:15 Hi Ellen, vielen Dank für die super Hilfe. Hab tatsächlich nach längerem Suchen noch ein altes Programm gefunden was eigentlich nicht aktiv war. C# - Zugriff auf den port, 'COM5' verweigert. Zumindest hab ich keinen aktiven Prozess dafür gefunden. Hab es deinstalliert und die Reg aufgeräumt.
Dann siehst du dazu den Prozess-Namen und -ID. Diesen Prozess musst du halt 'abstellen' oder killen, was je nach Prozess etliche Folgen haben könnte... [PC explodiert oder nukleare Kernschmelze in der CPU;-)] -- Thomas Scheidegger - MVP - 'NETMaster' - Hallo Thomas, hab den Übeltäter gefunden und entfernt. Ging sogar ohne Kern(el)schmelze! Security bei Zugriff auf COM-Port. Jetzt klappts auch mit COM1. Nochmals vielen Dank für Deine Hilfe. Gruß Ralf Post by Thomas Scheidegger [MVP] Post by Ralf Leippert MODE COM1 ergibt: Gerät COM1 ist momentan nicht verfügbar. frei? Find, Find Handle or DLL und Suchbegriff: serial Sollte u. [PC explodiert oder nukleare Kernschmelze in der CPU;-)] -- Thomas Scheidegger - MVP - 'NETMaster' - Loading...
Hoffe einer Liest sich den noch durch Also ich wollte eine Abfrage in mein Programm übernehmen, inder geprüft wird, ob der COM-Port schon von einem anderen Prog belegt ist/benutzt wird. if (..? gerade benutzt?.. ) //Prüfen ob z. B. COM1 schon benutzt wird for(int i=0; i<30000;i++) //30sec. mit Zählen beschäftigen {}} ();...... Wollte ich einfügen, weil mein Dienst ebenfalls auf den COM-Port zugreift. Die sollen sich somit nicht gegenseitig stören, sodern kurz warten (geht das überhaupt mit der for-Schleife? ) und dann die Verbindung aufbauen. Hoffe man kann mir n Tipp geben, wie ich das ganze prüfen kann. Oder wo ich was zu dem Thema finden kann. Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Shakal am 08. 11. 2009 - 23:05. Blutige Anfänger habens immer schwer!!! --> Ich weiß schon was ne Klasse ist 08. 2009 - 23:04 herbivore - Experte 11. Zugriff auf com port verweigert. 01. 2005 Beiträge: 49. 486 Hallo Shakal, Teilantwort: Zitat geht das überhaupt mit der for-Schleife? Grundsätzlich kann man mit einer solchen Schleife schon Zeit verbrauchen, aber die CPU-Last des ausführenden Kerns steigt dadurch unnötig auf 100%.
Dieser Code funktioniert einwandfrei mit allen Windows-Varianten, einschließlich 8. 1. Einige Benutzer geben jedoch an, dass unter Windows 10 keine Kommunikation mit dem Gerät möglich ist. Leider habe ich die zugehörige Win10-Version nicht zum Testen. Meine Frage: Gibt es einige Probleme / wichtige Änderungen in Windows 10, die ein solches Verhalten verursachen oder einige Änderungen in der Kommunikation über die serielle Schnittstelle erfordern könnten? Vielen Dank! ****** Update *********************************************** *********************** Ebenso wie die Aktualisierung: Funktion SetCommState () schlägt mit einem Fehler 87 (ERROR_INVALID_PARAMETER) fehl. Hier spielt es keine Rolle, ob ich eigene Parameter setze, ob ich die von GetCommState () empfangenen Daten verwende oder ob ich die DCB-Struktur vollständig initialisiere und konfiguriere. Also... ist dies ein bekannter Fehler in SetCommState () von Win 10? Nur zur Anmerkung: Es schlägt nur in 4 von 5 Fällen fehl, es handelt sich also nicht um einen systematischen, sondern um einen zufälligen Fehler!
Außerdem hängt die verbrauchte Zeit davon ab, wie schnell der Rechner ist und wie sehr die Schleife vom Compiler (weg-)optimiert wird. Man sollte von solchen Konstruktionen unbedingt die Finger lassen. So unbedingt, dass es deine Schleife in Coding Styles Horror geschafft hat. :-) Wenn du an dieser Codestelle wirklich sinnvollerweise warten willst, dann verwende 09. 2009 - 08:17 trib 22. 04. 2008 Beiträge: 690 Guten Morgen zusammen, Der COM-Port liefert immer ziemlich genaue Fehlerbeschreibungen anhand derer man simpel erkennen kann wo das Problem liegt. Dazu empfehle ich ein einfaches Try-Catch: try udRate = (_baudRate); //BaudRate [... ] comPort. RtsEnable = _enableRTS; //now open the port //display message DisplayData(, "Port opened at " +); return true;} catch (Exception ex) DisplayData(, ssage); return false;} Die Funktion DisplayData tut nichts anderes als die Ausgabe auf einer ListBox auszugeben. Anhand des MessageType (Enum) kannst du festlegen ob es ein Error, eine Ausgabe usw. ist.