Benutzer mit den meisten Antworten
USB to CAN Schnittstelle- wie ansprechen

Frage
-
Hallo,
ich möcht per Visual C# eine Motorsteuerung visuallisieren. Vom Hertstell des Controllers gibt es eine USB to CAN Schnitttstelle, aber ich habe keine Ahnung wie ich mit C# den USB nach einer Geräte Adresser abfragen kann, also das ganze kommunikations Vokabeln in C# fehlen mir. Gibt es da eine gute Seite wo ich das nachlesen kann??
Danke
Antworten
-
hallo, das nagelneue kabel war defekt!
danke für eure hilfe, jetzt klappt es ;DDDD
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 29. November 2011 08:46
Alle Antworten
-
Hallo B
für CAN gibt es generell in Windows (und somit .NET) keine generische Software-Schnittstellen/APIs.
Daher braucht man IMMER zuerst vom Hersteller des [USB] Adapters [neben dessen Windows-Treiber .SYS!] auch noch ein 'SDK', um eine Programmier-Bibliothek einbinden zu können.
Dies gibt es garantiert mindestens für Visual C++, aber immer häufiger auch direkt für .NET (meist C#, zT auch VB.NET), womit man einfach eine Assembly-DLL im C# Projekt referenzieren kann.
Das API dieser CAN-Bibliotheken ist IMMER Hersteller/HW-spezifisch, aber auf unterster Ebene meist sehr ähnlich: Methoden für Initialisierung & Konfiguration, CAN-Read & CAN-Write.
Also suche auf der Website des Herstellers nach dem zu deinem USB-Adapter passenden Programmier-Paket. Aber nicht jeder Hersteller bietet dieses kostenlos an, bzw nur eine Minimal-Version.
Danach brauchst du jedoch zusätzlich noch die Protokoll-Doku zu jener 'Motorsteuerung', wo die spezifischen CAN-Objekte/Meldungen beschrieben sein müssen. (Ohne Doku wird es schwierig, reverse engineering, hack).
Hier kommt meist der 'CANopen' Standard zum Zuge, zu welchem im Web genug Gundlagen zu finden sind;
und ab hier ist es längst kein C# .NET Thema mehr ist (anderes Forum).
Minimale Grundlagen:
http://de.wikipedia.org/wiki/Controller_Area_Network
http://de.wikipedia.org/wiki/CANopen- Bearbeitet Thomas Scheidegger Dev Sonntag, 20. November 2011 07:28
-
Danke erstmal..
hast du zufällig eine art syntax damit ich mir vorstellan kann wie das in etwa aussieht, welche using muss ich einbinden, von ms seite her, IO zum bsp.
gibts vielleicht ein beispiel mit einer anderen sdk,damit ich die "grammatik" verstehen..
gruß
-
B,
Beispiele für Bibliotheken anderer Hersteller (es gibt über 20!) werden dir nicht helfen!
Und Microsoft hat hier keinerlei Einfluss (zB auf 'using' 'IO' usw; ist eh irrelevant).
Nochmals, frage den Hersteller deines USB-CAN Adapters. Oder nenne hier die genaue Bezeichnung dieses Adapters. -
hallo, habe gerade mit dem hersteller telfoniert, der sagte ich brauch keine sdk, ich soll das ganze als einfach virtuelle serielle schnittstelle sehen. wie programmier ich das, mit der "seriellenschnittstelle" und usb, ich kan ja da keinen fixen port vorgeben, wie sprech ich so eine schnittstelle an..? Gruß und Danle
-
B,
CAN via Serial Port wäre dann mal halt die 'minimalistische' Lösung.
Es bleibt jedoch immer noch die Frage nach den eigentlichen CAN-Datenformaten und zB IDs (Adressierung), wozu der Hersteller trotzdem Infos/Bsp liefern sollte.Zu .NET SerialPort
http://msdn.microsoft.com/de-de/library/system.io.ports.serialport.aspxgibt es genug Infos.
Aber hier geht es natürlich ausschliesslich um blosse 'Rohdaten' (Byte-Array oder Strings), hat also mit CAN keinen direkten Zusammenhang (dagegen kann nur der Hersteller helfen).
Das herausfinden des Mapping USB/CAN-Adapter auf eine bestimmte COM1/COM2/COMn.... Nummer ist AFAIK nicht mit C#/.NET alleine möglich.
Da braucht es entweder Registry, komplexe PnP/Setup APIs, oder evtl WMI usw.
Ich würde ggf vorerst mal den Benutzer eine Auswahl vornehmen lassen, also eine aus
SerialPort.GetPortNames
http://msdn.microsoft.com/de-de/library/system.io.ports.serialport.getportnames.aspx -
Hallo, mit dem CAN kläre ich gerade mit dem Hersteller.
Wenn ich so programmier
private void Send() { port = new SerialPort("COM11", 9600, Parity.None, 8, StopBits.One); port.Open(); port.Write("init 125"); port.Write("info version");
bekomme ich einen Fehler das er auf COM11 nicht zu greifen kann, also ein rechte Problem. Was muss ich dagegen tun? COM11 durch die Firewall kommunizieren lassen??DANKE
-
bekomme ich einen Fehler das er auf COM11 nicht zu greifen kann, also ein rechte Problem.
Hallo Bergfeuer,
Und wie lautet die ganze Fehlermeldung die Du bekommst und auf welche Zeile im Code findet sie statt?
Lies folgendes einmal durch. Vielleicht kann es Dir weiterhelfen.
Exception der seriellen Schnittstelle wird zu "NullReferenceException"
Schau mal auch im DeviceMonitor auf die COM Ports, vielleicht ist COM11 schon „in use“. (Idee kam von hier: http://forums.reprap.org/read.php?218,103992,104142)
Grüße,
Robert
- Bearbeitet Robert BreitenhoferModerator Dienstag, 22. November 2011 12:03 Formatierung
-
hallo, der fehler lautet genau.
System.UnauthorizedAccessException wurde nicht behandelt.
Message=Der Zugriff auf den Anschluss COM12 wurde verweigert.
Source=System
StackTrace:
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 USB.Form1.SendSample() in C:\Users\\documents\visual studio 2010\Projects\USB\USB\Form1.cs:Zeile 78.
bei USB.Form1.button2_Click(Object sender, EventArgs e) in C:\Users\\documents\visual studio 2010\Projects\USB\USB\Form1.cs:Zeile 64.
bei System.Windows.Forms.Control.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
bei System.Windows.Forms.Button.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.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(Form mainForm)
bei USB.Program.Main() in C:\Users\\documents\visual studio 2010\Projects\USB\USB\Program.cs:Zeile 18.
bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
InnerException: -
Hallo Bergfeuer,
Zu diesem Thema habe ich noch etwas gefunden:
Kein Zugriff auf Anschluss COM1
Zugriff auf die COM-Schnittstelle löst UnauthorizedAccessException aus
Die generelle Frage was kommt ist:
„Ist vielleicht ein anderes Gerät darauf zugelassen?“ „Ist der COM Port von einem anderen Programm schon geöffnet?“
Grüße,
Robert
-
Also wenn ich über den HyperTerminal kommuniziere geht es ohne Problem, aber nicht im durch das C# immer unautorisiert, die tips sind schön und gut, aber er kommt ja nichtmal zum fehler abfangen. auf com12 ist der can-usb stick eingesteckt, denn ich ja auch erfogreich mit dem hyperterminal anspreche..
-
hallo, das nagelneue kabel war defekt!
danke für eure hilfe, jetzt klappt es ;DDDD
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 29. November 2011 08:46