:Revision=7
:html
<<
128.170
KW2000-Objekt|KW2000
$NoSort
--
Das IP-Objekt <!RW>KW2000 realisiert das <b>Keyword Protocol 2000</b> in Anlehnung an <b>ISO14230</b>. (Auch K-Line genannt, die L-Line wird nicht untersttzt)


Neu in Revision 5:
Es werden in Zukunft mehrere PortTypen (physikalische Medien und Transportprotokolle) untersttzt.
Bisher wurde die Kommunikation ber das Transportprotokoll TP2.0 ber MOST implementiert, TP2.0 ber CAN und TP1.6 ber CAN werden folgen.

Hardware fr die unterschiedlichen Porttypen
<h4>1. KLine ber RS232</h4>
Serielle Schnittstelle mit K-Line-Konverter (von MCD-Elektronik)
<h4>2. TP1.6 ber CAN</h3>
CAN-Schnittstelle (z.B. CAN CardX)
<h4>3. TP2.0 ber CAN</h4>
CAN-Schnittstelle (z.B. CAN CardX)
<h4>4. TP2.0 ber MOST</h4>
Optolyzer der Firma OASIS an einer seriellen Schnittstelle

<!REM>
Hinweis:
Im aktuellen System sind 2 <!RW>KW2000 Schnittstellen implementiert. Als Bus-Nummer muss in den einzelnen Befehlen daher jeweils 1 oder 2 angegeben werden.
<!TXT>
>>
<<
128.170.1
KW2000-Frame|Frameaufbau
--
Ein KeyWord 2000 Frame besteht aus einem Kopfteil (Typbyte, Target- und Sourceadresse und einem otpionalen Lngenbyte), den Datenbytes und der Checksumme.

Die Keyword 2000 Frames werden byteweise in einem Vektor abgelegt. Jedes Element entspricht einem Byte.

<h4>Porttype KLine</h4>
Fr den internen Aufbau der Frames mssen zwei Flle unterschieden werden:

<ol indent=20>
<li>Der High-Level-Zugriff mit den Routinen <!RW>KW2000.Send und <!RW>KW2000.Received. In diesem Modus werden beim Senden nur die Datenbytes im Frame angegeben und der Kopf des Frames wird automatisch nach den Angaben in der Grundeinstellung erzeugt. Beim Empfangen wird der Kopf entfernt und nur die Datenbytes zurckgegeben. Die Checksumme wird automatisch erzeugt und entfernt.<br></li>
<li>Der Low-Level-Zugriff mit <!RW>KW2000.Put und <!RW>KW2000.Get. In diesem Modus wird nur die Checksumme automatisch erzeugt bzw. entfernt. Bei <!RW>KW2000.Put muss der Kopf und die Datenbytes angegeben werden, wobei nicht geprft wird, ob die im Kopf angegebene Lnge zu der Lnge der Nachricht passt, es wird einfach die Prfsumme berechnet, an den Frame angehngt und das ganze abgeschickt. Beim Empfangen mit <!RW>KW2000.Get wird der Kopf mit zurckgegeben.</li>
</ol>
Ein Mischbetrieb (z.B. Senden mit <!RW>KW2000.Send und Auswerten mit <!RW>KW2000.Get) ist mglich.

Nachrichten im CARB-Modus werden nicht korrekt empfangen. Es werden Nachrichten mit Lngenangabe im Formatbyte und mit extra Lngenbyte korrekt empfangen. Die Checksumme wird beim Empfangen geprft. 

<h4>andere Porttypen (alle TPx.x)</h4>
Es werden immer die reinen Daten ausgetauscht. Die Befehle <!RW>Send und <!RW>Put bzw. <!RW>Received und <!RW>Get sind daher funktionsgleich. Jegliche Protokollumsetzung findet innerhalb des Interpreterobjektes statt.
>>

<<
128.170.2
Funktionen des KW2000-Objekts|Funktionen
--
>>
<<
128.170.2.1
KW2000.Received|Received
!128.170.2.7 - Get
--
<!DEF>
function <!TW>KW2000.Received (rNr : real) : vector;
<!TXT>
Liefert den beim letzen Senden empfangenen Frame zurck, wobei Kopf und Checksumme entfernt sind. Wenn nichts empfangen wurde, so ist der Vektor leer. Soll der Kopf mit ausgewertet werden, so kann (bei PortType <!SW>KLine) <!RW>Get benutzt werden.

Fr andere Porttypen als <!SW>KLine ist der Befehl <!RW>Get identisch mit <!RW>Received.
>>
<<
128.170.2.2
KW2000.IsActive|IsActive
--
<!DEF>
function <!TW>KW2000.IsActive : real;
<!TXT>
Liefert <!RW>TRUE, wenn KW2000-Bus global aktiviert ist

<!DEF>
function <!TW>KW2000.IsActive (rNr : real) : real;
<!TXT>
Liefert <!RW>TRUE, wenn KW2000-Bus global aktiviert und der KW2000-Bus <!PW>rNr auch aktiv ist.
>>
<<
128.170.2.3
KW2000.IsOpen|IsOpen
--
<!DEF>
function <!TW>KW2000.IsOpen (rNr : real) : real;
<!TXT>
Liefert <!RW>TRUE, wenn der Port von KW2000-Bus <!PW>rNr geffnet ist.
>>
<<
128.170.2.4
KW2000.Check|Check
--
<!DEF>
function <!TW>KW2000.Check (vFrame, vTest : vector [; rMode : real]) : real;
<!TXT>
Vergleicht den Frame im Vektor <!PW>vFrame mit dem Frame im Vektor <!PW>vTest.

 <!PW>vFrame darf nur Werte 0..255 enthalten (die Bytes des Frames)
 <!PW>vTest darf Werte im Bereich -1..255 enthalten, -1=Don't care

 <!PW>rMode legt das Verhalten bei unterschiedlicher Lnge fest,
<!STBL>
<td>0<!>Lnge muss identisch sein (default)<!>
<!>1<!><!PW>vFrame darf krzer als <!PW>vTest sein<!>
<!>2<!><!PW>vFrame darf lnger als <!PW>vTest sein, kein Test der 'berstehenden' Bytes<!>
<!>3<!><!PW>vFrame darf lnger oder krzer sein<!>
<!ETBL>

Rckgabe: 0= alles ok, sonst die Position in <!PW>vFrame, die abweicht.
>>
<<
128.170.2.5
KW2000.GetTiming|GetTiming
!128.170.3.5 - SetTiming
--
<!DEF>
function <!TW>KW2000.GetTiming (rNr, rItem : real) : real;
<!TXT>
Holt das Timing des KW2000-Busses <!PW>rNr. <!PW>rItem gibt an, welcher Parameter gelesen werden soll. Ergebnis in ms.

<!STBL>
<tr bgcolor=f0f0f0 align=center><td><b>rItem</b><!+>Parameter<!+>PortType<!+>Bedeutung<!>
<!c>1<!>Inter-Byte-Time P4/P5<!>KLine<!>Zeit zwischen 2 gesendeten Bytes<!>
<!c>2<!>Timeout Receive P2<!>KLine<!>Timeout beim Empfangen<!>
<!c>3<!>Line Idle Time Min P3<!>KLine<!>Mindestzeit zw. Antwort und Anfrage<!>
<!c>4<!>Line Idle Time Max P3<!>KLine<!>Maximalzeit zw. Antwort und Anfrage<!>
<tr><td rowspan=2 align=center>5<!>Task Complete Timeout<!>alle<!>Timeout fr einen kompletten Request<!>
<tr><td colspan=3><!REM>Kommt nur zum Tragen, wenn die Negative Response-Codes 21 bzw. 78 intern behandelt werden.<!TXT><!>
<tr><td rowspan=2 align=center>6<!>NRC21 Repeat Delay<!>alle<!>Wartezeit vor erneuter Anfrage bei NRC 21<!>
<tr><td colspan=3><!REM>Kommt nur zum Tragen, wenn der Negative Response-Code 21 intern behandelt wird.<!TXT><!>
<!c>7<!>Timeout Ack<!>TP20 Most<!>Timeout beim Warten auf Quittierungen (T1)<!>
<!c>8<!>Timeout Receive<!>TP20 Most<!>Timeout beim Warten auf Empfangsdaten<!>
<!ETBL>
>>
<<
128.170.2.6
KW2000.Error|Error
!128.170.4 - ErrorCodes
--
<!DEF>
function <!TW>KW2000.Error (rNr : real) : real;
<!TXT>
Liefert das Ergebnis der letzten Aktion auf den KW2000-Bus <!PW>rNr.
>>
<<
128.170.2.7
KW2000.Get|Get
!128.170.2.1
--
<!DEF>
function <!TW>KW2000.Get (rNr : real) : vector;
<!TXT>
Liefert den beim letzen Senden empfangenen Frame zurck. Im Frame ist (bei PortType <!SW>KLine) der Kopf enthalten. Wenn nichts empfangen wurde, so ist der Vektor leer. Wenn der Kopf nicht ausgewertet werden soll, kann <!RW>Received benutzt werden.

Fr andere Porttypen als <!SW>KLine ist der Befehl <!RW>Get identisch mit <!RW>Received.
>>
<<
128.170.2.8
KW2000.Address.Get|Address.Get
--
<!DEF>
function <!TW>KW2000.Address.Get (rNr, rWhich : real) : real;
<!TXT>
Liefert eine der im KW2000 Protokoll auf dem Bus <!PW>rNr benutzen Adresse zurck.

<!PW>rWhich legt fest, welche Adresse geholt wird:
<!STBL>
<!+>rWhich<!+>PortType<!+>Adresse<!>
<!c>1<!>KLine<!>ECU - Adresse<!>
<!c>2<!>KLine<!>Tester - Adresse<!>
<!c>3<!>TP20 Most<!>Tester Adresse TP20<!>
<!c>4<!>TP20 Most<!>ECU Adresse TP20<!>
<!c>5<!>TP20 Most<!>Empfangs ID CAN<!>
<!c>6<!>TP20 Most<!>Tester Adresse MOST<!>
<!c>7<!>TP20 Most<!>ECU Adresse MOST<!>
<!ETBL>

Es knnen alle Adressen gelesen werden, jedoch haben im Betrieb nur solche Auswirkungen, die auch zum benutzten PortType passen.
>>
<<
128.170.2.9
KW2000.Mode.Get|Mode.Get
--
<!DEF>
function <!TW>KW2000.Mode.Get (rNr : real) : real;
<!TXT>
Liefert den Modus (PortType), in dem der KW2000 <!PW>rNr arbeitet.

Rckgabewerte:
<!STBL>
<!+>Wert<!+>PortType<!>
<!c>0<!>KLine<!>
<!c>1<!>TP1.6 CAN<!>
<!c>2<!>TP2.0 CAN<!>
<!c>3<!>TP2.0 Most<!>
<!ETBL>
>>

<<
128.170.2.10
KW2000.Port.Get|Port.Get
--
<!DEF>
function <!TW>KW2000.Port.Get (rNr, rWhich : real) : string;
<!TXT>
Liefert den Namen des physikalischen Ports, der von dem KW2000 Port zur Kommunikation benutzt wird.

 <!PW>rWhich whlt aus, welcher Port gelesen werden soll:

Werte fr <!PW>rWhich:
<!STBL>
<!+>Wert<!+>Port<!>
<!c>1<!>TP1.6 CAN Port<!>
<!c>2<!>TP2.0 CAN Port<!>
<!ETBL>
>>

<<
128.170.3
Prozeduren des KW2000-Objekts|Prozeduren
--
>>
<<
128.170.3.1
KW2000.Open|Open
--
<!DEF>
procedure <!TW>KW2000.Open (rNr : real);
<!TXT>
ffnet den KW2000-Bus <!PW>rNr.
>>
<<
128.170.3.2
KW2000.Close|Close
--
<!DEF>
procedure <!TW>KW2000.Close (rNr : real);
<!TXT>
Schliet den KW2000-Bus <!PW>rNr.
>>
<<
128.170.3.4
KW2000.Send|Send
!128.170.3.8 - Put
--
<!DEF>
procedure <!TW>KW2000.Send (rNr : real; .Frame : string|vector [; rTimeout : real [; rTaskTimeout : real [; var .Recv : string|vector]]]);
<!TXT>
Sendet den als Vektor <!PW>Frame auf den KW2000-Bus <!PW>rNr und wartet <!PW>rTimeout ms auf die Antwort. Ist <!PW>rTimeout nicht angegeben oder -1, so wird die Zeit aus der Grundeinstellung benutzt.

Statt eines Vektors kann fr <!PW>Frame ein String angegeben werden. Dann wird jedes Zeichen des Strings als ein Byte geschickt.

Ist die interne Behandlung der Negative Response Codes 21 bzw 78 aktiviert, so legt <!PW>rTimeout  das Zeitintervall fest, innerhalb dessen sich der Prfling melden muss. <!PW>rTaskTimeout legt dann fest, wie lange die gesamte Bearbeitung des Requests dauern darf. Ist <!PW>rTaskTimeout nicht angegeben oder -1, wird der Wert aus der Grundeinstellung benutzt. Wenn die interne Fehlerbearbeitung nicht aktiviert ist, kommt <!PW>rTaskTimeout nicht zum Tragen.

Wird die Variable <!PW>Recv angegeben, so wird der als Antwort empfangene Frame direkt in <!PW>Recv zurckgegeben, entweder als Vektor oder als String. Dieser Befehl kombiniert <!RW>KW2000.Send und <!RW>KW2000.Received. 

Beispiel:
<!CODE>
KW2000.Send (1, [$3E], -1, -1, lRecv);
// ist quivalent zu:
KW2000.Send (1, [$3E]);
lRecv:=KW2000.Receive (1);
<!TXT>

 <!RW>Send ist eine High-Level-Routine, die fr den PortType <!SW>KLine den Frame einen Kopf gem der Grundeinstellung erzeugt. <!PW>Frame darf daher nur die Datenbytes enthalten. Soll ein bestimmter Kopf mit bertragen werden, so muss <!RW>Put benutzt werden.

Fr andere Porttypen als <!SW>KLine ist der Befehl <!RW>Put identisch mit <!RW>Send.
>>
<<
128.170.3.5
KW2000.SetTiming|SetTiming
!128.170.2.5 - GetTiming
--
<!DEF>
procedure <!TW>KW2000.SetTiming (rNr, rItem, rTime : real);
<!TXT>
ndert das Timing des KW2000-Busses <!PW>rNr. <!PW>rItem gibt an, welcher Parameter gendert werden soll. <!PW>rTime gibt den neuen Wert an (in ms).

<!STBL>
<tr bgcolor=f0f0f0 align=center><td><b>rItem</b><!+>Parameter<!+>PortType<!+>Bedeutung<!>
<!c>1<!>Inter-Byte-Time P4/P5<!>KLine<!>Zeit zwischen 2 gesendeten Bytes<!>
<!c>2<!>Timeout Receive P2<!>KLine<!>Timeout beim Empfangen<!>
<!c>3<!>Line Idle Time Min P3<!>KLine<!>Mindestzeit zw. Antwort und Anfrage<!>
<!c>4<!>Line Idle Time Max P3<!>KLine<!>Maximalzeit zw. Antwort und Anfrage<!>
<tr><td rowspan=2 align=center>5<!>Task Complete Timeout<!>alle<!>Timeout fr einen kompletten Request<!>
<tr><td colspan=3><!REM>Kommt nur zum Tragen, wenn die Negative Response-Codes 21 bzw. 78 intern behandelt werden.<!TXT><!>
<tr><td rowspan=2 align=center>6<!>NRC21 Repeat Delay<!>alle<!>Wartezeit vor erneuter Anfrage bei NRC 21<!>
<tr><td colspan=3><!REM>Kommt nur zum Tragen, wenn der Negative Response-Codes 21 intern behandelt wird.<!TXT><!>
<!c>7<!>Timeout Ack<!>TP20 Most<!>Timeout beim Warten auf Quittierungen (T1)<!>
<!c>8<!>Timeout Receive<!>TP20 Most<!>Timeout beim Warten auf Empfangsdaten<!>
<!ETBL>
>>
<<
128.170.3.6
KW2000.Wakeup|Wakeup
--
<!DEF>
procedure <!TW>KW2000.Wakeup (rNr, rMode : real; .Frame : string|vector [; rAddHead : real]);
<!TXT>
Fhrt einen Wakeup auf dem KW2000-Bus <!PW>rNr durch.

<!PW>rMode gibt die Art des Wake-Up an, im Moment ist nur 1 = Fast Wake up erlaubt. Direkt danach wird der Frame gesendet und die in den Grundeinstellungen angegebene Zeit auf Antwort gewartet.

Ist <!PW>rAddHead (default=<!RW>true) mit <!RW>false angegeben, so wird fr <!PW>Frame kein Header berechnet, ansonsten (im Defaultfall) wird ein Header gem der Grundeinstellung erzeugt.

Statt eines Vektors kann ein String angegeben werden. Dann wird jedes Zeichen des Strings als ein Byte geschickt.

Der Befehl <!RW>Wakeup hat fr andere Porttypen als <!SW>KLine keine Funktion, da die Transportprotokolle kein Wakeup kennen.
>>
<<
128.170.3.7
KW2000.KeepAlive|KeepAlive
--
<!DEF>
procedure <!TW>KW2000.KeepAlive (rNr : real; .Frame : string|vector [; rAddHead :real [; rInterval : real]]);
<!TXT>
Definiert den Frame, der fr den Lebenserhalt der Kommunikation verwendet wird (Zeit P3 max). Findet fr die Zeit P3 max keine Kommunikation statt, so wird der <!PW>Frame gesendet. 

Ist <!PW>rAddHead (default=<!RW>true) mit <!RW>false angegeben, so wird fr <!PW>Frame kein Header berechnet, ansonsten (im Defaultfall) wird ein Header gem der Grundeinstellung erzeugt.

Durch Angabe von <!PW>rInterval kann eine von der Grundeinstellung abweichende Zeit fr P3 max festgelgt werden (nur in Kombination mit der Angabe von <!PW>rAddHead).

Ist <!PW>rInterval=0 oder <!PW>Frame leer, so wird die berwachung von P3 max abgeschaltet.

Statt eines Vektors kann ein String angegeben werden. Dann wird jedes Zeichen des Strings als ein Byte geschickt.

Der Befehl <!RW>KeepAlive hat fr andere Porttypen als <!SW>KLine keine Funktion, da die Transportprotokolle einen internen Handshake benutzen.
>>
<<
128.170.3.8
KW2000.Put|Put
!128.170.3.4 - Send
--
<!DEF>
procedure <!TW>KW2000.Put (rNr : real; .Frame : string|vector [; rTimeout : real [; rTaskTimeout : real]]);
<!TXT>
Sendet den Frame im Vektor <!PW>Frame auf den KW2000-Bus <!PW>rNr und wartet <!PW>rTimeout ms auf die Antwort. Ist <!PW>rTimeout nicht angegeben oder -1, so wird die Zeit aus der Grundeinstellung benutzt.

Ist die interne Behandlung der Negative Response Codes 21 bzw 78 aktiviert, so legt <!PW>rTimeout  das Zeitintervall fest, innerhalb dessen sich der Prfling melden muss.

<!PW>rTaskTimeout legt dann fest, wie lange die gesamte Bearbeitung des Requests dauern darf. Ist <!PW>rTaskTimeout nicht angegeben oder -1, wird der Wert aus der Grundeinstellung benutzt.

Wenn die interne Fehlerbearbeitung nicht aktiviert ist, kommt ein <!PW>rTaskTimeout nicht zum Tragen.

Statt eines Vektors kann ein String angegeben werden. Dann wird jedes Zeichen des Strings als ein Byte geschickt.

<!RW>Put ist eine Low-Level-Routine, bei der der Kopf bereits im Frame enthalten sein muss. Soll der Kopf automatisch erzeugt werden, so ist <!RW>Send zu verwenden.

Fr andere Porttypen als <!SW>KLine ist der Befehl <!RW>Put identisch mit <!RW>Send.
>>
<<
128.170.3.9
KW2000.Address.Set|Address.Set
--
<!DEF>
procedure <!TW>KW2000.Address.Set (rNr, rWhich, rAddress : real);
<!TXT>
ndert eine der im KW2000 Protokoll auf dem Bus <!PW>rNr benutzen Adresse gegenber der Grundeinstellung ab.

<!PW>rWhich legt fest, welche Adresse gendert wird:
<!STBL>
<!+>rWhich<!+>PortType<!+>genderte Adresse<!>
<!c>1<!>KLine<!>ECU - Adresse<!>
<!c>2<!>KLine<!>Tester - Adresse<!>
<!c>3<!>TP20 Most<!>Tester Adresse TP20<!>
<!c>4<!>TP20 Most<!>ECU Adresse TP20<!>
<!c>5<!>TP20 Most<!>Empfangs ID CAN<!>
<!c>6<!>TP20 Most<!>Tester Adresse MOST<!>
<!c>7<!>TP20 Most<!>ECU Adresse MOST<!>
<!ETBL>

 <!PW>rAddress ist die zuknftig benutzte Adresse.

Es knnen alle Adressen geschrieben werden, jedoch haben im Betrieb nur solche Auswirkungen, die auch zum benutzen PortType passen.

Die Adresssnderungen wirken sich erst dann aus, wenn der Port wieder geffnet wird.
Am sichersten ist folgendes Vorgehen:
<!CODE>
KW2000.Close (1);
KW2000.Address.Set (1, 7, $101);
KW2000.Open (1);
<!TXT>
>>
<<
128.170.3.10
KW2000.Tunnel|Tunnel
--
<!DEF>
procedure <!TW>KW2000.Tunnel (rNr : real; sData : string [; rWait : real [; var sRecv : string]]);
<!TXT>
Tunnelt die Daten in <!PW>sData auf den KW2000-Bus <!PW>rNr durch das zugrunde liegende Medium. <!PW>sData wird dabei nicht als <!SW>KW2000 Kommando interpretiert, sondern an die Protokollschichten unter KW2000 bergeben.

Wenn <!PW>rWait und <!PW>sRecv nicht angegeben sind, wird nur auf das Verschicken des Frames gewartet und dann mit dem Interpreterschritt fortgefahren.

ber <!PW>rWait kann festgelegt werden, wann der Aufruf zurckkehrt:
<!STBL>
<!+>rWait<!+>Funktion<!>
<!c>0<!>Die Daten werden an die Protokollschicht bergeben und der Aufruf kehrt sofort zurck, es wird nicht auf das Verschicken der Daten gewartet. <!PW>sRecv hat keine Funktion.<!>
<!c>1<!>Die Daten werden an die Protokollschicht bergeben, der Aufruf kehrt erst dann zurck, wenn die Daten verschickt wurden. <!PW>sRecv hat keine Funktion.<!>
<!c>2<!>Die Daten werden an die Protokollschicht bergeben und der Aufruf kehrt erst dann zurck, wenn die Antwort vorliegt. <!PW>sRecv muss angegeben sein und enthlt die Antwort.<!>
<!ETBL>

Das Tunneln wird nicht in allen Porttypen untersttzt/bentigt:
<h4>KLine</h4>
Tunneln wird nicht untersttzt. Daten knnen direkt mit <!RW>RS232 Befehlen auf die serielle Schnittstelle geschickt werden.
<h4>TP1.6_CAN</h4>
Tunneln wird nicht untersttzt. CAN-Frames knnen direkt mit <!RW>CAN Befehlen auf die CAN Schnittstelle geschickt werden. Allerdings drfen keine Frames an die CAN-ID geschickt werden, die von der Diagnose verwendet werden.
<h4>TP2.0_CAN</h4>
noch nicht implementiert
<h4>TP2.0_MOST</h4>
Sendet die Daten in <!PW>sData direkt auf die serielle Schnittstelle. <!PW>sData muss daher ein gltiges MOST Kommando sein. Tunneln ist ntig, da die gesamte Kommunikation auf der seriellen Schnittstelle durch den KW2000 Thread mitgelesen wird. Diese KW2000 Protokollverarbeitung wrde bei direktem Senden auf die RS232 Schnittstelle gestrt.

>>
<<
128.170.3.11
KW2000.Mode.Set|Mode.Set
--
<!DEF>
procedure <!TW>KW2000.Mode.Set (rNr, rMode : real);
<!TXT>
Setzt den Modus (PortType), in dem der KW2000 <!PW>rNr arbeiten soll.

Werte fr <!PW>rMode:
<!STBL>
<!+>Wert<!+>PortType<!>
<!c>0<!>KLine<!>
<!c>1<!>TP1.6 CAN<!>
<!c>2<!>TP2.0 CAN<!>
<!c>3<!>TP2.0 Most<!>
<!ETBL>
>>
<<
128.170.3.12
KW2000.Port.Set|Port.Set
--
<!DEF>
procedure <!TW>KW2000.Port.Set (rNr, rWhich : real; sPort : string);
<!TXT>
Weist dem K2000 Port einen physikalischen Port zur Kommunikation zu.
Dies funktioniert nur fr die TP CAN Port Typen.

 <!PW>rWhich whlt aus, welcher Port festgelegt werden soll:

Werte fr <!PW>rWhich:
<!STBL>
<!+>Wert<!+>Port<!>
<!c>1<!>TP1.6 CAN Port definieren<!>
<!c>2<!>TP2.0 CAN Port definieren<!>
<!ETBL>
Die Auswahl wird erst beim nchsten ffnen des Ports aktiviert und nicht permanent gespeichert - beim nchsten Reset wird wieder die Vorgabe aus der Grundeinstellung aktiviert.
>>
<<
128.170.4
Fehlercodes des KW2000-Objekts|Fehlercodes
!128.170.2.6 - Error
--
Die Fehlercodes unterscheiden sich je nach benutzem Porttypen

<ul indent=15>
<li><a href="128.170.4.1">Fehlercodes fr PortType <b>KLine</b></a><p></p></li>
<li><a href="128.170.4.4">Fehlercodes fr alle <b>TPx.x</b> PortTypen</a></li>
</ul>
>>
<<
128.170.4.1
Fehlercodes des KW2000-Objekts, PortType KLine|KLine Fehlercodes
!128.170.2.6 - Error
--
<!STBL>
<!+>Code<!+>Bedeutung<!>
<!c>0<!>OK - kein Fehler<!>
<!c>1<!>Serieller Port nicht verfgbar<!>
<!c>2<!>Port kann nicht geffnet werden<!>
<!c>3<!>Port nicht geffnet<!>
<!c>4<!>Timeout<!>
<!c>5<!>Checksumme falsch<!>
<!c>6<!>Rcklesefehler (K-Line-Konverter OK?)<!>
<!c>7<!>Frame ist fehlerhaft<!>
<!ETBL>
>>
<<
128.170.4.4
Fehlercodes des KW2000-Objekts, PortType TPx.x|TPx.x Fehlercodes
!128.170.2.6 - Error
--
<!STBL>
<!+>Code<!+>Bedeutung<!>
<!c>0<!>OK - kein Fehler<!>
<!c>1<!>ChannelSetup No Answer<!>
<!c>2<!>ChannelSetup Answer Not For Tester<!>
<!c>3<!>ChannelSetup Application Incorrect<!>
<!c>4<!>ChannelSetup TXID Mismatch<!>
<!c>5<!>ChannelSetup Info RX Incorrect<!>
<!c>6<!>ChannelSetup Application Not Supported<!>
<!c>7<!>ChannelSetup Application Temporary Not Supported<!>
<!c>8<!>ChannelSetup Temporary No Resources<!>
<!c>9<!>ChannelSetup Unexpected Answer<!>
<!c>10<!>ChannelSetup Port Was Closed<!>
<!c>11<!>ConnectionSetup Channel Not Open<!>
<!c>12<!>ConnectionSetup Not Acknowledged<!>
<!c>13<!>ConnectionSetup No Answer<!>
<!c>14<!>Disconnect Port Was Closed<!>
<!c>15<!>Not Connected<!>
<!c>16<!>Invalid Transmit Frame Length<!>
<!c>17<!>No Acknowledge For Telegram<!>
<!c>18<!>Got A Break<!>
<!c>19<!>Timeout In Thread Receive<!>
<!c>20<!>Invalid Receive Frame Length Field<!>
<!c>21<!>Timeout In NRC78 Handling<!>
<!c>22<!>ChannelSetup Negative Reply<!>
<!c>23<!>ConnectionSetup KLine Not Open<!>
<!c>24<!>Function not supported<!>
<!ETBL>
>>
<<
128.170.5
Negative Response Codes
--
Auflistung der in <b>ISO14230</b> definierten Negative Response Codes
(das xx in den Frames der Art &quot;Fmt Tgt Src 7F SID xx&quot;

Zitiert in Anlehnung an die Spezifikation. Es wurde jeweils die Formulierung &quot;client (tester)&quot; bzw. &quot;server (ECU)&quot; durch &quot;tester&quot; bzw. &quot;ECU&quot; ersetzt
ECU = Electronic Control Unit -> der Prfling

<!STBL>
<tr><td rowspan=2 valign=top><b>$10</b><!><b>GeneralReject - GR</b><!>
<!>The service is rejected but the ECU does not specify the reason of the rejection.<!>
<tr><td rowspan=2 valign=top><b>$11</b><!><b>ServiceNotSupported - SNS</b><!>
<!>This response code indicates the requested action will not be taken because the ECU dose not support the requested service.<!>
<tr><td rowspan=2 valign=top><b>$12</b><!><b>SubFunctionNotSupported-Invalid Format - SFNS-IF</b><!>
<!>This response code indicates that the requested action will not be taken because the ECU does not support the arguments of the request message or the format of the argument bytes do not match the prescribed format for the specified service.<!>
<tr><td rowspan=2 valign=top><b>$21</b><!><b>Busy->RepeatRequest - B-RR</b><!>
<!>This response code indicates that the ECU is temporarily too busy to perform the requested operation. In this circumstance repetition of the &quot;identical request message&quot; or &quot;another request message&quot; shall be performed by the tester . This response code shall be returned for example while a ECU is in the process of clearing stored DTCs information or fetching information.<br>
<b>Dieser NRC kann vom KW2000-Modul intern behandelt werden.</b><!>
<tr><td rowspan=2 valign=top><b>$22</b><!><b>ConditionsNotCorrectOrSequestSequenceError - CNCORSE</b><!>
<!>This response code indicates that the requested action will not be taken because the ECU prerequisite conditions are not met. This request may occur when sequence sensitive requests are issued in the wrong order.<!>
<tr><td rowspan=2 valign=top><b>$23</b><!><b>RoutineNotComplete - RNC</b><!>
<!>This response code indicates that the request message was properly received by the ECU and the routine, which has been initiated by the request message is already in process, but not yet completed. The ECU knows in advance that the processing time is greater than the P2 timing window. The successful execution and completion of the request message will not be indicated by a positive response message. In case the tester repeats the request message the ECU shall &quot;not reinitiate the task&quot; if the initial task has not been completed.<br>
<b>Dieser NRC kann vom KW2000-Modul intern behandelt werden.</b><!>
<tr><td rowspan=2 valign=top><b>$31</b><!><b>RequestOutOfRange - ROR</b><!>
<!>This response code indicates that the requested action will not be taken because the ECU detects the request message contains a data byte which attempts to substitute a value beyond its range of authority. (e.g. attempting to substitute a data byte of 111 when the data is only defined to 100).<!>
<tr><td rowspan=2 valign=top><b>$33</b><!><b>SecurityAccessDenied-securityAccessRecuested - SAD-SAR</b><!>
<!>This response code indicates that the requested action will not be taken because the ECU's security strategy has not been satisfied by the tester.<!>
<tr><td rowspan=2 valign=top><b>$35</b><!><b>InvalidKey - IK</b><!>
<!>This response code indicates that security access has not been given by the ECU because the key send by the tester did not match with the key in the ECU's memory. This counts as an attempt to gain security. The ECU shall remain locked!<!>
<tr><td rowspan=2 valign=top><b>$36</b><!><b>ExceedNumberOfAttempts - ENOA</b><!>
<!>This response code indicates that the requested action will not be taken because the tester has unsuccessfully attempted to gain security access more times than the ECU's security strategy will allow.<!>
<tr><td rowspan=2 valign=top><b>$37</b><!><b>RequiredTimeDelyNotExpried - RTDNE</b><!>
<!>This response code indicates that security access has not been taken by the ECU because the tester sent a false key two or more than two times. After two or more than two times sending a false key to ECU, the ECU automatically inserts a 10s delay time. If the tester tries to execute the SecurityAccess in the 10s interval, the ECU will refuse the attempt and sends back this response.<!>
<tr><td rowspan=2 valign=top><b>$41</b><!><b>ImproperDownloadType - IDT</b><!>
<!>This response code indicates that an attempt to download to a ECU's memory cannot be accomplished because the ECU does not support the type of download being attempted.<!>
<tr><td rowspan=2 valign=top><b>$42</b><!><b>CanNotDownloadToSpecifiedAddress - CNDTSA</b><!>
<!>This response code indicates that an attempt to download to a ECU's memory cannot be accomplished because the ECU does not recognize the target address for the download as being available.<!>
<tr><td rowspan=2 valign=top><b>$43</b><!><b>CanNotDownloadNumberOfBytesRequested - CNDNOBR</b><!>
<!>This response code indicates that an attempt to download to a ECU's memory cannot be accomplished because the ECU does not recognize the number of bytes for the download as being available.<!>
<tr><td rowspan=2 valign=top><b>$64</b><!><b>AbnormalExitWihtoutResult</b><!>
<!>This response code indicates that there was a ECU hardware fault. The ECU may be defect and there are no valid results available .<!>
<tr><td rowspan=2 valign=top><b>$78</b><!><b>RequestCorrectlyReceived-ResponsePending - RCR-RP</b><!>
<!>This response code indicates that the request message was received correctly, and that any parameters in the request message were valid, but the action to be performed may not be completed yet. This response code can be used to indicate that the request message was properly received and does not need to be re-transmitted, but the ECU is not yet ready to receive another request.
This response code shall only be used in a negative response message if the ECU will not be able to receive further request messages from the tester within the P3 timing window. This may be the case if the ECU does data processing or executes  a routine which does not allow any attention to serial communication.
The following description specifies the communication timing method: This response code shall manipulate the P2max timing parameter value in the ECU and the tester. The P2max timing parameter is set to the value [in ms] of the P3max timing parameter. In addition, the tester shall disable the TesterPresent service. As soon as the ECU has completed the task (routine) initiated by the request message it shall send either a positive or negative response message (negative response message with a response code other than $78) based on the last request message received.
When the tester has received the positive response message which has been preceded by the negative response message(s) with this response code the tester and the ECU shall reset the P2timing parameter to the previous P2 timing
value. In addition the tester shall re-enable the TesterPresent service. The tester shall not repeat the requested message after the reception of a negative response message with this response code!
<b>Dieser NRC kann vom KW2000-Modul intern behandelt werden.</b>
<tr><td rowspan=2 valign=top><b>$80</b><!><b>ServiceNotSupportedInActiveDiagnosticMode - SNSIADM</b><!>
<!><!REM>No information available<!TXT><!>
<tr><td rowspan=2 valign=top><b>$90</b><!><b>MessageFrameOverflow - MFO</b><!>
<!>If the ECU has to transmit more bytes than one massage-frame is able to carry, the ECU has to transmit this Response-Code within the negative response-message.<!>
<tr><td rowspan=2 valign=top><b>$91</b><!><b>ServiceNotSupportedSecurityConditionsNotCorrect - SNSSCNC</b><!>
<!>This response code indicates that the requested service will cause a dangerous vehicle-situation and has to be rejected in this diagnostic mode (session).<!>
<tr><td rowspan=2 valign=top><b>$92</b><!><b>AccessDeniedBecauseVehicleMoves - ADBVM</b><!>
<!>This response code indicates that the requested service will cause a dangerous vehicle-situation, because the vehicle moves. Therefore the service has to be rejected in this diagnostic mode(session).<!>
<tr><td rowspan=2 valign=top><b>$FA</b><!><b>ChecksumError - CSERR</b><!>
<!>This response code indicates an application-RAM or flash-EEPROM checksum error.<br>
Example: if the local routine &quot;compareChecksum&quot; results in a checksumerror, upon the RequestRoutineResultsBxLID message the ECU will send a negative response including the response code &quot;checksumError&quot;<!>
<tr><td rowspan=2 valign=top><b>$FB</b><!><b>ECUErasingFlash - ERASE</b><!>
<!>This response code indicates that the ECU is currently erasing the flash-EPROM. During this period, all received request messages (except testerPresent, stopCommunication and ecuReset) have to be rejected with this response code.<!>
<tr><td rowspan=2 valign=top><b>$FC</b><!><b>ECUProgrammingFlash - PROG</b><!>
<!>This code indicates that ECU is currently programming the flash-EPROM.<!>
<tr><td rowspan=2 valign=top><b>$FD</b><!><b>ErasingError - ERERR</b><!>
<!>This response code indicates a fault during erasing the flash-EPROM.<!>
<tr><td rowspan=2 valign=top><b>$FE</b><!><b>ProgrammingError - PRERR</b><!>
<!>This response code indicates a fault during programming the flash-EPROM.<!>
<!ETBL>
>>

