Laden...

ComPort auslesen / dll Datei einbinden

Erstellt von Arvi vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.083 Views
A
Arvi Themenstarter:in
5 Beiträge seit 2010
vor 13 Jahren
ComPort auslesen / dll Datei einbinden

Hi@all, mein erster Beitrag hier, also seid lieb 😉

Ich möchte gerne die Signale eines Digital-Analog-Converters auslesen. Das Gerät ist per usb verbunden und meldet sich über einen ComPort an.
Auf bestimmte Befehle, die ich ihm mit WriteLine schicken kann, reagiert er mit der Zurückgabe der angeschlossenen Spannung, theoretisch.

Problem ist es kommt nichts an, wenn ich den Steam mit ReadLine() auslesen will. (es kommt ein Timeout) Dem entsprechend kommt auch die SerialPort_DataReceived Methode nicht zum einsatz.

Lese ich den Port mit ReadExisting aus, so liefert er mir nur lustige Rechtecke.
Leider kann ich den Quelltext im Moment nicht posten, werde es aber bei Bedarf Morgen nachhholen.

Neben dieser "zu Fuß" Methode hab ich eine .dll Datei, mit der man die Daten auch auslesen kann. Zum Gerät gab es ein VB Quellcode dazu, der die dll einbindet und dann darüber die Daten auslesen kann. Das hätte ich am liebsten genauso auch für c#. Leider kann ich die .dll nicht einbinden, ich bekomme eine Fehlermeldung, das die dll nicht für diesen Assembler, oder für Com geeignet sei. (genauen Wortlaut kann ich bei Bedarf Morgen nachreichen)
In VB2005 funktioniert sie, in VC#2008 nicht. Kann das an den Verschiedenen Versionen liegen?

Und warum klappt das ganze zu Fuß nicht? Liegt das am Programmcode, oder funktioniert das ohne Einbinden des Treibers einfach nicht?
Bei der Installation wurde der Treiber im System32/Drivers abgelegt, mit der Endung .sys. Auf der Treiber CD befindet sich aber auch die fehlerverursachende .dll-Datei.
Muss ich eventuell die .sys irgednwie einbinden?

Wie ihn merkt, bin ich (noch) recht neu auf dem Gebiet und daher über jede Hilfestellung erfreut.

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo Arvi,

willkommen bei myCSharp.de

Die zu Fuß Methode müsste schon funktionieren.
Ich mache das selbst bei einigen Geräte so und es funktioniert ohne Probleme.

Die Daten sende ich mit dem Write Methode womit ich den generierten Byte-Array schicke.

Und zudem registriere ich das DataReceived-Event vom SerialPort.
Jedes mal wenn das Event ausgelöst wird lese ich dann mit der Read Methode die Daten aus.

Dabei ist es aber wichtig dass die Request Message (welche man dem Gerät schickt) genau so ist wie sie sein soll.
Dazu zählt oft die Adresse, CRC Checksumme usw... Und dabei muss es halt genau stimmen weil das Gerät sonst nicht antwortet.

Gruss
Michael

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

die Methoden der .dll kannst Du vermutlich über das DllImport-Attribut einbinden.
Das nennt sich dann P/Invoke.
Google- und Forumssuche nach DllImport, PInvoke und P-Invoke sollte dir für den Anfang ausreichend Informationen liefern.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

A
Arvi Themenstarter:in
5 Beiträge seit 2010
vor 13 Jahren

Danke für die Antworten.

Habs leider nicht hinbekommen die dll einzubinden, aber "zu Fuß" hats jetzt auch funktioniert.