2 LIN-CAN-RS232-Gateway API (L2CAPI)

Transcrição

2 LIN-CAN-RS232-Gateway API (L2CAPI)
Handbuch
LIN2CAN API (L2CAPI)
The expert for industrial and automotive communication
IXXAT
Hauptsitz
IXXAT Automation GmbH
Leibnizstr. 15
D-88250 Weingarten
Geschäftsbereich USA
IXXAT Inc.
120 Bedford Center Road
USA-Bedford, NH 03110
Tel.: +49 (0)7 51 / 5 61 46-0
Fax: +49 (0)7 51 / 5 61 46-29
Internet: www.ixxat.de
e-Mail: [email protected]
Phone: +1-603-471-0800
Fax: +1-603-471-0880
Internet: www.ixxat.com
e-Mail: [email protected]
Support
Sollten Sie zu diesem, oder einem unserer anderen Produkte Support benötigen, wenden Sie sich bitte schriftlich an:
Fax: +49 (0)7 51 / 5 61 46-29
e-Mail: [email protected]
Copyright
Die Vervielfältigung (Kopie, Druck, Mikrofilm oder in anderer Form) sowie
die elektronische Verbreitung dieses Dokuments ist nur mit ausdrücklicher,
schriftlicher Genehmigung von IXXAT Automation erlaubt. IXXAT Automation behält sich das Recht zur Änderung technischer Daten ohne vorherige
Ankündigung vor. Es gelten die allgemeinen Geschäftsbedingungen sowie
die Bestimmungen des Lizenzvertrags. Alle Rechte vorbehalten.
Handbuchnummer: 4.01.0130.10100
Version: 1.5
Inhalt
1
Einleitung....................................................................................5
2
LIN-CAN-RS232-Gateway API (L2CAPI)........................................6
2.1 Prinzip ................................................................................. 6
2.2 Erstellen des API Objekts .................................................... 6
2.3 Übersicht Interfaces ............................................................ 7
2.4 Interface IUnknown ............................................................ 8
2.5 Interface ILIN2CAN_API_Ctrl ............................................... 9
2.6 Interface ILIN2CAN_GeneralConfig2................................. 10
2.7 Interface ILIN2CAN_GatewayConfig2 ............................... 12
2.8 Interface ILIN2CAN_SlaveConfig ....................................... 14
2.9 Interface ILIN2CAN_MasterConfig2 .................................. 15
2.10 Interface ILIN2CAN_LINMsgQueue2 .............................. 16
2.10.1 Fehlerübersicht....................................................................17
2.11
2.12
2.13
Interface ILIN2CAN_Master_Slave2 ............................... 18
Übersicht: Erlaubte API- Aufrufe / Betriebsart .............. 19
API Kurzübersicht .......................................................... 20
2.13.1
2.13.2
2.13.3
2.13.4
2.13.5
2.13.6
2.13.7
Interface: ILIN2CAN_GeneralConfig2....................................20
Interface: ILIN2CAN_GatewayConfig2 ..................................22
Interface: ILIN2CAN_SlaveConfig .........................................23
Interface: ILIN2CAN_MasterConfig2.....................................23
Interface: ILIN2CAN_LINMsgQueue2....................................24
Interface: ILIN2CAN_Master_Slave2 .....................................25
Datentypen Definitionen......................................................26
Copyright IXXAT Automation GmbH
3
L2C-API Handbuch V1.5
Einleitung
1 Einleitung
Die LIN 2 CAN Gateway API (kurz: L2CAPI) dient als Schnittstelle zur Konfiguration und Steuerung der LIN 2 CAN Gateway Hardware und zum Zugriff auf den
LIN- Nachrichtenverkehr. Über die LIN2CAN Gateway API sind alle Funktionen des
LIN2CAN- Gerätes in eigenen Applikation verwendbar. (Siehe hierzu auch Handbuch LIN2CAN- Gateway) Spezifische Testapplikationen oder auch PC- gestützte
Netzwerksimulationen können realisiert werden. Darüber hinaus kann das
LIN2CAN- Gerät mit der L2CAPI auch als Entwicklungsplattform genutzt werden.
Die Funktionen wurden in Funktionsgruppen zusammengefasst welche in Funktionsart bzw. Betriebsart zusammengehören.
Copyright IXXAT Automation GmbH
5
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2 LIN-CAN-RS232-Gateway API (L2CAPI)
2.1
Prinzip
Der Aufbau der API entspricht dem eines COM Objekts. Die API ist in Interfaces
unterteilt und besitzt einen Referenzzähler der zur Freigabe der API dient. Wird
ein Interface angefragt so wird der Zähler um eins erhöht. Wird ein Interface
nicht mehr benötigt so muss es mit Release freigegeben werden. Fällt der Zähler
dabei auf 0 so wird das L2CAPI Objekt gelöscht. Dazu ist jedes Interface von dem
Interface IUnknown abgeleitet. Dieses Interface enthält die Methoden QueryInterface, AddRef und Release.
Jede Methode der API (außer AddRef und Release) geben als Fehlercode einen
HRESULT Wert zurück. S_OK (0) steht dabei für Erfolg.
2.2
Erstellen des API Objekts
Um mit der API arbeiten zu können, werden folgende Dateien benötigt:
• L2CAPI.lib
• L2CAPI.dll
• L2CAPI.hpp
Die LIB Datei muss in das zu erstellende Programm eingebunden werden. Diese
lädt dann beim Programmstart die DLL Datei nach. In der HPP Datei sind die Methoden der API definiert.
Zusätzlich muss in einer CPP Datei des Projektes die Zeile #define INITGUID stehen
und die L2CAPI.hpp einbinden. Diese dient dazu Speicherbereich für die GUIDs
(Global Unique Identifiers) bereitzustellen. Jedes Interface der API besitzt eine dieser 128bit IDs zur Eindeutigen Bestimmung.
Als erstes muss mit L2CAPI_CreateInstance() das API Objekt erstellt werden. Als
Übergabeparameter werden die ID für das gewünschte Interface und einen Zeiger
für die Rückgabe des Interfaces übergeben. Der Aufruf sieht dann wie folgt aus:
HRESULT hResult = E_FAIL;
IUnknown* pIUnknown = NULL;
hResult = L2CAPI_CreateInstance(IID_IUnknown, (void**)&pIUnknown);
Bei Erfolg kann nun mit diesem Interfacezeiger jedes andere Interface der API abgerufen werden. War das Erstellen nicht erfolgreich so kann mit dem Aufruf
L2CAPI_FormatError() der Fehlercode in einen lesbaren String gewandelt werden.
Wird das Interface nicht mehr benötigt so wird dieses durch folgenden Aufruf
wieder freigegeben.
if(pIUnknown != NULL)
{
pIUnknown->Release();
pIUnknown = NULL;
}
Copyright IXXAT Automation GmbH
6
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
Für den leichteren Einstieg in den Entwurf eines eigenes Programms wird ein Beispielprojekt (L2CAPI_CONSOLE_APP) und ein Vorlagenprojekt (L2CAPI_AppTemplate) mitgeliefert.
2.3
Übersicht Interfaces
Die API implementiert folgende Interfaces:
• ILIN2CAN_API_Ctrl
Dient dazu die API mit dem Device zu verbinden bzw. die Verbindung
zu trennen und den Verbindungsstatus abzufragen.
• ILIN2CAN_GeneralConfig2
Dient dazu die Grundsächlichen Einstellungen des Gerätes wie Name,
LIN Baudrate und Startup Operation abzufragen bzw. einzustellen.
• ILIN2CAN_GatewayConfig2
Dient dazu die für den Gateway-Modus nötigen Einstellungen vorzunehmen. Darunter fallen die CAN Baudrate und der CAN Transceivermode
und die Translation Tabelle für die Übersetzung der LIN in CAN Objekte und Umgekehrt.
• ILIN2CAN_SlaveConfig
Mit diesem Interface werden die Antworten auf die LIN Identifier festgelegt.
• ILIN2CAN_MasterConfig2
Hiermit wird die Schedule Tabelle für die Master Betriebsart festgelegt.
• ILIN2CAN_LINMsgQueue2
Dient dazu Nachrichten aus der LIN Nachrichten Queue auszulesen
und den LIN Queuestatus abzufragen.
• ILIN2CAN_Master_Slave2
Mit diesem Interface ist es möglich LIN IDs und LIN Objekte auf den
LIN Bus per PC Aufruf zu legen. Zusätzlich besteht die Möglichkeit ein
Wakeup Signal auf den LIN- Bus aufzuschalten.
Generell dürfen die Methoden der Interfaces nur dann aufgerufen werden, falls
sich das Gerät entweder im L2C_OP_MODE_SLAVE_PC oder im
L2C_OP_MODE_MASTER_PC Modus befindet!!!
Copyright IXXAT Automation GmbH
7
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.4
Interface IUnknown
Dieses Interface besitzt folgende Methoden:
• HRESULT QueryInterface([in] REFIID riid, [out] LPVOID *ppvObj)
Mit QueryInterface kann eines der in 2.3 angegeben Interfaces angefragt werden. Der Aufruf ist gleich wie L2CAPI_CreateInstance nur das
hier keine neue Instanz der Klasse angelegt wird sondern ein Zeiger
des gewünschten Interfaces zurückgegeben wird. Durch den Aufruf
von QueryInterface wird der Referenzzähler automatisch um eins erhöht.
• ULONG AddRef()
AddRef dient dazu den Referenzzähler des Objektes um eins zu erhöhen. Der Rückgabewert ist der neue Stand des Referenzzählers. Dieser
Methode muss aufgerufen werden falls ein Interfacezeiger selbst geklont wird.
• ULONG Release()
Mit Release wird ein nicht mehr benötigtes Interface wieder freigegeben. Der neue Referenzzählerstand wird zurückgegeben.
Copyright IXXAT Automation GmbH
8
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.5
Interface ILIN2CAN_API_Ctrl
In diesem Interface sind folgende Methoden enthalten:
• Connect([in] PCHAR pszName, [in] PCHAR pszMode)
Mit Connect verbindet sich die API per angegeben Schnittstelle mit
dem Device. In pszName wird der Name der zu benutzenden Schnittstelle angegeben z.B. „COM1“ oder „COM2“. In pszMode muss immer
„baud=115200 parity=N data=8 stop=1“ übergeben werden. War
der Verbindungsaufbau erfolgreich so wird S_OK zurückgegeben, ansonsten ein Fehlercode, der mit L2CAPI_FormatError() in einen lesbaren
String verwandelt werden kann.
• Disconnect()
Mit Disconnect wird die Verbindung zum Device wieder abgebaut.
• IsConnected()
Mit IsConnected kann abgefragt werden ob das Gerät noch verbunden
ist. Dies Funktion überprüft den Status der DSR Leitung. Somit kann
auch ein Ausstecken des Gerätes während des Betriebes erkannt werden.
Copyright IXXAT Automation GmbH
9
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.6
Interface ILIN2CAN_GeneralConfig2
Folgende Methoden sind hierin implementiert:
• GetDeviceName([out] PSTRING psDeviceName)
• SetDeviceName([in] PSTRING psDeviceName)
Get/SetDevicename dienen dazu dem Gerät einen Namen zu geben. Es
sind 16 Zeichen erlaubt einschließlich „\0“.
• GetVersionInformation([out] PL2C_VersionInformation pVersionInfo);
Mit GetVersionInformation werden die Versionsinformationen des Gerätes angefragt. Die Struktur hat dabei folgenden Aufbau:
struct
{
char strFirmwareVersion[8];
char strHardwareVersion[8];
}L2C_VersionInformation, *PL2C_VersionInformation;
•
•
•
•
•
•
•
•
Wobei jeder String mit 0 terminiert ist.
GetLINBaudrate([out] PWORD pwBaudrate);
SetLINBaudrate([in] WORD wBaudrate);
Mit Get/SetLINBaudrate wird die Baudrate des LIN Busses festgelegt.
Folgende Werte sind möglich: 2400, 9600 und 19200 Baud.
GetOperationMode([out] PL2C_OperationMode pnOperationMode);
SetOperationMode([in] L2C_OperationMode nOperationMode);
Hiermit wird die aktuelle Betriebsart des Geräts festgelegt. Dabei sind
folgende Modi zulässig:
L2C_OP_MODE_SLAVE_PC
L2C_OP_MODE_MASTER_PC
GetStartUpOpMode([out] PL2C_OperationMode pnOperationMode);
SetStartUpOpMode ([in] L2C_OperationMode nOperationMode);
Mit diesen Funktionen wird das Startup verhalten des Gerätes festgelegt, falls beim Einschalten des Gateways das serielle Kabel zum PC
nicht angeschlossen ist. Folgende Startup Operation Modi sind zulässig:
L2C_OP_MODE_SLAVE
L2C_OP_MODE_MASTER
L2C_OP_MODE_GATEWAY_SLAVE
L2C_OP_MODE_GATEWAY_MASTER
GetStandbyTime([out] PWORD pwStandbyTime);
SetStandbyTime([in] WORD wStandbyTime);
Hiermit kann festgelegt werden, nach welcher Zeit in Sekunden sich
das Gerät ohne Busverkehr (LIN und CAN) in den Energiesparmodus
Copyright IXXAT Automation GmbH
10
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
•
•
•
•
schaltet. Ist das Gerät am PC angeschlossen bleibt es immer „wach“.
Wird der Wert 0xFFFF übergeben so geht das Gerät nie in den Standby
Modus.
GetSystemTime([out] PDWORD pdwSystemTime);
SetSystemTime([in] DWORD dwSystemTime);
Diese Funktionen dienen dem Setzen und Abfragen der Systemzeit des
Gerätes. Die Systemzeit ist ein Zählerwert in Millisekunden der für die
Bildung des Zeitstempel für die LIN Nachrichten benutzt wird.
GetLinMessageConfig ([out] PL2C_MessageConfig pMsgConfig);
SetLinMessageConfig ([in] PL2C_MessageConfig pMsgConfig);
Mit diesen beiden Funktionen werden die Längen und die CRC Berechnungsmodi der LIN Nachrichten festgelegt bzw. abgefragt. Dazu wird
folgende Struktur verwendet:
struct
{
BYTE
bMsgLen[64];
L2C_MessageCrcType nMsgCrcType[64];
}L2C_MessageConfig, *PL2C_MessageConfig;
• LoadSettingsFromFlash();
Hiermit werden die Einstellung aus den Flash ausgelesen. Noch nicht
gespeicherte Einstellungen gehen dabei verloren.
• SaveSettingsToFlash;
Hiermit werden die aktuellen Einstellungen nicht flüchtig in Flash gespeichert. Dies betrifft die Einstellungen von GeneralConfig (ohne Systemzeit), GatewayConfig, SlaveConfig und MasterConfig.
Copyright IXXAT Automation GmbH
11
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.7
Interface ILIN2CAN_GatewayConfig2
Hierin können folgende Einstellungen vorgenommen werden:
• GetCANConfig([out] PL2C_CAN_Config pCANConfig);
• SetCANConfig([in] PL2C_CAN_Config pCANConfig);
Hiermit wird die Einstellung des CAN Controllers festgelegt. Hierzu
wird folgenden Struktur verwendet:
struct
{
DWORD dwBaudrate;
L2C_CANTransceiverMode nTransceiverMode;
}L2C_CANConfig, *PL2C_CANConfig;
Folgende Baudraten in kBaud sind dabei zulässig:
10
20
50
100
125
250
500
1000
Der CAN Transceiver kann auf einen der folgenden Modi eingestellt werden:
L2C_CAN_TRANSCEIVER_LOWSPEED
L2C_CAN_TRANSCEIVER_HIGHSPEED
• GetGatewayTranslation([out] PL2C_TranslationConfig2 pTranslationConfig2)
• SetGatewayTranslation([in] PL2C_TranslationConfig2 pTranslationConfig2)
Diese beiden Funktionen dienen der Konfiguration der Übersetzungstabelle von LIN nach CAN und umgekehrt. Hier kann für jede LIN ID
eine CAN ID hinterlegt werden Die LIN ID entspricht dem Index von
IdentifierTranslation. Zusätzlich besteht die Möglichkeit einen LIN Fehler auf dem CAN Bus zu verschicken, eine CAN ID zu hinterlegen welche das Gateway aktiviert (Datenbytes der CAN Nachricht ungleich 0)
oder deaktiviert (Datenbytes gleich 0) und eine CAN ID zu hinterlegen
welche die aktive Schedule Tabelle im Gateway Master Modus umschalltet (Datenbyte 0 legt die Nummer der Scheduletabelle fest). Hierzu wird folgende Struktur verwendet:
Copyright IXXAT Automation GmbH
12
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
struct
{
L2C_IdentifierTranslation stLIN_IdentifierTranslation[64];
L2C_IdentifierTranslation stLIN_ErrorTranslation;
L2C_IdentifierTranslation stGatewayActivation;
L2C_IdentifierTranslation stScheduleSwitching;
}L2C_TranslationConfig2, *PL2C_TranslationConfig2;
Jeder der 66 Einträge besitzt folgende Struktur:
struct
{
BOOL bValid;
L2C_TranslationDirection nTranslationDir;
BOOL b29BitIdentifier;
DWORD dwCANID;
}L2C_IdentifierTranslation, *PL2C_IdentifierTranslation;
Mit bValid kann festgelegt werden ob der Eintrag gültig ist (TRUE für
gültig).
Mit nTranslationDir wird die Richtung der Übersetzung festgelegt:
L2C_LIN_TO_CAN_TRANSLATION
L2C_CAN_TO_LIN_TRANSLATION
b29BitIdentifier legt fest ob es sich um eine 29Bit CAN ID handelt
(TRUE für 29bit).
Mit dwCANID wird schließlich noch der CAN Identifier festgelegt. Es
sollte darauf geachtet werden, dass eine CAN ID nicht doppelt vergeben wird.
Copyright IXXAT Automation GmbH
13
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.8
Interface ILIN2CAN_SlaveConfig
Dieses Interface dient zum Konfigurieren der Aktionstabelle. Folgende Methoden
werden hierfür bereitgestellt:
• GetLINIDAction([in/out] PL2C_ActionEntry pActionEntry);
• SetLINIDAction([in] PL2C_ActionEntry pActionEntry);
Diese Methoden dienen dazu einen Eintrag der Aktionstabelle abzufragen bzw. zu setzen. Hierzu wird diese Struktur verwendet:
struct
{
BYTE bLINID;
L2C_LINIDAction nAction;
BYTE pbAddInfo[64];
BYTE bAddInfoLen;
}L2C_ActionEntry, *PL2C_ActionEntry;
Dabei ist bLINID immer ein [in] Parameter, damit wird festgelegt für
welche LIN ID die Aktion gesetzt bzw. abgefragt werden soll.
Mit nAction wird die auszuführende Aktion festgelegt. Folgende Einstellung sind gültig:
L2C_CAN_ACTION_IGNORE
L2C_CAN_ACTION_SEND_LINDATA
Ist die Action auf Ignore gestellt dürfen keine AddInfo Daten übergeben werden.
Ist Send_LINData gewählt so müssen in AddInfo die zu versendenden
Daten mit passender Länge entsprechend der LIN ID vorhanden sein.
Die Länge wird zusätzlich in bAddInfoLen übergeben.
Copyright IXXAT Automation GmbH
14
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.9
Interface ILIN2CAN_MasterConfig2
Hiermit kann die Master Schedule Tabelle bearbeitet werden. Dazu stehen die
folgenden Methoden zur Verfügung:
• GetScheduleTable([in] BYTE bNumberScheduleTable, [out]
PL2C_ScheduleEntry pScheduleTable, [out] PBYTE pbNumberEntries);
• SetScheduleTable([in] BYTE bNumberScheduleTable, [in]
PL2C_ScheduleEntry pScheduleTable ,[in] BYTE bNumberEntries);
Durch bNumberScheduleTable wird festgelegt welche Scheduletabelle
gelesen oder beschrieben werden soll. Die Anzahl der unterstützten
Scheduletabellen kann mit GetScheduleTabelCount angefragt werden.
In die Schedule Tabelle können bis zu 64 Einträge geschrieben werden. Dazu dient folgende Struktur die in einem Feld übergeben wird.
Beim Abholen muss das Feld 64 (L2C_MAX_SCHEDULETABLE_SIZE)
Einträge groß sein. In pbNumberEntries erhält man dann die Anzahl
der Einträge die vorhanden waren. Beim Setzen muss die Anzahl der
Einträge mit der Größe des Feldes übereinstimmen und es dürfen nicht
mehr als 64 Einträge sein.
struct
{
BYTE bLINID;
BYTE bWaitingTime;
}L2C_ScheduleEntry, *PL2C_ScheduleEntry;
• GetScheduleTableCount([out] PBYTE pbScheduleTableCount);
Mit dieser Methode kann die Anzahl der vom Gerät unterstützen
Schedule Tabellen angefragt werden.
Copyright IXXAT Automation GmbH
15
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.10 Interface ILIN2CAN_LINMsgQueue2
Dieses Interface dient dazu auf die LIN Nachrichten Queue zuzugreifen. Dazu
werden folgende Funktionen bereitgestellt.
• GetLINMsgQueueStatus([out] L2C_QueueStatus pQueueStatus);
Hiermit kann der Status der LIN Queue abgerufen werden.
struct
{
BOOL bOverrun;
BYTE bQueueSize;
BYTE bUsedEntries;
}L2C_QueueStatus, *PL2C_QueueStatus;
Ist ein Overrun in der LIN Nachrichten Queue aufgetreten so ist bOverrun auf TRUE gesetzt. Die Queuegröße wird in bQueueSize zurückgegeben und die aktuell belegten Einträge in bUsesEntries.
• ResetLINMsgQueueOverrun();
Um den Overrun Status der Queue wieder zurückzusetzen muss diese
Funktion aufgerufen werden.
• GetLINMsgQueueEntry([out] PL2C_LINMessage2 pLINMessage2);
Um eine Nachricht aus der Queue auszulesen muss diese Funktion aufgerufen werden. Hierbei wird dann folgende Struktur gefüllt:
struct
{
DWORD dwTimeStamp;
BYTE bLINID;
BYTE pbData[8];
BYTE bDataLen;
L2C_MessageCrcType nMsgCrcType;
}L2C_LINMessage2, *PL2C_LINMessage2;
In dwTimeStamp ist die Zeit in [ms] zu der das LIN Objekt empfangen
wurde enthalten. Der Zeitstempel basiert auf der Systemzeit des Gerätes welcher alle 48 Tage überläuft.
In bLINID steht die empfangene LIN ID oder 0x40 falls es sich um einen
Fehlercode handelt.
In pbData zusammen mit bDataLen stehen die LIN Daten und die Länge falls es sich um eine gültige LIN Nachricht handelt.
In nMsgCrcType steht der CRC Typ mit der die LIN Nachricht auf dem
LIN Netz übermittelt wurde.
Ist ein LIN Fehler aufgetreten so wird dies mit der ID 0x40 signalisiert.
Ein eventuell empfangene LIN ID steht dann in Datenbyte 0 (sonst
0xFF) und der Fehlercode steht in Datenbyte 1.
Copyright IXXAT Automation GmbH
16
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.10.1 Fehlerübersicht
Datenbyte
1
Datenbyte
2
Erklärung
FF
FF
FF
01
02
03
FF
04
LIN-ID
05
LIN-ID
06
LIN-ID
07
LIN-ID
08
FF
09
FF
0A
FF
0B
Empfangene Daten sind kein gültiges Sync- Feld.
Empfangene Daten sind kein gültiges ID-Feld.
Es wurde nur ein Sync- Break vor dem Timeout
empfangen.
Es wurde nur ein Sync- Break und Sync- Feld vor
dem Timeout empfangen.
Es wurde nur ein Sync- Break, Sync- Feld und IDFeld vor dem Timeout empfangen. (Slave antwortet nicht!)
Es wurde nur ein Sync- Break, Sync- Feld, ID- Feld
und mindestens ein Datenbyte vor dem Timeout
empfangen.
Die berechnete Checksumme stimmt nicht mit der
empfangenen Checksumme überein. Falls das
LIN2CAN GW im LIN Spec. 2.0 Modus arbeitet
könnte diese Fehler durch eine Datenkollision
oder durch eine Fehlerhafte CRC Einstellung
hervorgerufen werden.
Die empfangenen Daten entsprechen nicht den
versendeten Daten. Dieser Fehler kann durch eine
Datenkollision im LIN Spec. 2.0 Modus hervorgerufen werden.
UART fehler, empfangenen Daten entsprechen
nicht dem UART Standart (z.B. „Fehlendes StopBit“)
Ein dominanter Pegel wurde auf dem LIN Bus versendet (Wakeup Signal)
Ein dominanter Pegel wurde auf dem LIN Bus empfangen, aber er war für einen Sync- Break zu kurz.
(Hinweis: Dieser Fehlercode ist nur im Slave Modus
verfügbar nachdem zumindest ein gültiger SyncBreak empfangen wurde. Falls ein andere Fehlercode zuvor empfangen wurde so hat dieser Fehler
keine Relevanz.)
Copyright IXXAT Automation GmbH
17
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.11 Interface ILIN2CAN_Master_Slave2
Dieses Interface dient zur PC gestützten Master Emulation. Hierzu stehen folgende Funktionen bereit:
• SendLINID([in] BYTE bLINID);
Diese Funktion versendet die angegeben LIN ID auf dem Bus. Die LIN
ID muss zwischen 0x00 und 0x3F liegen.
• SendLINIDandData([in] PL2C_LINMessage2 pLINMessage2);
Diese Funktion versendet ein komplettest LIN Objekt auf den Bus. Die
Struktur ist unter 2.10 GetLINMsgQueueEntry beschrieben. Für das
versenden hat der Zeitstempel keine Bedeutung. Die Datenlänge kann
dabei unabhängig von der Konfiguration der LIN Länge im Gerät gewählt werden.
• SendWakeup([in] BYTE bSignalDuration);
Diese Funktion legt einen Dominanten Pegel gemäss der angegeben
Zeit auf den LIN Bus. Die Dauer bSignalDuration wird in [ms] zwischen
1 und 255 angegeben.
Copyright IXXAT Automation GmbH
18
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
Master Stand
Alone
Gateway Slave
Slave Stand Alone
x
-
-
-
-
SetDeviceName
x
x
-
-
-
-
GetVersionInformation
x
x
-
-
-
-
GetLINBaudrate
x
x
-
-
-
-
SetLINBaudrate
x
x
-
-
-
-
GetOperationMode
x
x
x
x
x
x
SetOperationMode
x
x
-
-
-
-
GetStartUpOpMode
x
x
-
-
-
-
SetStartUpOpMode
x
x
-
-
-
-
GetStandbyTime
x
x
-
-
-
-
SetStandbyTime
x
x
-
-
-
-
GetSystemTime
x
x
-
-
-
-
SetSystemTime
x
x
-
-
-
-
GetLinMessageConfig
x
x
-
-
-
-
SetLinMessageConfig
x
x
-
-
-
-
LoadSettingsFromFlash
x
x
-
-
-
-
SaveSettingsToFlash
x
x
-
-
-
-
GetCANConfig
x
x
-
-
-
-
SetCANConfig
x
x
-
-
-
-
GetGatewayTranslation
x
x
-
-
-
-
SetGatewayTranslation
x
x
-
-
-
-
GetLINIDAction
x
x
-
-
-
-
SetLINIDAction
x
x
-
-
-
-
GetScheduleTable
x
x
-
-
-
-
SetScheduleTable
x
x
-
-
-
-
GetScheduleTableCount
x
x
-
-
-
-
GetLINMsgQueueStatus
x
x
-
-
-
-
ResetLINMsgQueueOverrun
x
x
-
-
-
-
GetLINMsgQueueEntry
x
x
-
-
-
-
SendLINID
-
x
-
-
-
-
SendLINIDandData
-
x
-
-
-
-
SendWakeup
-
x
-
-
-
-
Funktion
Master mit PC
x
Slave mit PC
GetDeviceName
Betriebsart
X
-
Gateway Master
2.12 Übersicht: Erlaubte API- Aufrufe / Betriebsart
Aufruf in dieser Betriebsart erlaubt.
Aufruf in dieser Betriebsart nicht erlaubt.
Copyright IXXAT Automation GmbH
19
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.13 API Kurzübersicht
Alle Methoden geben einen HRESULT Fehlercode zurück
einen Windows Fehlercode
S_OK bei Erfolg sonst
2.13.1 Interface: ILIN2CAN_GeneralConfig2
• GetDeviceName([out] PSTRING psDeviceName)
Name des Geräts: Zeiger auf einen String mit maximal 16 Zeichen
Letztes gültige Zeichen ist „\0“
• SetDeviceName([in] PSTRING psDeviceName)
Name des Geräts: Zeiger auf einen String mit maximal 16 Zeichen
Letztes gültige Zeichen muss „\0“ sein
• GetVersionInformation([out] PL2C_VersionInformation pVersionInfo);
struct
{
char strFirmwareVersion[8];
char strHardwareVersion[8];
}L2C_VersionInformation, *PL2C_VersionInformation;
• GetLINBaudrate([out] PWORD pwBaudrate);
Baudraten: 2400, 9600, 19200
• SetLINBaudrate([in] WORD wBaudrate);
• GetOperationMode([out] PL2C_OperationMode pnOperationMode);
typedef BYTE L2C_OperationMode;
#define L2C_OP_MODE_SLAVE_PC 1
#define L2C_OP_MODE_MASTER_PC 2
Copyright IXXAT Automation GmbH
20
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
• SetOperationMode([in] L2C_OperationMode nOperationMode);
• GetStartUpOpMode([out] PL2C_OperationMode pnOperationMode);
#define L2C_OP_MODE_SLAVE 4
#define L2C_OP_MODE_MASTER 5
#define L2C_OP_MODE_GATEWAY_SLAVE 3
#define L2C_OP_MODE_GATEWAY_MASTER 3
• SetStartUpOpMode ([in] L2C_OperationMode nOperationMode);
• GetStandbyTime([out] PWORD pwStandbyTime);
Auflösung in [s]
0xFFFF für nie
• SetStandbyTime([in] WORD wStandbyTime);
• GetSystemTime([out] PDWORD pdwSystemTime);
Zeit in [ms]
• SetSystemTime([in] DWORD dwSystemTime);
• GetLinMessageConfig([out] PL2C_MessageConfig pMsgConfig)
struct
{
BYTE bMsgLen[64];
L2C_MessageCrcType nMsgCrcType[64];
}L2C_MessageConfig, *PL2C_MessageConfig;
• SetLinMessageConfig([in] PL2C_MessageConfig pMsgConfig)
• LoadSettingsFromFlash();
• SaveSettingsToFlash;
Copyright IXXAT Automation GmbH
21
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.13.2 Interface: ILIN2CAN_GatewayConfig2
• GetCANConfig([out] PL2C_CAN_Config pCANConfig);
struct
{
DWORD dwBaudrate;
L2C_CANTransceiverMode nTransceiverMode;
}L2C_CANConfig, *PL2C_CANConfig;
CAN Transceiver Baudrate
10, 20, 50, 100, 125, 250, 500, 1000
CAN Transceiver Modi
#define L2C_CAN_TRANSCEIVER_LOWSPEED 0
#define L2C_CAN_TRANSCEIVER_HIGHSPEED 1
• SetCANConfig([in] PL2C_CAN_Config pCANConfig);
• GetGatewayTranslation([out] PL2C_TranslationConfig2 pTranslationConfig2)
struct
{
L2C_IdentifierTranslation stLIN_IdentifierTranslation[64];
L2C_IdentifierTranslation stLIN_ErrorTranslation;
L2C_IdentifierTranslation stGatewayActivation;
L2C_MessageCrcType nMsgCrcType;
}L2C_TranslationConfig2, *PL2C_TranslationConfig2;
struct
{
BOOL bValid;
L2C_TranslationDirection nTranslationDir;
BOOL b29BitIdentifier;
DWORD dwCANID;
}L2C_IdentifierTranslation, *PL2C_IdentifierTranslation;
• SetGatewayTranslation([in] PL2C_TranslationConfig2 pTranslationConfig2)
Copyright IXXAT Automation GmbH
22
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.13.3 Interface: ILIN2CAN_SlaveConfig
• GetLINIDAction([in/out] PL2C_ActionEntry pActionEntry);
[in] pActionEntry->bLINID
[out] „restliche“
struct
{
BYTE bLINID;
L2C_LINIDAction nAction;
BYTE pbAddInfo[64];
BYTE bAddInfoLen;
}L2C_ActionEntry, *PL2C_ActionEntry;
//*** Slave Mode (Standalone) LIN ID Actions
#define L2C_CAN_ACTION_IGNORE 4
#define L2C_CAN_ACTION_SEND_LINDATA 5
• SetLINIDAction([in] PL2C_ActionEntry pActionEntry);
2.13.4 Interface: ILIN2CAN_MasterConfig2
• GetScheduleTable([out] PL2C_ScheduleEntry pScheduleTable,
[out] PBYTE pbNumberEntries);
struct
{
BYTE bLINID;
BYTE bWaitingTime;
}L2C_ScheduleEntry, *PL2C_ScheduleEntry;
pbNumberEntries out
Anzahl der Einträge in der Schedule Tabelle
//*** Master Mode (Standalone) Schedule Table Size
#define L2C_MAX_SCHEDULETABLE_SIZE 64
• SetScheduleTable([in] PL2C_ScheduleEntry pScheduleTable,
[in] BYTE bNumberEntries);
• GetScheduleTableCount ([out] PBYTE pbScheduleTableCount);
Copyright IXXAT Automation GmbH
23
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.13.5 Interface: ILIN2CAN_LINMsgQueue2
• GetLINMsgQueueStatus([out] L2C_QueueStatus pQueueStatus);
struct
{
BOOL bOverrun;
BYTE bQueueSize;
BYTE bUsedEntries;
}L2C_QueueStatus, *PL2C_QueueStatus;
• ResetLINMsgQueueOverrun();
• GetLINMsgQueueEntry([out] PL2C_LINMessage2 pLINMessage2);
struct
{
DWORD dwTimeStamp;
BYTE bLINID;
BYTE pbData[8];
BYTE bDataLen;
L2C_MessageCrcType nMsgCrcType;
}L2C_LINMessage2, *PL2C_LINMessage2;
Ist ein LIN Fehler aufgetreten so wird er mit der ID 0x40 signalisiert. Ein
eventuell empfangene LIN ID steht dann in Datenbyte 0 (sonst 0xFF)
der Fehlercode steht in Datenbyte 1.
Copyright IXXAT Automation GmbH
24
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.13.6 Interface: ILIN2CAN_Master_Slave2
• SendLINID([in] BYTE bLINID);
bLINID LIN ID zwischen 0x00 und 0x3F
• SendLINIDandData([in] PL2C_LINMessage2 pLINMessage2);
pLINMessage dwTimeStamp nicht benutzt
• SendWakeup([in] BYTE bSignalDuration);
bSignalDuration Dauer des Wakeup Signals in [ms] Wert zwischen 1
und 255
Copyright IXXAT Automation GmbH
25
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
2.13.7 Datentypen Definitionen
/*****************************************************************************
** constants and macros
*****************************************************************************/
//*** Define LIN2CAN Error Facility Code
#define L2C_ERROR_FACILITY 0xE0670000
//*** max lenght of an error string
#define L2C_MAX_ERRORSTR
256
//*** LIN Message CRC Types
#define L2C_MSG_CRC_TYPE_DEFAULT
#define L2C_MSG_CRC_TYPE_SPEC_1_3
#define L2C_MSG_CRC_TYPE_SPEC_2_0
0
1
2
//*** Operation Modes
#define L2C_OP_MODE_SLAVE_PC
#define L2C_OP_MODE_MASTER_PC
#define L2C_OP_MODE_SLAVE
#define L2C_OP_MODE_MASTER
#define L2C_OP_MODE_GATEWAY_SLAVE
#define L2C_OP_MODE_GATEWAY_MASTER
1
2
4
5
3
6
//*** Gateway Mode (Standalone) CAN Transceiver Modes
#define L2C_CAN_TRANSCEIVER_LOWSPEED 0
#define L2C_CAN_TRANSCEIVER_HIGHSPEED 1
//*** Gateway Mode Translation Direction
#define L2C_LIN_TO_CAN_TRANSLATION 0
#define L2C_CAN_TO_LIN_TRANSLATION 1
//*** Slave Mode (Standalone) LIN ID Actions
#define L2C_LIN_ACTION_IGNORE
4
#define L2C_LIN_ACTION_SEND_LINDATA 5
//*** Master Mode (Standalone) Schedule Table Size
#define L2C_MAX_SCHEDULETABLE_SIZE 64
/*****************************************************************************
** structs and types
*****************************************************************************/
//*** LIN Message CRC type
typedef BYTE L2C_MessageCrcType, *PL2C_MessageCrcType;
//*** Operation Mode type
typedef BYTE L2C_OperationMode, *PL2C_OperationMode;
//*** Gateway Mode (Standalone) Transceiver Mode type
Copyright IXXAT Automation GmbH
26
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
typedef BYTE L2C_CANTransceiverMode, *PL2C_CANTransceiverMode;
//*** Gateway Translation Mode
typedef BYTE L2C_TranslationDirection, *PL2C_TranslationDirection;
//*** Slave Mode (Standalone) Action type
typedef BYTE L2C_LINID_Action, *PL2C_LINID_Action;
//*** Version Information Structure
typedef struct
{
char strFirmwareVersion[8]; //Firmware Version String
char strHardwareVersion[8]; //Hardware Version String
}L2C_VersionInformation, *PL2C_VersionInformation;
//*** LIN Message Config
typedef struct
{
BYTE bMsgLen[64];
//LIN Data Length: 0 - 8 Bytes
L2C_MessageCrcType nMsgCrcType[64];
//LIN CRC calculation type
}L2C_MessageConfig, *PL2C_MessageConfig;
//*** Gateway Mode (Standalone) CAN Controller Configuration Structure
typedef struct
{
DWORD
dwBaudrate;
//CAN Baudrate in [kBaud]
L2C_CANTransceiverMode nTransceiverMode; //Mode of CAN Transceiver
//(High or Lowspeed)
}L2C_CANConfig, *PL2C_CAN_Config;
//*** Gateway Mode (Standalone) Identifier Translation
typedef struct
{
BOOL bValid;
//Translation valid? (Valid = TRUE)
L2C_TranslationDirection nTranslationDir; //Translation Direction (LIN 2 CAN |
CAN 2 LIN)
//only valid for LIN Identifier
Translation
BOOL b29BitIdentifier;
//Is CAN ID a 29 Bit Identifier
//
(29bit = TRUE)
DWORD dwCANID;
//CAN ID (0 - 2047
[11bit])
//
(0 - 536870911 [29bit])
}L2C_IdentifierTranslation, *PL2C_IdentifierTranslation;
Copyright IXXAT Automation GmbH
27
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
//*** Gateway Mode (Standalone) Translation Configuration
typedef struct
{
L2C_IdentifierTranslation stLIN_IdentifierTranslation[64]; //Field for Identifier
Translation
//(LIN ID = Index)
L2C_IdentifierTranslation stLIN_ErrorTranslation;
//LIN Error to CAN ID
Translation
L2C_IdentifierTranslation stGatewayActivation;
//Gateway Activation
CAN ID
L2C_IdentifierTranslation stScheduleSwitching;
//Master Schedule
table switching
CAN ID
}L2C_TranslationConfig2, *PL2C_TranslationConfig2;
//*** Slave Mode (Standalone) LINID Action Table entry Structure
typedef struct
{
BYTE
bLINID;
//LIN ID (0 - 63)
L2C_LINID_Action nAction;
//Action to perform on LINID
BYTE
pbAddInfo[64]; //Additional Info for Action
//LIN Data for instance
BYTE
bAddInfoLen;
//Length of pbAddInfo
}L2C_ActionEntry, *PL2C_ActionEntry;
//*** Master Mode (Standalone) Schedule Table entry Structure
typedef struct
{
BYTE bLINID;
//LIN ID (0 - 63)
BYTE bWaitingTime; //Time to wait before sending the next LIN Identifier
}L2C_ScheduleEntry, *PL2C_ScheduleEntry;
//*** Slave Mode (with PC) Queue Status Structure
typedef struct
{
BOOL bOverrun;
//Indicates a LIN Queue Overrun (TRUE = Overrun)
BYTE bQueueSize;
//Size of the LIN Message Queue
BYTE bUsedEntries; //Used Entries of the LIN Message Queue
}L2C_QueueStatus, *PL2C_QueueStatus;
//*** Master / Slave Mode (with PC) LIN Message Structure
typedef struct
{
DWORD
dwTimeStamp; //Timestamp of LIN Message in [ms]
BYTE
bLINID;
//LIN ID (0 - 63) LIN Error (64)
BYTE
pbData[8];
//LIN Data
BYTE
bDataLen;
//Length of pbData
L2C_MessageCrcType nMsgCrcType; //LIN CRC calculation type
}L2C_LINMessage2, *PL2C_LINMessage2;
Copyright IXXAT Automation GmbH
28
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
//*** Error List Lookup Table Structure
typedef struct
{
BOOL fIdValid;
//Flag if ID is valid
BYTE bErrorCode;
//Error Code
char strErrorMessage[512]; //Human readable error string
}L2C_LINErrorLookupTable, *PL2C_LINErrorLookupTable;
//*** Error List Lookup Table Structure
#define L2C_LIN_ERROR_LOOKUP_TABLE_ENTRY_COUNT 12
const L2C_LINErrorLookupTable
L2C_k_stLINErrorLookupTable[L2C_LIN_ERROR_LOOKUP_TABLE_ENTRY_COUNT] =
{
{
FALSE,
0x00,
""
},
{
FALSE,
0x01,
"Received data is not a valid sync-field."
},
{
FALSE,
0x02,
"Received data is not a valid ID-field."
},
{
FALSE,
0x03,
"Only sync-break detected before timeout."
},
{
FALSE,
0x04,
"Only sync-break and sync-field detected before timeout."
},
{
TRUE,
0x05,
"Only sync-break, sync-field and ID-field detected before timeout.
(Slave does not respond!)"
},
{
TRUE,
0x06,
"Only sync-break, sync-field, ID-field and at least one data byte detected
before timeout."
},
Copyright IXXAT Automation GmbH
29
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
{
TRUE,
0x07,
"The calculated checksum does not match the received checksum. If the LIN2CAN
GW is operating in LIN Spec. 2.0 mode, this error may occur due data collision
or invalid CRC mode setting."
},
{
TRUE,
0x08,
"The received data does not match the sent data. this error may occur due data
collision in LIN Spec. 2.0 mode."
},
{
FALSE,
0x09,
"UART error, received byte was not like UART standard (\"StopBit missing\" for
instance)."
},
{
FALSE,
0x0A,
"A dominant level was transmitted on the LIN BUS. (Wakeup signal)"
},
{
FALSE,
0x0B,
"A dominant level was received on the LIN BUS, but it was to short to be a
sync-break. (Note: This error code is only available in slave operation mode
after at least one valid sync-break was received. If an other error code was
received before, this error code has no relevance.)"
}
};
Copyright IXXAT Automation GmbH
30
L2C-API Handbuch V1.5
LIN-CAN-RS232-Gateway API (L2CAPI)
/*****************************************************************************
** LIN Error (LIN ID 0x40)
**
** An Error is signaled if bLINID is set to 0x40
** The LIN ID of the error message (if available) is stored in pbData[0]
** else it is 0xFF, while the errorcode is stored in pbData[1]
**
** Error Overview!
** - 0x01 Received data is not a valid sync-field.
** - 0x02 Received data is not a valid ID-field.
** - 0x03 Only sync-break detected before timeout.
** - 0x04 Only sync-break and sync-field detected before timeout.
** - 0x05 Only sync-break, sync-field and ID-field detected before timeout.
**
(Slave does not respond!)
** - 0x06 Only sync-break, sync-field, ID-field and at least one data byte
**
detected before timeout.
** - 0x07 The calculated checksum does not match the received checksum.
**
If the LIN2CAN GW is operating in LIN Spec. 2.0 mode, this error
**
may occur due data collision or invalid CRC mode setting.
** - 0x08 The received data does not match the sent data. this error may
**
occurre due data colission in LIN Spec. 2.0 mode.
** - 0x09 UART error, received byte was not like UART standard
**
("StopBit missing" for instance).
** - 0x0A A dominant level was transmitted on the LIN BUS. (Wakeup signal)
** - 0x0B A dominant level was received on the LIN BUS, but it was to short
**
to be a sync-break.
**
(Note: This error code is only available in slave operation
**
mode after at least one valid syncbreak was received. If an other
**
error code was received before, this error code has no relevance.)
*****************************************************************************/
Copyright IXXAT Automation GmbH
31
L2C-API Handbuch V1.5

Documentos relacionados