Hallo,
ich versuche gerade eine CNC-Steuerung für Schrittmotoren zu
programmieren mit Hilfe des EMIS USB-Interface.
Hat jemand von euch Erfahrung bzgl beschreiben und auslesen des
Interface über eine serielle Schnittstelle in C#?
Grüße
SaKiDi schrieb:> Hallo,>> ich versuche gerade eine CNC-Steuerung für Schrittmotoren zu> programmieren mit Hilfe des EMIS USB-Interface.> Hat jemand von euch Erfahrung bzgl beschreiben und auslesen des> Interface über eine serielle Schnittstelle in C#?>> Grüße
Mal auf der Homepage des Herstellers geschaut?
https://emisgmbh.de/downloads/
USB->Seriell scheint von FTDI zu kommen, d.h. die können wie ganz
normale serielle Schnittstellen angesprochen werden (Klasse SerialPort
in System.IO.Ports). Zudem gibt's auf
https://emisgmbh.de/downloads-software/ noch eine DLL, die mit P/Invoke
in C# eingebunden werden könnte.
Hallo Arc N.,
Danke für deine Information.
Ich werde es versuchen und hoffe, dass ich dann eine erfolgreiche
Kommunikation zwischen INterface und Software herstellen kann
Grüße
Hallo Arc N.,
ich habe versucht die DLL-Datei mit einzubinden, jedoch war die
erfolglos, da VS immer einen Error anzeigt...
Es konnte kein Verweis auf "... .dll" hinzugefügt werden.
Stellen Sie sicher, dass auf die Datei zugegriffen werden kann und dass
sie eine gültige Assembly oder COM-Komponente ist.
Leider bin ich mit meinem Problem somit nicht weiter gekommen.
Hat jemand noch eine Idee oder einen Hinweis?
Grüße
SaKiDi schrieb:> Hallo Arc N.,>> ich habe versucht die DLL-Datei mit einzubinden, jedoch war die> erfolglos, da VS immer einen Error anzeigt...>> Es konnte kein Verweis auf "... .dll" hinzugefügt werden.> Stellen Sie sicher, dass auf die Datei zugegriffen werden kann und dass> sie eine gültige Assembly oder COM-Komponente ist.>> Leider bin ich mit meinem Problem somit nicht weiter gekommen.>> Hat jemand noch eine Idee oder einen Hinweis?>> Grüße
Die DLL nicht als Verweis zum Projekt hinzufügen, dass funktioniert, wie
die Fehlermeldung schon sagt, bei .NET nur für .NET-Assemblies/DLLs oder
COM-Komponenten. Bei nativen DLLs reicht es, wenn diese im Suchpfad (der
Anwendung) liegen. Einbindung, wenn es bspw. die emis_com.dll ist, dann
bspw. so:
Danke für deine Rückmeldung.
Leider bin ich bei dem Thema DLL-Dateien noch sehr unerfahren.
Ich habe leider keine Ahnung wie ich die Befehle in das char schreibe
und wie das alles in meine Funktion eingebunden wird.
SaKiDi schrieb:> Danke für deine Rückmeldung.>> Leider bin ich bei dem Thema DLL-Dateien noch sehr unerfahren.> Ich habe leider keine Ahnung wie ich die Befehle in das char schreibe> und wie das alles in meine Funktion eingebunden wird.
Die "komplizierteren" DLL-Funktionen dürften
1
// extern "C" __declspec(dllexport) void _stdcall SendBefehl(char* befstr, int endekenn);
intlRueckgabe);// int statt long, da long in C# 64-Bit hat
sein.
Wenn das wirklich nur einfache FTDI-COM-Ports sind, sollte eigentlich
SerialPort reichen (Encoding auf Encoding.GetEncoding(28591) setzen,
ergibt 8-Bit ASCII (ISO 8859-1 Latin 1; Western European (ISO)) und die
Befehle wie dokumentiert senden. Zur Not mit bspw.
https://docs.microsoft.com/en-us/sysinternals/downloads/portmon
mitschneiden was da gesendet wird.
Danke für deine Ausführliche Antwort
> Wenn das wirklich nur einfache FTDI-COM-Ports sind, sollte eigentlich> SerialPort reichen (Encoding auf Encoding.GetEncoding(28591) setzen,> ergibt 8-Bit ASCII (ISO 8859-1 Latin 1; Western European (ISO)) und die> Befehle wie dokumentiert senden
Die DLL konnte ich dank deiner Hilfe jetzt komplett einbinden.
leider ist mir die Funktion mit dem serialPort noch unklar...
Sollte dies ungefähr so aussehen ?
public bool Open()
{
openport = Oeffne_Schnittstelle(1);
SerialPort serialport = new SerialPort();
serialport.BaudRate = 115200;
serialport.DataBits = 8;
serialport.Parity = Parity.None;
serialport.StopBits = StopBits.One;
serialport.Encoding =
System.Text.Encoding.GetEncoding(28591);
if (serialport.IsOpen == true)
{
return true;
}
else
{
return false;
}
}
Die weiteren DLL Funktionen können ihre zugewiesenen Variablen über eine
Methode erhalten, richtig?
Dankeschön
sakidi schrieb:> Danke für deine Ausführliche Antwort>>> Wenn das wirklich nur einfache FTDI-COM-Ports sind, sollte eigentlich>> SerialPort reichen (Encoding auf Encoding.GetEncoding(28591) setzen,>> ergibt 8-Bit ASCII (ISO 8859-1 Latin 1; Western European (ISO)) und die>> Befehle wie dokumentiert senden>> Die DLL konnte ich dank deiner Hilfe jetzt komplett einbinden.> leider ist mir die Funktion mit dem serialPort noch unklar...> Sollte dies ungefähr so aussehen ?
War vielleicht etwas missverständlich: Entweder mit der emis_com.dll
arbeiten oder mit der Klasse SerialPort. Nicht beide zusammen.
> Die weiteren DLL Funktionen können ihre zugewiesenen Variablen über eine> Methode erhalten, richtig?
? Wenn damit die Argumente der Funktionen (tatsächlichen Parameter)
gemeint sind, ja.