Beruflich Dokumente
Kultur Dokumente
2019
VW-MCD
MCD-Kernel
Inhaltsverzeichnis
3 Basiskonfiguration ..................................................................................... 11
3.3 MCD3D_CURR_PROJECT.INI............................................................................... 19
4 Jobdatenkonfiguration ............................................................................... 20
5 Flashdatenkonfiguration ............................................................................ 26
5.4 Anwendung............................................................................................................. 32
6 Textdatenbanken ........................................................................................ 34
8 Fehlerbehandlung ....................................................................................... 39
9 VIT-Generierung .......................................................................................... 56
10 Schnittstellen .............................................................................................. 64
1 Übersicht VW-MCD
PDX-Builder
ODX Files
Source-PDX
Runtime DB Files
Applications
Runtime-PDX
DB
ODX-ProjectUpdater Connector MCD-Kernel
D-PDU-API Library
VCI-Driver
In Abhängigkeit von der Applikation lädt der MCD-Kernel die jeweils benötigten Projektdaten
und kommuniziert über eine standardkonforme D-PDU-API mit einem Fahrzeug.
Details zur Anbindung von VCIs an den MCD-Kernel können der folgenden Darstellung
entnommen werden:
Applications
DB
Connector
MCD-Kernel
XOR
D-PDU-API D-PDU-API
Library Library
TCP
PDU-Daemon VCI
TCP
CANcaseXL /CANcardXL(e)
Die standardisierte MCD3D-API des MCD-Kernels kann wahlweise über einen Java-Client,
einen DCom-Client oder einen C++-Client betrieben werden. Der MCD-Kernel muss mit
einer ISO22900-2-konformen PDU-API-Implementierung verwendet werden, die über ein
herstellerspezifisches VCI oder auch einem PDU-Daemon mit dem Fahrzeug kommuniziert.
Der PDU-Daemon ist eine VCI-Implementierung, die auf einem Windows-PC läuft und als
CAN-Interface eine CANcardXL, CANCardXLe oder ein CANcaseXL der Firma Vector
Informatik verwendet.
2 Übersicht MCD-Kernel
3 Basiskonfiguration
Der MCD-Kernel kann über vier Konfigurationsdateien parametriert werden. Die zwei
Dateien MCD3D_SERVER.INI und MCD3D_PROJECTS.INI werden zur Laufzeit in dem
durch die Umgebungsvariable VW_MCD_CONFIG (Windows 7/10 Installation) bzw.
VW_MCD_HOME (Windows XP Installation) angegebenen Verzeichnis oder, falls die
Umgebungsvariable nicht gesetzt ist, im aktuellen Arbeitsverzeichnis gesucht.
3.1 MCD3D_SERVER.INI
In dieser Datei werden die Basiseinstellungen für den Betrieb des MCD-Kernels
vorgenommen. Sie wird einmalig bei Programmstart geladen. Die Bedeutung der Parameter
entnehme man der nachfolgenden Tabelle:
Parameter Bedeutung
aktuell deaktiviert
Parameter Bedeutung
Parameter Bedeutung
MCD3D_LogLevel_DB_FD
MCD3D_LogLevel_RT
MCD3D_LogLevel_RT_LINK
MCD3D_LogLevel_RT_SERVICE
MCD3D_LogLevel_RT_PARAM
MCD3D_LogLevel_RT_ECU_CONFIG
MCD3D_LogLevel_RT_VI
MCD3D_LogLevel_RT_JOB
MCD3D_LogLevel_RT_DYN_ID
MCD3D_LogLevel_RT_MON_LINK
MCD3D_LogLevel_JNI
MCD3D_LogLevel_PDU_API
Parameter Bedeutung
Parameter Bedeutung
Parameter Bedeutung
aktueller Wert: „“
aktueller Wert: „“
Beispiel:
SUPPLIER=1
DEVELOPMENT=0
MANUFACTURING=1
AFTERSALES=1
AFTERMARKET=0
aktuelle Werte:
SUPPLIER=1
DEVELOPMENT=1
MANUFACTURING=1
AFTERSALES=1
AFTERMARKET=1
Parameter Bedeutung
Wert 0: deaktiviert
Wert 1: aktiviert
aktueller Wert: 0
Wert 0: deaktiviert
Wert 1: aktiviert
aktueller Wert: 0
Abbildung 3. MCD3D_SERVER.INI
*) Man beachte, dass der ODX-Converter grundsätzlich alle Java-Job-Klassen und JARs in
dem Verzeichnis Jobs unter dem Projektordner abspeichert. Dies ist nicht parametrierbar.
Bei Bedarf können diese Dateien jedoch in ein anderes Verzeichnis verschoben werden, das
der MCD-Kernel durch Auswertung des entsprechenden Konfigurationsparameters
MCD3D_JobSubDirectory findet.
3.2 MCD3D_PROJECTS.INI
Parameter Bedeutung
aktueller Wert: „“
aktueller Wert: „“
Beispiel: „./../Projects/EcuData“
Aktueller Wert: „“
Beispiel: „./FlashJobs/BootLoaderFlash.jar“
Beispiel: „./FlashUtilities;./JNIWrapper“
aktueller Wert: „“
Abbildung 4. MCD3D_PROJECTS.INI
V14.0.0 / 31.10.2019 3. Basiskonfiguration 19
3.3 MCD3D_CURR_PROJECT.INI
Parameter Bedeutung
Beispiel: "./SeedAndKey.jar"
Beispiel: "./SecurityAccess;./JNIWrapper"
Beispiel: "./UploadFiles"
Abbildung 5. MCD3D_CURR_PROJECT.INI
3.4 TESTERID.INI
Die optionale TESTERID.INI enthält die Tester-Id des Testers auf dem der Server läuft. Die
Tester-Id wird mittels des Kommandozeilenprogramms settesterid.exe gesetzt und
verschlüsselt in der TESTERID.INI abgelegt. Diese Datei soll nicht manuell geändert werden.
Eine neue Tester-Id kann mit dem oben genannten Programm gesetzt werden.
Parameter Bedeutung
Abbildung 6. TESTERID.INI
20 4. Jobdatenkonfiguration V14.0.0 / 31.10.2019
4 Jobdatenkonfiguration
4.1 Problemstellung
Durch die Möglichkeit, über die MCD3D-Schnittstelle Java-Code in Form von sogenannten
Jobs auszuführen, deren Inhalt dem Laufzeitsystem nicht bekannt ist, kann zur Laufzeit die
Situation entstehen, dass kontextabhängig externe Bibliotheken – JARs oder DLLs – oder
Flash-Dateien genutzt werden sollen, die vor dem Start der VW-MCD CD-Applikation nicht
konfigurierbar sind. Der Umgang mit einer solchen Situation ist nicht durch ein
standardisiertes Verfahren geregelt und obliegt der Applikationsentwicklung. VW-MCD bietet
dabei eine umfassende und flexible Unterstützung.
JARs und DLLs werden in Java üblicherweise bei Applikationsstart über zwei Pfadvariablen
bekannt gemacht, die zur Laufzeit als „Properties“ „java.class.path“ bzw. „java.library.path“
abfragbar sind. Dabei gibt es verschiedene Möglichkeiten, diese Pfade beim Start zu setzen.
Gebraucht werden die Werte als Suchpfade beim Laden von Java-Klassen oder C++-
Bibliotheken.
Ein nachträgliches Umsetzen der beiden „Properties“ hat jedoch keine Auswirkung auf die
Pfade, die beim anschließenden Laden von Java-Klassen oder C++-Bibliotheken tatsächlich
herangezogen werden, so dass man andere Mechanismen entwickeln muss, um zur Laufzeit
neue Pfade nutzen zu können.
Man beachte, dass ODX 2.2 über das LIBRARY-Element die Möglichkeit zur Referenzierung
externer JARs und DLLs bietet und damit keiner gesonderten Konfiguration bedarf.
Für VW-MCD können Pfade auf externe DLLs, externe JARs und Java-Klassen konfiguriert
werden.
Beispiel:
MCD3D_SERVER_JavaExternals=“C:/JavaInstallation/log4j.jar;“
MCD3D_SERVER_CppExternalDirs=”C:/external_dlls”
2. MCD3D_PROJECTS.INI
Hier werden projektübergreifende Pfade eingestellt, wobei ausschließlich relative
Angaben zulässig sind. Der Bezugspunkt für solche Pfade ist das aktuelle
Projektwurzelverzeichnis. Man beachte, dass es mehr als ein Projektwurzelverzeichnis
geben kann. Das jeweils aktuelle wird anhand des selektierten Projekts ermittelt.
Beispiel:
MCD3D_PROJECTS_JavaExternals=”./../CommonJars/ErrorHandling.jar;”
MCD3D_PROJECTS_CppExternalDirs=”./../CommonDlls”
3. MCD3D_CURR_PROJECT.INI
Hier werden projektspezifische relative Pfade eingestellt, die sich auf das aktuelle
Projektverzeichnis beziehen.
Diese Konfigurationsdatei ist optional. Sie kann wahlweise vom PDX-Builder anhand des
Laufzeit-PDX generiert und als Bestandteil dieses Pakets verteilt oder vom Kunden / von
einer Kundenapplikation bereitgestellt werden.
Beispiel:
MCD3D_CURR_PROJECT_JavaExternals=”./ExternalJars/JobSupport.jar;”
MCD3D_CURR_PROJECT_CppExternalDirs=”./ExternalDlls”
Ebenso wird die Konfigurationsdatei MCD3D_PROJECTS.INI gelesen, und die Werte für
MCD3D_PROJECTS_JavaExternals und MCD3D_PROJECTS_CppExternalDirs werden
intern gespeichert.
Beim Selektieren eines konkreten Projekts wird in dem aktuellen Projektverzeichnis nach
einer Datei MCD3D_CURR_PROJECT.INI gesucht. Existiert diese Datei, werden die Werte
22 4. Jobdatenkonfiguration V14.0.0 / 31.10.2019
4.2.1.2 Job-Ausführung
Der auszuführende Job befindet sich entweder als .class-Datei oder als Bestandteil eines
JARs im aktuellen Projektverzeichnis unter Jobs. Etwaige Paketstrukturen gemäß Bedatung
bleiben erhalten, so dass zur Laufzeit stets bekannt ist, auf welche Weise der Job-Code
ansprechbar ist. Wie schon in Kapitel 4.1 erwähnt, hat ein MCD3D-Laufzeitsystem dagegen
prinzipiell keine Kenntnisse über die innerhalb von Jobs verwendeten JARs und DLLs. In
VW-MCD soll nun folgendes Vorgehen umgesetzt werden:
Dem bei der Job-Ausführung gültigen „Class Loader“ werden alle konfigurierten Pfade mit
abnehmender Spezialisierung mitgegeben, wobei diese Pfade absolut angegeben werden.
Somit findet der Job-Prozessor bei jeder Applikationsart alle auf diese Weise referenzierten
JARs, sofern die Referenzen korrekt sind. Sollten in den unterschiedlichen
Konfigurationsdateien JARs gleichen Namens notiert sein, so würde zur Laufzeit stets die
speziellste Angabe präferiert.
Beispiel:
Katalog Baureihe_XYZ.pdx:
index.xml
common_dlls/CppUtils.dll
common_jars/JavaJobUtilities.jar
vehicle_info_spec.odx-v
comparam_spec.odx-c
ECU_A/ecu_a.odx-d
ECU_A/ecuAJobSupport.jar
ECU_A/ecuAJobUtilities.jar
ecu_a_jobs.jar /* enthält in der Bedatung referenzierte Jobs */
Laufzeit-PDX:
index.xml
common_dlls/CppUtils.dll
common_jars/JavaJobUtilities.jar
ECU_A.db
ECU_A.key
ECU_A/ecuAJobSupport.jar
ECU_A/ecuAJobUtilities.dll
Jobs/ecu_a_jobs.jar
MCD3D_CURR_PROJECT.INI
mit MCD3D_CURR_PROJECT.INI:
MCD3D_CURR_PROJECT_JavaExternals=”./common_jars/JavaJobUtilities.jar;
V14.0.0 / 31.10.2019 4. Jobdatenkonfiguration 23
./ECU_A/ecuAJobUtilities.jar”
MCD3D_CURR_PROJECT_CppExternalDirs=”./common_dlls;./ECU_A”
Dann werden dem „Class Loader“ die folgenden Pfade in gegebener Reihenfolge bekannt
gemacht:
C:/Programme/Volkswagen/VW-MCD
/Projekte/Baureihe_XYZ/CurrProj/common_jars/JavaJobUtilities.jar
C:/Programme/Volkswagen/VW-MCD
/Projekte/Baureihe_XYZ/CurrProj/ECU_A/ecuAJobUtilities.jar
C:/Programme/Volkswagen/VW-MCD
/Projekte/ExternalJars/ErrorHandling.jar
C:/Programme/ Volkswagen/VW-MCD/Projekte/Baureihe_XYZ/SeedAndKey.jar
C:/JavaInstallation/log4j.jar
Noch zu lösen ist das Problem, dass während der Job-Ausführung potenziell die im PDX
enthaltenen oder auch global parametrierten DLLs gefunden werden sollen. Dies ist nicht
analog zum „Class Loader“-Mechanismus realisierbar. Vielmehr muss der Anwender durch
Setzen geeigneter Umgebungsvariablen, z. B. PATH, java.library.path, vor dem Start
der Applikation selbst dafür Sorge tragen, dass die zu ladenden DLLs erreichbar sind.
Eine Alternative kann VW-MCD bieten, indem zur Laufzeit eine sogenannte Java-Property
gesetzt wird, die im Job-Code genutzt werden kann. Aus den verfügbaren
Konfigurationsdateieinträgen wird die „Property“ VW_MCD_JOB_DLL_PATH gebildet, der der
Job-Code die potenziellen DLL-Suchpfade entnehmen kann. Es ist jedoch nicht zu
vermeiden, dass im Job-Code diese „Property“ zerlegt wird und für jede zu ladende DLL
geprüft werden muss, in welchem Verzeichnis sie sich tatsächlich befindet, damit beim
Ladebefehl der konkrete absolute Pfad angegeben werden kann. Zu diesem Zweck sind
auch hier die potenziellen Pfade mit abnehmender Spezialisierung aufgeführt.
C:/Programme/Volkswagen/VW-MCD/Projekte/Baureihe_XYZ/CurrProj/common_dlls;
C:/Programme/Volkswagen/VW-MCD/Projekte/Baureihe_XYZ/CurrProj/ECU_A;
C:/Programme/ Volkswagen/VW-MCD/Projekte/ExternalDlls;C:/CppInstallation;
Aus praktischen Erwägungen werden anders als bei den JAR-Referenzen die DLL-Namen
selbst nicht mit aufgenommen.
VW-MCD bietet die Möglichkeit, einem Upload-Java-Job ein Verzeichnis zur Verfügung zu
stellen, in dem der Job Upload-Dateien abspeichern kann. Der Verzeichnisname wird dem
Job über eine Java-Property bekannt gegeben.
[BASIC]
Ist der Schlüssel ODXCONV_Upload_Files_Subdir nicht definiert oder leer, so wird das
Upload-Verzeichnis nicht durch den ODX-Converter erzeugt.
Der PDX-Builder erzeugt das Verzeichnis und passt die MCD3D_CURR_PROJECT.INI an,
wenn die Konvertierung über folgende Menüoptionen gestartet wird:
• File -> Export Runtime PDX -> Full...
• File -> Export Runtime PDX -> Basicdata...
• Convert -> Convert All...
Folgende Schritte führt VW-MCD zur Bereitstellung des Verzeichnisnamens für Upload-
Dateien durch:
1. Eine Diagnoseanwendung erzeugt über die MCD 3D API den gewünschten Upload-Job
(MCDLogicalLink.createDiagComPrimitiveByName(„JobName“)) und startet den Job
(MCDJob.executeSync())
3. VW-MCD lädt den Job, der sich entweder als .class-Datei oder als Bestandteil eines
JARs im aktuellen Projektverzeichnis unter „Jobs“ befindet, über den für die Ausführung
gültigen „Class Loader“. Nun setzt VW-MCD für den „Class Loader“ die Property
VW_MCD_JOB_UPLOAD_FILES und führt den Job aus.
Der Default-Wert unter Windows ist ein relativer Pfad zum Laufwerk des aktuellen
Arbeitsverzeichnisses: „\Log\“. Unter Linux ist der Default-Wert konfigurationsabhängig, z.B.
26 5. Flashdatenkonfiguration V14.0.0 / 31.10.2019
Für das Erstellen einer Job-Response ist es je nach Antwortstruktur wichtig zu wissen,
welcher Wert eingestellt worden ist. Daher wird dieser Wert als Java-Property
„VW_MCD_JOB_STRUCTURE_VISIBILITY“ mit den möglichen Werten „on“ (entspricht dem
Konfigurationswert 1) und „off“ (entspricht dem Konfigurationswert 0) hinterlegt. Dieser Wert
kann im Job zur korrekten Response-Strukturverarbeitung genutzt werden.
5 Flashdatenkonfiguration
5.1 Late-bound-Mechanismus
Als Late-bound-Mechanismus im Zusammenhang mit dem Laden von Flashdateien wird hier
eine Vorgehensweise bezeichnet, bei der Flashdateien in der ODX-Bedatung mit
sogenannten Wildcards aufgeführt sind, die zur MCD-Kernellaufzeit bei Bedarf aufgelöst
werden müssen. Da gegebenenfalls mehr als eine Flashdatei zum bedateten
Dateinamensmuster passt, muss die Applikation aktiv die möglichen vollständigen
Dateinamen erfragen und aus der Menge der Möglichkeiten genau eine auswählen, um mit
dieser weiterzuarbeiten.
Man beachte:
Im eigentlichen Sinne wird der Begriff „late-bound“ bereits dann verwendet, wenn der MCD-
Kernel die Flashdaten nicht unmittelbar bei Programmstart in den Speicher lädt, sondern
V14.0.0 / 31.10.2019 5. Flashdatenkonfiguration 27
dies bedarfsgetrieben tut. Da der MCD-Kernel die Flashdaten ohnehin schon zum
spätestmöglichen Zeitpunkt lädt, wird über „late-bound“ lediglich unterschieden, ob der
gegebene Dateiname Wildcards enthält oder direkt verwendet werden kann.
Flashdateien können in der ODX-Bedatung prinzipiell mit absolutem Pfad notiert sein, auch
wenn dies im Normalfall nicht sinnvoll sein wird.
Beispiel
<FLASHDATA xsi:type=“EXTERN-FLASHDATA“ ID=“FLASHDATA_Latebound_abs_ID“>
<SHORT-NAME>FLASHDATA_Latebound_abs</SHORT-NAME>
<DATAFORMAT SELECTION=“BINARY“/>
<DATAFILE LATEBOUND-DATAFILE=“true“>C:/flashfiles/flash.bin</DATAFILE>
</FLASHDATA>
Die Flashdatei flash.bin wird ausschließlich im Verzeichnis C:/flashfiles gesucht.
2. Bei relativ gegebenen Flashdateien tragen mehrere Einträge zum Bezugspunkt bei.
Beispiel:
MCD3D_FlashDataRootDirectory="./../Flashware"
gesucht.
2.1.1. Kann die so festgelegte Datei nicht gefunden werden, wird das
Flashdatenunterverzeichnis im Pfad weggelassen und die Datei im daraus
resultierenden Verzeichnis gesucht.
Fortsetzung Beispiel
gesucht.
2.1.1.1. Kann die so festgelegte Datei nicht gefunden werden, wird der Pfad zum
aktuellen Projekt ermittelt, an diesen das Flashdatenunterverzeichnis
gehängt und im Anschluss daran der bedatete Flashdateiname.
Fortsetzung Beispiel
gesucht.
2.1.1.1.1. Kann die so festgelegte Datei nicht gefunden werden, wird das
Flashdatenunterverzeichnis im Pfad weggelassen und die Datei im
daraus resultierenden Verzeichnis gesucht.
Fortsetzung Beispiel
gesucht.
Fortsetzung Beispiel
MCD3D_FlashDataRootDirectory=""
V14.0.0 / 31.10.2019 5. Flashdatenkonfiguration 29
gesucht.
2.2.1. Kann die so festgelegte Datei nicht gefunden werden, wird das
Flashdatenverzeichnis im Pfad weggelassen und die Datei im daraus
resultierenden Verzeichnis gesucht.
Fortsetzung Beispiel
gesucht.
Bei der Verwendung von Wildcards in Flashdateien müssen diese explizit auf Anforderung
der Applikation aufgelöst werden, so dass die Applikation eine Datei aus potenziell mehreren
passenden Dateien auswählen und festlegen kann.
Wo passende Dateien gesucht werden, hängt sowohl von der Bedatung als auch von der
MCD-Kernel-Konfiguration ab:
Beispiel
Beispiel
MCD3D_FlashDataRootDirectory="./../Flashware"
2.1.1. Ist das Resultat eine leere Menge, wird Gleiches mit dem aus
MCD3D_FlashDataRootDirectory und bedatetem Dateinamen
zusammengesetzten Namen versucht. Das Flashdatenunterverzeichnis
wird weggelassen.
Fortsetzung Beispiel
2.1.1.1. Ist das Resultat eine leere Menge, wird der absolute Pfad zum
aktuellen Projekt ermittelt, an diesen das Flashdatenunterverzeichnis
gehängt und im Anschluss daran der bedatete Flashdateiname.
Anhand dieses zusammengesetzten Dateinamens wird bei
getMatchingFileNames nach allen Dateien gesucht, die dem
Muster entsprechen.
Fortsetzung Beispiel
2.1.1.1.1. Ist das Resultat eine leere Menge, wird Gleiches ohne das
Flashdatenunterverzeichnis versucht.
Fortsetzung Beispiel
Fortsetzung Beispiel
MCD3D_FlashDataRootDirectory=""
Es wird im Verzeichnis
C:/Programme/Volkswagen/VW-MCD/projects/MyProject/FLASH_BCM/flashdata
2.2.1. Ist das Resultat eine leere Menge, wird Gleiches mit dem aus absolutem
Projektpfad und bedatetem Dateinamen zusammengesetzten Namen
versucht. Das Flashdatenunterverzeichnis wird ausgelassen.
Fortsetzung Beispiel
Es wird im Verzeichnis
C:/Programme/Volkswagen/VW-MCD/projects/MyProject/flashdata
5.3 Flashdatenablage
5.3.2 Ablagemöglichkeiten
Wenn Flashdaten projektübergreifend zentral abgelegt werden sollen, muss der Ablageort
dem MCD-Kernel über den Konfigurationsparameter MCD3D_FlashDataRootDirectory
mitgeteilt werden.
5.4 Anwendung
6. Sonst:
Man beachte: Die Methode loadSegments kann prinzipiell immer aufgerufen werden, wenn
das MCDDbFlashData-Objekt auf eine „late-bound“-Flashdatei verweist, die Methode
isLateBound also true liefert. Jedoch gehen dabei alle etwaigen Segment-Informationen
aus der ODX-Bedatung verloren, und es existiert im Anschluss an den Aufruf von
loadSegments genau ein Segment, das den kompletten Datenbereich abdeckt. Wenn die
ODX-Bedatung trotz „latebound“-Flashdateien bereits Segmente enthält, sollte eine
Applikation lediglich über setActiveFileName die konkrete Flashdatei festlegen und dann
verfahren wie bei Verarbeitung von „nicht-latebound“-Flashdaten.
Gelöst wird diese Anforderung durch die Konfiguration eines zentralen Verzeichnisses für
Flashprojekte in der MCD3D_PROJECTS.INI.
a) Alle Flashprojekte, die gleichzeitig in dieses Verzeichnis installiert werden sollen, müssen
aus ODX-Elementen „FLASH“ unterschiedlichen Namens (SHORT-NAME) erzeugt
34 6. Textdatenbanken V14.0.0 / 31.10.2019
b) Die Namen (SHORT-NAME) der ECU-MEMs müssen über alle gemeinsam abgelegten
Flashprojekte hinweg eindeutig sein, da pro SESSION-Element eine Laufzeitdatenbank
mit Namen <ECU-MEM-SHORT-NAME>_<SESSION-SHORT-NAME>.db/.key erzeugt
wird. Die globale Eindeutigkeit des ECU-MEM-SHORT-NAME ist gemäß ODX gefordert,
und der MCD-Kernel verlässt sich darauf.
c) Wenn ein Flashprojekt zu einem ODX-Element „FLASH“ mit Namen X in das zentrale
Verzeichnis installiert wird, das schon ein Projekt zu diesem FLASH-Namen X enthält, so
müssen die beiden ODX-Flash-Projekte dieselben ECU-MEMs und SESSIONs enthalten,
damit alle alten Laufzeitdatenbanken vollständig überschrieben werden. Grundsätzlich ist
jedoch aufgrund der möglichen, schwer zu identifizierenden Fehler davon abzuraten.
f) Der Suchalgorithmus für die Flashdaten ist unabhängig von der Einstellung eines
zentralen Flashprojektverzeichnisses, d.h. ist ein solches konfiguriert und sollen die
Flashdaten ebenfalls in diesem zentralen Verzeichnis gesucht werden, muss dies durch
eine entsprechende Einstellung des Konfigurationsparameters
MCD3D_FlashDataRootDirectory in der MCD3D_PROJECTS.INI gefordert werden.
6 Textdatenbanken
Der VW-MCD implementiert Textdatenbanken zum effizienten und ressourcenschonenden
Umgang mit Zeichenketten sowohl in Bezug auf Laufzeitdatengrößen als auch zur Laufzeit
selbst. Hierbei wird eine Zeichenkette einem Schlüssel zugeordnet, und in den
verwendenden Objekten wird der Schlüssel statt der Zeichenkette selbst gespeichert,
während die Zeichenkette in eine Textdatenbank eingetragen und bei Bedarf geladen wird.
Zeichenketten sind hierbei ODX-Strings aller Art, die beim Konvertieren eines ODX-Projekts
in Laufzeitdaten identifiziert werden, außerdem auch generierte intern verwendete
Zeichenketten wie Bezeichner für Objektreferenzen.
Alle vier Dateien werden bei der Konvertierung durch den VW-MCD ODX-Converter gzip-
komprimiert, wenn nicht beim Aufruf des ODX-Converters anders angegeben.
Liegt keine nicht komprimierte Textdatenbank im Projektverzeichnis, wird die Existenz einer
vollständigen komprimierten Textdatenbank, bestehend aus den vier Dateien
AStringData.data.gz, AStringData.idx.gz, UStringData.data.gz und UStringData.idx.gz,
geprüft, im positiven Fall das Entpacken der Dateien angestoßen und der Inhalt zur internen
Nutzung herangezogen.
Bei einem Projektwechsel oder Schließen des Laufzeitdatenprojekts werden die temporären
Dateien wieder gelöscht, sodass die Textdatenbanken bei einer erneuten Verwendung des
Laufzeitdatenprojekts wieder entpackt werden müssen. Dies wirkt sich neben der wiederholt
erhöhten Zeit für das Laden eines Laufzeitdatenprojekts negativ auf die Lebensdauer des
Speichermediums aus, das gegebenenfalls unter den vielen Schreibzugriffen leidet.
• 0: kein Logging
• <= 3: Protokollieren aller Einträge der Kategorie ERROR und höher
• <= 4: Protokollieren aller Einträge der Kategorie WARNING und höher
• <= 5: Protokollieren aller Einträge der Kategorie MESSAGE und höher
• <= 7: Protokollieren aller Einträge der Kategorie TRACE und höher
• <= 8: Protokollieren aller Einträge der Kategorie RECEIVE und höher
• <= 9: Protokollieren aller Einträge der Kategorie SEND und höher
• <= 10: Protokollieren aller Einträge der Kategorie INFORMATION und höher
• <= 15: Protokollieren aller Einträge der Kategorie DEBUG und höher
Darüber hinaus erlaubt der MCD-Kernel die Angabe mehrstufig unterschiedlicher Log-Level
für unterschiedliche Funktionalitäten und Bereiche, beispielsweise für DB-Browsing,
Variantenerkennung, Flash, ECU-Config, Parameterauswertung, Dienstausführung und
PDU-Anbindung. Diese speziellen Log-Level überschreiben die globale Einstellung in beide
Richtungen. Man kann also für ausgesuchte Bereiche auf einem höheren oder niedrigeren
Niveau loggen, als es die globale Konfiguration vorgibt.
Für die schmale Schicht zur Anbindung der Java-Schnittstelle existiert ein eigener Log-Level-
Konfigurationsparameter „MCD3D_Java_LogLevel“.
Der MCD-Kernel schreibt unter Windows seine Log-Dateien als Textdatei standardmäßig in
ein Verzeichnis <Ausführungslaufwerk:>\log, wenn ein solches Verzeichnis existiert.
Gibt es dieses Verzeichnis nicht, wird geprüft, ob ein Konfigurationsverzeichnis gesetzt ist.
V14.0.0 / 31.10.2019 7. Logging und Tracing 37
Ist dieses Verzeichnis nicht definiert, wird das aktuelle Arbeitsverzeichnis als Log-
Verzeichnis angenommen.
Alternativ zur Verwendung des so ermittelten Verzeichnisses ist das Log-Verzeichnis über
den Eintrag MCD3D_LogDirectory der MCD3D_SERVER.INI konfigurierbar. Die Angabe
kann als relativer oder absoluter Pfad vorgenommen werden, wobei relative Pfade als
Bezugspunkt ebenfalls das definierte Konfigurationsverzeichnis oder das aktuelle
Arbeitsverzeichnis annehmen. Man beachte, dass ein so konfiguriertes Logverzeichnis beim
Programmstart existieren muss, damit es genutzt wird.
Etwaige Pfadangaben können mit Slashes („/“) oder doppelten Back-Slashes („\\“) notiert
sein. Leerzeichen im Pfad erfordern Hochkommata.
Unter Linux findet man die Log-Dateien im Verzeichnis /var/opt/vw/log, soweit nicht anders
angegeben.
Zur Unterstützung von Logging aus Java-Jobs heraus hinterlegt der MCD-Kernel das nach
obigen Regeln identifizierte Log-Verzeichnis als Wert der Java System-Property
„VW_MCD_JOB_LOG_DIR“, die im Job-Code als Ablage jobspezifischer Log-Informationen
genutzt werden kann. Dies ermöglicht das Schreiben plattformunabhängiger Jobs, die sonst
keine Möglichkeit haben, das konfigurierte Log-Verzeichnis zu ermitteln. Man beachte, dass
diese Property nur informativen Charakter hat und nicht zur Konfiguration des
Logverzeichnisses genutzt werden kann.
Der eingestellte Log-Mechanismus basiert auf einem Ringpuffer, so dass nach Ausschöpfen
der maximalen Log-Kapazität – konfigurierbar in Anzahl und Größe der Log-Dateien,
Voreinstellung 5x1024K, die jeweils ältesten Daten überschrieben werden.
Datei ::= Datei, in der die Meldung geschrieben wurde, bis zu 32 Zeichen
Zeilennummer ::= Zeile, in der die Meldung geschrieben wurde, bis zu vier Stellen
P : Panic
E : Error
W : Warning
M : Message
T : Trace
R : Receive
S : Send
I : Information
D : Debug
Beispiel: Eine fehlerhafte PDU Länge wird bei der Auswertung der Parameter erkannt
T 100720 094525.699320 . 2040 [MCDResponseParameterImpl.cpp : 568] ---> provideFieldParameter –
DTCAndStatusRecord
T 100720 094525.699446 . 2040 [MCDResponseParameterImpl.cpp : 681] -- END-OF-PDU-FIELD; item byte
size variable; at least one item
T 100720 094525.699590 . 2040 [MCDResponseParametersImpl.cpp : 522] ---> createResponseParameters
for PDU 78
T 100720 094525.699710 . 2040 [MCDResponseParametersImpl.cpp : 524] -- handling 2 DB parameters
8 Fehlerbehandlung
Im Standard ASAM MCD 3.0.0 ist eine Fehlerklasse MCDError mit den Attributen
Fehlercode, Fehlerbeschreibung, Gewicht, spezifischer Fehlercode und spezifische
Fehlerbeschreibung definiert. Während die ersten drei Eigenschaften standardisiert sind,
können in den restlichen Feldern implementierungsspezifische Informationen abgelegt
werden.
Mit ASAM MCD3-D 2.00.02 sind für die jeweiligen Fehlernummern Fehlertexte spezifiziert
worden, die aus Kompatibilitätsgründen beibehalten werden. Die mit den Fehlernummern
verbundene Schwere des Fehler, ausgedrückt über Elemente des Aufzählungstyps
MCDSeverity, ist für alle Fehler auf MCDSeverity.eERROR (0x803) festgelegt worden.
Mit jedem benutzten Fehlercode ist ein statischer Fehlertext verbunden, der zur Laufzeit
gegebenenfalls mit Kontextinformationen gefüllt und so komplettiert als spezifischer
Fehlertext in das MCDError-Objekt eingetragen wird.
Fehlernummer Fehlertext
0xC031 C031;803;The value can not be converted into the expected type.
0xC032 C032;803;This error code indicates that not some request parameter have not been assigend valid values.
0xC033 C033;803;Indicates that a CODED-CONST or PHYS-CONST parameter can not change the value.
0xC036 C036;803;The logical link is not part of the selected vehicle information table
0xD014 D014;803;The internal object for the project could not be created
0xD015 D015;803;The internal object for the logical link could not be created
0xD017 D017;803;deleting of Logical Link not possible, not all of its Subobjects are deleted. See vendor specific code for details.
0xD021 D021;803;This error is thrown in case a method is called in an invalid state of the associated or a dependent object.
0xD022 D022;803;Method is not allowed in case the MCDInterface Object represents a DoIP Module
0xD042 D042;803;The client holds a reference to an object which has no connection to the server anymore
0xD043 D043;803;An internal error occurred in the MVCI diagnostic Server. See vendor specific code for details.
0xD044 D044;803;Execution of a job, which supports dynamically reduced results, is only in dynamic mode possible.
0xD046 D046;803;service can not created, because semantic attribute is used more than once.
0xD052 D052;803;The array contains only elements with the same name. It is not possible to get one of them by method getItemByName.
V14.0.0 / 31.10.2019 8. Fehlerbehandlung 41
0xD055 D055;803;Indicates that the related actions or services have been executed in wrong sequence. Correct sequences are described in the
specification document.
0xD056 D056;803;The FlashJob is the only MCDDataPrimitive which can not be executed repeated.
0xD057 D057;803;Indicates that an ECU returned a wrong value for a CODED-CONST / PHYS-CONST parameter.
0xD058 D058;803;Indicates that a MCDResponse object has no response parameter because the execution failed.
0xD059 D059;803;Indicates that a MCDRequestParameter object has no corresponding request parameter with length key information.
0xD05B D05B;803;Indicates that a DynId is already used. Thrown while trying to executeAsync a MCDDynIdDefineComPrimitive.
0xD05F D05F;803;Indicates that the feature the Client wants to use is not available (e.g. at Service the feature suppress positive response).
0xD067 D067;803;The given file name does not match against the filename pattern.
0xD091 D091;803;The optional D-PDU API is not supported from the D-Server
0xD093 D093;803;The value cannot be determined completely, e.g. because no value has been set.
0xD0AC D0AC;803;The conversion from coded-type to physical-type fails for some configuration items.
0xD0AF D0AF;803;The Write-/ReadDiagComPrimitives need to be executed in the order given by the ODX Data.
0xD0B7 D0B7;803;the file with the given name could not be found
0xE010 E010;803;MCD 2 data access impossible. The vendor specific part contains detailed information about the error.
0xE011 E011;803;Error while parsing data base. The vendor specific part contains detailed information about the error.
0xE013 E013;803;Object not found in data base. The vendor specific part contains detailed information about the error.
0xE017 E017;803;The consistency check of the data base failed. This check is made when selecting a project, loading a new ECUMem or when get
additional ECUMems.
0xE018 E018;803;While getting segments of flash data (file) the end was already reached.
0xEA14 EA14;803;Indicates that one of the addressed ECUs did not respond. Leads to execution state eFAILED.
0xEA15 EA15;803;The D-server has lost the communication with the VCI
0xEA17 EA17;803;the control primitive MCDVariantIdentificationAndSelection has not been executed or the execution has failed
Fehlernummer Fehlertext
0x0000 0000;VWMCD:
0x1000 1000;VWMCD:
0x1010 1010;VWMCD:
0x1020 1020;VWMCD:
0x1030 1030;VWMCD:
0x1040 1040;VWMCD:
0x1050 1050;VWMCD:
0x1060 1060;VWMCD:
0x1070 1070;VWMCD:
0x1080 1080;VWMCD:
0x1090 1090;VWMCD:
0x10A0 10A0;VWMCD:
0x10B0 10B0;VWMCD:
0x10C0 10C0;VWMCD:
0x10D0 10D0;VWMCD:
0x10E0 10E0;VWMCD:
0x10F0 10F0;VWMCD:
0x1100 1100;VWMCD:
V14.0.0 / 31.10.2019 8. Fehlerbehandlung 43
0x1110 1110;VWMCD:
0x1121 1121;VWMCD: Internal error: weak ptr lock failed; item type %s.
0x1122 1122;VWMCD: Operation not allowed; mux branch already added to multiplexer response parameter.
0x1125 1125;VWMCD: %s: JNI internal error. The enum value %d is out of range: Min:%d Max:%d.
0x1126 1126;VWMCD: JNI internal error. The int to enum cast is invalid. Int value %d cannot be mapped to a valid enum.
0x1127 1127;VWMCD: %s: JNI internal error. The given value %s exceeds the bounds min: %s and max: %s for the datatype %s.
0x1140 1140;VWMCD: <executeSync> not allowed for communication primitives with runtime mode eCYCLIC or attribute IS-MULTIPLE. Use
<excuteAsync> instead. Failed communication primitive: %s.
0x1151 1151;VWMCD: Not able to set the transmission mode <%s> because there is no request found on service <%s>. The current transmission
mode is <%s>.
0x1152 1152;VWMCD: Not able to set the transmission mode <%s> because there is no positive response found on service <%s>. The current
transmission mode is <%s>.
0x1160 1160;VWMCD:
0x1170 1170;VWMCD: Communication primitive insertion failed - logical link queue is full. Maximum number of queued items: %u.
0x1180 1180;VWMCD:
0x1190 1190;VWMCD:
0x11A0 11A0;VWMCD:
0x11B0 11B0;VWMCD:
0x11C0 11C0;VWMCD:
0x11D0 11D0;VWMCD:
0x1200 1200;VWMCD: Action not allowed for collections with field parameter parent: %s. Parent type %s, parent name %s, item name %s.
0x1201 1201;VWMCD: The parameter %s is already contained in the list of DDLID parameters.
0x1202 1202;VWMCD: Failed to resolve short name path %s by single param algorithm: the runtime parameter %s is of type eFIELD.
0x1210 1210;VWMCD: The semantic attribute %s is not unique, i.e. the current location contains zero or more than one item with this semantic.
0x1220 1220;VWMCD: Action not allowed in activity state eACTIVITY_SUSPENDED: %s. Expected state: %s.
0x1221 1221;VWMCD: Action not allowed in activity state eACTIVITY_SUSPENDED: %s. Expected states: eACTIVITY_IDLE or
eACTIVITY_RUNNING.
0x1230 1230;VWMCD: Action not allowed in activity state eACTIVITY_IDLE: %s. Expected state: %s.
0x1231 1231;VWMCD: Action not allowed in activity state eACTIVITY_IDLE: %s. Expected states: eACTIVITY_SUSPENDED or
eACTIVITY_RUNNING.
0x1240 1240;VWMCD: Action not allowed in activity state eACTIVITY_RUNNING: %s. Expected state: %s.
0x1241 1241;VWMCD: Action not allowed in activity state eACTIVITY_RUNNING: %s. Expected states: eACTIVITY_IDLE or
eACTIVITY_SUSPENDED.
0x1250 1250;VWMCD:
0x1260 1260;VWMCD:
0x1270 1270;VWMCD:
0x1280 1280;VWMCD: Event not allowed in logical link state eCOMMUNICATION: %s.
0x1281 1281;VWMCD: Action not allowed in logical link state eCOMMUNICATION: %s.
0x1282 1282;VWMCD: Action not allowed in logical link state eCOMMUNICATION: %s. Expected state: %s.
44 8. Fehlerbehandlung V14.0.0 / 31.10.2019
0x1283 1283;VWMCD: Action not allowed in logical link state eCOMMUNICATION: %s. Expected states: %s or %s.
0x1290 1290;VWMCD: Event not allowed in logical link state eCREATED: %s.
0x1291 1291;VWMCD: Action not allowed in logical link state eCREATED: %s.
0x1292 1292;VWMCD: Action not allowed in logical link state eCREATED: %s. Expected state: %s.
0x1293 1293;VWMCD: Action not allowed in logical link state eCREATED: %s. Expected states: %s or %s.
0x12A0 12A0;VWMCD: Event not allowed in logical link state eOFFLINE: %s.
0x12A1 12A1;VWMCD: Action not allowed in logical link state eOFFLINE: %s.
0x12A2 12A2;VWMCD: Action not allowed in logical link state eOFFLINE: %s. Expected state: %s.
0x12A3 12A3;VWMCD: Action not allowed in logical link state eOFFLINE: %s. Expected states: %s or %s.
0x12B0 12B0;VWMCD: Event not allowed in logical link state eONLINE: %s.
0x12B1 12B1;VWMCD: Action not allowed in logical link state eONLINE: %s.
0x12B2 12B2;VWMCD: Action not allowed in logical link state eONLINE: %s. Expected state: %s.
0x12B3 12B3;VWMCD: Action not allowed in logical link state eONLINE: %s. Expected states: %s or %s.
0x12C0 12C0;VWMCD:
0x12D0 12D0;VWMCD:
0x12E0 12E0;VWMCD: Action not allowed in service state ePENDING: %s. Expected state: eIDLE. Failed communication primitive: %s.
0x12F0 12F0;VWMCD:
0x1301 1301;VWMCD: Action not allowed in system state eDBPROJECT_CONFIGURATION: %s. Expected state: %s.
0x1302 1302;VWMCD: Action not allowed in system state eDBPROJECT_CONFIGURATION: %s. Expected states: %s or %s.
0x1303 1303;VWMCD: Action not allowed in system state eDBPROJECT_CONFIGURATION: %s. Active project: %s; project to select: %s.
0x1311 1311;VWMCD: Action not allowed in system state eINITIALIZED: %s. Expected state: %s.
0x1312 1312;VWMCD: Action not allowed in system state eINITIALIZED: %s. Expected states: %s or %s.
0x1321 1321;VWMCD: Action not allowed in system state eLOGICALLY_CONNECTED: %s. Expected state: %s.
0x1322 1322;VWMCD: Action not allowed in system state eLOGICALLY_CONNECTED: %s. Expected states: %s or %s.
0x1331 1331;VWMCD: Action not allowed in system state ePROJECT_SELECTED: %s. Expected state: %s.
0x1332 1332;VWMCD: Action not allowed in system state ePROJECT_SELECTED: %s. Expected states: %s or %s.
0x1340 1340;VWMCD:
0x1350 1350;VWMCD:
0x1360 1360;VWMCD:
0x1370 1370;VWMCD:
0x1380 1380;VWMCD:
0x1390 1390;VWMCD:
0x13A0 13A0;VWMCD:
0x13C0 13C0;VWMCD: <executeAsync> not allowed for communication primitives with repetition mode eREPEATED. Use <startRepetition> instead.
Failed communication primitive: %s.
0x13C1 13C1;VWMCD: <executeAsync> not allowed for control primitives. Use <executeSync> instead. Failed control primitive: %s.
0x13D0 13D0;VWMCD: Execution start of service %s failed with PDU error %s.
0x13D2 13D2;VWMCD: Execution of service <%s> failed with PDU error code %s, PDU extra error info 0x%08X %s (%s).
0x13D3 13D3;VWMCD: Execution start of service %s failed due to thread creation error %d.
0x13D4 13D4;VWMCD: Execution of service <%s> failed. No final result from job received.
0x13D5 13D5;VWMCD: Execution of service <%s> failed. Too many final results from job received.
0x13E0 13E0;VWMCD: Cancellation of service <%s> failed. PDUCancelComPrimitive returned PDU error %s.
0x13F0 13F0;VWMCD:
0x1400 1400;VWMCD:
0x1410 1410;VWMCD:
0x1420 1420;VWMCD: <executeSync> not allowed for communication primitives with repetition mode eREPEATED. Use <startRepetition> instead.
Failed communication primitive: %s.
0x1431 1431;VWMCD: Execution of service %s with addressing mode eFUNCTIONAL only allowed in FUNCTIONAL-GROUP layer.
0x1432 1432;VWMCD: Execution of service %s with addressing mode ePHYSICAL not allowed in FUNCTIONAL-GROUP layer.
0x1433 1433;VWMCD: Invalid call sequence: getFirstBinaryDataChunk was not called before.
0x1450 1450;VWMCD: Length key information not available for parameter %s.
0x1451 1451;VWMCD: Table key information not available for parameter %s.
0x1452 1452;VWMCD: DDLID information not available in the current response parameter collection.
0x1453 1453;VWMCD: No matching db item value found in the db item values of this option item with value %s.
0x1456 1456;VWMCD: DTC runtime parameter with name %s not found. Cannot determine DTC value for env data selection.
0x1457 1457;VWMCD: DTC runtime parameter with short name path %s not found. Cannot determine DTC value for env data selection.
0x1460 1460;VWMCD:
0x1470 1470;VWMCD: No matching DB response template found for the response PDU. See log file for details.
0x1471 1471;VWMCD: PDU delivered response with invalid UniqueResponseID. See log file for details.
0x1472 1472;VWMCD: PDU delivered response with invalid AcceptanceID. See log file for details.
0x1473 1473;VWMCD: PDU delivered response with AcceptanceId invalid for UniqueRespId. See log file for details.
0x1475 1475;VWMCD: The value of the read parameter <%s> with the data from the ECU is not valid.
0x1477 1477;VWMCD: The value of the read parameter <%s> has the wrong length %u (expected: %u, ConfigRecName: %s).
0x1478 1478;VWMCD: The read parameter <%s> is not found in all results of the diag com primitive.
0x1480 1480;VWMCD: \"setDynId\" is not allowed, if the DYN-ID parameter of the corresponding service is CODED-CONST.
0x1481 1481;VWMCD: Operation not possible: the server is locked by another client.
0x1490 1490;VWMCD: The server parameter cannot be set, while the server is locked.
0x14A0 14A0;VWMCD: Method %s not supported for parameter type %s. Expected: %s.
46 8. Fehlerbehandlung V14.0.0 / 31.10.2019
0x14B1 14B1;VWMCD: Unit conversion failed: No suitable unit is found in the given unit group %s.
0x14B2 14B2;VWMCD: Unit conversion failed: The units %s and %s do not have the same physical dimension.
0x14B4 14B4;VWMCD: Set unit group at logical link failed: The unit group with short name %s not found.
0x14B5 14B5;VWMCD: Set unit group at logical link failed: The unit group %s is not of category eCOUNTRY.
0x14B6 14B6;VWMCD: Performing <%s> not possible. An instance of <%s> was already created.
0x14B7 14B7;VWMCD: Action <%s> failed for input value %s. Internal conversion error! %s
0x1801 1801;VWMCD: File <%s> could not be opened! Check system configuration.
0x1803 1803;VWMCD: Conversion from enum to string failed - unknown enum value %d.
0x1804 1804;VWMCD: Conversion from string to enum failed - unknown enum string %s.
0x1806 1806;VWMCD: PDURegisterEventCallback at PDU module=%u, link=%d failed with PDU error %s.
0x1807 1807;VWMCD: Response object creation failed due to empty request or result data. Request data size: %d. Result data size: %d.
0x1808 1808;VWMCD: Dynamic cast failed. Source type: %s. Target type: %s.
0x1809 1809;VWMCD: Cannot determine multiplexer case. Invalid switch key %s.
0x180A 180A;VWMCD: Cannot determine environment data set. Invalid diagnostic trouble code %d.
0x1814 1814;VWMCD: Protocol parameter <%s> not set: PDUSetComParam failed with PDU error %s.
0x1815 1815;VWMCD: Protocol parameter <%s> not retrieved: PDUGetComParam failed with PDU error %s.
0x1817 1817;VWMCD: action not allowed for Protocol parameter <%s> - not a simple or complex root parameter.
0x1818 1818;VWMCD: ProtocolParameter %s: %sFIELD length %u exceeds maximum length %u of PDU ComParam
0x181A 181A;VWMCD: Data type mismatch for ProtocolParameter %s - MCD data type: %s, PDU data type: %s
0x181B 181B;VWMCD: ProtocolParameter %s: number of entries %u exceeds maximum number of entries %u provided with PDUGetComParam.
0x181C 181C;VWMCD: Cannot access further binary flash data - end of segment reached.
0x181E 181E;VWMCD: Binary flash data start address 0x%08X not found.
0x1825 1825;VWMCD: Action not allowed while logical command queue not empty: %s.
V14.0.0 / 31.10.2019 8. Fehlerbehandlung 47
0x1826 1826;VWMCD: Invalid PDU result item retrieved for communication primitive <%s>.
0x1827 1827;VWMCD: Element access failed in <%s> for communication primitive <%s>. Requested element: %s.
0x1828 1828;VWMCD: Set value as string failed for input type <%s>. Input is empty!
0x182A 182A;VWMCD: Action <%s> failed for input value %s. Internal conversion error!
0x182E 182E;VWMCD: Cannot find reference target: <%s> with short name <%s>!
0x1831 1831;VWMCD: A vehicle information with name %s has already been or is still selected!
0x1832 1832;VWMCD: Action <%s> failed. The parent DB template contains an invalid number of children %u. Expected: %u.
0x1834 1834;VWMCD: Extracting data from response PDU failed for parameter %s - empty (sub) PDU.
0x1835 1835;VWMCD: Extracting data from response PDU failed. Current PDU bytes: %s; current PDU size: %u; number of bytes to skip: %u.
0x1836 1836;VWMCD: Action <%s> failed. Invalid character %c; expected: %s.
0x1837 1837;VWMCD: Action <%s> not allowed for db location type <%s>.
0x183C 183C;VWMCD: Response (collection) creation failed due to empty result data.
0x183D 183D;VWMCD: The requested element %s is not available in the context of low-level (hex) services or error results.
0x1840 1840;VWMCD: Java job processor <%s> not found. Current class path option: %s.
0x1847 1847;VWMCD: Retrieved PDU event for unexpected PDU primitive handle %d. Expected handle: %d.
0x1849 1849;VWMCD: Invalid attempt to change (create(Coded)Value, set(Coded)Value) a parameter that is constant. Parameter : %s
0x184C 184C;VWMCD: Failed to accept unsupported protocol parameters for the logical link %s as they are system wide unaccepted.
0x184D 184D;VWMCD: At least one of the protocol parameters to be set is not supported by the PDU API. See log file for details.
0x1853 1853;VWMCD: Parameter <%s> is not a table struct and thus cannot take a table key reference.
48 8. Fehlerbehandlung V14.0.0 / 31.10.2019
0x1856 1856;VWMCD: Invalid byte length %u for parameter %s. Current (sub) PDU bytes: %s.
0x1857 1857;VWMCD: Invalid request parameter type: %s (expected types: %s, %s, %s, %s or %s).
0x1858 1858;VWMCD: Invalid response parameter type %s of parameter %s - expected types: %s, %s, %s, %s or %s.
0x185B 185B;VWMCD: Bit mask contains not allowed characters (other than 0 and 1).
0x185C 185C;VWMCD: PDU data extraction failed for parameter %s. Extracted value %s, expected value: %s.
0x185D 185D;VWMCD: Value creation not allowed for complex parameters. Parameter: %s.
0x185E 185E;VWMCD: Client changed the key of the structure parameter %s, but did not call getParameters before execution. Client has invalid
parameters.
0x185F 185F;VWMCD: Table key parameter value missing for structure parameter %s.
0x1862 1862;VWMCD: Database object could not be added to the repository (object id: %s, pool id: %s).
0x1867 1867;VWMCD: Service not valid for execution anymore, since in the meantime, a variant has been selected.
0x1868 1868;VWMCD: Logical link creation for base variant %s and variant %s failed: logical link already existing for this base variant.
0x186B 186B;VWMCD: The converter was not successful for file %s.
0x186D 186D;VWMCD: Method %s has been called before method %s for MCDDbLocation %s.
0x186E 186E;VWMCD: The logical link of base variant %s is not in an idle mode (must be eCREATED).
0x186F 186F;VWMCD: At least one of the logical links in scope of the base variant %s is not in an idle mode (eCREATED). Action not allowed: %s.
0x1871 1871;VWMCD: Protocol type %s not supported (yet). Please contact the MVCI server provider.
0x1873 1873;VWMCD: %s not allowed for the protocol type %s. Expected type: %s, %s, or %s.
0x1874 1874;VWMCD: %s failed. More than one db template with type %s found in database.
0x1880 1880;VWMCD: VciConnect failed with error %s for VCI address %s, port %d
0x1886 1886;VWMCD: connection to vehicle communication interface (VCI) lost; PDU error code %s, PDU extra error info 0x%08X %s (%s).
0x1888 1888;VWMCD: Error of vehicle communication interface (VCI); PDU error code %s, PDU extra error info 0x%08X %s (%s).
0x1889 1889;VWMCD: Error of logical link; PDU error code %s, PDU extra error info 0x%08X %s (%s).
V14.0.0 / 31.10.2019 8. Fehlerbehandlung 49
0x1890 1890;VWMCD: Error creating PDU expected responses for DiagComPrimitive / Parameter %s
0x1891 1891;VWMCD: PDUGetObjectId returned unknown ID or failed with PDU error %s for object %s, type %s
0x1892 1892;VWMCD: PDUIoCtrl has mismatch in OutputData for expected data type 0x%08X
0x1893 1893;VWMCD: PDUGetModuleIds delivered empty or invalid list of module data items
0x1894 1894;VWMCD: PDUCreateComLogicalLink failed with PDU error %s for logical link %s
0x1895 1895;VWMCD: PDUDestroyComLogicalLink failed with PDU error %s for logical link %s
0x1896 1896;VWMCD: PDUGetUniqueResponseIdTable failed with PDU error %s for logical link %s
0x1897 1897;VWMCD: PDUSetUniqueResponseIdTable failed with PDU error %s for logical link %s
0x189B 189B;VWMCD: failed trying to parse the PDU API root description file (RDF) - %s
0x189C 189C;VWMCD: could not find a PDU API with shortname %s in the PDU API root description file (RDF)
0x189D 189D;VWMCD: missing prefix 'file://' in the URI of the PDU API library with shortname %s in the PDU API root description file (RDF)
0x18A2 18A2;VWMCD: Physical vehicle link %s not available for link with access key %s.
0x18B5 18B5;VWMCD: The method execution is allowed only in case of inline flash data.
0x18C0 18C0;VWMCD: Invalid project selection or database format version file missing for project %s.
0x18C1 18C1;VWMCD: Database format version incompatibility: kernel version %s - project version %s.
0x18C2 18C2;VWMCD: Flash database format version incompatibility: kernel version %s - project version %s.
0x1900 1900;VWMCD: Unexpected PDU link state transition from PDU_CLLST_COM_STARTED to PDU_CLLST_OFFLINE; loss of TCP connection
probable.
0x1910 1910;VWMCD: The property [%s] cannot be set, because it is set to read only.
0x1911 1911;VWMCD: Not able to write the parameter value in the server parameter.
0x1912 1912;VWMCD: Not able to read section [%s] from file <%s>.
0x1913 1913;VWMCD: Not able to write one of the keys in section [%s] from file <%s>.
0x1914 1914;VWMCD: Not able to set property [%s] with value <%s> because the value is not in the list of valid values.
0x1915 1915;VWMCD: Expexted %u bytes to read from file but read %u from file <%s>.
0x1916 1916;VWMCD: The datafile is too long. Expected <%d> bytes of input data in file <%s>.
0x1917 1917;VWMCD: Expexted %u bytes to read, but there are %lu bytes to read from input data file <%s>.
0x1918 1918;VWMCD: Expexted %d bytes to read, but there are %lu bytes to read from input data file <%s>.
0x1919 1919;VWMCD: Invalid value on stream. Expexted %d, going to save %u.
0x1920 1920;VWMCD: Configuration item conversion coded value to physical value failed.
0x1922 1922;VWMCD: The configuration record value is invalid because not all read diag com primitives are executed or they are executed in the
wrong order.
0x1924 1924;VWMCD: No matching scale constraint for the coded value %s of parameter %s.
0x1925 1925;VWMCD: Cannot retrieve or compute any value for parameter %s --> scale constraint cannot be determined.
0x1930 1930;VWMCD: The matching request parameter <%s> is not allowed in a positive or negative response of a receive only service.
0x1931 1931;VWMCD: The receive only service <%s> contains a matching request parameter on a positive or negative response. %s
0x1932 1932;VWMCD: Checksum mismatch for flash record <%s>, expected: <%X> but was: <%X>.
0x1933 1933;VWMCD: Mismatch between read and specified number of data records, expected <%u> but was <%u>.
0x1934 1934;VWMCD: %s: The detected number of data bytes <%u> exceeds the allowed maximum <%d>. Record <%.15s...>.
0x1945 1945;VWMCD: The address range within the segment is not continuous.
0x1946 1946;VWMCD: The start address of the segment <%s> is out of all filtered address ranges.
0x1947 1947;VWMCD: The number of bytes within the segment <%s> is not equal to the compressed size.
0x1948 1948;VWMCD: Invalid flash record <%s>. Actual length of data field length: %u bytes; expected: %u bytes.
0x1949 1949;VWMCD: There is no internal constraint available for this parameter. Check the ODX data.
0x194E 194E;VWMCD: Invalid flash record <%s>. Byte count %u not sufficient for address field (%u byte(s)) and checksum (%u byte(s)).
0x194F 194F;VWMCD: Invalid flash record <%s>. Record length %u not sufficient. Cannot determine %s with length %u at position %u.
0x1990 1990;VWMCD: The Java job processor failed with an exception of type: InstantiationException.
0x1991 1991;VWMCD: The Java job processor failed with an exception of type: IllegalAccessException.
0x1992 1992;VWMCD: The Java job processor failed with an exception of type: ClassNotFoundException.
0x1993 1993;VWMCD: The Java job processor failed with an exception of type: LinkageError.
0x1994 1994;VWMCD: The Java job processor failed with an exception of type: NoSuchMethodException.
0x1995 1995;VWMCD: The Java job processor failed with an exception of type: NullPointerException.
0x1996 1996;VWMCD: The Java job processor failed with an exception of type: InvocationTargetException.
0x1A00 1A00;VWMCD: Retrieval of shared pointer from object repository failed - called in <%s>.
0x1C00 1C00;VWMCD: The VCI access layer is already prepared by the method %s.
0x1C01 1C01;VWMCD: The VCI access layer is not prepared by the method %s.
0x1C02 1C02;VWMCD: The VCI access layer is not prepared by the method %s, but by the method %s.
0x1C03 1C03;VWMCD: PDUGetResourceStatus failed with error %s for VCI handle %u and resource id %u.
0x1C06 1C06;VWMCD: PDUGetStatus failed with error %s for VCI handle %u.
0x1C07 1C07;VWMCD: Failed to map PDU status 0x%08X to MCDInterfaceStatus. Expected PDU status: PDU_MODST_READY (0x8060),
PDU_MODST_NOT_READY (0x8061), PDU_MODST_NOT_AVAIL (0x8062) or PDU_MODST_AVAIL (0x8063)
0x1C08 1C08;VWMCD: PDUGetTimestamp failed with error %s for VCI handle %u.
0x1C0D 1C0D;VWMCD: Interface %s (module handle %u, module type id %u) not found in pool of interfaces.
0x2000 2000;VWMCD:
0x2010 2010;VWMCD:
0x2020 2020;VWMCD:
0x2030 2030;VWMCD:
0x2040 2040;VWMCD:
0x2050 2050;VWMCD:
V14.0.0 / 31.10.2019 8. Fehlerbehandlung 51
0x2065 2065;VWMCD: The database object can not be retrieved by short name (the collection of item short names is empty).
0x2070 2070;VWMCD:
0x2080 2080;VWMCD: For static MCDDynIdDefineComPrimitive objects it is not allowed to modify the parameter list.
0x20A0 20A0;VWMCD:
0x20B5 20B5;VWMCD: The given location does not match the existing location context.
0x20C0 20C0;VWMCD:
0x20D0 20D0;VWMCD:
0x20F0 20F0;VWMCD: The creation of a diagnostic communication primitive by type is not allowed for a type %s.
0x2100 2100;VWMCD:
0x2111 2111;VWMCD: Invalid value data type %s. Expected: simple data type.
0x2114 2114;VWMCD: Pattern matching failed due to invalid parameter type %s (parameter short name %s). Expected: %s (parameter short name
%s).
0x2115 2115;VWMCD: Pattern matching failed due to different numbers of parameters. Expected: %u (parameter short name %s); actual: %u
(parameter short name %s).
0x2116 2116;VWMCD: Pattern matching failed due to different numbers of parameters. Expected: %u ; actual: %u .
0x2120 2120;VWMCD:
0x2140 2140;VWMCD: Invalid parameter type %s. Expected: field parameter type eEND_OF_PDU.
0x2141 2141;VWMCD: Invalid parameter type %s. Expected: field parameter type eSTRUCT_FIELD.
52 8. Fehlerbehandlung V14.0.0 / 31.10.2019
0x2145 2145;VWMCD: Item with the given name (%s) not found in the database collection.
0x2146 2146;VWMCD: The parameter <%s> to fill is not found in the diag com <%s> of config record <%s>. Check the ODX data: param-snref of diag
com data connector must match one request/response param of the referenced service.
0x2147 2147;VWMCD: The request parameter with the given short name %s is not found in the request %s.
0x2148 2148;VWMCD: The request parameter with the given short name path %s is not found in the request %s.
0x2150 2150;VWMCD:
0x2170 2170;VWMCD:
0x2182 2182;VWMCD: DDLID value %s not in the list of supported local IDs.
0x2184 2184;VWMCD: DTC level (%u) out of range: expected range is 1...255.
0x2187 2187;VWMCD: Filter mask / pattern value out of range. Maximum no of bytes: %u; actual: %u.
0x2188 2188;VWMCD: JNI Failure: Input string contains invalid non-ASCII characters.
0x2190 2190;VWMCD:
0x21A3 21A3;VWMCD: Item with the given key (%s) not found in the database collection.
0x21A4 21A4;VWMCD: Try to set invalid value <%s> for texttable parameter. Check list of valid texttable values.
0x21B1 21B1;VWMCD: The value (%s) in table key parameter (%s) does not match the predefined const value. Error while trying to find table row for
parameter (%s).
0x21B4 21B4;VWMCD: Diag. com. primitive with the connector semantic %s not found.
0x21BF 21BF;VWMCD: The given parameter does not have a method getShortName.
0x21C4 21C4;VWMCD: The given parameter with shortname %s already exists in the collection.
0x21D4 21D4;VWMCD: The logical link %s is not from the current selected VehicleInformation &s.
0x21E0 21E0;VWMCD: Monitoring: Message filtering not supported. Method not allowed: %s.
0x21F1 21F1;VWMCD: Configuration record item value update by config item %s failed: %s.
0x3002 3002;VWMCD: Access to database element %s not allowed for object of type %s - parameter %s.
0x3003 3003;VWMCD: Access to database element failed - %s not set for %s (%s).
0x3004 3004;VWMCD: Not enough database elements for computing code conversion: No program code available.
0x3005 3005;VWMCD: Not enough database elements for computing code conversion: Neither code file nor byte stream available.
0x3006 3006;VWMCD: Not enough database elements for computing code conversion: No entry point available.
0x3007 3007;VWMCD: Not enough database elements for computing code conversion: Open class file %s failed.
0x3008 3008;VWMCD: Not enough database elements for computing code conversion: Read from class file %s failed.
0x3009 3009;VWMCD: Not enough database elements for computing code conversion: No syntax available, expected JAVA, JAR or CLASS.
0x300A 300A;VWMCD: Cannot determine suitable location context for pool id %s.
V14.0.0 / 31.10.2019 8. Fehlerbehandlung 53
0x3011 3011;VWMCD: Expected exactly 1 matching file for MCDDbDataRecord for file <%s> but found %u matching file(s).
0x3012 3012;VWMCD: At least the semantic %s is set for more than one MCDDbEcuStateChart, but duplicates are not allowed.
0x3013 3013;VWMCD: EnvData parameter %s cannot be stored; DTC value %d not unique in corresponding envDataDesc.
0x3014 3014;VWMCD: Short name reference %s (%s) cannot be resolved in current context %s (%s).
0x3015 3015;VWMCD: ALL-VALUE EnvData parameter %s cannot be stored in EnvDataDesc %s; an ALL-VALUE EnvData is already set.
0x3016 3016;VWMCD: The current location contains more than one %s.
0x3018 3018;VWMCD: Element %s removed from database and marked as invalid. Action not allowed: %s.
0x3020 3020;VWMCD:
0x3040 3040;VWMCD:
0x3050 3050;VWMCD:
0x3060 3060;VWMCD:
0x3070 3070;VWMCD:
0x3080 3080;VWMCD:
0x3084 3084;VWMCD: No physical default value available for option item %s.
0x3085 3085;VWMCD: The value of configuration record %s does not contain enough data for preparation of write diag com primitive %s. Expected
number of bytes: %d. Actual: %d.
0x3090 3090;VWMCD: The method is not allowed for this value data type %s; expected type: %s.
0x3800 3800;VWMCD: Reading data for (object id: %s, pool id: %s) from database file failed: expected no. of bytes: %d; actual no. of bytes: %d.
0x3902 3902;VWMCD: Item with the given index (%d) not found in the database collection.
0x3903 3903;VWMCD: Item with the given type (%s) not found in the database collection.
0x3904 3904;VWMCD: Tried to insert invalid (empty) database reference object into reference collection.
0x3906 3906;VWMCD: Reference object does not have any valid object type.
0x3907 3907;VWMCD: No item available in the reference collection. Item %s not found.
0x3908 3908;VWMCD: Reference with the given short name (%s) not found in the reference collection.
0x3909 3909;VWMCD: Reference with the given index (%d) not found in the reference collection.
0x390A 390A;VWMCD: Reference with the given type not found in the reference collection.
0x390B 390B;VWMCD: Reference with the given attribute (%s) not found in the reference collection.
0x390D 390D;VWMCD: Load object from database failed; object id: %s, pool id: %s.
0x390E 390E;VWMCD: Empty object stream, load object from database failed; object id: %s, pool id: %s.
0x390F 390F;VWMCD: Database object cannot be retrieved: pool id or object id not available.
0x3910 3910;VWMCD: Database object could not be retrieved (object id: %s, pool id: %s).
0x3911 3911;VWMCD: Database object could not be found in the repository (object id: %s, pool id: %s).
0x3919 3919;VWMCD: Validity type of scale constraint not valid: %s (expected: %s, %s, %s or %s).
0x391A 391A;VWMCD: Response doesn't match any given response in runtime database.
0x391C 391C;VWMCD: Access to database element failed - DynDefinedSpecTable for the definition mode %s not set.
0x391D 391D;VWMCD: Access to database element failed - DynDefinedSpecTable with short name %s not set.
0x391E 391E;VWMCD: Access to database element failed - no supported dynamic ids for definition mode %s available.
0x3921 3921;VWMCD: The intel flash data format is currently not supported.
0x3922 3922;VWMCD: Reference with the given data id (%s) not found in the reference collection.
0x3923 3923;VWMCD: Reference with the given key (%s) not found in the reference collection.
0x3924 3924;VWMCD: No location found that matches the access key string %s.
0x3925 3925;VWMCD: Reference with the given configuration id (%s) not found in the reference collection.
0x3926 3926;VWMCD: Reference with the given semantic (%s) not found in the reference collection.
0x3927 3927;VWMCD: Database object could not be retrieved (object id: %s, pool id: %s); stdexception: %s.
0x3928 3928;VWMCD: The method is not allowed for the parameter with data object prop <%s>. Check the ODX data.
0x392B 392B;VWMCD: No ProtocolParameterSet available for location %s. Possibly no PROT-STACK-SNREF set in protocol %s and use of default
VIT.
0x392C 392C;VWMCD: Illegal comparam reference in diaglayer %s. Comparam %s is not valid in this layer.
0x392D 392D;VWMCD: No valid protocol stack set for location %s, neither at the protocol nor at a logical link suitable for this location. Check the ODX
data.
0x392F 392F;VWMCD: Creation of VI(S) control primitive failed due to lack of variant patterns for layer %s.
0x4000 4000;VWMCD: PDU connection failure. %s failed with PDU error %s.
0x4010 4010;VWMCD:
0x4020 4020;VWMCD: PDU disconnection failure. %s failed with PDU error %s.
0x4030 4030;VWMCD:
0x4040 4040;VWMCD: Service execution failed: One of the ECUs didn't respond.
0x5000 5000;VWMCD: Action not allowed in logical link lock state eLOCKED_BY_ANOTHER_OBJECT: %s. Expected state: %s.
0x5001 5001;VWMCD: Action not allowed in logical link lock state eLOCKED_BY_ANOTHER_OBJECT: %s. Expected states:
eLOCKED_BY_THIS_OBJECT or eUNLOCKED.
0x5010 5010;VWMCD: Action not allowed in logical link lock state eLOCKED_BY_THIS_OBJECT: %s. Expected state: %s.
0x5011 5011;VWMCD: Action not allowed in logical link lock state eLOCKED_BY_THIS_OBJECT: %s. Expected states:
eLOCKED_BY_ANOTHER_OBJECT or eUNLOCKED.
0x5020 5020;VWMCD: Action not allowed in logical link lock state eUNLOCKED: %s. Expected state: %s.
0x5021 5021;VWMCD: Action not allowed in logical link lock state eUNLOCKED: %s. Expected states: eLOCKED_BY_THIS_OBJECT or
eLOCKED_BY_ANOTHER_OBJECT.
0x5030 5030;VWMCD: Action not allowed in system lock state eLOCKED_BY_ANOTHER_OBJECT: %s. Expected state: %s.
V14.0.0 / 31.10.2019 8. Fehlerbehandlung 55
0x5031 5031;VWMCD: Action not allowed in system lock state eLOCKED_BY_ANOTHER_OBJECT: %s. Expected states:
eLOCKED_BY_THIS_OBJECT or eUNLOCKED.
0x5040 5040;VWMCD: Action not allowed in system lock state eLOCKED_BY_THIS_OBJECT: %s. Expected state: %s.
0x5041 5041;VWMCD: Action not allowed in system lock state eLOCKED_BY_THIS_OBJECT: %s. Expected states:
eLOCKED_BY_ANOTHER_OBJECT or eUNLOCKED.
0x5050 5050;VWMCD: Action not allowed in system lock state eUNLOCKED: %s. Expected state: %s.
0x5051 5051;VWMCD: Action not allowed in system lock state eUNLOCKED: %s. Expected states: eLOCKED_BY_THIS_OBJECT or
eLOCKED_BY_ANOTHER_OBJECT.
0x5060 5060;VWMCD: Action not allowed: called object is locked by another client.
0x6001 6001;VWMCD: Not able to encode the value from parameter <%s>.
0x6020 6020;VWMCD: Interface %s not supported (yet). Please contact the MVCI server provider.
0x6030 6030;VWMCD:
0x6040 6040;VWMCD: Method %s not supported (yet). Please contact the MVCI server provider.
0x6041 6041;VWMCD: %s not supported (yet). Please contact the MVCI server provider.
0x6050 6050;VWMCD:
0x6060 6060;VWMCD:
0x6080 6080;VWMCD:
0x6090 6090;VWMCD:
0x6901 6901;VWMCD: No valid type to create MCDValue object: %s (expected types: %s, ..., %s).
0x6902 6902;VWMCD: No valid diagnostic coded type for request: %s (expected types: %s, %s, %s or %s).
0x6903 6903;VWMCD: No valid diagnostic coded type for response: %s (expected types: %s, %s or %s).
0x6904 6904;VWMCD: No valid encoding type to create encoding object: %s (expected types: %s, ..., %s).
0x690B 690B;VWMCD: No valid data type: %s (expected types: %s, %s, %s, %s, %s or %s).
0x690C 690C;VWMCD: No valid data type: %s (expected types: %s, %s, %s, %s, %s, %s or %s).
0x690D 690D;VWMCD: No valid internal base data type: expected types: %s, %s, %s, %s, %s, %s, %s or %s.
0x690E 690E;VWMCD: No valid physical base data type: expected types: %s, %s, %s, %s, %s or %s.
0x6913 6913;VWMCD: Internal value (%s) of parameter <%s> out of internal constraint limits (%s, %s).
56 9. VIT-Generierung V14.0.0 / 31.10.2019
0x6914 6914;VWMCD: Internal value (%s) of parameter <%s> is not valid. Scale constraint <%s> with validity <%s> has been violated.
0x6916 6916;VWMCD: Calculation from physical to internal is not allowed for rational functions.
0x691A 691A;VWMCD: Cannot get JNI Java environment for current thread; retrieved JNI error %d.
0x691C 691C;VWMCD: Invalid parameter length. Parameter %s - (sub) PDU bytes %s - byte size %u - expected byte size %u.
0x6920 6920;VWMCD: Invalid parameter length (LEADING_LENGTH_INFO_TYPE). Parameter: %s - (sub) PDU length: %u bits - leading info length:
%u bits - parameter length (derived from leading info) %u bits.
0x6921 6921;VWMCD: Invalid PDU length. DB response template %s: byte size %u - response PDU byte size %u.
0x6922 6922;VWMCD: Invalid basic structure parameter <%s> with length: %u byte(s) - expected length: <= %u byte(s), see BYTE-SIZE element in
ODX data.
0x6924 6924;VWMCD: The parameter value cannot be interpreted as a byte field with <%s> encoding.
0x6930 6930;VWMCD: ODX standard version of runtime data project not supported. Found %s - expected %s.
9 VIT-Generierung
9.1 Default-VIT
9.1.1 Motivation
9.1.2 Voraussetzungen
MCD-Schnittstelle
• MCDDbVehicleInformation(s)
• MCDDbVehicleConnector(s)
• MCDDbVehicleConnectorPin(s)
• MCDDbPhysicalVehicleLinkOrInterface(s)
• MCDPhysicalLinkOrInterfaceType
• MCDDbLogicalLink(s)
• MCDDbLocation(s)
ODX VEHICLE-INFORMATION-SPEC
58 9. VIT-Generierung V14.0.0 / 31.10.2019
Darüber hinaus werden die PARENT-Beziehungen der einzelnen ODX DIAG-LAYER zur
VIT-Generierung genutzt.
Generierbare VIT-Informationen
Nicht generierbar sind hingegen die Connector- und Pin-Daten sowie die Informationen zum
Physical Link. Sie müssen anderweitig bereitgestellt und vom MCD-Kernel im Zuge der VIT-
Generierung verarbeitet werden. Dies geschieht mit Hilfe der MCD3D_PINS.INI, die hier
auszugsweise aufgeführt ist:
##############################################################################################
#
# Configuration file for the VW-MCD default VIT
#
# When using the default VIT, the MCD-Kernel has to retrieve some information
# usually contained in an ODX vehicle information spec from this file.
#
# For each protocol of the current project there has to be at least one data set
# containing the protocol short name, the bus type and up to four pins described
# with the pin value and pin type.
#
# MCD3D_BusType: ODX PHYSICAL-LINK-TYPE of the PROT-STACK referenced by the PROTOCOL
# MCD3D_ProtocolName: SHORT-NAME of the ODX PROTOCOL
# MCD3D_Pin_Type: one of the ODX PIN-TYPE enumeration values
# (HI, LOW, K, L, TX, RX, PLUS, MINUS, SINGLE)
# MCD3D_Pin_Value: pin number depending on the hardware
#
# Example:
#
# [PROTOCOL]
# MCD3D_BusType=ISO_11898_2_DWCAN
# MCD3D_ProtocolName=UDS_CAN_B
#
# [PIN1]
# MCD3D_Pin_Type=HI
# MCD3D_Pin_Value=1
#
# [PIN2]
# MCD3D_Pin_Type=LOW
# MCD3D_Pin_Value=2
#
##############################################################################################
[PROTOCOL]
MCD3D_BusType=ISO_11898_2_DWCAN
MCD3D_ProtocolName=UDS_CAN_B
[PIN1]
MCD3D_Pin_Type=HI
MCD3D_Pin_Value=1
60 9. VIT-Generierung V14.0.0 / 31.10.2019
[PIN2]
MCD3D_Pin_Type=LOW
MCD3D_Pin_Value=2
[PROTOCOL]
MCD3D_BusType=ISO_11898_2_DWCAN
MCD3D_ProtocolName=UDS_CAN_C
[PIN1]
MCD3D_Pin_Type=HI
MCD3D_Pin_Value=1
[PIN2]
MCD3D_Pin_Type=LOW
MCD3D_Pin_Value=2
[PROTOCOL]
MCD3D_BusType=ISO_11898_2_DWCAN
MCD3D_ProtocolName=UDS_CAN_D
[PIN1]
MCD3D_Pin_Type=HI
MCD3D_Pin_Value=1
[PIN2]
MCD3D_Pin_Type=LOW
MCD3D_Pin_Value=2
[PROTOCOL]
MCD3D_BusType=ISO_11898_2_DWCAN
MCD3D_ProtocolName=KWP_CAN_B
[PIN1]
MCD3D_Pin_Type=HI
MCD3D_Pin_Value=1
[PIN2]
MCD3D_Pin_Type=LOW
MCD3D_Pin_Value=2
[PROTOCOL]
MCD3D_BusType=ISO_11898_2_DWCAN
MCD3D_ProtocolName=KWP_CAN_C
[PIN1]
MCD3D_Pin_Type=HI
MCD3D_Pin_Value=1
[PIN2]
MCD3D_Pin_Type=LOW
MCD3D_Pin_Value=2
[PROTOCOL]
MCD3D_BusType=ISO_11898_2_DWCAN
MCD3D_ProtocolName=KWP_CAN_D
[PIN1]
MCD3D_Pin_Type=HI
MCD3D_Pin_Value=1
V14.0.0 / 31.10.2019 9. VIT-Generierung 61
[PIN2]
MCD3D_Pin_Type=LOW
MCD3D_Pin_Value=2
9.1.3 Vorgehensweise
Man beachte:
9.2 Smart-VIT
9.2.1 Motivation
Eine in der Praxis vom obigen Szenario abweichende, aber ebenso gängige
Vorgehensweise bei der Erstellung und Verteilung von Steuergerätebedatungen ist, pro
Steuergerät ein PDX zu erstellen, das neben den tatsächlichen Steuergeräteinformationen
62 9. VIT-Generierung V14.0.0 / 31.10.2019
auch eine Vehicle Information Table mit den Logical Links für genau dieses Steuergerät
enthält.
Der Wechsel auf ein anderes Steuergerät bedeutet also auch ein Wechsel auf eine andere
MCDDbVehicleInformation.
Neben den bedateten VITs erstellt der MCD-Kernel auf Basis der gegebenen Layer und
Beziehungen zwischen den Layern eine sogenannte Default-VIT (siehe oben), die alle
potenziellen Logical Links enthält. In der Regel werden dies deutlich mehr Links sein, als in
der Praxis tatsächlich von Bedeutung und nutzbar sind.
Die sogenannte „Smart VIT“ bietet nun einen Kompromiss zwischen der einen Default-VIT
und den zahlreichen Steuergeräte-VITs, indem sie die Informationen der einzelnen
Steuergeräte-VITs zu einer MCDDbVehicleInformation zusammenführt. Man kann also ohne
Wechsel der MCDDbVehicleInformation mit allen Steuergeräten arbeiten, sofern für sie eine
Einzel-VIT existiert.
9.2.2 Voraussetzungen
Dabei muss entschieden werden können, ob Objekte gleich sind oder nicht, da gleiche
Objekte nur einmal in den entsprechenden Kollektionen auftauchen dürfen.
Als Kriterium für die Gleichheit wird ausschließlich die Namensgleichheit betrachtet.
Enthalten also zwei MCDDbVehicleInformation-Objekte jeweils einen
MCDDbVehicleConnector mit dem Shortname „VCONN_CAN_D“, so muss angenommen
werden können, dass die Elemente auch inhaltlich gleich sind, damit nur eines dieser
Elemente in der Intelligenten VIT abgespeichert werden kann. Dies gilt für alle Elemente
einer VIT.
Man beachte, dass diese Forderung restriktiver ist als das, was durch ODX 2.2 vorgegeben
ist. Hier muss zum Beispiel der Name eines VEHICLE-CONNECTORs nur bis zur Grenze
VEHICLE-INFORMATION eindeutig sein.
9.2.3 Vorgehensweise
Beim Zusammenführen der VITs werden bezüglich des Namens doppelte Elemente
aussortiert. Dabei wird zuvor überprüft, ob die Elemente tatsächlich auch inhaltlich gleich
waren und gegebenenfalls eine Warnung protokolliert. Es ist nicht sinnvoll, gleichnamige,
aber inhaltlich unterschiedliche Objekte doch doppelt zu bewahren, da die Elemente
V14.0.0 / 31.10.2019 9. VIT-Generierung 63
umbenannt werden müssten, und damit unter Umständen bestehende Referenzen auf diese
Objekte zerstört würden.
Wenn die Vorgabe nicht beachtet wurde und dadurch tatsächlich Elemente anderen Inhalts
aussortiert wurden, kann es zur Laufzeit beim Arbeiten über diese Smart VIT bei diversen
Gelegenheiten zu unerwartetem Verhalten oder MCDExceptions kommen.
64 10. Schnittstellen V14.0.0 / 31.10.2019
10 Schnittstellen
10.1 C++
Die Integration des MCD-Kernels in eine C++-Applikation erfolgt über die mitgelieferten API-
Header und Import-Bibliotheken.
erzeugt.
10.2 Java
Die Anbindung des MCD-Kernels an eine Java-Applikation erfolgt über die Jars
ASAMJavaInterfaces.jar (Interfaces) und McdKernel.jar (Implementierung).
erzeugt.
10.3 DCOM
Der MCD-Kernel bietet grundsätzlich eine Implementierung des Standards ASAM MCD-3D
3.0.0. In einigen Punkten weicht er jedoch von diesem Standard ab, weil einzelne Methoden
oder auch ganze Bereiche nicht komplett standardkonform implementiert werden können,
weil einzelne Bereiche noch nicht oder nicht vollständig implementiert sind und weil der
MCD-Kernel um proprietäre Methoden erweitert worden ist.
Die folgenden Methoden des Standards lassen sich nicht hundertprozentig standardkonform
implementieren:
• MCDDataPrimitive::executeAsync
Grundsätzlich ist diese zentrale Methode des MCD-Kernels natürlich nach Standard
implementiert und funktionstüchtig. Lediglich kann nicht geprüft werden, ob der Dienst in
einem Job oder außerhalb eines Jobs ausgeführt werden soll. In einem Job ist gemäß
Standard die asynchrone Dienstausführung nicht erlaubt und mit einer
MCDProgramViolationException (eRT_SERVICE_ASYNC_NOT_ALLOWED) zu
quittieren. Der MCD-Kernel hat jedoch keine Möglichkeit, gesichert festzustellen, ob ein
Dienst aus einem Job heraus gestartet wurde oder nicht, insbesondere vor dem
Hintergrund, dass mehrere parallele Threads auf demselben MCDLogicalLink Dienste
einsteuern und Jobs selbst auch asynchron gestartet sein können. Daher kann die vom
Standard geforderte Überprüfung nicht stattfinden, und es ist in der Verantwortung des
Job-Entwicklers, für eine standardkonforme Dienstausführung zu sorgen.
• MCDDbTableParameter::isApiExecutable, MCDDbDiagComPrimitive::isApiExecutable
Die Methoden selbst sind sehr wohl implementierbar und auch implementiert, da sie ja
lediglich ODX-Informationen transportieren. Die mit diesen Methoden verbundene
Semantik ist jedoch aus denselben Gründen nicht sicher zu stellen, die beim
„executeAsync“ aufgeführt sind. Laut Standard soll „isApiExecutable“ nur bei Diensten
berücksichtigt werden, die nicht in Jobs ausgeführt werden. Wie oben erläutert, kann der
Kontext der Dienstausführung allerdings nicht hundertprozentig getroffen werden. Die
Annahme ist nun, dass, wenn auf dem relevanten MCDLogicalLink nun ein Job läuft und
ein weiterer Dienst synchron ausgeführt werden soll, dies im Job geschieht und die
Dienstausführung auch erlaubt ist, wenn „isApiExecutable“ den Wert „false“ liefert. Diese
Annahme kann falsch sein, ist aber unkritischer als das unzulässige Verhindern der
Ausführung eines Dienstes, der nicht im Job gestartet wird.
• Generisches Busmonitoring
• MCDDbDataFormat::getUserDefinedFormat
66 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
Gemäß Standard soll die Methode den Wert des ODX-Attributs USER-SELECTION
liefern. Dieses Attribut ist jedoch nur am ODX-Element DATAFORMAT verfügbar, das
wiederum nur im Flash-Kontext (FLASHDATA) existiert, nicht aber am DATA-RECORD.
Der bietet lediglich das Attribut DATAFORMAT-SELECTION, das nicht an der MCD-3D
Schnittstelle abfragbar ist. Insofern kann die Methode nicht implementiert werden.
Manche Methodendefinitionen des Standards weisen gewisse Mängel auf, die sich nachteilig
auf die Applikationen auswirken, so dass bewusst vom Standard abgewichen wird, obwohl
eine standardkonforme Implementierung möglich wäre.
• MCDInterface::getStatus
Das ist insofern nicht sinnvoll, als getStatus ja genau den Verbindungsstatus liefern soll.
Es können die Werte eAVAILABLE, eNOT_AVAILABLE, eREADY und eNOT_READY
angenommen werden. Ihnen sind seitens der D-PDU-API die Zustände
PDU_MODST_AVAIL, PDU_MODST_NOT_AVAIL, PDU_MODST_READY und
PDU_MODST_NOT_READY zugeordnet.
Die aktuelle Implementierung quittiert den Aufruf der Methode mit einer
MCDProgramViolationException und Fehlernummern eRT_PDU_API_CALL_FAILED
und eVS_RT_PDU_GET_STATUS_ERROR, wenn der interne Aufruf von PDUGetStatus
einen Fehler geliefert hat.
• MCDEventHandler::onLinkActivityStateIdle/Running
Gemäß Standard soll jeder Statuswechsel der Logical Link Queue von eACTITY_IDLE
nach eACTIVITY_RUNNING und zurück mit einem Aufruf des entsprechenden Callbacks
registrierter MCDEventHandler-Implementierungen quittiert werden. Dies ist nicht
sinnvoll, da diagnoselastige Applikationen, bei denen der Status ständig wechselt,
dadurch vollkommen ausgebremst würden. Darüber hinaus ist der aktuelle Status nur
eine Momentaufnahme und daher nur in ganz speziellen Situationen für eine Applikation
von Interesse. In diesen Fällen kann er am MCDLogicalLink aktiv erfragt werden.
• MCDInterface::getCurrentDbInterfaceCable
Der Methodenbeschreibung gemäß Standard fehlt die Angabe einer sinnvollen Exception
für den Fall, dass der Aufruf der D-PDU API Methode PDUIoCtl fehlschlägt. Analog zu
anderen Methoden, die intern einen Aufruf an die D-PDU API absetzen, kann die aktuelle
Implementierung zusätzlich zu den im Standard angegebenen Exceptions eine
MCDProgramViolationException mit dem Fehlerwert eRT_PDU_API_CALL_FAILED
werfen.
• MCDProject::createLogicalLinkByAccessKeyAndInterface
Im Falle eines Aufrufs mit einem ungültigen Access Key soll laut Standard eine
MCDProgramViolationException mit Fehlerwert ePAR_DB_INVALID_ACCESS_KEY
geworfen werden. „ePAR_...“-Fehlerwerte werden aber normalerweise über eine
MCDParameterizationException transportiert, was in der aktuellen Implementierung auch
für diese Methode so gehandhabt wird. Daher weicht die Fehlerbehandlung an dieser
Stelle vom nicht ganz sauberen Standard ab.
• MCDConfigurationRecord::loadCodingData
Der Methodenbeschreibung gemäß Standard fehlt die Angabe einer sinnvollen Exception
für den Fall, dass dem Configuration Record noch kein MCDDbDataRecord über
setConfigurationRecordByDbObject zugewiesen wurde. Die aktuelle Implementierung
sieht für diesen Fall eine zusätzliche MCDDatabaseException mit Fehlerwert
eDB_INCONSISTENT_DATABASE vor.
Beim Füllen eines MCDConfigurationRecords mit dem Inhalt einer zu großen Datei wird
nur die erforderliche Anzahl an Bytes, gegeben durch UNCOMPRESSED-SIZE, gelesen
und der Rest ignoriert.
Beim Füllen eines MCDConfigurationRecords mit dem Inhalt einer zu kleinen Datei
werden alle verfügbaren Bytes in den Configuration Record übertragen.
Wenn im ODX für Flash-Daten keine SEGMENTs definiert sind, sollen gemäß Standard
MCDDbFlashSegment-Objekte durch den MCD-Kernel generiert und in der über
68 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
• MCDResponseParameter::setValue
Beim Aufruf von MCDResponseParameter::setValue aus einem Job heraus findet für
TEXTTABLE-Parameter eine Überprüfung des Eingabewertes statt. Ist er nicht in der
Liste der gültigen Texttable-Elemente, wird die Eingabe mit einer Exception quittiert.
Der Standard ODX 2.0.1 bietet keine Möglichkeit, die Gültigkeit von Sessions von einer
Basisvariante an die zugehörigen Varianten zu propagieren, ohne alle Varianten explizit
zu referenzieren. In ODX 2.2.0 wird dies über das ODX-Element ALL-VARIANT-REFS
zum Ausdruck gebracht. Auf Wunsch des Auftraggebers wird jetzt für ODX 2.0.1-
Bedatungen die Gültigkeit einer Flash-Session immer von einer Basisvariante an alle
Varianten übertragen, auch wenn eine oder mehrere dieser Varianten zusätzlich explizit
referenziert werden.
• MCDParameter::getUnit
Die Methode liefert eine leere Zeichenkette, wenn der zugehörige ODX PARAM keine
UNIT referenziert oder diese UNIT keinen DISPLAY-NAME beinhaltet.
• MCDRequestParameter::setValue
Die Methode MCDRequestParameter::setValue verhält sich abweichend vom MCD-3D
3.0.0 Standard wie folgt:
The input parameter value is taken by copy and overwrites the value in the server.
Precondition:
Postcondition:
- the data type of the value does not match the data type of the MCDValue object
which can be retrieved by calling getValue() or createValue() at this parameter
- the parameter is a complex parameter
- the parameter is a simple parameter of ODX type CODED-CONST, PHYS-
CONST, SYSTEM, or RESERVED
- the value does not fit the value range of the physical constraint (PHYS-CONSTR),
if available
- For ODX 2.1 or ODX 2.2 based runtime projects and
MCD3D_CONSTRAINT_CHECK_ODX_21_22=1: the value fits a physical scale
constraint with validity NOT-VALID, NOT-DEFINED, or NOT-AVAILABLE (PHYS-
CONSTR / SCALE-CONSTR)
- the calculation of the coded value using the corresponding compu-method failed
- the coded value does not fit the parameter size (bit length, # 1 in the condensed
bit mask), encoding, or value range of the internal constraint (INTERNAL-
CONSTR), if available
- For ODX 2.0.1 based runtime project and MCD3D_CONSTRAINT_CHECK=1: the
coded value fits an internal scale constraint with validity NOT-VALID, NOT-
DEFINED, or NOT-AVAILABLE (INTERNAL-CONSTR / SCALE-CONSTR)
- For ODX 2.1 or ODX 2.2 based runtime projects and
MCD3D_CONSTRAINT_CHECK_ODX_21_22=1: the coded value fits an internal
scale constraint with validity NOT-VALID, NOT-DEFINED, or NOT-AVAILABLE
(INTERNAL-CONSTR / SCALE-CONSTR)
a) Die erforderlichen PDU-Bytes können nicht gemäß den Angaben des Parameters
extrahiert werden.
b) Die Dekodierung der extrahierten PDU-Bytes zur Bestimmung des internen Wertes
schlägt fehl.
c) Der ermittelte interne Wert passt nicht in den Wertebereich eines etwaigen internen
Constraint (INTERNAL-CONSTR).
f) Die Umrechnung des internen Wertes in den physikalischen Wert gemäß Compu-
Method schlägt fehl.
Zum jetzigen Zeitpunkt sind noch nicht alle Klassen und Methoden des Standards vollständig
implementiert. Ein Zugriff auf diese Methoden wird mit einer MCDSystemException und dem
Fehlercode „eVS_SYSTEM_METHOD_NOT_SUPPORTED“ quittiert.
Dies betrifft alle Methoden im Kontext von Dynamically Defined Identifiers. Die Monitoring-
Schnittstelle kann aktuell nur in Verbindung mit einer D-PDU-API-Implementierung der
Softing AG verwendet werden, da die Anbindung der D-PDU-API nicht standardisiert ist und
daher proprietär vorgenommen werden muss.
MCDDbLocation::getAuthorizedMethods
MCDParameter::setValuePDUConform
MCDLogicalLink::sendBreak
MCDDbProject::loadNewECUMEM
Bezüglich der ODX 2.2-Unterstützung gibt es einen offenen Punkt im Bereich der
Comparams. Es ist gemäß Standard möglich, COMPARAM-REFs auf die Unterelemente von
COMPLEX-COMPARAMs zu bedaten und somit zum Ausdruck zu bringen, dass alle
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 71
anderen Werte des COMPLEX-COMPARAMs den auf der gerade aktuellen Ebene gültigen
Default haben. Diese Form des Überschreibens der COMPLEX-COMPARAMs unterstützt
VW-MCD derzeit nicht. Um COMPLEX-COMPARAMs zu überschreiben, muss eine
COMPARAM-REF auf diesen COMPLEX-COMPARAM verweisen und für alle einzelnen
Elemente Werte angegeben werden. Dies ist konform zum Standard, erhöht die
Übersichtlichkeit in den ODX-Daten und stellt gegenüber der anderen Form der
Überschreibung zur Laufzeit keinen Nachteil dar.
Bezüglich der ODX 2.1- und ODX 2.2-Unterstützung gibt es Restriktionen für die Angaben
von PROT-STACK-Referenzen, um den gültigen Satz an Comparams zu definieren: Gemäß
ODX kann die PROT-STACK-Referenz wahlweise am PROTOCOL oder am LOGICAL-LINK
bedatet sein. Für den VW-MCD besteht die Einschränkung, dass es keine zwei LOGICAL-
LINKs geben darf, die sich ausschließlich im verwendeten PROT-STACK unterscheiden,
sonst aber auf die gleiche Location verweisen. Die folgende Konstellation in einer VEHICLE-
INFORMATION-SPEC ist also nicht erlaubt:
<LOGICAL-LINK ID="LL_1_ID" xsi:type="MEMBER-LOGICAL-LINK">
<SHORT-NAME>LL_1</SHORT-NAME>
<LONG-NAME>LL_1</LONG-NAME>
<PHYSICAL-VEHICLE-LINK-REF ID-REF="PHYS_LINK_ID"/>
<PROTOCOL-REF DOCREF="PROT" DOCTYPE="LAYER" ID-REF="PROT_ID"/>
<BASE-VARIANT-REF DOCREF="BV" DOCTYPE="LAYER" ID-REF="BV_ID"/>
<PROT-STACK-SNREF SHORT-NAME="PS_1"/>
</LOGICAL-LINK>
<LOGICAL-LINK ID="LL_2_ID" xsi:type="MEMBER-LOGICAL-LINK">
<SHORT-NAME>LL_2</SHORT-NAME>
<LONG-NAME>LL_2</LONG-NAME>
<PHYSICAL-VEHICLE-LINK-REF ID-REF="PHYS_LINK_ID"/>
<PROTOCOL-REF DOCREF="PROT" DOCTYPE="LAYER" ID-REF="PROT_ID"/>
<BASE-VARIANT-REF DOCREF="BV" DOCTYPE="LAYER" ID-REF="BV_ID"/>
<PROT-STACK-SNREF SHORT-NAME="PS_2"/>
</LOGICAL-LINK>
Der Grund ist, dass beide resultierenden MCDDbLogicalLinks auf dieselbe MCDDbLocation
verweisen, die durch ihren MCDAccessKey eindeutig bestimmt sein muss, welcher
wiederum über die Referenzen auf BV und PROT definiert wird. Zu einer MCDDbLocation
gehört aber auch das MCDDbProtocolParameterSet, also der vordefinierte Satz an
Kommunikationsparametern. Dieser hängt jedoch vom PROT-STACK ab, der in obigem
Beispiel für beide MCDDbLogicalLinks unterschiedlich ist, was im Widerspruch zur
Eindeutigkeit der MCDDbLocation steht.
Sollen unterschiedliche PROT-STACKs verwendet werden, so muss das im Fall von VW-
MCD am PROTOCOL zum Ausdruck gebracht werden. Im obigen Beispiel resultierten zwei
Protokolle und damit zwei MCDDbLocations, womit der Widerspruch aufgelöst ist.
Applikation übergehen. Die Applikationen sollen für die Freigabe dieser Objekte
verantwortlich sein und diese dann bei Bedarf per „delete“ vornehmen.
Für den Vorgänger dieses Standards, also für ASAM-MCD-3D 2.0.0, wurde eine solche
Festlegung nicht getroffen, so dass die Basis dieses MCD-Kernels unter einer anderen
Voraussetzung implementiert worden ist. Aus Kompatibilitätsgründen wird bis dato die
ursprünglich umgesetzte Objektverwaltung beibehalten.
Für integrierende C++ Applikationen des MCD-Kernels bedeutet dies:
• Alle vom MCD-Kernel erstellten und über Zeiger herausgereichten MCD-Objekte bleiben
im Besitz des MCD-Kernels.
• Eine C++ Applikation darf auf keinem MCD-Objektzeiger ein „delete“ aufrufen.
• Datenbankobjekte (MCDDb*) werden in der Regel dem aktuellen MCDProject
zugeordnet. Zeiger auf solche DB-Objekte behalten ihre Gültigkeit bis zum Schließen des
Projekts über „MCDSystem::deselectProject“.
• Die über das MCDSystem abfragbaren Objekte der Klasse MCDDbProjectDescription
bleiben bis zu einem nächsten Aufruf von MCDSystem::getDbProjectDescriptions oder
MCDSystem::selectProject(ByName) gültig. Es besteht die Annahme, dass die Objekte
danach für Applikationen keine Relevanz mehr haben, so dass eine Freigabe des
Speichers erfolgt.
• Das über das MCDSystem abfragbare Objekt der Klasse MCDDbProjectConfiguration
bleibt bis zum nächsten Aufruf von MCDSystem::getDbProjectConfiguration gültig. Es
besteht die Annahme, dass die Objekte danach für Applikationen keine Relevanz mehr
haben, so dass eine Freigabe des Speichers erfolgt.
• Das über MCDDbLocation::getDbDTCs angeforderte Objekt der Klasse
MCDDbDiagTroubleCodes gehört nominell zwar zu den Datenbankobjekten, liefert
jedoch eine in Abhängigkeit von den Eingabeparametern der Methode dynamische
Information. Das Objekt bleibt daher ebenfalls nur bis zum nächsten Aufruf der Methode
gültig. Man beachte, dass dies ausdrücklich nur für die Kollektion gilt, nicht aber für die
einzelnen MCDDbDiagTroubleCode-Elemente der Kollektion.
• MCD Laufzeitobjekte (Nicht-MCDDb*) werden vom MCD-Kernel dem Objekt zugeordnet,
für das es direkt oder indirekt erstellt worden ist. Hierbei muss man explizit und implizit
erstellte Objekte unterscheiden:
Explizit erstellte Objekte sind diejenigen Objekte, die eine Applikation mit einer „create“-
Methode erstellt. Diese müssen über eine entsprechende „remove“-Methode wieder
entfernt werden und dürfen im Anschluss nicht weiter verwendet werden.
Zum Beispiel gehört ein Objekt der Klasse MCDDiagComPrimitive zu einem bestimmten
MCDLogicalLink, da es an diesem Link über den Aufruf von
MCDLogicalLink::createDiagComPrimitive(By…) kreiert worden ist. Dieses Objekt wird
seitens Applikation durch den Aufruf von MCDLogicalLink::removeDiagComPrimitive(…)
wieder gelöscht. Nach dem „remove“-Aufruf darf eine Applikation den Objektzeiger in
keinem Programm-Thread mehr verwenden, da die Gültigkeit des Objekts nicht mehr
durch die Applikation kontrolliert werden kann.
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 73
Eine Art der implizit erstellten Objekte sind Objekte, die im Kontext eines explizit
erstellten Objekts erzeugt werden und deren Gültigkeit an die Lebensdauer des
übergeordneten Objekts gekoppelt ist. Solche Objekte sind direkt oder indirekt über
Methodenaufrufe (get…) an den explizit erstellten Objekten abfragbar.
So wird zum Beispiel an einer MCDDiagComPrimitive über „getRequest“ ein Zeiger auf
ein MCDRequest-Objekt geliefert, über den dann auf MCDRequestParameter(s)
zugegriffen werden kann. Die Objekte verlieren ihre Gültigkeit mit dem Löschen der
übergeordneten MCDDiagComPrimitive.
Die zweite Art der implizit erstellten Objekte sind dynamische Ergebnisse eines
Methodenaufrufs an einem Laufzeitobjekt. Sie verlieren ihre Gültigkeit mit dem nächsten
Aufruf derselben Methode.
Beispielsweise liefert der Aufruf von MCDDiagComPrimitive::executeSync einen Zeiger
auf ein MCDResult-Objekt. Dieses Objekt sowie alle Laufzeitobjekte, die von ihm
ausgehend erreichbar sind (MCDResponse(s), MCDResponseParameter(s), …) bleiben
bis zum nächsten Aufruf von „executeSync“ gültig, längstens solange, wie die
übergeordnete MCDDiagComPrimitive existiert.
Die MCD-Kernel Schnittstelle ist als Vorgriff auf einen Standard ASAM MCD 3D V 2.1 um
einen iterativen Zugriff auf Flashdaten erweitert worden. Die für den ASAM MCD 3.0.0
Standard definierte Schnittstelle weicht geringfügig, für bestehende Applikationen,
74 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
insbesondere FlashJobs, aber entscheidend insofern davon ab, als es ein explizites Iterator-
Element gibt.
/**
* Returns the first BYTEFIELD of the flash data belonging to this flash segment.
* The maximum size of the data chunk is defined with the input parameter "size".
*
* \note provided by VW-MCD for compatibility reasons - deprecated
*
* \param size (in): the size of the chunk to be returned; this size will also
* be considered at getNextBinaryDataChunk
*
* \return a flash data BYTEFIELD with at most "size" bytes contained; if the flash
* data contains less than "size" bytes, the bytefield contains the available
* data
* \throw MCDProgramViolationException eRT_INTERNAL_ERROR
* flash file access failed
* MCDDatabaseException eDB_END_OF_FLASH_FILE
* the data to be returned does not pass the given flash filter
*/
virtual asam::A_BYTEFIELD getFirstBinaryDataChunk(A_UINT32 size)=0;
/**
* Checks whether the flash data belonging to the current segment contains another
* chunk of flash data
*
* \note provided by VW-MCD for compatibility reasons - deprecated
*
* \param -
* \retval true at least one more data chunk available
* \retval false no more data chunks available
*/
virtual asam::A_BOOLEAN hasNextBinaryDataChunk()=0;
/**
* Returns the next BYTEFIELD of the flash data belonging to this flash segment.
* The maximum size of the data chunk is defined with the input parameter "size"
* of the method getFirstBinaryDataChunk.
*
* \note provided by VW-MCD for compatibility reasons - deprecated
*
* \return a flash data BYTEFIELD with at most "size" bytes contained; if the remaining
* flash data contains less than "size" bytes, the bytefield contains the
* available data
* \throw MCDProgramViolationException eRT_INTERNAL_ERROR
* flash data iteration has not been started with getFirstBinaryDataChunk
* MCDDatabaseException eDB_END_OF_FLASH_FILE
* no next chunk available
* MCDDatabaseException eDB_END_OF_FLASH_FILE
* the data to be returned does not pass the given flash filter
*/
virtual asam::A_BYTEFIELD getNextBinaryDataChunk()=0;
11.4.2 Late-bound-Flashdaten
Die Schnittstelle zur Verarbeitung von Late-bound-Flashdaten verfügt über eine weitere
Methode zum Laden neuer Flashsegmente; vgl auch Kapitel 5.4.
*
* \pre
* The flash data belonging to this data block is defined as late-bound.
* The flash data format is eBINARY, eMOTOROLA_S, or eINTEL_HEX.
*
* \param
* filename (in): name of the flash file to be loaded; the name shall be contained
* in the list returned from getMatchingFileNames
* \post
* An exception will be thrown if
* - the flash data is not defined as late-bound
* (MCDDatabaseException, eRT_NO_LATE_BOUND_DATA_FILE)
* - invalid flash data format
* (MCDProgramViolationException, eRT_INTERNAL_ERROR)
* - empty flash data
* (MCDDatabaseException, eDB_END_OF_FLASH_FILE)
* (MCDProgramViolationException, eRT_INTERNAL_ERROR)
*/
virtual void loadSegments(asam::A_ASCIISTRING& fileame)=0;
Als Umgehungslösung für eine in ASAM MCD 3D 2.00.02 nicht verwendbar definierte
Methode MCDDbFlashDataBlock::getDbSecurities ist die korrigierte Methode
MCDDbFlashDataBlock::getDbSecurities2 bereitgestellt worden. Sie entspricht der im neuen
Standard korrigierten Methode MCDDbFlashDataBlock::getDbSecurities:
/**
* Returns the securities for this FlashDataBlock.
*
* \note provided by VW-MCD for compatibility reasons - deprecated
*
* \pre
* The data base shall be consistent.
*
* Semantic:
* Returns the securities for this FlashDataBlock. With the securitiy it is
* possible to define security specific information like checksum or
* signature for the data block. This information can be used to check the
* integrity and the authencity of the flash data.
*
*
* \post
* Returns the securities for this FlashDataBlock as collection. The return
* value is always an object collection. The collection can be empty. An
* exception will be thrown, if
* - the collection can not be determined because the data base is
* inconsistent (eDB_INCONSISTENT_DATABASE, MCDDatabaseException).
* - in case the resulting collection would contain at least one duplicate
* shortname (eDB_INCONSISTENT_DATABASE,MCDDatabaseException)
*/
virtual asam::d::MCDDbFlashSecurities* getDbSecurities2()=0;
*
* \note provided by VW-MCD for compatibility reasons - deprecated
*
* \pre
* A flash job shall be referenced in the given MCDDbLocation.
*
*
* Semantic:
* Returns the FlashJob specified for this session in the projects databases.
* This FlashJob has to be executed, when you want to be sure to flash the
* session with the correct flash job.
*
* \post
* Returns the FlashJob object specified for this session in the projects
* databases.
* An exception will be thrown,
* - if the MCDDbLocation supplied as parameter or its DIAG-LAYER,
* respectively, is not referenced by the corresponding ECU-MEM-CONNECTOR in
* ODX, that is, no MCDDbFlashJob can be identified for this MCDDbLocation
* (eRT_ELEMENT_NOT_AVAILABLE, MCDProgramViolationException)
* - if a location context is already available and the supplied location
* parameter does not match that location context (ePAR_INVALID_DB_OBJECT,
* MCDParameterizationException)
* - if no MCDDbFlashJob can be obtained from the underlying ODX data
* (eDB_ELEMENT_NOT_AVAILABLE, MCDDatabaseException).
* - if the element referenced as a flash job in ODX is not a MCDDbFlashJob
* (ODX allows DIAG-COMMs here) (eDB_WRONG_DATATYPE, MCDDatabaseException).
* - the data base is invalid or the flash job can not be determined.
* (eDB_INCONSISTENT_DATABASE, MCDDatabaseException)
*
*/
virtual asam::d::MCDDbFlashJob* getDbFlashJob(asam::mcd::MCDDbLocation& dbLocation)=0;
11.4.7 PDU-Timestamps
Bevor für ASAM MCD 3D 3.0.0 Methoden zum Abfragen von PDU-API-Zeitstempeln definiert
wurden, sind entsprechende Methoden mit gleicher Semantik, ähnlicher Signatur, aber
anderen Namen definiert worden.
MCDResponse:
/**
* returns the PDU timestamp of the start of the response message
*
* \note provided by VW-MCD for compatibility reasons - deprecated
*
* \param -
* \return PDU timestamp in microseconds
* \throw MCDProgramViolationException eRT_NO_PDU_TIMESTAMP_AVAILABLE
* if PDU timestamp is not available
*/
virtual asam::A_UINT32 getMessageStartPduTimestamp()=0;
/**
* returns the PDU timestamp of the end of the response message
*
* \note provided by VW-MCD for compatibility reasons - deprecated
*
* \param -
* \return PDU timestamp in microseconds
* \throw MCDProgramViolationException eRT_NO_PDU_TIMESTAMP_AVAILABLE
* if PDU timestamp is not available
*/
virtual asam::A_UINT32 getMessageEndPduTimestamp()=0;
MCDResult:
/**
* returns the PDU timestamp of the end of the request message
*
* \note provided by VW-MCD for compatibility reasons - deprecated
*
* \param -
78 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
Eine für bestimmte Applikationen sinnvolle Methode zum Zugriff auf das wertabhängige
MCDTextTableElement am MCDParameter hat den Weg nicht in den ASAM MCD 3D 3.0.0
Standard gefunden. Da sie in Gebrauch ist, wird sie beibehalten:
/**
* Returns the MCDTextTableElement of the current parameter, if available.
*
*
* \note provided by VW-MCD as standard enhancement
*
* \pre the corresponding DB parameter has a data type eTEXTTABLE or a parameter type
* eTABLE_KEY internally referencing a text table DOP
* \param -
* \throw MCDProgramViolationException invalid parameter type
* eRT_METHOD_NOT_SUPPORTED_FOR_PARAMETER_TYPE
* \throw MCDParameterizationException text table element not available for the
* current value
* ePAR_ITEM_NOT_FOUND
* \return corresponding MCDTextTableElement
*/
virtual asam::d::MCDTextTableElement* getTextTableElement()=0;
Der MCD-Kernel verfügt über zwei Methoden zur Abfrage des ODX-Elements COMPU-
DEFAULT-VALUE.
MCDDbParameter::getIntToPhysCompuDefaultValue_NSF() : asam::mcd::MCDValue
Returns the compu default value of the parameter as MCDValue. The information is
retrieved from the ODX element COMPU-INTERNAL-TO-PHYS / COMPU-DEFAULT-VALUE.
The data type of the MCDValue returned is the physical data type of the parameter.
Precondition:
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
MCDDbParameter::getPhysToIntCompuDefaultValue_NSF() : asam::mcd::MCDValue
Returns the compu default value of the parameter as MCDValue. The information is
retrieved from the ODX element COMPU-PHYS-TO-INTERNAL / COMPU-DEFAULT-VALUE /
COMPU-INVERSE-VALUE.
The data type of the MCDValue returned is the physical data type of the parameter.
Precondition:
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 79
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
Das Installieren und Löschen von Teilprojekten im laufenden Betrieb hat massiven Einfluss
auf die Datenkonsistenz im Laufzeitsystem. Welche Modifikation des Datenbestands zur
Laufzeit im Detail benötigt wird und was unter Berücksichtigung von klar definierten
Randbedingungen realisiert werden kann, muss noch mit dem Auftraggeber abgestimmt
werden. Bis dahin sollte nach Anwenden der nachfolgend aufgeführten Methoden das
aktuelle Projekt deselektiert und im Anschluss wieder selektiert werden, um dann auf einem
sauberen Datenbestand arbeiten zu können. Alle Methoden sind am MCDProject definiert.
*
* Semantic:
* Extends the database of the current project with the runtime database files of a
* new flash package.
*
* \post
* In case of success the new flash package will be available in the current project.
* The following collections, if already passed to the client application, are
* outdated, and have to be required again:
* - MCDDbEcuMems returned from MCDDbProject::getDbEcuMems
* - MCDDbFlashSessions, MCDDbFlashSessionClasses, MCDDbPhysicalMemories returned
* from any MCDDbLocation in scope of the MCDDbEcuMem objects in the new package.
* - MCDDatatypeAsciiStrings returned from ‘getNames’ called at any of the upper
* collections.
* The behaviour of iterations over any of the upper collections(getItemByIndex/Name)
* running in parallel to the execution of this method will be undefined.
* Note: files installed due to a call of this method will be removed from the
* current project on ‘deselectProject’.
* An exception will be thrown, if
* - the method is called from Linux, i.e. the ODX-Converter is not available
* (MCDSystemException, eSYSTEM_METHOD_NOT_SUPPORTED)
* - the ODX-Converter is not available
* (MCDSystemException, eSYSTEM_SUBSYSTEM_FUNCTION_CALL_FAILED)
* - the input package does not exist
* (MCDParameterizationException, ePAR_ITEM_NOT_FOUND)
* - the input package has the wrong file type
* (MCDParameterizationException, ePAR_INVALID_OBJECTTYPE)
* - the conversion of the input package failed
* (MCDProgramViolationException, eRT_INTERNAL_ERROR)
* - the new flash runtime database contains MCDDbEcuMems already existing in the
* base project
* (MCDDatabaseException, eDB_INCONSISTENT_DATABASE)
* the input package contains ODX FLASH categories with SHORT-NAMEs already
* existing in the base project
* (MCDDatabaseException, eDB_INCONSISTENT_DATABASE)
virtual asam::mcd::MCDDatatypeShortName loadNewFlashPackage_NSF
(asam::A_ASCIISTRING& flashPackagePath)=0;
* Removes the runtime data of the given ecu variant from the database of the
* current project.
*
* Exception:
* MCDException
*
* \pre
* - The project database contains a variant with the given name.
* - MCDLogicalLink items based on any MCDDbLocation containing the parent base
* variant or any of its variants must be in an idle mode.
*
* Semantic:
* Removes the runtime data of the given ecu variant from the database of the
* current project.
*
* \post
* In case of success the runtime database files belonging to the variant are removed
* from the current project.
* Items referencing elements of those database files are invalid.
*
* An exception will be thrown, if
* - the input variant does not exist.
* (MCDParameterizationException, ePAR_ITEM_NOT_FOUND)
* - at least one of the logical links in scope of the current base variant is not
* idle.
* (MCDProgramViolationException, eRT_NOT_ALLOWED_IN_THIS_OBJECT_STATE)
*/
virtual void removeEcuVariantData_NSF(asam::mcd::MCDDatatypeShortName& variantName)=0;
(asam::A_ASCIISTRING& configPackagePath)=0;
11.4.11 System-Properties
Über die standardkonforme Schnittstelle zum Setzen und Abfragen sogenannter System-
Properties können herstellerspezifische Konfigurationen zur Laufzeit programmatisch
manipuliert werden.
Für den MCD-Kernel werden alle Log-Level als System-Properties angeboten, siehe [3.1].
Exemplarisch sei „de.volkswagen.MCD3D_LogLevel“ genannt. Diese System-Properties
können nach Systemstart jederzeit abgefragt oder gesetzt werden. Der MCDValue-Typ
dieser Properties ist eA_INT32.
Die Anzahl und Größe der Logdateien können über die System-Properties
„de.volkswagen.MCD3D_MAX_NO_OF_LOGFILES“ – Datentyp A_UINT8, maximaler Wert 9
- bzw. „de.volkswagen.MCD3D_MAX_SIZE_OF_LOGFILE“ – Datentyp A_UINT16, Angabe
in KB - erfragt und modifiziert werden. Das Setzen eines Wertes ist jedoch nur im
Systemzustand eINITIALIZED erlaubt.
jederzeit möglich und greift bei nächster Gelegenheit, d.h. bei einem erneuten
MCDSystem::selectProject(ByName). Die Property ersetzt dann den Wert aus der
Konfigurationsdatei, die jedoch nicht persistent überschrieben wird. Mit einem
Systemneustart greift initial wieder der Wert aus der Konfigurationsdatei.
Die für die Methode PDUConstruct optionale Zeichenkette zur Konfiguration der D-PDU-API
kann mittels System-Property „de.volkswagen.MCD3D_MVCI_PDU_API_OPTION_STRING“
gesteuert werden. Der schreibende Zugriff ist möglich, solange die PDU-API noch nicht über
prepareInterface oder prepareVciAccessLayer geladen wurde. Der MCDValue-Typ dieser
Property ist eA_ASCIISTRING.
Die folgenden System-Properties ermöglichen einen lesenden und schreibenden Zugriff auf
die entsprechenden Konfigurationsparameter, wobei das Schreiben neuer Werte nur im
Systemzustand eINITIALIZED erlaubt ist:
Um eine PDU-API zur Laufzeit über eine System-Property auswählen zu können, muss eine
Applikation wissen, welche PDU-APIs grundsätzlich zur Verfügung stehen. Entsprechende
Informationen findet man in der RDF. Als Komfort-Methode bietet der MCD-Kernel am
86 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
MCDSystem eine Funktion zur Abfrage der Short-Names aller in der aktuellen RDF notierten
PDU-APIs:
/**
* returns the list of PDU API identifiers registered in the current RDF.
* Items of this list may serve as valid values for the system property
* de.volkswagen.MCD3D_MVCI_PDU_API_Shortname.
*
* \note provided by VW-MCD as enhancement of the ASAM MCD 3.0.0 standard interface
*
* \param -
* \return list of PDU API short names, empty if the RDF is not available or does
* not contain any valid items;
* note, that the existence of the mentioned PDU APIs is not checked in this
* method.
* \see getProperty, setProperty
*/
virtual asam::mcd::MCDDatatypeAsciiStrings getPduApiNames_NSF()=0;
In einem Job kann man zum Erzeugen der Response-Struktur über die
MCDResponseParameters-Methoden addMuxBranch, addMuxBranchByIndex,
addMuxBranchByIndexWithContent, addMuxBranchWithContent und
addMuxBranchByMuxValue einem MULTIPLEXER-Parameter um einen bestimmten MUX-
Case erweitern. In der Laufzeit-Parameterstruktur kann nur ein Case-Zweig expandiert sein.
Dieser Tatsache wird in den vom Standard gelieferten Methodenbeschreibungen keine
Rechnung getragen, so dass diese Lücke in Anlehnung an den zurückgezogenen Standard
ASAM MCD-3 D 2.2 wie folgt geschlossen wird:
Der Aufruf einer der Methoden an der Parameter-Kollektion eines bereits expandierten
MULTIPLEXER-Parameters wird mit einer MCDProgramViolationException mit dem
Fehlercode eRT_INTERNAL_ERROR und dem herstellerspezifischen Fehlercode
eVS_RT_ELEMENT_ALREADY_EXISTS quittiert.
Die Methodenbeschreibungen der Java- und C++-API sind entsprechend ergänzt worden.
Für ODX 2.0.1-Daten kann ein Dienst nicht für „Suppress Positive Response“ bedatet
werden. Die nachfolgende Methode, die an den Klassen MCDService,
MCDStartCommunication und MCDStopCommunication ergänzt worden ist, ermöglicht
Applikationen die Nutzung dieser Funktionalität auch für ODX 2.0.1 basierte Datenprojekte.
/**
* Set the new suppressing mode for positive responses, without checking.
*
* \note provided by VW-MCD as enhancement of the ASAM MCD 3.0.0 standard interface
* to be used for ODX 2.0.1 based data projects
*
* \usage
* \param suppress (in):
* \return -
* \see setSuppressPositiveResponse
*/
virtual void setSuppressPositiveResponseUnchecked_NSF(asam::A_BOOLEAN suppress)=0;
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 87
11.4.15 MCDInterface::getModuleTypeName_NSF
/**
* Returns the name of the module type as defined in the MDF of the current PDU API.
*
* <MODULETYPE>
* <ID>nnn</ID>
* <SHORT_NAME>...</SHORT_NAME> <---
* (...)
* </MODULETYPE>
*
* \note provided by VW-MCD as enhancement of the ASAM MCD 3.0.0 standard interface
*
* \param -
* \return the short names of the corresponding module type as defined in the MDF
*/
virtual asam::A_ASCIISTRING getModuleTypeName_NSF()=0;
/**
* Returns the file version of the referenced ODX file if named according to the VW
* authoring rule VW80128_T1_221 (Version 3.1.0):
* “Der Dateiname einer ODX-Datei wird aus der ID des DIAG-LAYERs, einem
* nachfolgenden ‚_’ sowie der Version der Datei (6 Ziffern) gebildet.”
* This information is retrieved from the index.xml entry ABLOCK / FILE.
* If the file name does not follow this rule, an empty version string is returned.
*
* \pre
* The ODX file information is available at the current database.
*
* Semantic:
* Returns the file version of the referenced ODX file.
*
* \post
* Returns the file version of the referenced ODX file if this version is authored
* according to the VW authoring rule VW80128_T1_221 Version 3.1.0, otherwise an empty
* string.
* An exception will be thrown if
* - the information is not available due to an inconsistent database
* (MCDDatabaseException, eDB_INCONSISTENT_DATABASE)
*/
virtual asam::A_UNICODE2STRING getFileVersion()=0;
/**
* Returns the version of the ODX standard for this file.
* In case of source projects with mixed ODX standard versions
* major, minor and revision number will be set to 0.
* \pre
* The ODX file information is available at the current database.
*
* Semantic:
* The ODX file information is available at the current database.
*
* \post
* The ODX file information is available at the current database.
* An exception will be thrown if
* - the information is not available due to an inconsistent database
* (MCDDatabaseException, eDB_INCONSISTENT_DATABASE)
*/
virtual asam::mcd::MCDVersion* getODXVersion()=0;
Dazu muss der Aufbau des komplexen Parameters fix sein; insbesondere müssen die
Namen der Unterparameter fest definiert sein, da ansonsten die Zuordnung von Werten zu
Parametern nicht in jedem Fall vorgenommen werden kann. Da in der Praxis bezüglich der
Unterparameternamen unterschiedliche Namenskonventionen bestehen, unterstützt der
MCD-Kernel die beiden bislang bekannten, nämlich die von der ODX-
Standardisierungsgruppe propagierte und die bereits vorab im ODX2.1-Umfeld verwendete.
Die Liste der vom MCD-Kernel unterstützten komplexen Kommunikationsparameter mit den
jeweiligen Unterparametern:
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 89
- CP_UniqueRespTable
- CP_SessionTiming_Ecu, CP_AccessTiming_Ecu
- CP_SessionTimingOverride
o CP_SessionTimingOverride_P2Max_High
o CP_SessionTimingOverride_P2Max_Low
o CP_SessionTimingOverride_P2Star_High
o CP_SessionTimingOverride_P2Star_Low
o CP_SessionTimingOverride_SessionNumber
bzw.
o CP_P2Max_High
o CP_P2Max_Low
o CP_P2Star_High
o CP_P2Star_Low
o CP_SessionNumber
- CP_AccessTimingOverride
o CP_AccessTimingOverride_P2Max
o CP_AccessTimingOverride_P2Min
o CP_AccessTimingOverride_P3Max
o CP_AccessTimingOverride_P3Min
o CP_AccessTimingOverride_P4Min
o CP_AccessTimingOverride_TimingSet
bzw.
o CP_P2Max
o CP_P2Min
o CP_P3Max
o CP_P3Min
o CP_P4Min
o CP_TimingSet
- CP_ExtendedTiming
o CP_ExtendedTiming_P2Max
o CP_ExtendedTiming_P2Min
o CP_ExtendedTiming_P3Max
o CP_ExtendedTiming_P3Min
o CP_ExtendedTiming_P4Min
o CP_ExtendedTiming_TimingSet
90 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
bzw.
o CP_P2Max
o CP_P2Min
o CP_P3Max
o CP_P3Min
o CP_P4Min
o CP_TimingSet
11.4.18 MCDParameter::getUnitTextID_NSF
/**
* Returns the text identifier of the unit belonging to this parameter.
* This method is a short cut of MCDParameter.getDbObject().getDbUnit().getLongNameID.
* The ODX item returned is PARAM / DATA-OBJECT-PROP / UNIT / LONG-NAME TI.
* If the UNIT or the TI are not available, an empty string is returned.
*
* Precondition:
* The parameter object must be valid.
* Postcondition:
* An exception (MCDProgramViolationException: eRT_INTERNAL_ERROR) will be thrown if
* - the parameter object is not valid.
*
* \note provided by VW-MCD as enhancement of the ASAM MCD 3.0.0 standard interface
*
* \param -
* \return the long name ID of the parameter unit
*/
virtual asam::A_ASCIISTRING getUnitTextID_NSF()=0;
11.4.19 MCDDiagComPrimitive::cancel
11.4.20 Simulationsmodus
Der Simulationsmodus gilt für die komplette Sitzung und bezieht sich auf ein konkretes
Laufzeitdatenprojekt. Alle MCD-Objekte, die im Kontext dieses Projekts erstellt werden,
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 91
Um den Simulationsmodus flexibel, d.h. für mehrere Logical Links nutzen zu können, wird
beim Setzen des Simulationsmodus nur der Projektname angegeben.
/**
* Activates the simulation mode for the current MCDSystem instance and returns the
* selected project.
* The simulation mode can be used to determine services matching a certain request PDU
* or to compute response parameter structures and values from a given response PDU.
* These tasks can be performed without any VCI hardware.
*
* \pre
* The MCDSystem is in state eINITIALIZED.
* Neither prepareInterface nor prepareVciAccessLayer were called yet.
*
* \post
* In case of success the simulation mode is enabled; the MCDSystem usage is restricted.
* The MCDProject returned is selected and has to be released with “deselectProject” at
* the end of the session.
* Parts of the API cannot be used in this simulation mode; some methods get a slightly
* different semantic.
*
* An exception will be thrown if
* - the MCDSystem is in state eDBPROJECT_CONFIGURATION
* (eMCDPROGRAMVIOLATIONEXCEPTION, eRT_NOT_ALLOWED_IN_THIS_OBJECT_STATE)
* - the MCDSystem is in state eLOGICALLLY_CONNECTED
* (eMCDPROGRAMVIOLATIONEXCEPTION, eRT_NOT_ALLOWED_IN_THIS_OBJECT_STATE)
* - the MCDSystem is in state ePROJECT_SELECTED
* (eMCDPROGRAMVIOLATIONEXCEPTION, eRT_NOT_ALLOWED_IN_STATE_PROJECT_SELECTED)
* - prepareInterface has been called
* (eMCDPROGRAMVIOLATIONEXCEPTION, eRT_VCI_ACCESS_LAYER_ALREADY_PREPARED)
* - prepareVciAccessLayer has been called
* (eMCDPROGRAMVIOLATIONEXCEPTION, eRT_VCI_ACCESS_LAYER_ALREADY_PREPARED)
* - a project with the given name cannot be found
* (eMCDDATABASEEXCEPTION, eDB_ELEMENT_NOT_AVAILABLE)
*
* \note provided by VW-MCD as enhancement of the ASAM MCD 3.0.0 standard interface
*
* \param projectName (in): the name of the project to run in simulation mode
*
* \return the project with the given name
*/
virtual asam::mcd::MCDProject* enableSimMode_NSF(MCDDatatypeShortName& projectName)=0;
Klasse Methode
MCDSystem deselectProject
getActiveProject
getASAMMCDVersion
getDbProjectDescriptions
getEnumValue
92 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
getProperty
getPropertyNames
getServerType
getState
getSystemParameter
getVersion
enableSimMode_NSF (neu)
MCDProject createLogicalLink
createLogicalLinkByName
createLogicalLinkByVariant
getActiveDbVehicleInformation
getDbProject
deselectVehicleInformation
removeLogicalLink
selectDbVehicleInformation
selectDbVehicleInformationByName
MCDLogicalLink createDiagComPrimitiveByDbObject
createDiagComPrimitiveByName
removeDiagComPrimitive
getDbObject
getState
getType
getUniqueRuntimeID
getRequest
MCDResult getError
getResponses
hasError
getServiceShortName
MCDResponse getContainedResponseMessage
getDbObject
getError
getResponseParameters
getResponseMessage
hasError
enterResponsePDU_NSF (neu)
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 93
Alle anderen Methoden der genannten Klassen werden im Simulationsmodus mit einer
MCDProgramViolationException (eRT_NOT_ALLOWED_IN_THIS_OBJECT_STATE)
quittiert.
Nicht genannte Klassen, die über die obigen Schnittstellen erreichbar sind, können
voraussichtlich gegenüber dem Standard unverändert genutzt werden.
*
* \post
* In case of success the MCDDiagComPrimitive contains an MCDResult item with an empty
* MCDResponses collection. The MCDResult contains an MCDError item with the given error
* properties.
*
* An exception will be thrown if
* - the MCDSystem is not in simulation mode
* (eMCDPROGRAMVIOLATIONEXCEPTION, eRT_NOT_ALLOWED_IN_THIS_OBJECT_STATE)
* - the MCDDiagComPrimitive already contains an MCDResult item
* (eMCDPROGRAMVIOLATIONEXCEPTION, eRT_INTERNAL_ERROR)
*
* \note provided by VW-MCD as enhancement of the ASAM MCD 3.0.0 standard interface
*
* \param resultType (in): the type of the result, see MCDResultType
* \param errorCode (in): the error code of the MCDError set at the MCDResult,
* see MCDDErrorCodes
* \param errorCodeDesc (in): the error description of the MCDError set at the MCDResult
* \param vendorErrorCode (in): the vendor error code of the MCDError set at the MCDResult
* \param vendorCodeDesc (in): the vendor error description of the MCDError set at the
* MCDResult
* \param severity (in): the severity of the MCDError set at the MCDResult,
* see MCDSeverity
*
* \return empty MCDResult created with the given properties
*/
virtual asam::mcd::MCDResult* createResult_NSF(asam::mcd::MCDResultType resultType,
asam::mcd::MCDErrorCodes errorCode,
asam::A_ASCIISTRING& errorCodeDesc,
asam::A_UINT16 vendorErrorCode,
asam::A_ASCIISTRING& vendorCodeDesc,
asam::mcd::MCDSeverity severity)=0;
* \param responsePDU (in): the response PDU byte field that shall be applied to the
* current MCDResponse
*
* \return -
*/
virtual void enterResponsePDU_NSF(asam::A_BYTEFIELD responsePDU)=0;
Wenn der MCD-Kernel über eine Java-Applikation betrieben wird, muss er bei der
Ausführung von Java-Jobs die Java VM der Applikation nutzen. Dies wird erreicht, indem die
Applikation den MCD-Kernel lädt, also eine MCDSystem-Instanz erstellt. Wenn sich die
Applikation selbst nicht beim MCD-Kernel freischaltet, sondern dies erst in einer
unterlagerten Software-Komponente geschieht, wird das Erstellen der MCDSystem-Instanz
mit einem Lizenzfehler quittiert.
Zur Vermeidung der Lizenzfehlermeldung stellt der MCD-Kernel an der internen Java-Klasse
MCDSystemImp eine Methode zur Verfügung, über die eine Java-Applikation nur die MCD-
Kernel-DLLs laden kann, ohne eine MCDSystem-Instanz zu erstellen.
Aus MCD-Sicht ist dieser Statuswechsel nicht vorgesehen: Der zugehörige MCDLogicalLink-
Status eOFFLINE ist laut MCD-Standard erreichbar durch Öffnen eines MCDLogicalLinks
(LL.open()) oder nach einem VCI-Verbindungsverlust. Der MCD-Kernel reagiert also bis dato
nicht auf diesen Statuswechsel, so dass die Applikation zwar beim Ausführen der Dienste
Fehler vermeldet bekommt, aber ansonsten nicht aktiv über einen Link-Fehler informiert wird.
Diese Diskrepanz zwischen den Status des MCDLogicalLinks und des PDU-Links kann je
nach sonstiger Fehlerbehandlung durch die D-PDU-API zu unauflösbaren Zuständen im
MCD-Kernel führen.
Als Lösung dieses Konflikts vermeldet der MCD-Kernel den unerwarteten Wechsel von
PDU_CLLST_COM_STARTED nach PDU_CLLST_OFFLINE über das Event onLinkError
mit einem aussagekräftigen MCDError an die Applikation, auch wenn die D-PDU-API kein
Error-Event geschickt hat.
Der MCD-Kernel nimmt für den MCDLogicalLink keinen Statuswechsel vor. Vielmehr kann
die Applikation auf onLinkError mit einem LL.reset reagieren, um den MCDLogicalLink selbst
in einen sauberen Status zu bringen, von dem aus weiter gearbeitet werden kann.
Diese Lösung steht nicht im unmittelbaren Widerspruch zum MCD-Standard, der den Fall
einfach nicht behandelt.
96 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
Über die MCD3D-API können nicht alle Informtationen abgefragt werden, um einen internen
Parameterwert gemäß ODX in einen physikalischen Wert umzurechnen.
Als Ergänzung zur Standard-API werden die fehlenden Informationen über die zentrale
Schnittstelle ExtendedParameterInfo zur Verfügung gestellt.
getPhysicalDataType_NSF() : asam::mcd::MCDDataType
If the corresponding parameter does not contain a DOP, but only a DIAG-CODED-TYPE, the
coded data type is returned, because in this case both values are identical.
ODX: DATA-OBJECT-PROP/PHYSICAL-TYPE/BASE-DATA-TYPE
ODX: DIAG-CODED-TYPE/BASE-DATA-TYPE
isDiagCodedTypeAvailable_NSF() : asam::A_BOOLEAN
Checks whether the diag coded type is given with the corresponding parameter.
This method should be used before calling the methods getCodedDataType and
getDiagCodedType, because these methods throw an exception if the diag coded type is not
available.
getCodedDataType_NSF() : asam::mcd::MCDDataType
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
getDiagCodedType_NSF() : asam::ext::EDbDiagCodedType
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
getRequestBytePosition_NSF() : asam::A_UINT32
Returns the request byte position of the corresponding matching request parameter.
The request byte position is only available for parameters with MCDParameterType
eMATCHING_REQUEST_PARAM.
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
isBitMaskAvailable_NSF() : asam::A_BOOLEAN
Checks, whether a bit mask is given with the corresponding parameter DIAG-CODED-TYPE.
This method should be used before calling getBitMask, because this method throws an
exception if the bit mask is not available.
getBitMask_NSF() : asam::A_BYTEFIELD
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
98 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
isCondensedBitMask_NSF() : asam::A_BOOLEAN
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
isTerminationAvailable_NSF() : asam::A_BOOLEAN
Checks, whether a termination information is given with the corresponding parameter DIAG-
CODED-TYPE.
This method should be used before calling getTermination, because this method throws an
exception if the termination information is not available.
getTermination_NSF() : asam::ext::EDbTermination
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
getEncoding_NSF() : asam::ext::EDbEncoding
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 99
isHighLowByteOrder_NSF() : asam::A_BOOLEAN
Returns the PDU byte order interpretation determined for the corresponding parameter.
isCompuCategoryAvailable_NSF() : asam::A_BOOLEAN
Checks, whether the computation method category is given with the corresponding
parameter.
getCompuCategory_NSF() : asam::ext::EDbCompuCategory
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
isCodedToPhysConversionAvailable_NSF() : asam::A_BOOLEAN
Checks, whether the computation method of the corresponding parameter DOP contains a
"coded to physical"-conversion.
The method returns false, if the ODX data contains only the COMPU-PHYS-TO-INTERNAL
element, even if this conversion is invertible.
getCodedToPhysCompuDefaultValue_NSF() : asam::mcd::MCDValue
Returns the computation default value of the corresponding parameter DOP computation
method for the conversion direction COMPU-INTERNAL-TO-PHYS.
ODX: COMPU-METHOD/COMPU-INTERNAL-TO-PHYS/COMPU-DEFAULT-VALUE
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
100 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
getCodedToPhysCompuDefaultInverseValue_NSF() : asam::mcd::MCDValue
Returns the computation default invers value of the corresponding parameter DOP
computation method for the conversion direction COMPU-INTERNAL-TO-PHYS.
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
getCodedToPhysCompuScales_NSF() : asam::ext::EPIDbCompuScales
Returns the computation scale collection of the corresponding parameter DOP for the
conversion direction COMPU-INTERNAL-TO-PHYS.
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
isCodedToPhysProgCodeAvailable_NSF() : asam::A_BOOLEAN
Checks, whether the computation method of the corresponding parameter DOP for the
conversion direction COMPU-INTERNAL-TO-PHYS contains prog code data.
getCodedToPhysProgCodeCodeFile_NSF() : asam::A_UNICODE2STRING
Returns the prog code code file of the corresponding parameter DOP computation method
for the conversion direction COMPU-INTERNAL-TO-PHYS.
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 101
getCodedToPhysProgCodeSyntax_NSF() : asam::A_UNICODE2STRING
Returns the prog code syntax of the corresponding parameter DOP computation method for
the conversion direction COMPU-INTERNAL-TO-PHYS.
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
getCodedToPhysProgCodeEntrypoint_NSF() : asam::A_UNICODE2STRING
Returns the prog code entry point of the corresponding parameter DOP computation method
for the conversion direction COMPU-INTERNAL-TO-PHYS.
If the prog code item is available, but the optional entry point data is missing, an empty string
will be returned.
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
isPhysToCodedConversionAvailable_NSF() : asam::A_BOOLEAN
Checks, whether the computation method of the corresponding parameter DOP contains a
"physical to coded"-conversion.
The method returns false, if the ODX data contains only the COMPU-INTERNAL-TO-PHYS
element, even if this conversion is invertible.
getPhysToCodedCompuDefaultValue_NSF() : asam::mcd::MCDValue
102 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
Returns the computation default value of the corresponding parameter DOP computation
method for the conversion direction COMPU-PHYS-TO-INTERNAL.
ODX: COMPU-METHOD/COMPU-PHYS-TO-INTERNAL/COMPU-DEFAULT-VALUE
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
getPhysToCodedCompuDefaultValueInverseValue_NSF() : asam::mcd::MCDValue
Returns the computation default inverse value of the corresponding parameter DOP
computation method for the conversion direction COMPU-PHYS-TO-INTERNAL.
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
getPhysToCodedCompuScales_NSF() : asam::ext::EPIDbCompuScales
Returns the computation scale collection of the corresponding parameter DOP for the
conversion direction COMPU-PHYS-TO-INTERNAL.
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
isPhysToCodedProgCodeAvailable_NSF() : asam::A_BOOLEAN
Checks, whether the computation method of the corresponding parameter DOP for the
conversion direction COMPU-PHYS-TO-INTERNAL contains prog code data.
getPhysToCodedProgCodeCodeFile_NSF() : asam::A_UNICODE2STRING
Returns the prog code code file of the corresponding parameter DOP computation method
for the conversion direction COMPU-PHYS-TO-INTERNAL.
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 103
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
getPhysToCodedProgCodeSyntax_NSF() : asam::A_UNICODE2STRING
Returns the prog code syntax of the of the corresponding parameter DOP computation
method for the conversion direction COMPU-PHYS-TO-INTERNAL.
ODX: COMPU-METHOD/COMPU-PHYS-TO-INTERNAL/PROG-CODE/SYNTAX
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
getPhysToCodedProgCodeEntrypoint_NSF() : asam::A_UNICODE2STRING
Returns the prog code entry point of the of the corresponding parameter DOP computation
method for the conversion direction COMPU-PHYS-TO-INTERNAL.
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
ODX COMPU-SCALEs werden als Kollektion EPIDbCompuScales geliefert; der Zugriff auf
einzelne EPIDbCompuScale-Elemente, die intervallbezogene Umrechnungsformeln
enthalten, erfolgt per Index.
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 105
Returns the item with the given index from the collection.
Postcondition:
(MCDParameterizationException, ePAR_INDEX_OUT_OF_RANGE)
getCount_NSF() : asam::A_UINT32
Returns the number of computation scales in the current computation scale collection.
getLowerLimit_NSF() : asam::mcd::MCDValue
Returns the value of the lower limit of the current computation scale.
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
getLowerLimitType_NSF() : asam::mcd::MCDLimitType
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
106 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
getUpperLimit_NSF() : asam::mcd::MCDValue
Returns the value of the upper limit of the current computation scale.
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
getUpperLimitType_NSF() : asam::mcd::MCDLimitType
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
getCompuInverseValue_NSF() : asam::mcd::MCDValue
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
getCompuConst_NSF() : asam::mcd::MCDValue
Postcondition:
(MCDDatabaseException, eDB_ELEMENT_NOT_AVAILABLE)
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 107
getNoOfNumerators_NSF() : asam::A_UINT32
Postcondition:
(MCDParameterizationException, ePAR_INDEX_OUT_OF_RANGE)
getNoOfDenominators_NSF() : asam::A_UINT32
Postcondition:
(MCDParameterizationException, ePAR_INDEX_OUT_OF_RANGE)
getExtendedParameterInfo_NSF() : asam::ext::ExtendedParameterInfo
Die erweiterte Schnittstelle wird für C++ und Java angeboten, aber nicht über die COM-API
zur Verfügung gestellt.
108 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
/**
* Returns the value of the given parameter which is converted according to the given
* unit group.
*
* First of all the current unit of the given parameter is determined via the given
* logical link.
* Then - by calling the function convertValueByUnitGroup - the parameter's value is converted
* from the current unit into the corresponding unit containing in the given unit group
* (target unit).
*
* @param param (in): parameter whose value should be converted
* (it must contain a default unit with a physical dimension)
* @param logLink (in): the corresponding logical link
* (it is needed to determine the current unit of the parameter value)
* @param unitGroup (in): unit group containing a suitable unit for the conversion of
* parameter value,
* i.e. it must contain a unit with the same physical dimension as the
* parameter's default unit
* @return converted parameter value
* @throws MCDDataBaseException DB element not available
* (eVS_DB_ELEMENT_NOT_AVAILABLE_2)
* if the given parameter does not have a default unit or
* if the default unit does not have a physical dimension.
* MCDParameterizationException invalid value data type
* (eVS_PAR_INVALID_TYPE_3)
* if the parameter's type is not set.
* MCDProgramViolationException no suitable unit found
* (eVS_RT_NO_SUITABLE_UNIT_FOUND)
* if no target unit is found within the given unit
* group.
*/
public abstract MCDValue getValueByUnitGroup (MCDParameter param,
MCDLogicalLink logLink,
MCDDbUnitGroup unitGroup) throws MCDException;
/**
* Converts the given parameter value of type MCDValue from the given current unit into the
* corresponding unit containing in the given unit group (target unit) and returns the
* converted parameter value.
*
* @param paramValue (in): current parameter value of type MCDValue
* (its value and type must be set)
* @param currUnit (in): current unit of the parameter value
* Note: Make sure that this unit corresponds to the given parameter
* value
* @param unitGroup (in): unit group containing a suitable unit for the conversion of
* parameter value,
* i.e. it must contain a unit with the same physical dimension as the
* given current unit
* @return converted parameter value of type MCDValue
* @throws MCDParameterizationException invalid value data type
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 109
* (eVS_PAR_INVALID_TYPE_3)
* if the parameter's type is not set.
* MCDDataBaseException DB element not available
* (eVS_DB_ELEMENT_NOT_AVAILABLE_2)
* if the current unit does not have a physical dimension.
* MCDProgramViolationException no suitable unit found
* (eVS_RT_NO_SUITABLE_UNIT_FOUND)
* if no target unit is found within the given unit group.
*/
public abstract MCDValue convertValueByUnitGroup(MCDValue paramValue,
MCDDbUnit currUnit,
MCDDbUnitGroup unitGroup)throws MCDException;
/**
* Converts the given parameter value of type long from the given current unit into the
* corresponding unit containing in the given unit group (target unit) and returns the
* converted parameter value.
*
* @param paramValue (in): current parameter value of type long
* @param currUnit (in): current unit of the parameter value
* @param unitGroup (in): unit group containing a suitable unit for the conversion of
* parameter value,
* i.e. it must contain a unit with the same physical dimension as the
* given current unit
* @return converted parameter value of type long
* @throws MCDDataBaseException DB element not available
* (eVS_DB_ELEMENT_NOT_AVAILABLE_2)
* if the current unit does not have a physical dimension.
* MCDProgramViolationException no suitable unit found
* (eVS_RT_NO_SUITABLE_UNIT_FOUND)
* if no target unit is found within the given unit group.
*/
public abstract long convertLongByUnitGroup(long paramValue,
MCDDbUnit currUnit,
MCDDbUnitGroup unitGroup) throws MCDException;
/**
* Converts the given parameter value of type double from the given current unit into the
* corresponding unit containing in the given unit group (target unit) and returns the
* converted parameter value.
*
* @param paramValue (in): current parameter value of type double
* @param currUnit (in): current unit of the parameter value
* @param unitGroup (in): unit group containing a suitable unit for the conversion of
* parameter value,
* i.e. it must contain a unit with the same physical dimension as the
* given current unit
* @return converted parameter value of type double
* @throws MCDDataBaseException DB element not available
* (eVS_DB_ELEMENT_NOT_AVAILABLE_2)
* if the current unit does not have a physical dimension.
* MCDProgramViolationException no suitable unit found
* (eVS_RT_NO_SUITABLE_UNIT_FOUND)
* if no target unit is found within the given unit group.
*/
public abstract double convertDoubleByUnitGroup(double paramValue,
MCDDbUnit currUnit,
MCDDbUnitGroup unitGroup) throws MCDException;
110 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
/**
* Returns the target unit containing in the given unit group which has the same physical
* dimension as the given current unit.
*
* @param currUnit (in): current unit
* @param unitGroup (in): unit group in which the target unit (= unit with the same physical
* dimension as the given current unit) will be searched for.
* @return target unit
* @throws MCDDataBaseException DB element not available
* (eVS_DB_ELEMENT_NOT_AVAILABLE_2)
* if the current unit does not have a physical dimension.
* MCDProgramViolationException no suitable unit found
* (eVS_RT_NO_SUITABLE_UNIT_FOUND)
* if no target unit is found within the given unit group.
*/
public abstract MCDDbUnit getTargetUnit(MCDDbUnit currUnit,
MCDDbUnitGroup unitGroup) throws MCDException;
/**
* Converts a parameter value of type MCDValue from a certain source unit into the suitable
* target unit contained in the given unit group and returns the converted parameter value.
* The target unit is determined as follows:
* - Get the collection of MCDDbUnitGroups with category "eEQUIVALENT_UNIT" available for the
* current logical link.
* - Within this collection look for an MCDDbUnitGroup referencing a matching MCDDbUnit.
* The MCDDbUnit matches if
* 1) it has the same physical dimensions as the source MCDDbUnit
* 2) the target MCDDbUnitGroup with category "eCOUNTRY" references an MCDDbUnit with the
* same short name.
* - If the collection of MCDDbUnitGroups with category "eEQUIVALENT_UNIT" is empty, try to
* find a matching MCDDbUnit in the target unit group with category "eCOUNTRY".
* The MCDDbUnit matches if
* 1) it has the same physical dimensions as the source MCDDbUnit.
*
* @param paramValue (in): current parameter value of type MCDValue
* (its value and type must be set)
* @param currUnit (in): current unit of the parameter value
* @param unitGroup (in): unit group containing a suitable unit for the conversion of
* parameter value, i.e. it must contain a unit with the same
* physical dimension as the given current unit
* @param logLink (in): the logical link serving as context for the eEQUIVALENT_UNIT-
* detection
*
* @return converted parameter value of type MCDValue
* @throws MCDParameterizationException if the parameter's type is not set.
* (ePAR_INVALID_TYPE)
*
* MCDDatabaseException if the current unit does not have any physical
* dimension.
* (eDB_ELEMENT_NOT_AVAILABLE)
*
* MCDProgramViolationException if no target unit is found within the given
* unit group
* (eRT_INTERNAL_ERROR)
*
* MCDProgramViolationException if the value conversion failed
* (eRT_INTERNAL_ERROR)
*
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 111
*/
public abstract MCDValue convertValueByEquivUnitGroup(MCDValue paramValue,
MCDDbUnit currUnit,
MCDDbUnitGroup unitGroup,
MCDLogicalLink logLink)
throws MCDException;
/**
* Converts a parameter value of type long from a certain source unit into the suitable
* target unit contained in the given unit group and returns the converted parameter value.
* The target unit is determined as follows:
* - Get the collection of MCDDbUnitGroups with category "eEQUIVALENT_UNIT" available for the
* current logical link.
* - Within this collection look for an MCDDbUnitGroup referencing a matching MCDDbUnit.
* The MCDDbUnit matches if
* 1) it has the same physical dimensions as the source MCDDbUnit
* 2) the target MCDDbUnitGroup with category "eCOUNTRY" references an MCDDbUnit with the
* same short name.
* - If the collection of MCDDbUnitGroups with category "eEQUIVALENT_UNIT" is empty, try to
* find a matching MCDDbUnit in the target unit group with category "eCOUNTRY".
* The MCDDbUnit matches if
* 1) it has the same physical dimensions as the source MCDDbUnit.
*
* @param paramValue (in): current parameter value of type long
* (its value and type must be set)
* @param currUnit (in): current unit of the parameter value
* @param unitGroup (in): unit group containing a suitable unit for the conversion of
* parameter value, i.e. it must contain a unit with the same
* physical dimension as the given current unit
* @param logLink (in): the logical link serving as context for the eEQUIVALENT_UNIT-
* detection
*
* @return converted parameter value of type long
* @throws MCDDatabaseException if the current unit does not have any physical
* dimension.
* (eDB_ELEMENT_NOT_AVAILABLE)
*
* MCDProgramViolationException if no target unit is found within the given
* unit group
* (eRT_INTERNAL_ERROR)
*
* MCDProgramViolationException if the value conversion failed
* (eRT_INTERNAL_ERROR)
*
*/
/**
* Converts a parameter value of type double from a certain source unit into the suitable
* target unit contained in the given unit group and returns the converted parameter value.
* The target unit is determined as follows:
* - Get the collection of MCDDbUnitGroups with category "eEQUIVALENT_UNIT" available for the
* current logical link.
* - Within this collection look for an MCDDbUnitGroup referencing a matching MCDDbUnit.
112 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
/**
* Returns the matching target unit contained in the given unit group.
* The target unit is determined as follows:
* - Get the collection of MCDDbUnitGroups with category "eEQUIVALENT_UNIT" available for the
* current logical link.
* - Within this collection look for an MCDDbUnitGroup referencing a matching MCDDbUnit.
* The MCDDbUnit matches if
* 1) it has the same physical dimensions as the source MCDDbUnit
* 2) the target MCDDbUnitGroup with category "eCOUNTRY" references an MCDDbUnit with the
* same short name.
* - If the collection of MCDDbUnitGroups with category "eEQUIVALENT_UNIT" is empty, try to
* find a matching MCDDbUnit in the target unit group with category "eCOUNTRY".
* The MCDDbUnit matches if
* 1) it has the same physical dimensions as the source MCDDbUnit.
*
* @param currUnit (in): current unit of the parameter value
* @param unitGroup (in): unit group containing a suitable unit for the conversion of
* parameter value, i.e. it must contain a unit with the same
* physical dimension as the given current unit
* @param logLink (in): the logical link serving as context for the eEQUIVALENT_UNIT-
* detection
*
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 113
Als Ergänzung zur Standard-API werden die fehlenden Informationen über zusätzliche
Methoden an bestehenden Schnittstellen zur Verfügung gestellt.
Erweiterungen an MCDDbTableParameter
getDbPreConditionStatesByDbObject_NSF
(asam::d::MCDDbEcuStateChart stateChart) : asam::d::MCDDbEcuStates
Returns the collection of ECU states belonging to the given MCDDbEcuStateChart which are
considered as precondition states for the execution of the current table row.
The collection might be empty if the execution of the current table row is not restricted by any
precondition of the state chart context.
- the input ecu state chart is not valid in the current context
(MCDParameterizationException, ePAR_INVALID_OBJECT)
- the resulting collection would contain at least one duplicate short name entry
(MCDDatabaseException, eDB_INCONSISTENT_DATABASE)
getDbPreConditionStatesBySemantic_NSF
(asam::A_ASCIISTRING semantic) : asam::d::MCDDbEcuStates
114 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
Returns the collection of ECU states belonging to the given MCDDbEcuStateChart semantic
which are considered as precondition states for the execution of the current table row.
The collection might be empty if the execution of the current table row is not restricted by any
precondition of the semantic context.
- the resulting collection would contain at least one duplicate short name entry
(MCDDatabaseException, eDB_INCONSISTENT_DATABASE)
Erweiterungen an MCDDbEcuState
getDbRestrictedTableParameters_NSF() : asam::d::MCDDbPreconditionDefinitions
Returns a collection of precondition definitions for table rows “executable” in the current ECU
state. The collection migth be empty if the current ECU state is not a precondition state for
any table row.
Erweiterungen an MCDDbPreconditionDefinition
getDbTableParameter_NSF() : asam::d::MCDDbTableParameter
Returns the table parameter (table row) of which the current ECU state is considered an
execution precondition.
Restriktionen
11.4.26 MCDLogicalLink::isComParamSupportedByInterface_NSF
In der Praxis ist die CAN-FD-Fähigkeit an einzelne Ressourcen des jeweiligen VCI-Typs
gekoppelt. Ein MCDLogicalLink kann mit oder ohne Angabe einer speziellen Ressource
geöffnet werden.
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 115
Um herauszufinden, ob die vom VCI für den MCDLogicalLink verwendete Ressource eine
Diagnose über CAN-FD ermöglicht oder nicht, muss also der MCDLogicalLink auf jeden Fall
geöffnet sein.
Anschließend benötigt man eine zusätzliche Methode, die dann für einen beliebigen
ComParam die Info liefert, ob die D-PDU-API ihn unterstützt oder nicht, unabhängig davon,
ob der ComParam optional ist oder nicht. Die Methode kann dann applikationsseitig für einen
speziellen CAN FD ComParam aufgerufen werden, um auf diese Weise zu erfahren, ob über
CAN FD kommuniziert werden kann.
* The bit mask value 'bmVal' is negated and applied with an AND-semantic to the parameter
* value 'intVal'.
* The result is stored in the request PDU of the service/control primitive being executed.
* The control flag SUPPRESS_POS_RESP is not set in the PDU_COP_CTRL_DATA.
*
* \post
* If the method succeeds, the new suppress mode is set.
* An exception will be thrown, if
* - the Service/Control Primitive does not support suppressing positive response
* (MCDProgramViolationxception: eRT_FEATURE_NOT_AVAILABLE)
*/
virtual void setSuppressPositiveResponse(asam::A_BOOLEAN suppress)=0;
Das beschriebene Verhalten gilt für Laufzeitdaten auf Basis von ODX 2.2 oder ODX 2.1.0.
Beispiel
<DIAG-SERVICE ID="DIAG_NO_DEF_SPR_ID">
<SHORT-NAME>DIAG_NO_DEF_SPR</SHORT-NAME>
<AUDIENCE/>
<REQUEST-REF ID-REF="REQ_NO_DEF_SPR_ID"/>
<POS-RESPONSE-REFS>
<POS-RESPONSE-REF ID-REF="RESPONSE_ID"/>
</POS-RESPONSE-REFS>
<NEG-RESPONSE-REFS>
<NEG-RESPONSE-REF ID-REF="NEG_RESPONSE_ID"/>
</NEG-RESPONSE-REFS>
<POS-RESPONSE-SUPPRESSABLE>
<BIT-MASK>80</BIT-MASK> <!-- hexadezimal -->
<VALUE-SNREF SHORT-NAME="REQ_PAR_SPR"/>
</POS-RESPONSE-SUPPRESSABLE>
</DIAG-SERVICE>
<DIAG-SERVICE ID="DIAG_DEF_SPR_ID">
<SHORT-NAME>DIAG_DEF_SPR</SHORT-NAME>
<AUDIENCE/>
<REQUEST-REF ID-REF="REQ_DEF_SPR_ID"/>
<POS-RESPONSE-REFS>
<POS-RESPONSE-REF ID-REF="RESPONSE_ID"/>
</POS-RESPONSE-REFS>
<NEG-RESPONSE-REFS>
<NEG-RESPONSE-REF ID-REF="NEG_RESPONSE_ID"/>
</NEG-RESPONSE-REFS>
V14.0.0 / 31.10.2019 11. Abweichungen von ASAM MCD-3D 3.0.0 117
<POS-RESPONSE-SUPPRESSABLE>
<BIT-MASK>80</BIT-MASK> <!-- hexadezimal -->
<VALUE-SNREF SHORT-NAME="REQ_PAR_SPR"/>
</POS-RESPONSE-SUPPRESSABLE>
</DIAG-SERVICE>
<REQUEST ID="REQ_NO_DEF_SPR_ID">
<SHORT-NAME>REQ_NO_DEF_SPR</SHORT-NAME>
<PARAMS>
<PARAM xsi:type="CODED-CONST">
<SHORT-NAME>REQ_PAR</SHORT-NAME>
<BYTE-POSITION>0</BYTE-POSITION>
<CODED-VALUE>40</CODED-VALUE>
<DIAG-CODED-TYPE BASE-DATA-TYPE="A_UINT32" xsi:type="STANDARD-LENGTH-TYPE">
<BIT-LENGTH>8</BIT-LENGTH>
</DIAG-CODED-TYPE>
</PARAM>
<PARAM xsi:type="VALUE">
<SHORT-NAME>REQ_PAR_SPR</SHORT-NAME>
<PHYSICAL-DEFAULT-VALUE>1</PHYSICAL-DEFAULT-VALUE> <!-- dezimal -->
<DOP-SNREF SHORT-NAME="SIMPLE_DOP"/>
</PARAM>
</PARAMS>
</REQUEST>
<REQUEST ID="REQ_DEF_SPR_ID">
<SHORT-NAME>REQ_DEF_SPR</SHORT-NAME>
<PARAMS>
<PARAM xsi:type="CODED-CONST">
<SHORT-NAME>REQ_PAR</SHORT-NAME>
<BYTE-POSITION>0</BYTE-POSITION>
<CODED-VALUE>40</CODED-VALUE>
<DIAG-CODED-TYPE BASE-DATA-TYPE="A_UINT32" xsi:type="STANDARD-LENGTH-TYPE">
<BIT-LENGTH>8</BIT-LENGTH>
</DIAG-CODED-TYPE>
</PARAM>
<PARAM xsi:type="VALUE">
<SHORT-NAME>REQ_PAR_SPR</SHORT-NAME>
<PHYSICAL-DEFAULT-VALUE>129</PHYSICAL-DEFAULT-VALUE> <!-- dezimal -->
<DOP-SNREF SHORT-NAME="SIMPLE_DOP"/>
</PARAM>
</PARAMS>
</REQUEST>
SET_SPR erhält initial den Wert true, wenn der in der ODX-Bedatung referenzierte Request-
Parameter einen internen Default-Wert - bedatet oder berechnet – hat, der sich durch OR-
118 11. Abweichungen von ASAM MCD-3D 3.0.0 V14.0.0 / 31.10.2019
Für die Voreinstellung des Flags SET_SPR für den Dienst DIAG_NO_DEF_SPR wird der
Wert false ermittelt:
defVal 1 (dez) = 00000001 (bin) // interner Default-Wert
Verknüpfung 00000001
| 10000000
----------
10000001 (bin) // 0x81 != Default
Für die Voreinstellung des Flags SET_SPR für den Dienst DIAG_DEF_SPR wird der Wert
true ermittelt:
defVal 129 (dez) = 10000001 (bin) // interner Default-Wert
Verknüpfung 10000001
| 10000000
----------
10000001 (bin) // 0x81 == Default
Die MCD3-D Schnittstelle bietet diverse Klassen und Methoden für das Ermitteln und Setzen
von Kommunikationsparametern:
Die an einem DIAG-SERVICE im ODX überschriebenen ComParams gelten nur für die
Ausführung des entsprechenden Dienstes. Sie werden mit der proprietären Methode
MCDDbService::getOverwrittenComParams_NSF, s.u., als MCDDbRequestParameter zur
Verfügung gestellt, deren Default-Werte dann die im ODX bedateten Werte darstellen. Diese
Werte können applikationsseitig nicht verändert werden.
Die Schnittstelle des MCD-Kernels, konkret die Klasse asam:: d::MCDDbService, wird um
folgende Methode erweitert:
/** Returns the collection of communication parameters (protocol parameters) that temporarily
* overwrite the values of the logical link specific communication parameters for execution
* of the corresponding runtime service, see ODX / DIAG-SERVICE / COMPARAM-REFs-
* The collection might be empty.
*/
virtual asam::d::MCDDbRequestParameters* getOverwrittenComParams_NSF()=0;
120 12. Systemanforderungen V14.0.0 / 31.10.2019
12 Systemanforderungen
12.1 Betriebssysteme
Der MCD-Kernel ist als 32-Bit Bibliothek sowohl auf Windows XP als auch Windows 7 32 /
64 Bit lauffähig.
Die 64-Bit Bibliothek des MCD-Kernels ist unter Windows 7 und 10 64-Bit lauffähig.
„Embedded“ Systeme:
• RAM (ohne ODX-Daten und Applikationen, inklusive JVM, PDU-API, Treiber und
Diagnoseprotokolle): < 64 MB
Das Problem ist insofern entschärft worden, als man die Arbeitsweise des ODX-Converters
nun so konfigurieren kann, dass die Daten der Basisvarianten und zugehörigen ECU-
Varianten in einer Laufzeitdatenbank gehalten werden.
Der für den MCD-Kernel-Prozess verfügbare Hauptspeicher ist in Abhängigkeit von der
Systemausstattung beschränkt. Wenn der Hauptspeicherbedarf diese Grenze im laufenden
Betrieb überschreitet, ist in der Regel ein weiterer ordnungsgemäßer Ablauf der Applikation
nicht mehr möglich. Kritisch sind vor allem solche Applikationen, die über die DB-
Schnittstelle des Kernels sehr große Teile der in den Laufzeitdatenbanken enthaltenen
Projektinformationen auslesen und die entsprechenden MCD-DB-Objekte halten. Man
beachte, dass die meisten MCD-DB-Objekte nicht explizit freigegeben werden können und
damit die Lebensdauer dieser Objekte grundsätzlich nur durch den Zeitraum beschränkt
wird, in dem das übergeordnete Projekt selektiert ist. Weitere Restriktionen und Freigaben
dieser Objekte beruhen nur auf Annahmen.
Bei Java-Applikationen wird die Lebensdauer der in der C++-Schicht des Kernels gehaltenen
Objekte an die Existenz entsprechender Java-Referenzen gekoppelt. Wenn einer Java-
Applikation ein sehr großer Speicherraum für die VM eingeräumt wird, kann es passieren,
dass der Java Garbage-Collector nicht aktiv wird, obwohl der weitaus größere
Speicherbedarf für C++ bereits an die Systemgrenzen stößt.
Java-Applikationen ohne eigene Objektverwaltung sollten daher ihrer VM nicht mehr als den
tatsächlich erforderlichen Speicher einräumen.
Der MCD-Kernel bietet Java-Applikationen die Möglichkeit, die maximale Anzahl der intern
gehaltenen MCD-DB-Objekte zu konfigurieren. Wird diese Zahl erreicht, so werden im
weiteren Verlauf die jeweils ältesten Objekte überschrieben, die bei Bedarf erneut geladen
werden müssen.
Ein allgemein gültiger optimaler Wert für die maximale Anzahl intern gehaltener MCD-DB-
Objekte kann nicht genannt werden, weil zum einen die Anzahl noch nichts über die Größe
der Objekte aussagt, zum anderen es noch keine Erfahrungswerte gibt, ab wann sich der
122 13. Lizenzierung V14.0.0 / 31.10.2019
erhöhte Hauptspeicherbedarf negativer auf die Laufzeit auswirkt als das wiederholte
Nachladen von Objekten.
Die maximale Größe von Flashdateien ist durch die MCD-standardkonforme Verwendung
des Datentyps A_UINT32 für Segmentgrößen und Adressen auf 4 GB beschränkt.
• Aktuell: Microsoft Visual Studio 7.1 (unterstützt bis Ende Q2, 2014)
• Umstieg auf Microsoft Visual Studio 2013 (Compiler VC12.0) bis Ende Q2, 2014
13 Lizenzierung
Die Lizenzierung des MCD-Kernels erfolgt über eine Applikationskopplung. Fällt die Prüfung
einer erfolgreichen Applikationskopplung negativ aus, kann die Applikation keine Instanz des
MCDSystem erstellen und somit den MCD-Kernel nicht verwenden.
13.1 Applikationskopplung
Über ein sogenanntes “Challenge and Response”-Verfahren wird eine Kopplung zwischen
einer Applikation und dem VW-MCD MCD-Kernel etabliert, die dafür sorgt, dass der MCD-
Kernel nur in Verbindung mit dieser Applikation betrieben werden kann.
Hierbei erfragt die Applikation eine Nachricht beim MCD-Kernel, berechnet aus der Nachricht
und einem geheimen Schlüssel über einen festgelegten Algorithmus einen Freischaltcode,
der an den MCD-Kernel zurückgeschickt wird.
Der MCD-Kernel berechnet nach demselben Algorithmus mit denselben Angaben seinerseits
einen Freischaltcode und vergleicht diesen mit dem von der Applikation gesetzten Wert. Nur
bei Gleichheit wird der MCD-Kernel zur weiteren Nutzung freigeschaltet.
Eine automatische Erkennung von freizuschaltenden Applikationen, ohne dass sich diese
aktiv über den beschriebenen Mechanismus registrieren, findet nicht statt.
V14.0.0 / 31.10.2019 13. Lizenzierung 123
Applikation
compute
Secret Key
sha-512
VW-MCD MCD-Kernel
sendMac_NSF
Security Access API
getSeedForMac_NSF
MCD-3D API
sha-512
compute
Secret
Key
13.1.1 Details
13.1.1.1 HMAC
HMAC ist ein keyed-hash message authentication code, eine Art Message Authentication
Code (MAC), der basierend auf einer kryptografischen Hash-Funktion berechnet wird. Eine
genauere Beschreibung kann unter http://de.wikipedia.org/wiki/Keyed-
Hash_Message_Authentication_Code gefunden werden. Für die Verschlüsselung wird hier
eine sha-512 Hash-Funktion verwendet.
13.1.1.2 Geheimnis
Die Applikation und der VW-MCD MCD-Kernel teilen sich ein Geheimnis, d.h. einen
geheimen Schlüssel, der auf beiden Seiten in die Berechnung des MAC einfließt, ohne
zwischen Applikation und MCD-Kernel direkt ausgetauscht zu werden. Eine Applikation, die
dieses Geheimnis nicht kennt, kann den MCD-Kernel nicht freischalten.
• getSeedForMac_NSF
• sendMac_NSF
• isAuthorized_NSF
124 13. Lizenzierung V14.0.0 / 31.10.2019
Diese Methoden müssen aufgerufen werden, bevor das MCDSystem-Objekt erstellt wird.
Aus dieser Nachricht und einem geheimen Schlüssel, siehe Kapitel 13.1.1.2, erzeugt die
Applikation einen über den sha-512-Algorithmus einen MAC, siehe Kapitel 13.1.1.1, der an
die SecurityAccess-Schnittstelle zurückgeschickt wird.
The application has to create a key from this seed using a procedure and a certain secret
known to the MVCI server. The key will be returned to the MVCI server and can be checked
whenever it is necessary. See MCDSystem::sendMac_NSF.
Precondition:
Postcondition:
(MCDProgramViolationException, eRT_INTERNAL_ERROR)
Sowohl der MCD-Kernel als auch die Applikation müssen diesen Schritt durchführen, damit
der MCD-Kernel prüfen kann, ob die Applikation einen gültigen Freischaltcode berechnet hat.
V14.0.0 / 31.10.2019 14. Installation für Windows 125
Sends a byte field to be interpreted as MAC for unlocking the MVCI server. An application
should have created the MAC from a seed requested from the MVCI server using
MCDSystem::getSeedForMac_NSF(). The MAC creation procedure and a certain secret has
to be known to both, the MVCI server and the application.
Precondition:
Postcondition:
(MCDProgramViolationException, eRT_INTERNAL_ERROR)
Returns true if the current application is authorized for MVCI server usage, otherwise false.
Eine Applikation sollte die Methode nutzen, um sich vor der Instanziierung des MCD-Kernels
über den Status zu informieren; der MCD-Kernel muss dies tun.
13.1.2 Randbedingungen
Für jede VW-MCD MCD-Kernel Applikation wird ein spezieller geheimer Schlüssel
verwendet, der mit der Applikations-ID verbunden ist.
SetupVWMCD_32_Kernel_V<version>.exe
SetupVWMCD_64_Kernel_V<version>.exe
SetupVWMCD_32_V<version>.exe
beziehungsweise
SetupVWMCD_64_V<version>.exe
aktiviert werden.
Grundsätzlich wird davon abgeraten, ein Setup des MCD-Kernels über bestehende
Installationen, d.h. in dasselbe Verzeichnis zu installieren, ohne die bestehende Version
deinstalliert zu haben.
Wird dennoch eine solche Aktualisierung vorgenommen, so wird der Anwender im GUI-
Modus gefragt, wie mit bestehenden Konfigurationsdateien umgegangen werden soll. Bei
jeder Konfigurationsdatei hat der die Möglichkeit zu entscheiden, ob die Datei überschrieben
oder beibehalten werden soll.
Zur Integration in übergeordnete Setups ist für das Einzelsetup auch ein sogenannter
„silent“-Modus wählbar:
/dir=<Installationspfad>
Fehlt der Parameter, wird das zuletzt gewählte Installationsverzeichnis bzw. bei
Erstinstallation das Verzeichnis C:/%ProgramFiles%/Volkswagen/VW-MCD angenommen.
/confdir=<Konfigurationspfad>
Fehlt der Parameter, wird das zuletzt gewählte Konfigurationsverzeichnis bzw. bei
Erstinstallation das Verzeichnis C:/ %ProgramFiles%//Volkswagen/VW-MCD (WinXP) oder
C:/users/public/Volkswagen/VW-MCD/config angenommen.
V14.0.0 / 31.10.2019 14. Installation für Windows 127
/overwrite
Standardmäßig werden bei der Installation Startmenüeinträge erstellt. Durch Angabe von
/NOICONS
/nosetenv
Die zu verwendende Sprache für das Setup kann durch Angabe des Parameters
/lang=english
/lang=german
auf Deutsch gesetzt werden. Wenn die Sprache als Parameter angegeben wird entfällt im
Setup die Auswahl der zu verwendenden Sprache.
/group=<Gruppenname>
übergeben werden. Wenn ein Gruppenname übergeben wird, entfällt im Setup die Auswahl
des zu verwendenden Gruppennamens.
Mögliche Fehlerwerte sind zurzeit 1 bis 8, die auf Fehler in den unterschiedlichen Phasen
der Installation hinweisen.
(2) Der Anwender hat die Installation im GUI-Modus durch „Abbrechen“ oder „Nein“
abgebrochen, bevor die eigentliche Installation der Software gestartet ist.
128 14. Installation für Windows V14.0.0 / 31.10.2019
(5) Der Anwender hat die Installation im GUI-Modus während der tatsächlichen
Installation durch „Abbrechen“ oder „Abbrechen und Wiederholen“ abgebrochen.
(8) Fehler bei der Vorbereitung der tatsächlichen Installation, kann nur durch System-
Neustart behoben werden.
Die Deinstallation der MCD-Kernel Software erfolgt durch Aufruf des entsprechenden
Uninstallers aus dem Startmenü heraus:
Alternativ kann das Programm Uninstall VW-MCD Kernel <version> Installation.exe auch
direkt aufgerufen werden. Es befindet sich neben dem Installationsverzeichnis.
<Laufwerk>:\Users\Public\Volkswagen\VW-MCD\config
gewählt.
In älteren Versionen hat das Laufzeitsystem, der MCD-Kernel, seine Konfigurationen bislang
über die Umgebungsvariable VW_MCD_HOME gefunden, die bei Ausführung des VW-MCD-
Setup auf das MCD-Kernel-Verzeichnis der Installation gesetzt wurde.
muss diese DLLs selbständig laden. Das Setzen dieser Property erlaubt einer Applikation,
zwischen verschiedenen MCD-Kernel-Installationen umzuschalten.
In der aktuellen Version wird bei einer Installation unter Windows 7 neben der
Umgebungsvariablen VW_MCD_HOME zusätzlich die Umgebungsvariable
VW_MCD_CONFIG berücksichtigt. Letztere bezeichnet das Verzeichnis der
Konfigurationsdateien und wird bei Ausführen des VW.MCD-Setup auf das bereits erwähnte
Verzeichnis
<Laufwerk>:\Users\Public\Volkswagen\VW-MCD\config
gesetzt.
Bei einer Installation unter Windows 7 bezieht sich der relative Pfad des
Projektwurzelverzeichnisses auf VW_MCD_CONFIG, und das Setup erzeugt ein leeres
Verzeichnis
<Laufwerk>:\ Users\Public\Volkswagen\VW-MCD\config
Für eine Installation unter Windows XP wird das alte Verhalten beibehalten.
(Ausnahme: Das Ermitteln der Tester-ID als Wert für einen entsprechenden
Systemparameter erfolgt zurzeit noch unter Auswertung der Umgebungsvariablen
VW_MCD_CONFIG zum Auffinden der Konfigurationsdatei TESTERID.INI. Eine
Anpassung folgt in Kürze.)
Die DLLs des MCD-Kernels werden zunächst mit der allgemeinen Java-System-Property
„user.dir“ gesucht. Sind sie nicht in diesem Verzeichnis abgelegt – bei gängigen
Installationen der Normalfall -, werden sie über gängige Windows-Mechanismen zum
Laden von Bibliotheken geladen. Dies bedeutet, dass der Suchpfad (%PATH%) um das
Verzeichnis der MCD-Kernel-DLLs erweitert werden muss.
Die DLLs des MCD-Kernels werden zunächst mit der allgemeinen Java-System-Property
„user.dir“ gesucht. Sind sie nicht in diesem Verzeichnis abgelegt – bei gängigen
Installationen der Normalfall -, werden sie über gängige Windows-Mechanismen zum
Laden von Bibliotheken geladen. Dies bedeutet, dass der Suchpfad (%PATH%) um das
Verzeichnis der MCD-Kernel-DLLs erweitert werden muss.
• boost*.dll; V 1.57
• expat_vc120.dll; V 2.0.1
• libxml2_vc120.dll; V 2.9.1
• zlib1.dll; V 1.2.6
• pbl; V 1.03
• loki; 2003_04_13
• ZipArchive; V 4.1.2
16 Sonstige Hinweise
Man beachte, dass die VWMCD COM-API technologiebedingt nicht in der Lage ist, einen
Wert MAX_UINT32 bei einem MCD-Datentyp A_UINT32 zu liefern, da der MCD-Typ gemäß
Standard auf den COM Typ LONG abgebildet wird – mit entsprechendem Datenverlust bei
Werten größer MAX_INT32.
Analoge Restriktionen bestehen in allen Fällen, bei denen „unsigned“ Datentypen auf
„signed“ COM-Datentypen abgebildet werden müssen, siehe Table 2 in
ASAM_AE_MCD-3D_BS_3_4_COM-IDL-Technology-Reference-Mapping-Rules_V3-0-0.pdf.