CAN; CANOpen und C#

01/12/2009 - 18:39 von Claudia Maier | Report spam
http://www.mikrocontroller.net/topic/98697

Hallo,
hat jemand, kennt jemand einen guten Treiber für C#

-zunàchst Anbieter
-CAN
-CANOpen

Was bietet sich da an?
Problem wird das Threading sein.
Was, wie verwenden?
- BackgroundWorker etc.
-CANOpen

Viele Grüße Claudia




#####

// eine CAN_Message
typedef struct {
DWORD ID; // 11/29 Bit-Kennung
BYTE MSGTYPE; // Bits aus MSGTYPE_*
BYTE LEN; // Anzahl der gueltigen Datenbytes (0.8)
BYTE DATA[8]; // Datenbytes 0..7
} TPCANMsg;

main(){
CAN_init (1000 , TX );

// Zu sendende Daten
CAN_message msg ;
msg.id = 0 x12345678 ;
msg.idm = 0 xffffffff ;
msg.data [0] = 0 x11 ;
msg.data [1] = 0 x22 ;
msg.data [2] = 0 x33 ;
msg.data [3] = 0 x44 ;
msg.data [4] = 0 x55 ;
msg.data [5] = 0 x66 ;
msg.data [6] = 0 x77 ;
msg.data [7] = 0 x88 ;

// Objekt 0 auf Empfang setzen
CAN_enableMOB (0, RECEIVE_DATA , msg );

// Daten šuber Objekt 0 senden
CAN_sendData (0, msg.data );

while(1){}
}
 

Lesen sie die antworten

#1 anagate
02/12/2009 - 15:49 | Warnen spam
On 1 Dez., 18:39, Claudia Maier wrote:
http://www.mikrocontroller.net/topic/98697

Hallo,
hat jemand, kennt jemand einen guten Treiber für C#

-zunàchst Anbieter
-CAN
-CANOpen

Was bietet sich da an?
Problem wird das Threading sein.
Was, wie verwenden?
- BackgroundWorker etc.
-CANOpen

Viele Grüße Claudia




Hallo Claudia,
ich vermute, Sie möchten von einem Windows PC mittels Microsoft C#.NET
auf den CAN Bus zugreifen, der von Ihnen zitierte Code-Sniplet ist
m.E. eine Umsetzung einer C-Bibliothek, die auf einer ATMEL CPU (und
nicht auf einem PC) lauffàhig ist.

Ich denke, Sie benötigen eine Möglichkeit, um von einem herkömmlichen
PC auf den CAN-Bus zu kommen. Da bieten sich verschiedenen
Möglichkeiten an, wie z.B. CAN-Einsteckkarten, USB-Module oder andere
CAN-Gateways. Auf dem Markt gibt es da verschiedene Hersteller

Die CAN-Ethernet-Gateways von Analytica (http://www.anagate.de/
products/can-ethernet-gateways.htm) werden über eine Netzwerkkarte
angesprochen und benötigen keine speziellen Betriebssystemtreiber. Das
Protokoll zum Geràt ist offengelegt und kann somit auch mittels socket-
Aufrufen eigenstàndig angesprochen werden. Zusàtzlich sind die Geràte
aber auch über eine Software-API auch ansprechbare (auch über C#). Im
folgenden ein Beispiel zum Versenden einer CAN-Nachricht.

static void Main(string[] args)
{
Int32 hHandle = 0;
Int32 nLastRC = 0;
Int32 nFlags = 0; /// standard address format (11bit), use 1 for
extended address format
byte[] DataBuffer = new byte[9];
string ErrorText = null;

string sVersion = AnaGateAPI.GetDLLVersion(); /// get dll version

/// opens device to get access to CAN bus, ip address is 10.1.2.210
nLastRC = AnaGateAPI.CANOpenDevice(ref hHandle, 0, 1, 0,
@"10.1.2.210", 5000);
ErrorText = AnaGateAPI.GetErrorMsg(nLastRC);
if (nLastRC == 0)
{
// 250kBit, Standard Mode, no Termination, No Highspeed, no
Timestamp
nLastRC = AnaGateAPI.CANSetGlobals(hHandle, 250000, 0, 0, 0, 0);
if ((nLastRC != 0))
{
ErrorText = AnaGateAPI.GetErrorMsg(nLastRC);
}
Int32 CAN_ID = 123;
DataBuffer[0] = 1;
DataBuffer[1] = 2;
DataBuffer[2] = 3;
DataBuffer[3] = 4;
DataBuffer[4] = 5;
DataBuffer[5] = 6;
DataBuffer[6] = 7;
DataBuffer[7] = 8;

/// send a standard CAN telegram
nLastRC = AnaGateAPI.CANWrite(hHandle, CAN_ID, DataBuffer, 8,
EFormatFlags);
if ((nLastRC != 0))
{
ErrorText = AnaGateAPI.GetErrorMsg(nLastRC);
}
}
if ((hHandle != 0))
{
AnaGateAPI.CANCloseDevice( hHandle);
}
}

Aktuell wird an einer Erweiterung der API gearbeitet, die auch direkt
das Versenden und Empfangen von CANopen-Nachrichten ermöglicht, d.h.
Aufrufe für SDO, PDO, usw. Bisher müssen CANopen-Aufrufe mittels den
vorhandenen Funktionen zum Empfangen (Callback) und Versenden von CAN-
Telegrammen über die individuelle erstellte Anwendungsprogramme
simuliert werden. Alternativ kann der Zugriff auch mit dem frei
verfügbaren CANopen-Framework CANFestival erfolgen.

Die API-Erweiterung wird vermutlich in den nàchsten Wochen zum
Download zur Verfügung stehen.

Ich würde mich freuen, wenn ich Ihr Interesse wecken konnte.

viele grüße
Axel Schmidt

Ähnliche fragen