Sie sind auf Seite 1von 192

EDIABAS — BEST/2 FUNKTIONSREFERENZ

EDIABAS
Elektronik Diagnose Basissystem

BEST/2 FUNKTIONSREFERENZ

Version 6f

Copyright BMW AG, created by Softing AG

BEST2RTL.DOC
EDIABAS — BEST/2 FUNKTIONSREFERENZ
INHALT

INHALT

INHALT .........................................................................................................................2

1. Änderungshistorie...................................................................................................8

2. Einführung ...........................................................................................................9
2.1. Über die Laufzeitbibliothek .............................................................................9
2.2. Konventionen .................................................................................................9
2.3. Besonderheiten, Begriffe, Akronyme..............................................................10

3. Überblick ..................................................................................................................11
3.1. Benutzung der Laufzeitbibliothek ...................................................................11
3.1.1. Aufrufen von Bibliotheksfunktionen.....................................................11
3.1.2. Pfade und Dateinamen .......................................................................11
3.2. Funktionen der Laufzeitbibliothek nach Kategorien........................................12
3.2.1. Kommunikationsfunktionen.................................................................13
3.2.2. Interfacefunktionen .............................................................................14
3.2.3. Ergebnis- und Parameterverwaltung ..................................................15
3.2.4. Stringfunktionen..................................................................................16
3.2.5. Wandlungsfunktionen .........................................................................17
3.2.6. Realfunktionen....................................................................................18
3.2.7. Datafunktionen....................................................................................19
3.2.8. Dateifunktionen...................................................................................20
3.2.9. Ablaufsteuerung..................................................................................21
3.2.10. Fehlerbehandlung .............................................................................21
3.2.11. Zeitbehandlung .................................................................................22
3.2.12. Tabellenbehandlung .........................................................................23
3.2.13. Konfiguration.....................................................................................24
3.2.14. Steuergerätespezifische Funktionen.................................................25

4. Auswertung der Klemmenstati des EDICs ............................................................26

5. Bibliotheksfunktionen ........................................................................................29

2
EDIABAS — BEST/2 FUNKTIONSREFERENZ
INHALT

5.1. Benutzung der Funktionsreferenz ..................................................................29


AdjustKWP2000TesterPrStartComm ....................................................................30
ascii2ascii..............................................................................................................31
ascii2hex ...............................................................................................................33
atoi ........................................................................................................................34
ator........................................................................................................................35
atoy .......................................................................................................................36
bcd2ascii ...............................................................................................................37
bittest ....................................................................................................................38
bytetest .................................................................................................................40
clear_error.............................................................................................................42
close_communication............................................................................................43
data_to_real ..........................................................................................................44
datacat ..................................................................................................................45
dataclear ...............................................................................................................46
datacmp ................................................................................................................47
datacopy ...............................................................................................................48
dataerase ..............................................................................................................49
datainsert ..............................................................................................................50
datalen ..................................................................................................................51
datarevers .............................................................................................................52
dataset ..................................................................................................................53
doNewInit ..............................................................................................................54
enableIfhTrace ......................................................................................................55
enableClampHandling ...........................................................................................56
enableIgnitionHandling..........................................................................................57
enableUBattHandling ............................................................................................58
fclose.....................................................................................................................59
fopen .....................................................................................................................60
fread......................................................................................................................61
freadln ...................................................................................................................62

3
EDIABAS — BEST/2 FUNKTIONSREFERENZ
INHALT

fseek .....................................................................................................................63
fseekln...................................................................................................................64
ftell ........................................................................................................................65
ftellln......................................................................................................................66
get_battery_voltage...............................................................................................67
get_error ...............................................................................................................68
get_error2 .............................................................................................................70
get_ignition_voltage ..............................................................................................71
get_token ..............................................................................................................72
get_trap_mask ......................................................................................................73
generateRunError .................................................................................................74
getasciidate ...........................................................................................................75
getasciitime ...........................................................................................................76
getCfgInt ...............................................................................................................77
getCfgString ..........................................................................................................78
getdate ..................................................................................................................79
getETXblock..........................................................................................................80
GetKWP2000Block ...............................................................................................81
gettickcount ...........................................................................................................83
gettime ..................................................................................................................84
hex2ascii ...............................................................................................................85
ifboot .....................................................................................................................86
ifgetport .................................................................................................................87
ifinfo ......................................................................................................................88
ifinfoExt .................................................................................................................89
ifloopt ....................................................................................................................90
ifrawmode .............................................................................................................91
ifrecv .....................................................................................................................92
ifrequeststate.........................................................................................................93
ifreset ....................................................................................................................94
ifsend ....................................................................................................................95

4
EDIABAS — BEST/2 FUNKTIONSREFERENZ
INHALT

ifsetport .................................................................................................................96
ifsireset..................................................................................................................97
iftype .....................................................................................................................98
ifvers .....................................................................................................................99
incProgressPos .....................................................................................................100
isDebugLevel ........................................................................................................101
isSimulation...........................................................................................................102
itoad ......................................................................................................................103
itoax ......................................................................................................................104
itor .........................................................................................................................105
make_error............................................................................................................106
new_set_of_results ...............................................................................................107
open_communication ............................................................................................108
parcount ................................................................................................................109
real_to_data ..........................................................................................................110
realadd ..................................................................................................................111
realcomp ...............................................................................................................112
realdiv ...................................................................................................................113
realmul ..................................................................................................................114
realresult ...............................................................................................................115
realsub ..................................................................................................................116
recv_frequent ........................................................................................................117
recv_keybytes .......................................................................................................118
rtoa........................................................................................................................119
rtoi .........................................................................................................................120
send_and_receive.................................................................................................121
send_frequent .......................................................................................................122
set_answer_length ................................................................................................123
set_communication_pars ......................................................................................126
set_program_voltage ............................................................................................153
set_repeat_counter ...............................................................................................154

5
EDIABAS — BEST/2 FUNKTIONSREFERENZ
INHALT

set_trap_mask.......................................................................................................155
set_variable_result ................................................................................................158
setProgressRange ................................................................................................159
shdataget ..............................................................................................................160
shdataset ..............................................................................................................161
stop_frequent ........................................................................................................162
strcat .....................................................................................................................163
strcmp ...................................................................................................................164
strcpy ....................................................................................................................165
strcut .....................................................................................................................166
strerase .................................................................................................................167
strinsert .................................................................................................................168
strlen .....................................................................................................................169
strncpy ..................................................................................................................170
strrevers ................................................................................................................171
tab2fix ...................................................................................................................172
tab_suche_index ...................................................................................................173
tab_suche_unsigned .............................................................................................174
tabget ....................................................................................................................176
tabline ...................................................................................................................177
tabseek .................................................................................................................178
tabset ....................................................................................................................179
tabsetext ...............................................................................................................180
uitoad ....................................................................................................................181
updateInfo .............................................................................................................182
userbreak ..............................................................................................................183
var_result_data .....................................................................................................184
var_result_long......................................................................................................185
var_result_real ......................................................................................................186
var_result_string....................................................................................................187
wait........................................................................................................................188

6
EDIABAS — BEST/2 FUNKTIONSREFERENZ
INHALT

waitex....................................................................................................................189

LITERATURVERZEICHNIS ..........................................................................................190

INDEX............................................................................................................................191

7
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Änderungshistorie

1.Änderungshistorie
Version 5b Einführung der Änderungshistorie
Neu Kapitel 3 (Kapitel 3 ist jetzt Kapitel 4 usw.)
Version 5e Neue Funktionen rtoi, updateInfo, setProgressRange,
incProgressRange
Version 5f Neue Funktionen ascii2ascii
Version 6 Neue Funktionen data_to_real, real_to_data, tab_suche_unsigned,
ifinfoExt, realcomp, AdjustKWP2000TesterPr-StartComm,
GetKWP2000Block, GetKWP2000BlockIndex, linkPlugIn, callPlugIn,
callPlugInExt, set_communication_pars
Version 6a Beschreibung zu GetKWP2000Block überarbeitet, Funktion
GetKWP2000BlockIndex entfällt.
Version 6b In set_communication_pars Konzept KWP 2000* neu.
Version 6c Neue Funktion tabsetext.
Version 6d Überarbeitung für EDIABAS V6.4.0
Version 6e Korrektur von get_error2
Version 6f Neue Funktion enableClampHandling, Korrektur von waitex

8
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Einführung

2. Einführung

2.1. Über die Laufzeitbibliothek

Die Laufzeitbibliothek stellt unter anderem Funktionen zur Steuergeräte-


kommunikation, Stringbehandlung, Fehlerbehandlung zur Benutzung in BEST/2
Beschreibungsdateien zur Verfügung. Diese Funktionen stellen

„ den Zugriff auf den Interfacehandler


„ den Zugriff auf externe Dateien
„ den Zugriff auf Hostsystemfunktionen (z.B. Uhrzeit)
„ und immer wieder benötigte Funktionen für allgemeine
Programmieraufgaben (z.B.: Strings) zur Verfügung.

Diese Laufzeitbibliothek ist sehr wichtig, da sie Funktionalität zur Verfügung stellt, die
der rudimentären BEST/2 Sprache fehlen.
Alle Funktionen sind in BEST/1 erstellt worden, um Performanceeinbußen zu
vermeiden!

2.2. Konventionen

Diese Dokumentation verwendet die folgenden typographischen Konventionen:

Beispiel Beschreibung
SAMPLE.B2V Großschrift kennzeichnet Dateinamen, Register und
Betriebssystemkommandos.
job, string, Fettschrift kennzeichnet Schlüsselwörter und
while Operatoren der Sprache BEST/2 .
In Beschreibungen der Syntax müssen diese Wörter
wie angegeben geschrieben werden.
ausdruck Kursivschrift kennzeichnet Platzhalter für vom
Programmierer einzutragende Werte, wie z.B.
Dateinamen.
[option] Wörter in eckigen Klammern bedeuten optionale
Angaben.

9
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Einführung

{ result | Geschweifte Klammern und senkrechte Striche


argument } kennzeichnen Eingaben, von denen jeweils eine
gewählt werden muß, außer wenn sie in eckigen
Klammern steht.
[constant...] job... Drei Punkte, die direkt einem Ausdruck folgen,
kennzeichnen, daß mehrere Ausdrücke der selben
Form folgen können.
hallo="Test"; Diese Schriftart kennzeichnet Beispiele,
Benutzereingaben, Programmausgaben und
Fehlermeldungen.
while() { Eine Spalte oder eine Zeile aus drei Punkten
. kennzeichnet, daß ein Teil eines Beispiels
.} absichtlich weggelassen wurde.
[1] Verweis auf ein Dokument aus dem
Literaturverzeichnis.

2.3. Besonderheiten, Begriffe, Akronyme


In dieser Beschreibung wird in allen Beispielen der zur ordnungsgemäßen Funktion
benötigte Job INITIALISIERUNG weggelassen.
Der Name BEST/2 kennzeichnet den abstrakten Begriff der Programmiersprache für
Beschreibungsdateien. Der Name BEST2 jedoch den Übersetzer als Kommando auf
Betriebssystemebene (vgl. "C" <-> "C-Compiler" <-> "CC" ).
Die Begriffe Funktion, Routine und Befehl werden in dieser Dokumentation als
gleichwertig verwendet. Sie bezeichnen in diesem Zusammenhang eine
abgeschlossene Funktionseinheit in der Laufzeitbibliothek.
Der Begriff Host bezeichnet den Rechner und das Betriebssystem, auf dem das
EDIABAS Laufzeitsystem gestartet wurde.

10
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3. Überblick

3.1. Benutzung der Laufzeitbibliothek

3.1.1. Aufrufen von Bibliotheksfunktionen


Um eine Bibliotheksfunktion in einer BEST/2 Beschreibungsdatei zu benützen, ruft
man sie einfach in einem Job mit den vorgeschriebenen Parametern auf. Man
schreibt z.B. folgenden Job in einer Beschreibungsdatei:

job ( name : SAMPLE; ... )


{
char buffer[];
...
getasciidate(buffer);
.
}

Dieser Job ermittelt das aktuelle Datum mittels der getasciidate Funktion und
schreibt es in die Variable buffer.

3.1.2. Pfade und Dateinamen


Die von BEST2 standardmäßig verwendete Laufzeitbibliothek heißt B2RUNTIM.LIB
und wird in dem Verzeichnis erwartet, in der sich auch der BEST/2 Compiler befindet.
Optional kann jedoch beim Aufruf von BEST2 mittels der Option -L eine andere
Bibliothek spezifiziert werden.

BEST2 -L \test\dev\neulib.lib test.b2v

Diese Kommandozeile ruft den BEST/2 Compiler auf, der die Beschreibungsdatei
test.b2v im aktuellen Verzeichnis übersetzten soll. Er verwendet hierzu die Bibliothek
NEULIB.LIB im Verzeichnis \TEST\DEV.

11
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3.2. Funktionen der Laufzeitbibliothek nach Kategorien


BEST/2 Bibliotheksfunktionen decken verschiedene Aufgabenbereiche ab. Wenn
man die Aufgabenstellung kennt, jedoch nicht genau weiß welche Funktion man
benötigt, kann man in den folgenden Aufstellungen nach der benötigten Funktion
suchen. Eine komplette Funktionsbeschreibung inklusive Syntax und Beispielen
befindet sich im Kapitel "Bibliotheksfunktionen".

Es gibt im wesentlichen folgende Funktionskategorien:

„ Kommunikationsfunktionen
„ Interfacefunktionen
„ Ergebnis- / Parameterverwaltung
„ Stringfunktionen
„ Wandlungsfunktionen
„ Datafunktionen
„ Dateifunktionen
„ Fehlerbehandlung
„ Zeitbehandlung
„ Tabellenbehandlung
„ Konfiguration
„ Steuergerätespezifische Funktionen
„ Plugin Funktionen

12
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3.2.1. Kommunikationsfunktionen
Kommunikationsfunktionen dienen dem Zweck, mit dem Steuergerät zu
kommunizieren. Sie stellen die Funktionalität des im EDIABAS enthaltenen
Interfacehandlers zur Verfügung.

Funktion Zweck

open_communication Eröffnen der Kommunikation mit dem


Interface

close_communication Schließen der Kommunikation mit dem


Interface

set_communication_pars Setzen der Kommunikationsparameter

set_answer_length Setzen der Antwortlänge eines bzw. aller


Telegramme

send_and_receive Senden und Empfangen eines Telegramms

recv_keybytes Abholen der Steuergeräte Keybytes

send_frequent Automatisch wiederholtes Senden eines


Telegramms

recv_frequent Empfangen eines Wiederholungstelegramms

stop_frequent Stoppen des wiederholten Sendens

set_repeat_counter Setzen des Wiederholungszählers für die


Wiederholungen im Fehlerfall

13
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3.2.2. Interfacefunktionen
Interfacefunktionen dienen als Schnittstelle zu den Funktionen des Diagnosebus-
Interface. Sie stellen die Funktionalität des im EDIABAS enthaltenen
Interfacehandlers zur Verfügung.

Funktion Zweck

get_battery_voltage Auslesen der Batteriespannung

get_ignition_voltage Auslesen der Zündungsspannung

set_program_voltage Setzen der Programmierspannung

ifboot Rücksetzen des Interface (Warmstart)

ifreset Rücksetzen der Kommunikationsparameter

ifgetport Auslesen eines Ports

ifsetport Setzen eines Ports

ifloopt Testen der Diagnoseleitung

ifsireset Setzen des SIA-Relais

ifrequeststate Auslesen des Interfacestatus

iftype Auslesen des Interfacetyps

ifvers Auslesen der Interfaceversion

ifrawmode Durchreichen von beliebigen Zeichen an das


Interface

ifsend Funktion für Debugzwecke

ifrecv Funktion für Debugzwecke

ifinfo Funktion für Debugzwecke

ifinfoExt Funktion für Debugzwecke

14
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3.2.3. Ergebnis- und Parameterverwaltung


Diese Funktionen dienen zur Verwaltung von Ergebnissen bzw. Parametern.

Funktion Zweck

new_set_of_results Signalisieren eines neuen Ergebnissatzes

parcount Ermitteln der Parameteranzahl

set_variable_result Erzeugt ein Dataergebnis mit variablen


Namen

var_result_data Erzeugt ein Dataergebnis mit variablen


Namen

var_result_long Erzeugt ein Longergebnis mit variablen


Namen

var_result_real Erzeugt ein Realergebnis mit variablen Namen

var_result_string Erzeugt ein Stringergebnis mit variablen


Namen

updateInfo Erzeugt ein Stringergebnis während der


Jobbearbeitung

setProgressRange Setzt einen Bereich für den Fortschrittszähler

incProgressPos Erhöht die aktuelle Position des


Fortschrittszählers

15
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3.2.4. Stringfunktionen
Die Stringfunktionen dienen der Verwaltung und Bearbeitung von C-kompatiblen
Strings. Diese Strings müssen mit einem Nullcharacter ('\0') abgeschlossen sein.

Funktion Zweck

strcat Aneinanderhängen von Strings

strcut Kürzen von Strings

strcmp Vergleichen von Strings

strcpy Kopieren von Strings

strncpy Kopieren eines Strings mit Längenangabe

strlen Ermitteln der Stringlänge

strerase Löschen eines Teilstrings

strinsert Einfügen eines Teilstrings

get_token Suchen nach einem Token

strrevers Umdrehen eines Strings

16
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3.2.5. Wandlungsfunktionen
Die Wandlungsfunktionen dienen zum Wandeln von Daten aus einer Zahl- in eine
String-Form bzw. umgekehrt.

Funktion Zweck

ascii2hex Wandeln eines Strings in ein Binärarray

ascii2ascii Wandeln von Zeichen in Zeichen einer


anderen Codeseite

atoi Wandeln eine Strings in eine Zahl

atoy Wandeln eines Strings in ein Binärarray

bcd2ascii Wandeln einer BCD-Kette in einen BCD-String

hex2ascii Wandeln einer Hex-Kette in einen Hex-String

itoad Wandeln einer signed Zahl in einen


Dezimalstring

uitoad Wandeln einer unsigned Zahl in einen


Dezimalstring

itoax Wandeln einer Zahl in einen Hexa-


dezimalstring

17
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3.2.6. Realfunktionen
Die Realfunktionen dienen zum Bearbeiten von Realzahlen.

Funktion Zweck

itor Wandelt eine Integerzahl in eine Realzahl

ator Wandelt einen String in eine Realzahl

realcomp Vergleicht zwei Realzahlen

realadd Addiert zwei Realzahlen

realsub Subtrahiert zwei Realzahlen

realmul Multipliziert zwei Realzahlen

realdiv Dividiert zwei Realzahlen

realresult Erzeugt ein Realergebnis

rtoa Wandelt eine Realzahl in einen String

rtoi Wandelt eine Realzahl in einen Integer

data_to_real Wandelt Datenbytes in eine Realzahl

real_to_data Wandelt eine Realzahl in Datenbytes

18
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3.2.7. Datafunktionen
Datafunktionen bewegen, bzw. setzen Daten. Diese Daten sind im Gegensatz zu
Strings nicht nullterminiert.

Funktion Zweck

datacat Anhängen von Datenbytes an einen Puffer

dataclear Löschen eines Puffers

datacmp Vergleichen von Bytes zweier Puffer

datacopy Kopieren von Bytes von einem Puffer in einen


anderen

dataerase Löschen von Datenbytes aus einen Puffer

datainsert Einfügen von Bytes eines Puffers in einen


anderen

datalen Ermitteln der Länge eines Puffers

datarevers Umdrehen der Daten innerhalb eines Puffers

dataset Setzen von Bytes in einem Puffer

shdataget Einlesen des globalen Datenspeichers

shdataset Beschreiben des globalen Datenspeichers

19
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3.2.8. Dateifunktionen
Die Dateifunktionen ermöglichen den lesenden Zugriff auf Dateien des Hostsystems.

Funktion Zweck

fopen Öffnen eines Files

fclose Schließen eines Files

fread Lesen eines Zeichens aus einem File

freadln Lesen einer Zeile aus einem File

fseek Setzen der Leseposition in einem File


(Byteweise)

fseekln Setzen der Leseposition in einem File


(Zeilenweise)

ftell Ermitteln der Leseposition in einem File


(Byteweise)

ftelln Ermitteln der Leseposition in einem File


(Zeilenweise)

20
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3.2.9. Ablaufsteuerung
Diese Funktionen ermöglichen den Eingriff in die Jobablaufsteuerung, d.h. wann und
in in welcher Reihenfolge Standardjobs aufgerufen werden.

Funktion Zweck

doNewInit Erzwingt Job INITIALISIERUNG vor nächstem


Jobaufruf

3.2.10. Fehlerbehandlung
Diese Funktionen ermöglichen die Behandlung von Fehlermeldungen durch die
Beschreibungsdatei.

Funktion Zweck

clear_error Löschen des Errorflags

get_error Ermitteln der Fehlernummer

get_error2 Ermitteln der Fehlernummer

make_error Auslösen eines Fehlers

generateRunError Auslösen eines „RUN-00XX“-Fehlers

set_trap_mask Setzen der Fehlertrapmaske

get_trap_mask Auslesen der Fehlertrapmaske

userbreak Erzeugen der Fehlermeldung

"BIP-0008: BEST BREAK"

21
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3.2.11. Zeitbehandlung
Die Funktionen zur Zeitbehandlung ermöglichen u. a. einen Zugriff auf die aktuelle
Uhrzeit und das aktuelle Datum

Funktion Zweck

gettime Ermitteln der aktuellen Uhrzeit

getdate Ermitteln des aktuellen Datums

getasciitime Ermitteln der aktuellen Uhrzeit als ASCII-


String

getasciidate Ermitteln des aktuellen Datums als ASCII-


String

gettickcount Rückgabe eines internen Zählerwerts in


Millisekunden

wait Warten von n Sekunden

waitex Warten von n Millisekunden

22
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3.2.12. Tabellenbehandlung
Diese Funktionen dienen der Auswertung der in BEST/2 definierten konstanten
Tabellen.

Funktion Zweck

tabset Initialisierung der Tabellenbehandlung

tabsetext Initialisierung der Tabellenbehandlung einer


Steuergeräte-Beschreibungsdatei

tabseek Suchen eines Strings in der aktuellen Tabelle

tab_suche_index Suchen eines Zahlenstrings in der aktuellen


Tabelle

tab_suche_unsigned Suchen eines vorzeichenlosen Zahlenstrings


in der aktuellen Tabelle

tabline Springt an die angegebene Zeile der Tabelle

tabget Auslesen von Werten aus der aktuellen


Tabellenzeile

tab2fix Auslesen von Werten aus der aktuellen


Tabellenzeile und Wandlung in eine Zahl

bittest Spezialfunktion zum Ermitteln von


Bitergebnissen

bytetest Spezialfunktion zum Ermitteln von


Byteergebnissen

23
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3.2.13. Konfiguration
Diese Funktionen dienen dem Setzen und Lesen der EDIABAS-Konfiguration.

Funktion Zweck

enableIfhTrace Ein-/Ausschalten des IFH-Trace

enableClampHandling Ein-/Ausschalten der automatischen


Klemmenabfrage

enableIgnitionHandling Ein-/Ausschalten der Zündungsüberwachung

enableUbattHandling Ein-/Ausschalten der Batterieüberwachung

getCfgInt Auslesen einer Konfigurationseinstellung als


Integer

getCfgString Auslesen einer Konfigurationseinstellung als


String

isDebugLevel Abfrage des Konfigurationselements


"BipDebugLevel"

isSimulation Abfrage des Konfigurationselements


"Simulation"

24
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Überblick

3.2.14. Steuergerätespezifische Funktionen


Diese Funktionen dienen der Auswertung von Steuergeräteantworttelegrammen.

Funktion Zweck

AdjustKWP2000TesterPr- Anpassen des TesterPresent- und


StartComm StartCommunication-Telegramms anhand der
SG-Adresse in den Parametern

GetKWP2000Block Auslesen eines Blocks aus dem


Antworttelegramm eines Steuergerätes unter
KWP 2000.

getETXblock Auslesen eines Blocks aus dem


Antworttelegramm eines Steuergerätes

25
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Auswertung der Klemmenstati des EDICs

4. Auswertung der Klemmenstati des EDICs

Im Anschluß sind alle Funktionen des Interfacehandlers aufgelistet, die mit dem
Interface kommunizieren. Für jede Funktion ist angegeben, welche Fehlermeldungen
aufgrund der Klemmenstati des EDICs generiert werden und welche Reaktion auf die
Fehlermeldung erfolgt. Ist das UBattHandling bzw. IgnitionHandling in der
Konfigurationsdatei EDIABAS.INI ausgeschaltet, werden weder die Fehlermeldungen
UBATT ON/OFF ERROR bzw. IGNITION ON/OFF ERROR aufgrund gesetzter
History-Bits generiert, noch wird als Reaktion darauf die Kommunikation
abgebrochen und die Klemmenstati zurückgesetzt.
Die Systemergebnisse IGNITIONCURRENT; UBATTCURRENT;
IGNITIONHISTORY; UBATTHISTORY werden im Job nur dann mit den Werten (0,1)
für den aktuellen Zustand der Klemmenstati belegt, wenn mindestens eine der
folgenden Funktionen im Job durchlaufen wird (mit Ausnahme der Funktion
ifrawmode). Wird keine der folgenden Funktionen im Job durchlaufen, werden obige
Systemergebnisse immer als undefiniert (-1) gekennzeichnet.

Funktion Fehlermeldungen Reaktion


set_communication_pars WRONG UBATT Nur im Fehlerfall:
UBATT ON/OFF ERROR Abbruch der laufenden
IGNITION ON/OFF ERROR Kommunikation mit dem
SG und Rücksetzen der
Klemmenstati

send_and_receive WRONG UBATT Nur im Fehlerfall:


UBATT ON/OFF ERROR Abbruch der laufenden
IGNITION ON/OFF ERROR Kommunikation mit dem
SG und Rücksetzen der
Klemmenstati

recv_keybytes WRONG UBATT Nur im Fehlerfall:


UBATT ON/OFF ERROR Abbruch der laufenden
IGNITION ON/OFF ERROR Kommunikation mit dem
SG und Rücksetzen der
Klemmenstati

26
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Auswertung der Klemmenstati des EDICs

send_frequent WRONG UBATT Nur im Fehlerfall:


UBATT ON/OFF ERROR Abbruch der laufenden
IGNITION ON/OFF ERROR Kommunikation mit dem
SG und Rücksetzen der
Klemmenstati

recv_frequent WRONG UBATT Nur im Fehlerfall:


UBATT ON/OFF ERROR Abbruch der laufenden
IGNITION ON/OFF ERROR Kommunikation mit dem
SG und Rücksetzen der
Klemmenstati

stop_frequent keine
keine
get_battery_voltage keine
keine
get_ignition_voltage keine
WRONG UBATT
set_program_voltage keine
keine
ifboot Immer:
keine
Die laufende
Kommunikation mit dem
SG wird immer
abgebrochen und die
Klemmenstati werden
immer zurückgesetzt

ifreset Immer:
keine
Die laufende
Kommunikation mit dem
SG wird immer
abgebrochen und die
Klemmenstati werden
immer zurückgesetzt

ifgetport keine
keine
ifsetport keine
keine
ifloopt keine
keine

27
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Auswertung der Klemmenstati des EDICs

ifsireset keine
keine
ifrequeststate keine
keine
ifvers keine
keine
ifrawmode keine
keine

28
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

5. Bibliotheksfunktionen

5.1.Benutzung der Funktionsreferenz

Die folgenden Seiten beschreiben die BEST/2 Laufzeitbibliothek in alphabetischer


Sortierung. In manchen Fällen werden verwandte Funktionen gebündelt beschrieben.

Die Beschreibung einer Funktion ist in folgende Abschnitte gegeliedert:

„ Kurzbeschreibung. Faßt die Wirkung der Funktion kurz zusammen,


illustriert die Syntax und beschreibt kurz die Argumente.

„ Bemerkung. Gibt eine detailierte Beschreibung der Funktion und


deren Benutzung.

„ Rückgabewert. Beschreibt den Wert, der von der Funktion


zurückgegeben wird.

„ Siehe auch Zeigt verwandte Funktionen auf.

„ Beispiel Zeigt einen Ausschnitt aus einem Job, der die


Verwendung der Funktion erläutert.

„ Ergebnis. Zeigt die Ergebnisse, bzw. Auswirkungen des Beispiels.

Bei der Beschreibung der Argumente, bedeutet (V) , daß eine Variable übergeben
werden muß; (C) , daß eine Konstante übergeben werden muß.

Im Anschluß folgt die alphabetische Auflistung aller Funktionen der BEST/2


Laufzeitbibliothek.

29
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

AdjustKWP2000TesterPrStartComm
Kurzbeschreibung

void AdjustKWP2000TesterPrStartComm(char params[])

params KWP 2000 Parameter im Rohformat für EDIC API (V)

Bemerkung Diese Funktion trägt die Steuergeräteadresse an Position


5 in das TesterPresent- und das StartCommunication-
Telegramm in den Parametern ein und berechnet die
Checksummen in diesen Telegrammen neu.

Rückgabewert -

Siehe auch -

Beispiel {
char parameter[];
parameter = kwp_2000_parameter;
parameter[5] = ecuAddress;
AdjustKWP2000TesterPrStartComm(parameter);
}

Ergebnis -

30
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ascii2ascii
Kurzbeschreibung Wandelt alle Zeichen eines Textes in Zeichen eines
anderen Zeichensatzes

void ascii2ascii(char codepage[],char text[])

codepage Zeichensatz
text Stringpuffer(V)

Bemerkung Diese Funktion konvertiert alle Zeichen im String in


Zeichen mit einem anderen Ascii-Code. Die Umsetzung
erfolgt entsprechend der übergebenen Codeseite.

Rückgabewert -

Siehe auch -

Beispiel
unsigned char codepage[] =
{
// 0 1 2 3 4 5 6 7 8
9 A B C D E F
/*0*/
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x
0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1*/
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x
1A,0x1B,0x1C,0x1D,0x1E,0x1F,
/*2*/
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x
2A,0x2B,0x2C,0x2D,0x2E,0x2F,
/*3*/
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x
3A,0x3B,0x3C,0x3D,0x3E,0x3F,
/*4*/
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x
4A,0x4B,0x4C,0x4D,0x4E,0x4F,
/*5*/
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x
5A,0x5B,0x5C,0x5D,0x5E,0x5F,
/*6*/
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x
6A,0x6B,0x6C,0x6D,0x6E,0x6F,

31
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

/*7*/
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x
7A,0xE4,0xF6,0xFC,0xDF,0x7F,
/*8*/
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x
8A,0x8B,0x8C,0x8D,0x8E,0x8F,
/*9*/
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x
9A,0x9B,0x9C,0x9D,0x9E,0x9F,
/*A*/
0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0x
AA,0xAB,0xAC,0xAD,0xAE,0xAF,
/*B*/
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0x
BA,0xBB,0xBC,0xBD,0xBE,0xBF,
/*C*/
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x
CA,0xCB,0xCC,0xCD,0xCE,0xCF,
/*D*/
0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x
DA,0xDB,0xDC,0xDD,0xDE,0xDF,
/*E*/
0xE0,0xE4,0xDF,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0x
EA,0xEB,0xEC,0xED,0xEE,0xF6,
/*F*/
0xF0,0xF1,0xF2,0xF3,0xF4,0xFC,0xF6,0xF7,0xF8,0xF9,0x
FA,0xFB,0xFC,0xFD,0xFE,0xFF
};

unsigned char text[] =


{0x7B,0xE1,0x7C,0xEF,0x7D,0xF5,0x7E,0xE2};

{
...
ascii2ascii(codepage,text);
...
}

Ergebnis text = {0xE4,0xE4,0xF6,0xF6,0xFC,0xFC,0xDF,0xDF}


//ääööüüßß

32
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ascii2hex
Kurzbeschreibung Wandelt einen Hex-String in eine Folge von Bytes

long ascii2hex(char destin[],char source[],int pos)

destin Zielpuffer(V)
source Stringpuffer
pos Position im Zielpuffer

Bemerkung Wandelt einen nullterminierten String source in eine Folge


von Bytes und fügt diese in destin ab Byteposition pos ein.
Dabei werden alle Zeichen des Stringpuffers gewandelt.
Bei ungültigen Zeichen oder bei einer ungeraden Anzahl
von Zeichen wird abgebrochen. Im Fehlerfall enthällt
destin alle bis zum fehlerhaften Zeichen konvertierten
Bytes.

Rückgabewert 0: Source enhällt ungültige Zeichen


1: Source enhällt nur gültige Zeichen

Siehe auch atoi, atoy, bcd2ascii, itoad, itoax

Beispiel {
char source[] = "00FF";
char destin[] = { 0x12, 0x34, 0x56, 0x78 };

ascii2hex(destin,source,1};
...
}

Ergebnis destin = { 0x12, 0x00, 0xFF, 0x78 }

33
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

atoi

Kurzbeschreibung Wandelt einen String in einen Wert

long atoi(char zahl[]);

zahl Zu wandlender String

Bemerkung Die atoi Funktion wandelt einen String in eine Zahl. Wenn
der String mit den Zeichen "0x" oder "0X" beginnt, so wird
der String als hexadezimale Zahl interpretiert. Wenn der
String mit den Zeichen "0y" bzw. "0Y" beginnt, wird der
String als binäre Zahl interpretiert. In allen anderen Fällen
wird der String als dezimale Zahl interpretiert. Beim ersten
Zeichen, das nicht in das Zahlenformat paßt, wird die
Konvertierung abgebrochen.

Rückgabewert Der gewandelte Wert (maximal 2^31).

Siehe auch atoy, itoad, itoax, bcd2ascii, hex2ascii, ascii2hex

Beispiel {
long hexzahl;
long binzahl;
long dezzahl;

hexzahl=atoi("0x77");
binzahl=atoi("0y01110110");
dezzahl=atoi("014");
...
}
Ergebnis hexzahl = 0x77 = 119
binzahl = 0x76 = 118
dezzahl= 0x0e = 14

34
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ator

Kurzbeschreibung Wandelt einen String in eine Realzahl

void ator(real destin, char value[]);

destin Realzahl zur Aufnahme des Wandlungsergebnisses


(maximal double = 1.7E ± 308 (15 digits))
value Zu wandlender String

Bemerkung Die ator Funktion wandelt einen String in eine Zahl. Der
String wird als Realzahl interpretiert. Der String darf
folgendes Format haben:

[{sign}][digits][{.|,}digits][{d|D|e|E}[sign]digits]

sign ist entweder '+' oder '-'.

digits sind ein oder mehrere Ziffern.

Beim ersten Zeichen, das nicht in das Zahlenformat paßt,


wird die Konvertierung abgebrochen.

Rückgabewert -

Siehe auch itoi, realadd, realsub, realmul, realdiv, rtoa

Beispiel {
real realzahl;

ator(realzahl,"1.22e01");
...
}

Ergebnis realzahl = 12.2

35
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

atoy

Kurzbeschreibung Wandelt einen String in ein Binärarray

long atoy(char binary[],char ascii[]);

binary Puffer für Binärdaten


ascii Zu wandlender String

Bemerkung Die atoy Funktion wandelt einen String in ein Binärarray.


Der Asciistring hat das Format: [AA] { },{ } [AB] { },{ } .Beim
ersten Zeichen, das nicht in das Format paßt, wird die
Konvertierung abgebrochen.

Rückgabewert Die Anzahl der binären Daten in binary.

Siehe auch atoi, itoad, itoax, bcd2ascii, hex2ascii, ascii2hex

Beispiel {
char ascii[];
char binary[];

ascii="aa,bb,cc, ,01"
atoy(binary,ascii);
}
Ergebnis binary = { 0xAA, 0xBB, 0xCC, 0x00, 0x01 }

36
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

bcd2ascii

Kurzbeschreibung Wandelt eine Kette von Zeichen in einen BCD-String.

void bcd2ascii(char destin[],char source[],int index, int count)

destin Stringpuffer(V)
source Quellpuffer
index Position im Quellpuffer
count Anzahl der zu wandelnden Bytes

Bemerkung Wandelt eine Kette von Bytes (jeweils zwei Nibbles) aus
dem Quellpuffer source, ab der Bytepostion index in einen
nullterminierten BCD-String destin um. Dabei werden
count Bytes aus dem Quellpuffer gewandelt. Für Nibbles
die einen Wert größer Hexadezimal 9 haben ( A..F) steht
im Zielstring ein '*'.

Rückgabewert -

Siehe auch atoi, atoy, itoad, itoax, hex2ascii, ascii2hex

Beispiel {
char source[]={ 0x12, 0x34, 0xFF, 0x78,
0x90 };
char destin[];

bcd2ascii(destin,source,1,3};
...
}

Ergebnis destin = "34**78"

37
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

bittest

Kurzbeschreibung Ermitteln von Bitergebnissen über eine Tabelle

long bittest(char name[],char source[],long value)

name Ergebnisname
source Puffer, der analysiert werden soll
value Testergebnis

Bemerkung Es muß eine Tabelle mit den Spalten NAME, BYTE,


MASK, VALUE vorhanden sein. Die Tabellenbearbeitung
muß vorher mit der Funktion tabset auf diese Tabelle
gesetzt worden sein. In der Spalte BYTE ist angegeben,
welches Byte in source betrachtet werden soll. In der
Spalte MASK sind die entsprechenden Bits zu maskieren
(welche Bits sollen betrachtet werden). In der Spalte
VALUE sind die Wert der Bits einzutragen, die sie haben
sollen, um den Status NAME wahr zu machen. Das
Ergebnis value ist TRUE (1) wenn alle in MASK gesetzten
Bits den in VALUE angegebenen Wert haben, sonst
FALSE (0).

Rückgabewert TRUE (1) wenn der Ergbnisname in der Tabelle gefunden


wurde, sonst FALSE (0)

Siehe auch bytetest

Beispiel table bits[4][]={


{ "NAME", "BYTE" , "MASK" , "VALUE" },
{ "XEIN", "0", , "0x07" , "0x06" },
{ "XAUS", "0", , "0x07" , "0x01" } };

{
int xeinvalue; int xausvalue;
char buffer[];
buffer[0]=0x06;

tabset("bits");
bittest("XEIN",buffer,xeinvalue);
bittest("XAUS",buffer,xausvalue);
}

38
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Ergebnis xeinvalue = 1
xausvalue = 0

39
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

bytetest

Kurzbeschreibung Ermitteln von Byteergebnissen über eine Tabelle

long bytetest(char name[],char source[],long value, long divs)

name Ergebnisname
source Puffer, der analysiert werden soll
value Testergebnis
divs Teiler

Bemerkung Es muß eine Tabelle mit den Spalten NAME, BYTE, MIN,
MAX, MINDEF, MAXDEF, A, B, DIV vorhanden sein. Die
Tabellenbearbeitung muß vorher mit der Funktion tabset
auf diese Tabelle gesetzt worden sein. In der Spalte BYTE
ist angegeben, welches Byte in source betrachtet werden
soll. In den Spalten MIN und MAX die Unter- und
Obergrenzen des Bytes in source. Werden sie über-, bzw
unterschritten, so wird in value der Wert in den Spalten
MINDEF bzw. MAXDEF zurückgegeben. Liegt der Wert
des Bytes innnerhalb der festgelegten Grenzen, so wird
der zurückgegebene Wert nach der Formel A*x + B
berechnet. Der in der Spalte DIV angegebene Teiler wird
in divs zurückgegeben. Er gibt an, mit welchem Wert das
Ergebnis noch geteilt werden muß, um ein korrektes
Ergebnis zu erhalten.

Rückgabewert 0 = im gültigen Bereich


1 = Bereichsüberschreitung
-1 = Bereichsunterschreitung

Siehe auch bittest


Beispiel table bytes[3][]={
{
"NAME","BYTE","MIN","MAX","MINDEF","MAXDEF"
,"A","B","DIV" },
{ "TEMP","0", "07" ,"254","-40", "120",
"-4","8","1" } };
...
int tempvalue; int tempdivs; char buffer[];
buffer[0]=0x06;

40
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

tabset("bytes");
bytetest("TEMP",buffer,tempvalue,tempdivs);
Ergebnis tempvalue = -40
tempdivs = 1

41
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

clear_error

Kurzbeschreibung Löscht das Errorflag

void clear_error()

Bemerkung Die Funktion clear_error löscht das Errorflag. Diese


Funktion muß aufgerufen werden, wenn ein Fehler
maskiert wurde. Mit dieser Funktion wird im EDIABAS der
Eintrag gelöscht, daß ein Fehler aufgetreten war.

Rückgabewert -

Siehe auch -

Beispiel set_trap_mask(0x60000);
ifreset();
set_trap_mask(0x00);
clear_error();

Ergebnis -

42
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

close_communication

Kurzbeschreibung Schließen des Kommunikationskanals zum Interface

void close_communication()

Bemerkung Die Funktion close_communication setzt die


Kommunikationsparameter im Interface zurück und
schließt den Treiber. Alle nach dieser Funktion
verwendeten Kommunikations- und Interfacefunktionen
werden mit der Fehlermeldung IFH_0019 beantwortet
(Ausnahme: open_communication).

Rückgabewert -

Siehe auch open_communication

Beispiel -

Ergebnis -

43
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

data_to_real

Kurzbeschreibung Wandelt Datenbytes in eine Realzahl

void data_to_real(real destin, char source[], long pos, long double,


long byteorder);

destin Realzahl zur Aufnahme des Wandlungsergebnisses (V)


source Quellpuffer (V)
pos Position des 1. Datenbytes im Quellpuffer
double Realzahlengenauigkeit:
0 = einfache Genauigkeit (4 Datenbytes IEEE)
<> 0 = doppelte Genauigkeit (8 Datenbytes IEEE)
byteorder Speicherformat im Quellpuffer:
0 = Little Endian (Intel)
<> 0 = Big Endian (Motorola)

Bemerkung Die data_to_real Funktion wandelt 4 Datenbytes


(double=0) oder 8 Datenbytes (double=1) des Quellpuffers
source ab der angegebenen Pufferposition pos in die
Realzahl destin.

Rückgabewert -

Siehe auch real_to_data

Beispiel {

unsigned char buffer[];


real realzahl;

buffer = { 0x66, 0xe6, 0xf6, 0x42 };


data_to_real(realzahl,buffer,0,0,0);
...
}

Ergebnis realzahl = 123.45

44
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

datacat

Kurzbeschreibung Anhängen von Datenbytes an einen Puffer

void datacat(unsigned char buffer[], unsigned char bytes[])

buffer Puffer, an den die Datenbytes angehängt werden(V)


bytes Datenbytes, die angehängt werden

Bemerkung Mit dieser Funktion werden Datenbytes an einen Puffer


angehängt.

Rückgabewert -

Siehe auch dataclear, datacopy, datacmp, dataerase, datainsert,


datalen, datarevers, dataset

Beispiel unsigned char buffer1[];


unsigned char buffer2[];
buffer1 = {0x01, 0x02, 0x03};
buffer2 = {0x04, 0x05, 0x06};
datacat(buffer1, buffer2);

Ergebnis buffer1 = {0x01, 0x02, 0x03, 0x04, 0x05,


0x06};

45
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

dataclear

Kurzbeschreibung Löschen eines Puffers

void dataclear(unsigned char buffer[])

buffer Datenpuffer (V)

Bemerkung Mit diese Funktion wird ein Datenpuffer gelöscht.

Rückgabewert -

Siehe auch datacat, datacopy, datacmp, dataerase, datainsert,


datalen, datarevers, dataset

Beispiel unsigned char buffer[];


buffer = {0x01, 0x02, 0x03};
dataclear(buffer);

Ergebnis buffer = {};

46
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

datacmp
Kurzbeschreibung Vergleicht zwei Datenpuffer

long datacmp(char d1[],char d2[])

d1 Datenpuffer 1 (V)
d2 Datenpuffer 2

Bemerkung Die Funktion vergleicht die beiden Datenpuffer d1 und d2.


Sind die beiden Datenpuffer gleich lang und in allen
Zeichen identisch, so wird auf gleich entschieden, sonst
auf ungleich.

Rückgabewert 0 wenn beide Datenpuffer gleich sind, <> 0 wenn nicht.

Siehe auch datacat, dataclear, datacopy, dataerase, datainsert,


datalen, datarevers

Beispiel {
int x; int y; int z;
unsigned char d1[];
d1 = {1,2,3}
x=datacmp(d1,{1,2,3});
y=datacmp(d1,{1,2,3,4});
z=datacmp(d1,{1,2,4});
}

Ergebnis x=0, y=1, z=1

47
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

datacopy

Kurzbeschreibung Kopiert Daten von einem Quellpuffer in einen Zielpuffer

void datacopy (char destin[],char source[],long pos,long count)

destin Zielpuffer (V)


source Quellpuffer
pos Anfangsposition im Quellpuffer
count Anzahl der zu kopierenden Zeichen

Bemerkung Die Funktion datacopy kopiert count Zeichen ab Position


pos aus dem Quellpuffer source in den Zielpuffer destin.
Es können maximal 1023 Zeichen kopiert werden.

Wertebereiche: 0 <= pos < 1024

0 <= count < 1024

pos+count < 1024

Beim Überschreiten des Wertebereichs führt dies zu


einem Laufzeitfehler BIP_0001.

Rückgabewert -

Siehe auch datacat, dataclear, datacmp, dataerase, datainsert,


datalen, datarevers, dataset

Beispiel {
char source[]= { 0x12, 0x34, 0x56, 0x78,
0x90 };
char destin[];

datacopy(destin,source,2,3);
...
}

Ergebnis destin={0x56,0x78,0x90}

48
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

dataerase

Kurzbeschreibung Löschen von Daten aus einem Puffer

void dataerase (char buffer[],int pos,int count)

buffer zu ändernder Puffer (V)


pos Position, ab der gelöscht werden soll
count Anzahl der zu löschenden Zeichen (C)

Bemerkung Die Funktion dataerase löscht eine beliebige Anzahl von


Zeichen aus einem Puffer. Die verbleibenden Teile des
Puffers werden zusammengeführt. Ab der Position pos
werden count Zeichen gelöscht. Ist der Pufferende
erreicht, so wird der Vorgang abgebrochen. Es bleibt dann
als Rest nur noch der Puffer bis pos.

Rückgabewert -

Siehe auch datacat, dataclear, datacopy, datacmp, datainsert,


datalen, datarevers, dataset

Beispiel {
char buffer[] = { 0x12,0x34,0xFF,0x56,0x78
};

dataerase(buffer,1,2);
...
}

Ergebnis destin={ 0x12,0x56,0x78 }

49
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

datainsert

Kurzbeschreibung Fügt Daten in einen Puffer ein

void datainsert (char destin[],char source[],int pos)

destin Zu ändernder Puffer (V)


source Einzufügender Puffer
pos Position ab der eingefügt werden soll

Bemerkung Die Funktion datainsert fügt den Puffer source in den


Puffer destin ein. Es wird ab der Position pos eingefügt.
Wird der Puffer destin länger als ein Stringregister, d.h.
1023 Zeichen, so führt dies zu einem Laufzeitfehler
BIP_0001.

Rückgabewert -

Siehe auch datacat, dataclear, datacopy, datacmp, dataerase,


datalen, datarevers, dataset

Beispiel {
char source[] = { 0xF0,0xF1 };
char destin[] = { 0x12,0x34,0x56,0x78 };

datainsert(destin,source,3);
...
}

Ergebnis destin={ 0x12,0x34,0x56,0xF0,0xF1,0x78 }

50
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

datalen

Kurzbeschreibung Ermitteln der Pufferlänge

long datalen(unsigned char buffer[])

buffer Puffer, dessen Länge bestimmt werden soll

Bemerkung Diese Funktion ermittelt die Länge (Anzahl Zeichen) eines


Datenpuffers.

Rückgabewert Anzahl der Zeichen im Puffer.

Siehe auch datacat, dataclear, datacopy, datacmp, dataerase,


datainsert, datarevers, dataset

Beispiel long length;


unsigned char buffer[];
buffer = {0x01, 0x02, 0x03, 0x04};
length = datalen(buffer);

Ergebnis length = 4

51
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

datarevers

Kurzbeschreibung Umdrehen eines Datenpuffers

void datarevers(unsigned char buffer[])

buffer Puffer, dessen Datenbytes vertauscht werden sollten (V)

Bemerkung Diese Funktion bringt die Datenbytes eines Puffers in die


umgekehrte Reihenfolge.

Rückgabewert -

Siehe auch datacat, dataclear, datacopy, datacmp, dataerase,


datainsert, datalen, dataset

Beispiel unsigned char buffer[];


buffer = {0x01, 0x02, 0x03, 0x04};
datarevers(buffer);

Ergebnis buffer = {0x04, 0x03, 0x02, 0x01}

52
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

dataset

Kurzbeschreibung Setzt die Bytes in einem Puffer auf einen definierten Wert

void dataset(char destin[],char data,long count)

destin Zielpuffer (V)


data Zu setzendes Zeichen
count Anzahl der zu setzenden Bytes

Bemerkung Setzt im Zielpuffer destin die durch count spezifizierte


Anzahl Bytes auf den Wert data.

Wertebereiche: 0 <= count < 1024

Beim Überschreiten des Wertebereichs führt dies zu


einem Laufzeitfehler BIP_0001.

Rückgabewert -

Siehe auch datacat, dataclear, datacopy, datacmp, dataerase,


datainsert, datalen, datarevers

Beispiel {
char buffer[]={ 0x12, 0x34, 0x56, 0x78,
0x90 };

dataset(buffer,0x41,2};
...
}

Ergebnis buffer={ 0x41, 0x41, 0x56, 0x78, 0x90 }

53
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

doNewInit

Kurzbeschreibung Erzwingt den Job INITIALISIERUNG vor dem nächsten


Jobaufruf.

void doNewInit()

Bemerkung Diese Funktion erzwingt den automatischen Aufruf des


Standardjobs INITIALISIERUNG vor der Ausführung des
nächsten Jobs.

Rückgabewert -

Siehe auch -

Beispiel {
doNewInit();
}

Ergebnis -

54
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

enableIfhTrace

Kurzbeschreibung Ein-/Ausschalten des IFH-Trace

void enableIfhTrace(long enable)

enable 0 = Ausschalten / <>0 => Einschalten

Bemerkung Mit dieser Funktion wird der IFH-Trace ein- oder


ausgeschalten. Nach Wechsel der SGBD wird diese
Einstellung wieder auf den Applikationsdefault
zurückgestellt.

Rückgabewert -

Siehe auch enableIgnitionHandling, enableUbattHandling,


getCfgInt, getCfgString, IsDebugLevel, IsSimulation

Beispiel unsigned char buffer[];

enableIfhTrace(1);
iftype(buffer);
enableIfhTrace(0);

Ergebnis -

55
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

enableClampHandling

Kurzbeschreibung Ein-/Ausschalten der automatischen Klemmenabfrage

void enableClampHandling(long enable)

enable 0 = Ausschalten / <>0 => Einschalten

Bemerkung Mit dieser Funktion wird die automatische Abfrage der


Klemmen 15/30 ein- oder ausgeschaltet. Ist diese Abfrage
ein, so werden die Klemmen 15/30 bei jedem Interface-
Zugriff abgefragt. Der Aktuelle Wert kann mit
"getCfgInt("ClampHandling");" gelesen werden. Nach
Wechsel der SGBD wird diese Einstellung wieder auf den
Applikationsdefault zurückgestellt.

Die Konfiguration der automatischen Klemmenstatus-


Abfrage muss von der Interface-Anbindung unterstützt
werden. Bei Interface-Anbindungen welche die
automatische Klemmenstatus-Abfrage nicht unterstützen,
wird das Konfigurationselement ClampHandling ignoriert
(d.h. in diesem Fall zeigt diese Funktion keine
Auswirkung).

Rückgabewert -

Siehe auch enableIfhTrace, enableUbattHandling, getCfgInt,


getCfgString, IsDebugLevel, IsSimulation

Beispiel unsigned char buffer[];

enableClampHandling(0);
iftype(buffer);
enableClampHandling(1);

Ergebnis -

56
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

enableIgnitionHandling

Kurzbeschreibung Ein-/Ausschalten der Zündungsüberwachung

void enableIgnitionHandling(long enable)

enable 0 = Ausschalten / <>0 => Einschalten

Bemerkung Mit dieser Funktion wird die Zündungsüberwachung ein-


oder ausgeschalten. Ist diese Überwachung ein, so wird
nach einem Abschalten der Zündung bei der nächsten
Interfacekommunikation der Fehler "IFH-0016: Ignition
On/Off Error" ausgelöst. Der Aktuelle Wert kann mit
"getCfgInt("IgnitionHandling");" gelesen werden. Nach
Wechsel der SGBD wird diese Einstellung wieder auf den
Applikationsdefault zurückgestellt.

Rückgabewert -

Siehe auch enableIfhTrace, enableUbattHandling, getCfgInt,


getCfgString, IsDebugLevel, IsSimulation

Beispiel unsigned char buffer[];

enableIgnitionHandling(0);
iftype(buffer);
enableIgnitionHandling(1);

Ergebnis -

57
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

enableUBattHandling

Kurzbeschreibung Ein-/Ausschalten der Batterieüberwachung

void enableUBattHandling(long enable)

enable 0 = Ausschalten / <>0 => Einschalten

Bemerkung Mit dieser Funktion wird die Batterieüberwachung ein-


oder ausgeschalten. Ist diese Überwachung ein, so wird
nach einem Abschalten der Batteriespannung bei der
nächsten Interfacekommunikation der Fehler "IFH-0015:
UBatt On/Off Error" ausgelöst. Der Aktuelle Wert kann mit
"getCfgInt("UBattHandling");" gelesen werden. Nach
Wechsel der SGBD wird diese Einstellung wieder auf den
Applikationsdefault zurückgestellt.

Rückgabewert -

Siehe auch enableIfhTrace, enableIgnitionHandling, getCfgInt,


getCfgString, IsDebugLevel, IsSimulation

Beispiel unsigned char buffer[];

enableUBattHandling(0);
iftype(buffer);
enableUBattHandling(1);

Ergebnis -

58
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

fclose

Kurzbeschreibung Schließen einer Datei

void fclose (int handle)

handle Referenz auf eine durch fopen geöffnete Datei (V)

Bemerkung Die Funktion fclose schließt eine mit fopen geöffnete


Datei. Nach fclose sind keine weiteren Dateioperation
mehr möglich. Im Fehlerfall (Fehler des EDIABAS-
Hostdateisystems) wird der Fehler BIP_0006 ausgelöst
[4].

Rückgabewert -

Siehe auch fopen, fread, freadln, fseek, fseekln, ftell, ftellln

Beispiel {
int handle;

handle=fopen("/test/div/test.dat");
...
/* Dateioperationen */
...
fclose(handle);
}

59
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

fopen
Kurzbeschreibung Öffnen einer Text-Datei zum Lesen

int fopen(char filename[])

filename Name der zu öffnenden Datei

Bemerkung Öffnet die angegebene Text-Datei zum Lesen. Es können


maximal 5 Dateien gleichzeitig geöffnet sein. Ist das
Öffnen gelungen, so wird ein sog. Filehandle
zurückgegeben.Der Filehandle referenziert dann genau
diese geöffnete Datei, und muß bei allen anderen
Dateioperationen angegeben werden. Beim Öffnen wird
der Lesezeiger der Datei auf das erste Zeichen der Datei
gesetzt. Im Falle eines Fehlers (des EDIABAS-
Hostdateisystems), wird ein Fehler BIP_0006 ausgelöst
[4].

Rückgabewert Filehandle

Siehe auch fclose, fread, freadln, fseek, fseekln, ftell, ftellln

Beispiel {
int handle;

handle=fopen("/usr2/test/test.dat");
...
/* Dateioperationen mit handle*/
...
fclose(handle);
}

60
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

fread
Kurzbeschreibung Lesen eines einzelnen Zeichens aus einer Datei

long fread(int handle)

handle Referenz auf eine durch fopen geöffnete Datei (V)

Bemerkung Die Funktion fread liest ein Zeichen aus einer Datei.
Gelesen wird ab der aktuellen Position des Lesezeigers.
Der Lesezeiger wird nach dem Lesen des Zeichens um 1
inkrementiert. Wurde versucht am Ende einer Datei zu
lesen, so wird -1 als Wert des Zeichens zurückgegeben
und der Lesezeiger wird nicht mehr inkrementiert.

Rückgabewert Das gelesene Zeichen (0x00 - 0xff) oder -1.

Siehe auch fclose, fopen, freadln, fseek, fseekln, ftell, ftellln

Beispiel {
int handle;
long c; long i=0;

handle=fopen("test.dat");
while((c=fread(handle)) != -1 )
i++;
}

Ergebnis i = Anzahl der gelesenen Zeichen

61
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

freadln
Kurzbeschreibung Lesen einer Zeile aus einer Datei

long freadln(char line[],int handle)

line Puffer zur Aufnahme der gelesenen Zeile (V)


handle Referenz auf eine durch fopen geöffnete Datei (V)

Bemerkung Die Funktion freadln liest ein Zeile aus einer Datei. Eine
Zeile sind alle Zeichen bis zu einem LF Zeichen. Gelesen
wird ab der aktuellen Position des Lesezeigers. Der
Lesezeiger wird nach dem Lesen der Zeile soweit
inkrementiert, bis er auf den Anfang der nächsten Zeile
zeigt. Die Funktion gibt die Länge der Zeile zurück. Wurde
versucht am Ende der Datei zu lesen, so wird -1 als Länge
der Zeile zurückgegeben und der Lesezeiger wird nicht
mehr inkrementiert. Im Fehlerfall (des Hostdateisystems)
wird der Fehler BIP_0006 ausgelöst [4].
Es sind maximal 1023 Zeichen pro Zeile zulässig !

Rückgabewert Die Anzahl der Zeichen in der gelesenen Zeile.

Siehe auch fclose, fopen, fread, fseek, fseekln, ftell, ftellln

Beispiel {
int handle;
char line[]; long i=0;

handle=fopen("beispiel.txt");
while(freadln(line,handle) != -1 )
i++;
}

Ergebnis i = Anzahl der gelesenen Zeilen.

62
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

fseek
Kurzbeschreibung Byteweises Setzen der Position des Lesezeigers

long fseek(long pos,int handle)

pos Neue Position des Lesezeigers in der Datei


handle Referenz auf eine durch fopen geöffnete Datei (V)

Bemerkung Die Funktion fseek positioniert den Lesezeiger auf ein


bestimmtes Byte in einer Datei. Es wird immer absolut
zum Dateianfang positioniert. Das erste Zeichen hat die
Position 0. Im Fehlerfall (des EDIABAS-Hostdateisystems)
wird der Fehler BIP_0006 ausgelöst [4].

Rückgabewert Die neue Position in der Datei.

Siehe auch fclose, fopen, fread, freadln, fseekln, ftell, ftellln

Beispiel {
int handle;
int c;

handle=fopen("Filename");
c=fread(handle);
fseek(0,handle);
c=fread(handle);
...
}

Ergebnis Es wird zweimal das erste Zeichen in der


Datei gelesen.

63
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

fseekln
Kurzbeschreibung Zeilenweises Setzen der Position des Lesezeigers

long fseekln(long pos,int handle)

pos Neue Zeilenposition des Lesezeigers in der Datei


handle Referenz auf eine durch fopen geöffnete Datei (V)

Bemerkung Die Funktion fseekln positioniert den Lesezeiger auf eine


bestimmte Zeile in einer Datei. Es wird immer absolut zum
Dateianfang positioniert. Die erste Zeile hat die Nummer
0. Im Fehlerfall (des EDIABAS-Hostdateisystems) wird der
Fehler BIP_0006 ausgelöst [4].

Rückgabewert Die neue Zeilenposition in der Datei.

Siehe auch fclose, fopen, fread, freadln, fseek, ftell, ftellln

Beispiel {
int handle;
char line[];

handle=fopen("test.txt");
fseekln(10,handle);
freadln(line,handle);
...
}

Ergebnis Es wird die 11. Zeile der Datei gelesen.

64
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ftell
Kurzbeschreibung Ermitteln der Position des Lesezeigers

long ftell(int handle)

handle Referenz auf eine durch fopen geöffnete Datei (V)

Bemerkung Die Funktion ftell ermittelt die aktuelle Position des


Lesezeigers in Bytes vom Dateianfang. Das erste Zeichen
hat die Position 0. Im Fehlerfall (des EDIABAS-
Hostdateisystems) wird der Fehler BIP_0006 ausgelöst
[4].

Rückgabewert Die aktuelle Position in der Datei.

Siehe auch fclose, fopen, fread, freadln, fseek, fseekln, ftellln

Beispiel {
int handle;
long c;

handle=fopen("Filename");
c=fread(handle);
c=fread(handle);
.
c=ftell(handle);
}

Ergebnis c=2, es wurden 2 Bytes gelesen.

65
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ftellln
Kurzbeschreibung Ermitteln der Position des Lesezeigers in Zeilen

long ftellln(int handle)

handle Referenz auf eine durch fopen geöffnete Datei (V)

Bemerkung Die Funktion ftellln ermittelt die aktuelle Position des


Lesezeigers in Zeilen vom Dateianfang. Die erste Zeile hat
die Position 0. Im Fehlerfall (des EDIABAS-
Hostdateisystems) wird der Fehler BIP_0006 ausgelöst
[4].

Rückgabewert Die aktuelle Position in der Datei.

Siehe auch fclose, fopen, fread, freadln, fseek, fseekln, ftell

Beispiel {
int handle; int c;
char line[];

handle=fopen("xxx.tst");
freadln(line,handle);
freadln(line,handle);
.
c=ftellln(handle);
}

Ergebnis c=2, es wurden 2 Zeilen gelesen.

66
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

get_battery_voltage
Kurzbeschreibung Auslesen der Batteriespannung

long get_battery_voltage()

Bemerkung Diese Funktion liefert die Spannung an der Klemme 30


(Batteriespannung) in Millivolt.

Rückgabewert Spannung in Millivolt

Siehe auch get_ignition_voltage

Beispiel long spannung;


spannung = get_battery_voltage();

Ergebnis -

67
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

get_error
(get_trap_mask, set_trap_mask)
Kurzbeschreibung Prüfen ob ein Fehler aufgetreten ist

long get_error(long nr)

nr Nummer des zu überprüfenden Fehlers

Bemerkung Normalerweise reagiert EDIABAS auf das Auftreten eine


Fehlers mit dem automatischen Abbruch des gerade
aktiven Jobs. Es wird dann nur eine Fehlermeldung
zurückgegeben. In bestimmten Fällen, z.B. bei der
Steuergeräteidentifikation, ist es jedoch wünschenswert,
bestimmte Fehler innerhalb der
Steuergerätebeschreibungsdatei zu analysieren. Dazu
können im sog. Trapmaskregister bestimmte Bits
(Trapbits) gesetzt werden (siehe set_trap_mask). Jedem
Trapbit ist eine Fehlermeldung zugeordnet. Ist dieses Bit
gesetzt, so wird beim Auftreten dieses Fehlers der Job
nicht automatisch abgebrochen, sondern nur ein Trapbit
und die Trapnummer im Condition Code Register gesetzt.
Die Funktion get_error prüft nun, ob das Trapbit gesetzt
ist und der angebene Fehler mit der Trapnummer
übereinstimmt. In diesem Fall gibt get_error TRUE (!0)
ansonsten FALSE (0) zurück. Ist nr = 0, so wird nur
geprüft, ob das Trapbit gesetzt ist, wenn ja liegt ein Fehler
vor und es wird TRUE zurückgegeben. Für eine Liste der
möglichen Trapnummern siehe set_trap_mask.

Rückgabewert TRUE wenn ein Fehler auftrat, FALSE wenn nicht.

Siehe auch get_trap_mask, set_trap_mask, make_error

Beispiel set_trap_mask(0xffffffff); //trap


all errors
send_and_receive(destin,source);
if(get_error(0))
job_status="FEHLER BEI SG-
KOMMUNIKATION";
else
job_status="SG-KOMMUNIKATION I.O.";

68
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Ergebnis job_status="FEHLER BEI SG-KOMMUNIKATION"


falls SG nicht antwortet.

69
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

get_error2
Kurzbeschreibung Prüfen ob ein Fehler aufgetreten ist

long get_error2()

Bemerkung Normalerweise reagiert EDIABAS auf das Auftreten eine


Fehlers mit dem automatischen Abbruch des gerade
aktiven Jobs. Es wird dann nur eine Fehlermeldung
zurückgegeben. In bestimmten Fällen, z.B. bei der
Steuergeräteidentifikation, ist es jedoch wünschenswert,
bestimmte Fehler innerhalb der
Steuergerätebeschreibungsdatei zu analysieren. Dazu
können im sog. Trapmaskregister bestimmte Bits
(Trapbits) gesetzt werden (siehe set_trap_mask). Jedem
Trapbit ist eine Fehlermeldung zugeordnet. Ist dieses Bit
gesetzt, so wird beim Auftreten dieses Fehlers der Job
nicht automatisch abgebrochen, sondern nur ein Trapbit
und die Trapnummer im Condition Code Register gesetzt.
Die Funktion get_error2 gibt die Fehlernummer des
aufgetretenen Fehlers zurück. Für eine Liste der
möglichen Trapnummern siehe set_trap_mask.

Rückgabewert Fehlernummer des aufgetretenen Fehlers

Siehe auch get_error, get_trap_mask, set_trap_mask, make_error

Beispiel long error;


set_trap_mask(0xffffffff); // trap all
// errors
send_and_receive(destin,source);
error = get_error2();
Ergebnis -

70
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

get_ignition_voltage
Kurzbeschreibung Auslesen der Spannung an der Zündung

long get_ignition_voltage()

Bemerkung Diese Funktion liefert die Spannung an der Klemme 15


(Spannung an der Zündung) in Millivolt.

Rückgabewert Spannung in Millivolt

Siehe auch get_battery_voltage

Beispiel long spannung;


spannung = get_ignition_voltage();

Ergebnis -

71
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

get_token
Kurzbeschreibung Ermitteln eines Tokens in einem String

void get_token(char destin[],char source[],char trenner[],long nr)

destin Zielpuffer für das ermittelte Token (V)


source zu analysierender String
trenner String mit den möglichen Tokentrennern
nr Nummer des zu ermittelnden Tokens

Bemerkung Ein Token ist ein zusammenhängender Teil einer


Zeichenkette, der durch eines oder mehrere Zeichen aus
trenner begrenzt wird. Um einen normalen Text in Tokens
zu zerlegen muß der Trennstring trenner SPACE, TAB,
und CR enthalten. Die Funktion get_token analysiert den
String source und ermittlelt die in ihm, durch die Zeichen
in trenner definierten, vorhandenen Token. Das Token
Nummer nr wird dann nach destin kopiert.

Rückgabewert -

Siehe auch get_token, strcat, strcmp, strcpy, strcut, strerase,


strinsert, strlen, strncpy, strrevers

Beispiel {
char source[]; char destin[];
source="DIES IST EIN TEST FUER TOKENS";
gettoken(destin,source," ",4);
}

Ergebnis destin = "TEST"

72
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

get_trap_mask
Kurzbeschreibung Einlesen des aktuellen Werts des Trapmaskregisters

long get_trap_mask()

Bemerkung Die Funktion get_trap_mask liest den aktuellen Wert des


Trapmaskregisters. In diesem Register wird festgelegt,
welche Fehler an das Laufzeitsystem weitergeleitet
werden sollen und welche nicht.
Für eine genaue Beschreibung des Trapmaskregisters
siehe set_trap_mask.

Rückgabewert Der aktuelle Wert des Trapmaskregisters

Siehe auch get_error, set_trap_mask

Beispiel {
long x;
set_trap_mask(0x00180000);
x=get_trap_mask();
}

Ergebnis x=0x00180000

73
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

generateRunError
Kurzbeschreibung Löst einen anwendungsspezifischen „RUN-00XX“-Fehler
aus

void generateRunError(long errornumber);

errornumber Fehlernummer des auszulösenden Fehlers

Bemerkung Die Funktion löst den anwendungsspezifischen „RUN-


00XX“-Fehler, der mit errornumber übergeben wurde im
Laufzeitsystem aus.

Rückgabewert -

Siehe auch make_error, get_error

Beispiel {
...
generateRunError(250); // „RUN-0000“
// auslösen
}

Ergebnis -

74
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

getasciidate
Kurzbeschreibung Ermitteln des aktuellen Datums als ASCII-String

void getasciidate(char date[])

date Stringpuffer zur Aufnahme des Datumsstrings (V)

Bemerkung Ermittelt aus der Systemzeit das aktuelle Datum als String
der Form:
"wt tt.mm.jj KW kw"
wt = Wochentag = MO, DI, MI, DO, FR, SA, SO
Die Kalenderwoche (KW) wird nach den allgemein
gültigen Regeln ermittelt.

Rückgabewert -

Siehe auch getasciitime, getdate, gettime, wait

Beispiel {
char date[];

getasciidate(date);
...
}

Ergebnis date="FR 31.12.92 KW 52" (Beispiel)

75
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

getasciitime
Kurzbeschreibung Ermitteln der aktuellen Uhzeit als ASCII-String

void getasciitime(char time[])

time Stringpuffer zur Aufnahme des Zeitstrings (V)

Bemerkung Ermittelt aus der Systemzeit die aktuelle Uhrzeit als String
der Form:
"hh:mm:ss"

Rückgabewert -

Siehe auch getasciidate, getdate, gettime, wait

Beispiel {
char time[];

getasciitime(time);
...
}

Ergebnis time="12:51:15" (Beispiel)

76
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

getCfgInt

Kurzbeschreibung Auslesen eines Konfigurationselements als Integer

long getCfgInt(char cfg[])

cfg Konfigurationselement

Bemerkung Mit dieser Funktion kann die Einstellung von EDIABAS


Konfigurationselementen ermittelt werden.

Rückgabewert Aktuelle Konfigurationseinstellung

Siehe auch enableIIfhTrace, enableIgnitionHandling,


enableUbattHandling, getCfgString, IsDebugLevel,
IsSimulation

Beispiel long cfgvalue;

cfgvalue=getCfgInt("RetryComm");

Ergebnis cfgvalue=0..1 // automatische Wiederholung


?

77
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

getCfgString

Kurzbeschreibung Auslesen eines Konfigurationselements als String

long getCfgString(char cfgvalue[],char cfg[])

cfgvalue Puffer für Konfigurationseinstellung


cfg Konfigurationselement

Bemerkung Mit dieser Funktion kann die Einstellung von EDIABAS


Konfigurationselementen ermittelt werden.

Rückgabewert 0: Konfigurationselement nicht gefunden, sonst: gefunden

Siehe auch enableIIfhTrace, enableIgnitionHandling,


enableUbattHandling, getCfgInt, IsDebugLevel,
IsSimulation

Beispiel char cfgvalue[];

getCfgString(cfgvalue,"SimulationPath");

Ergebnis z.B.: cfgvalue="c:\ediabas\sim"

78
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

getdate
Kurzbeschreibung Ermitteln des aktuellen Datums als Arraystruktur

void getdate(char date[])

date Puffer zur Aufnahme der Datumsstruktur (V)

Bemerkung Ermittelt aus der Systemzeit das aktuelle Datum als


Struktur der Form:
date[0] = Tag im Monat ( 1..31 )
date[1] = Monat im Jahr ( 1..12 )
date[2] = Jahr ( 0..99)
date[3] = Kalenderwoche ( 1..53)
date[4] = Wochentag : ( 1 = Montag 7 = Sonntag )
Die Kalenderwoche wird nach den allgemein gültigen
Regeln ermittlelt.

Rückgabewert -

Siehe auch getasciidate, getasciitime, gettime, wait

Beispiel {
char date[];

// Freitag der 6.8.1999 (KW 31)


getdate(date);
...
}

Ergebnis date= { 06,08,63,1F,05 } (Beispiel)

79
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

getETXblock
Kurzbeschreibung Liefert die Datenbytes eines angegebenen Blocks eines
KWP 1281 Steuergerätes.

long getETXblock(unsigned char antwort[], long status, long block,


unsigned char daten[], long blocklaenge)

antwort Steuergeräteantworttelegramm (V)


status In die Funktion: Sollstatusbyte des Blocks (V)
Aus der Funktion: Ist Statusbyte des Blocks (V)
block Blocknummer, beginnend bei 1
daten Datenbytes des Blocks (V)
blocklaenge Anzahl der Datenbytes im Block (V)

Bemerkung Mit dieser Funktion werden aus dem Antworttelegramm


eines Steuergerätes die Datenbytes eines bestimmten
Blocks herausgefiltert. Zusätzlich wird anhand eines
übergebenen Statusbytes der Block auf Korrektheit
überprüft (Sollstatus == Iststatus). Stimmt das Soll- nicht
mit dem Ist-Statusbyte überein, so liefert die Funktion den
Returnwert 0, sonst 1.

Rückgabewert 0 = Fehler
1 = alles in Ordnung

Siehe auch -

Beispiel unsigned char antwort[];


unsigned char buffer[];
unsigned char status = 0xfc;
char blockLen;

send_and_receive(antwort,tel_fslesen);

if
(getETXblock(antwort,status,1,buffer,blockL
en))
{

Ergebnis -

80
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

GetKWP2000Block
Kurzbeschreibung Extrahiert den Datenteil aus einem KWP 2000 Telegramm
in der Steuergeräteantwort.

int GetKWP2000Block(int position, char response[],char format, char


target, char source, int length, char data[])

position Anfangsposition eines Telegramms in der SG Antwort (V)


response Steuergeräteantwort
format KWP 2000 Formatbyte im Header (V)
target KWP 2000 Testeradresse im 3 Byte. Bei 1 Byte Header
wird 0 eingetragen. (V)
source KWP 2000 Steuergeräteadresse im 3 Byte Header. Bei 1
Byte Header wird 0 eingetragen.(V)
length Länge der Telegrammdaten (inklusiv der ServiceID) (V)
data Telegrammdaten (inklusiv der ServiceID) (V)

Bemerkung Diese Funktion extrahiert den Datenteil (inklusiv


ServiceID) aus einem KWP 2000 Telegramm, dabei wird
DataSegmentation unterstützt. Da die SG Antwort aus
mehreren Telegrammen bestehen kann, zeigt position auf
den Anfang eines Telegrams. Nach Ausführung der
Funktion zeigt position auf das nächste Telegramm, wenn
vorhanden. Die Funktion liefert solange 1 als
Rückgabewert, solange kein Fehler aufgetreten ist.

Rückgabewert 0: Fehler
1: Kein Fehler

Siehe auch -

Beispiel {
unsigned char resonse[];
int position;
int format;
int source;
int target;
int length;
unsigned char data[];
unsigned char dataglobal[];

send_and_receive(resonse,request);

81
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

position = 0;
while(GetKWP2000Block(position,resonse,
format,source,target,length,data))
datacat(dataglobal,data);
}

Ergebnis -

82
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

gettickcount
Kurzbeschreibung Ermitteln eines systeminternen Zählerwerts in
Millisekunden.

unsigned long gettickcount()

Bemerkung Die Funktion gibt einen systeminternen Zählerwert in


Millisekunden zurück. Bei mehrfachem Aufruf der Funktion
ist zu beachten, daß ein Zählerüberlauf möglich ist (Zähler
beginnt wieder mit 0). Die Genauigkeit der Funktion
gettickcount ist systemabhängig:

Win16/32: Millisekunden seit Systemstart

Unix: Sekunden seit 00:00 Uhr

Rückgabewert Zählerwert in Millisekunden

Siehe auch getasciidate, getasciitime, getdate, wait, waitex

Beispiel {
unsigned long ticks;

ticks=gettickcount();
...
}

Ergebnis -

83
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

gettime
Kurzbeschreibung Ermitteln der aktuellen Uhrzeit als Arraystruktur

void gettime(char time[])

time Puffer zur Aufnahme der Zeitstruktur (V)

Bemerkung Ermittelt aus der Systemzeit die aktuelle Uhrzeit als


Struktur der Form:
time[0] = Stunde ( 0..23 )
time[1] = Minute ( 0..59 )
time[2] = Sekunde ( 0..59)

Rückgabewert -

Siehe auch getasciidate, getasciitime, getdate, wait

Beispiel {
char time[];

gettime(time);
...
}

Ergebnis time= { 14,52,10 } (Beispiel)

84
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

hex2ascii
Kurzbeschreibung Wandelt eine Folge von Bytes in einen Hex-String.

void hex2ascii(char destin[],char source[],int pos, int count)

destin Stringpuffer(V)
source Quellpuffer
pos Position im Quellpuffer
count Anzahl der zu wandelnden Bytes

Bemerkung Wandelt eine Kette von Bytes aus dem Quellpuffer source,
ab Byteposition pos, in einen nullterminierten String destin
um. Dabei werden count Bytes aus dem Quellstring
gewandelt.

Rückgabewert -

Siehe auch atoi, atoy, bcd2ascii, itoad, itoax, ascii2hex

Beispiel {
char source[]={ 0x12, 0x34, 0xFF, 0x78,
0x90 };
char destin[];

hex2ascii(destin,source,1,2};
...
}

Ergebnis destin = "34FF"

85
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ifboot
Kurzbeschreibung Rücksetzen des Interface

void ifboot()

Bemerkung Diese Funktion versetzt das Interface in den


Initialisierungszustand und die Diagnoseschnittstelle wird
getestet. Nach diesem Job nimmt das IDBSS etwa 2
Sekunden lang kein Komando mehr an.

Rückgabewert -

Siehe auch -

Beispiel ifboot();

Ergebnis -

86
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ifgetport
Kurzbeschreibung Auslesen eines Ports

long ifgetport(long port)

port Portnummer (V,C)

Bemerkung Diese Funktion ließt Ports aus. Beim EDIC können neun
Ports ausgelesen werden. Die Ports 0 - 7 sind
Analogeingänge (Ergebnisse in Millivolt), das Port 8 gibt
den Wert des Jumperfields zurück (jedes Bit entspricht
einem Jumper).
EDIC:
Port 0 - 5 : Analogeingänge 0 - 5 (Spannung in Millivolt)
Port 6: Analogeingang Klemme 15 (Spannung in
Millivolt)
Port 7 : Analogeingang Klemme 30 (Spannung in
Millivolt)
Port 8 : Jumperfeld (Digitalwert)

Rückgabewert Wert des Ports

Siehe auch get_battery_voltage, get_ignition_voltage

Beispiel long spannungKl30;


long jumper;
spannungKl30 = ifgetport(7);
jumper = ifgetport(8);

Ergebnis -

87
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ifinfo
Kurzbeschreibung Debugfunktion

void ifinfo(char output[], char input[])

output Ausgabedaten (V)


input Eingabedaten

Bemerkung Diese Funktion existiert nur zu Debugzwecken. Mit dieser


Funktion kann bei der Entwicklung von EDIABAS die
interne Funtionalität über die Beschreibungsdatei
beeinflußt werden. Die Funktionalität kann von EDIABAS
Version zu Version variieren. Diese Funktion.darf vom
Anwender nicht benutzt werden und wird hier nur der
Vollständigkeit halber beschrieben.

Rückgabewert -

Siehe auch ifinfoExt

Beispiel -

Ergebnis -

88
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ifinfoExt
Kurzbeschreibung Debugfunktion

long ifinfoExt(long funcID,char output[], char input[])

funcID Funktions ID (V)


output Ausgabedaten (V)
input Eingabedaten

Bemerkung Diese Funktion existiert nur zu Debugzwecken. Mit dieser


Funktion kann bei der Entwicklung von EDIABAS die
interne Funtionalität über die Beschreibungsdatei
beeinflußt werden. Die Funktionalität kann von EDIABAS
Version zu Version variieren. Diese Funktion.darf vom
Anwender nicht benutzt werden und wird hier nur der
Vollständigkeit halber beschrieben.

Rückgabewert Status

Siehe auch ifinfo

Beispiel -

Ergebnis -

89
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ifloopt
Kurzbeschreibung Testen der Diagnoseleitung

long ifloopt()

Bemerkung Diese Funktion testet die Diagnoseleitung, wobei ein


Kurzschluß zwischen der RD- und TD-Leitung vorliegen
muß.

Rückgabewert 0: Test nicht erfolgreich


1: Test erfolgreich

Siehe auch -

Beispiel if (ifloopt())
/* fuehre Diagnose durch */

Ergebnis -

90
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ifrawmode
Kurzbeschreibung Daten an das Interface durchreichen

void ifrawmode(unsigned char response[], unsigned char request[])

response Antwort vom Interface


request Anforderung an das Interface

Bemerkung Mit dieser Funktion werden die übergebenen Daten direkt


an das Interface durchgereicht. Die Antwort des Interface
wird uninterpretiert zurückgegeben. Die Kontrollbytes
einer Antwort vom Interface werden nicht ausgewertet.

Rückgabewert -

Siehe auch -

Beispiel unsigned char request[];


unsigned char response[];
request= {0x0A, 0x00}; /* Versionsnummer
auslesen */
ifrawmode(response, request);

Ergebnis z.B. output: 0x00, 0x00, 0x03, 0x00

91
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ifrecv
Kurzbeschreibung Funktion für Debugzwecke

void ifrecv(unsigned char response[], long time)

response Daten von der seriellen Schnittstelle (V)


time Wartezeit in Millisekunden

Bemerkung Diese Funktion wartet die angegebene Zeit auf Zeichen an


der seriellen Schnittstelle. Diese Funktion dient nur zu
Debugzwecken. Die Funktion darf nicht verwendet
werden, da sie sich von EDIABAS Version zu Version
ändern kann.

Rückgabewert -

Siehe auch ifsend

Beispiel -

Ergebnis -

92
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ifrequeststate
Kurzbeschreibung Abfrage des Status vom Interface

void ifrequeststate(unsigned char status[])

status Interfacestatus (V)

Bemerkung Mit dieser Version wird der aktuelle Status des Interfaces
abgefragt.

Rückgabewert -

Siehe auch -

Beispiel

Ergebnis -

93
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ifreset
Kurzbeschreibung Rücksetzen der Kommunikationsparameter

void ifreset()

Bemerkung Diese Funktion bricht die Kommunikation mit einem


Steuergerät ab und löscht die Kommunikationsparameter.
Ein möglicherweise im Interface gespeichertes Telegramm
vom Steuergerät wird gelöscht.

Rückgabewert -

Siehe auch ifboot

Beispiel ifreset();

Ergebnis -

94
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ifsend
Kurzbeschreibung Funktion für Debugzwecke

void ifsend(unsigned char request[])

request Daten an die serielle Schnittstelle

Bemerkung Diese Funktion schickt Zeichen an die serielle


Schnittstelle. Diese Funktion dient nur zu Debugzwecken.
Die Funktion darf nicht verwendet werden, da sie sich von
EDIABAS Version zu Version ändern kann.

Rückgabewert -

Siehe auch ifrecv

Beispiel -

Ergebnis -

95
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ifsetport
Kurzbeschreibung Setzen eines Ports

void ifsetport(long port, long wert)

port Portnummer
wert Portwert

Bemerkung Mit dieser Funktion können Ports gesetzt werden. Im


EDIC kann nur Port 9 (digitale Ausgänge) gesetzt werden.
Port 9 : Digitale Ausgänge

Rückgabewert -

Siehe auch ifgetport

Beispiel long wert;


wert = 0xff;
ifsetport(9, wert);

Ergebnis -

96
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ifsireset
Kurzbeschreibung Schalten des SI-Relais

void ifsireset(long time)

time Schaltzeit in Millisekunden

Bemerkung Mit dieser Funktion wird das Service-Intervall-Relais des


EDIC für die angegebene Zeit eingeschaltet.
time = 0 : Dauerhaft ausschalten
time = -1 : Dauerhaft einschalten

Rückgabewert -

Siehe auch -

Beispiel ifsireset(100); /* Schalten für 100 ms */

Ergebnis -

97
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

iftype
Kurzbeschreibung Liefert den Interfacetyp als String

void iftype(char type[])

type String zur Aufnahme des Interfacetyps (V)

Bemerkung Diese Funktion gibt den Interfacetyp als nullterminierten


String zurück.

Rückgabewert -

Siehe auch ifvers

Beispiel char typ[];


iftype(typ);

Ergebnis -

98
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

ifvers
Kurzbeschreibung Liefert die Interfaceversionsnummer

long ifvers()

Bemerkung Dieser Job liefert die Versionsnummer des Interface


(EDIC, IDBSS)

Rückgabewert Versionsnummer

Siehe auch -

Beispiel unsigned int versionsnr;


versionsnr = ifvers();

Ergebnis versionsnr /* z.B. 0 */

99
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

incProgressPos
Kurzbeschreibung Erhöht die aktuelle Position des Fortschrittszählers

void incProgressPos(long n)

n Wert um den die aktuelle Fortschrittsposition erhöht


werden soll.

Bemerkung Mit dieser Funktion wird die aktuelle Fortschrittsposition


um den angegebenen Wert erhöht. Diese Funktion hat nur
eine Wirkung, wenn zuvor in einem Job der
Fortschrittszähler mit setProgressRange initialisiert wurde.

Rückgabewert -

Siehe auch setProgressRange

Beispiel
setProgressRange(500);
incProgressPos(0); // Start mit 0 Prozent
:
incProgressPos(100); // 20 Prozent
: // bearbeitet
incProgressPos(300); // 80 Prozent
: // bearbeitet
incProgressPos(200); // 100 Prozent
// bearbeitet

///////////////////////////////////////////
////////
// Im ENDE-Job
setProgressRange(0); // Bearbeitungsstand
// zuruecksetzen

Ergebnis -

100
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

isDebugLevel

Kurzbeschreibung Ermitteln des Debuglevels

long isDebugLevel()

Bemerkung Mit dieser Funktion kann die Einstellung des EDIABAS


Konfigurationselements "BipDebugLevel" ermittelt werden.
Anhand dieses Wertes können bestimmte Aktionen nur
während des SGBD-Test durchgeführt werden.
Entspricht: getCfgInt("BipDebugLevel");

Rückgabewert 0=Debug: AUS(default), oder Level

Siehe auch enableIIfhTrace, enableIgnitionHandling,


enableUbattHandling, getCfgInt, getCfgString,
IsSimulation

Beispiel char antwort[];

// für Testzwecke gesendetes Telegram


ausgeben
if(isDebugLevel() > 3)
SEND_TEL=tel;

send_and_reveive(antwort,tel);

// für Testzwecke empfangenes Telegram


ausgeben
if(isDebugLevel() > 3)
RECV_TEL=antwort;

Ergebnis

101
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

isSimulation

Kurzbeschreibung Ermitteln der Simulation

long isSimulation()

Bemerkung Mit dieser Funktion kann die Einstellung des EDIABAS


Konfigurationselements "Simulation" ermittelt werden.
Anhand dieses Wertes können bestimmte Aktionen nur
während des SGBD-Test durchgeführt werden.
Entspricht: getCfgInt("Simulation");

Rückgabewert 0/1=Simulation: AUS(default)/EIN

Siehe auch enableIIfhTrace, enableIgnitionHandling,


enableUbattHandling, getCfgInt, getCfgString,
IsDebugLevel

Beispiel char antwort[];

// für Testzwecke anderes Telegram


verwenden

if(isSimulation())
send_and_reveive(antwort,tel_sim);
else
send_and_reveive(antwort,tel);

Ergebnis

102
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

itoad
Kurzbeschreibung Wandelt eine Zahl in einen String in dezimaler Darstellung

void itoad(char destin[],long value)

destin Puffer zur Aufnahme des Strings (V)


value zu wandelnde Zahl

Bemerkung Die Funktion itoad wandelt die Zahl value in einen String
in dezimaler Darstellung mit Vorzeichen. Es werden keine
führenden Nullen ausgegeben.

Rückgabewert -

Siehe auch atoi, atoy, bcd2ascii, hex2ascii, itoax, ascii2hex

Beispiel {
char destin[];

itoad(destin,1143);
...
}

Ergebnis destin="1143"

103
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

itoax
Kurzbeschreibung Wandelt eine Zahl in einen String in hexadezimaler
Darstellung

void itoax(char destin[],long value)

destin Stringpuffer zur Aufnahme des Strings (V).


value Stringpuffer zur Aufnahme des

Bemerkung Die Funktion itoax wandelt die Zahl value in einen String
in hexadezimaler Darstellung ohne Vorzeichen. Der
ausgegebene String hat immer das Format 0x########.
Es werden immer alle Stellen ausgegeben.

Rückgabewert -

Siehe auch atoi, atoy, bcd2ascii, hex2ascii, itoad, ascii2hex

Beispiel {
char destin[];

itoax(destin,1143);
...
}

Ergebnis destin="0x00000477"

104
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

itor
Kurzbeschreibung Wandelt einen Integerwert in eine Realzahl

void itor(real destin, long value);

destin Realzahl zur Aufnahme des Wandlungsergebnisses


(maximal double = 1.7E ± 308 (15 digits))
value Zu wandelnde Zahl

Bemerkung Die itor Funktion wandelt einen Integerwert in eine


Realzahl.

Rückgabewert -

Siehe auch ator, realadd, realsub, realmul, realdiv

Beispiel {
real realzahl;

itor(realzahl,122);
...
}

Ergebnis realzahl = 1.22e2

105
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

make_error
Kurzbeschreibung Löst einen Fehler aus

void make_error(long trapnumber);

trapnumber Trap-Nummer des auszulösenden Fehlers

Bemerkung Die Funktion trägt die Trap-Nummer trapnumber in das


Trap-Mask-Register ein und löst den korrespondierenden
Fehler im Laufzeitsystem aus.

Rückgabewert -

Siehe auch get_error

Beispiel {
...
make_error(19); // IFH_0009
auslösen
}

Ergebnis -

106
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

new_set_of_results
Kurzbeschreibung Öffnen eines neuen Ergebnissatzes

void new_set_of_results()

Bemerkung Die Funktion new_set_of_results signalisiert dem


Laufzeitsystem den Beginn eines neuen Ergebnissatzes.
Es ist möglich, die Ergebnisse eines Jobs in verschiedene
Sätze zu unterteilen. So kann die Ergebnisinformation
gruppiert werden. Zum Beispiel können die Ergebnisse
FORT, FART und FCODE für jeden im Steuergerät
enthaltenen Fehler zurückgegeben werden, ohne immer
einen neuen Ergebnisname verwenden zu müssen.

Rückgabewert -

Siehe auch parcount, realresult

Beispiel ...
result: x ; type int ...
{
x = 1;
x = 2;
new_set_of_results();
x = 1;
...
}

Ergebnis Ergebnissatz 1: x = 2;
Ergebnissatz 2: x = 1;

107
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

open_communication
Kurzbeschreibung Öffnen des Kommunikationskanals zum Interface

void open_communication()

Bemerkung Diese Funktion öffnet den Treiber und stellt fest, ob ein
IDBSS oder ein EDIC angeschlossen ist. Ist ein IDBSS
angeschlossen, so werden EDIC-spezifische Funktionen
gesperrt. Diese Funktion muß vor allen anderen
Funktionen, die auf das Interface zugreifen, aufgerufen
werden. Es empfiehlt sich, diese Funktion als erste
Funktion im Job INITIALISIERUNG zu schreiben. Wurde
open_communication noch nicht aufgerufen, so werden
alle Kommunikations- und Interfacebefehle mit der
Fehlermeldung IFH_0019 beantwortet.

Rückgabewert -

Siehe auch close_communication

Beispiel open_communication();

Ergebnis -

108
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

parcount
Kurzbeschreibung Ermitteln der Parameteranzahl

long parcount()

Bemerkung Ermittelt die Anzahl der bei apiJob bzw. apiJobData als
Parameter 3 übergebenen Parameter. Dabei werden
immer alle Parameter gezählt, auch jene die nicht gültig,
also leer sind. d.h. parcount liefert bei apiJob(
"...","...",";;;;","..." ) den Wert 5 zurück. Es wird auch dann 1
zurückgegeben, wenn ein Paramter vorhanden ist, der
nicht auswertbar ist.

Rückgabewert Die Anzahl der übergebenen Parameter

Siehe auch new_set_of_results, realresult

Beispiel {
long x;
x=parcount();
}

Ergebnis apiJob(...,"1;2;3",...); => x=3


apiJob(...,"1",...); => x=1
apiJob(...,";;",...); => x=3
apiJob(...,"1;2;",...); => x=3
apiJobData(...,"",5,...); => x=1

109
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

real_to_data

Kurzbeschreibung Wandelt eine Realzahl in Datenbytes

void real_to_data(char destin[], real source, long pos, long double,


long byteorder);

destin Zielpuffer zur Aufnahme des Wandlungsergebnisses (V)


source Realzahl (V)
pos Position des 1. Datenbytes im Zielpuffer
double Genauigkeit der Realzahl im Zielpuffer:
0 = einfache Genauigkeit (4 Datenbytes IEEE)
<> 0 = doppelte Genauigkeit (8 Datenbytes IEEE)
byteorder Speicherformat im Zielpuffer:
0 = Little Endian (Intel)
<> 0 = Big Endian (Motorola)

Bemerkung Die real_to_data Funktion wandelt die Realzahl source in


4 Datenbytes (double=0) oder 8 Datenbytes (double=1).
Die Datenbytes werden in den Zielpuffer destin ab der
Position pos kopiert.
Bei einfacher Genauigkeit (double=0) wird der Fehler
BIP_0011 ausgelöst, falls der Realzahlenwert nicht im
Bereich 3.4E±38 liegt.

Rückgabewert -

Siehe auch data_to_real

Beispiel {

unsigned char buffer[];


real realzahl;

realzahl = atof("123.45");
real_to_data(buffer,realzahl,0,0,0);
...
}

Ergebnis buffer = { 0x66, 0xe6, 0xf6, 0x42 }

110
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

realadd
Kurzbeschreibung Addiert zwei Realzahlen

void realadd(real destin, real source)

destin Erster Operand und Ziel der Addition (V)


source Zweiter Operand der Addition (V)

Bemerkung Die Funktion addiert die Realvariablen source und destin,


das Ergebnis wird nach destin geschrieben.
destin = destin + source
Bei einem Rechenüber- oder unterlauf wird der Fehler
BIP_0011 ausgelöst

Rückgabewert -

Siehe auch ator, itor, realdiv, realmul, realsub

Beispiel ){
real real1;
real real2;
ator(real1,"1234e15");
ator(real2,"5678e13");
realadd(real1,real2);
}

Ergebnis real1 = 1.29078e18


real2 = 5.678e16

111
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

realcomp
Kurzbeschreibung Vergleicht zwei Realzahlen

long realcomp(real value1, char operator[], real value2)

value1 Erster Operand des Vergleichs


operator String mit Vergleichsoperator:
"==", "!=", "<", "<=", ">" oder ">="
value2 Zweiter Operand des Vergleichs

Bemerkung Die Funktion vergleicht die Realvariablen value1 und


value2. Der durchzuführende Vergleich ist mit operator
festzulegen.

Rückgabewert 0 bei fehlgeschlagenem Vergleich, <>0 bei erfolgreichem


Vergleich.

Siehe auch -

Beispiel ){
int cmp;
real real1;
real real2;

ator(real1,"1.00");
ator(real2,"2.00");
if (realcomp(real1,"<",real2))
cmp=1;
else
cmp=0;
}

Ergebnis cmp = 1

112
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

realdiv
Kurzbeschreibung Dividiert zwei Realzahlen

void realdiv(real destin, real source)

destin Dividend und Ziel der Division (V)


source Divisior (V)

Bemerkung Die Funktion dividiert die Realvariablen source und destin,


das Ergebnis wird nach destin geschrieben.
destin = destin / source
Bei einem Rechenüber- oder unterlauf wird der Fehler
BIP_0011 ausgelöst

Rückgabewert -

Siehe auch ator, itor, realadd, realmul, realsub

Beispiel ){
real real1;
real real2;
ator(real1,"1234e15");
ator(real2,"5678e13");
realdiv(real1,real2);
}

Ergebnis real1 = 21.7330045791


real2 = 5.678e16

113
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

realmul
Kurzbeschreibung Multipliziert zwei Realzahlen

void realmul(real destin, real source)

destin Erster Faktor und Ziel der Multiplikation (V)


source Zweiter Faktor der Multiplikation (V)

Bemerkung Die Funktion multipliziert die Realvariablen source und


destin, das Ergebnis wird nach destin geschrieben.
destin = destin * source
Bei einem Rechenüber- oder unterlauf wird der Fehler
BIP_0011 ausgelöst

Rückgabewert -

Siehe auch ator, itor, realadd, realdiv, realsub

Beispiel ){
real real1;
real real2;
ator(real1,"1234e15");
ator(real2,"5678e13");
realmul(real1,real2);
}

Ergebnis real1 = 7.006652e34


real2 = 5.678e16

114
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

realresult
Kurzbeschreibung Erzeugt ein Realergebnis

void realresult(char name[], long value, long adjust)

name Name des Ergebnisses


value Wert des Ergebnisses als longinteger Zahl
adjust Korrekturfaktor für das Ergebnis als longinteger Zahl

Bemerkung Die Funktion erzeugt ein Realergebnis mit Ergebnisnamen


name und dem Wert value / adjust.

Rückgabewert -

Siehe auch new_set_of_results, parcount

Beispiel ...result: x; type : int ... ){


realresult("x",12345678,1000);
}

Ergebnis x = 12345,678

115
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

realsub
Kurzbeschreibung Subtrahiert zwei Realzahlen

void realsub(real destin, real source)

destin Minuend und Ziel der Subtraktion (V)


source Subtrahend (V)

Bemerkung Die Funktion subtrahiert die Realvariablen source und


destin, das Ergebnis wird nach destin geschrieben.
destin = destin - source
Bei einem Rechenüber- oder unterlauf wird der Fehler
BIP_0011 ausgelöst

Rückgabewert -

Siehe auch ator, itor, realadd, realdiv, realmul

Beispiel ){
real real1;
real real2;
ator(real1,"1234e15");
ator(real2,"5678e13");
realsub(real1,real2);
}

Ergebnis real1 = 1.17722e18


real2 = 5.678e16

116
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

recv_frequent
Kurzbeschreibung Empfangen eines Telegramms im Frequentmodus

void recv_frequent(unsigned char telegram[])

telegram Antworttelegramm vom Steuergerät (V)

Bemerkung Wurde das wiederholte Senden und Empfangen


(Frequentmodus) gestartet, so kann die aktuelle
Steuergeräteantwort mit der Funktion recv_frequent vom
Interface abgeholt werden.

Rückgabewert -

Siehe auch send_frequent, stop_frequent

Beispiel unsigned char antwort[];


send_frequent(anforderung);
recv_frequent(antwort);

Ergebnis -

117
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

recv_keybytes
Kurzbeschreibung Auslesen der Steuergeräte Keybytes

void recv_keybytes(unsigned char keybytes[])

keybytes Steuergerätekeybytes (V)

Bemerkung Diese Funktion liest die Keybytes aus einem Konzept-2- ,


Konzept-3- oder Konzept-4-Steuergerät aus. Wurde das
Steuergerät noch nicht gereizt, so wird die Reizung
automatisch durchgeführt.

Rückgabewert -

Siehe auch -

Beispiel unsigned char keybytes[];


recv_keybytes(keybytes);

Ergebnis -

118
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

rtoa

Kurzbeschreibung Wandelt eine Realzahl in einen String

long rtoa(char destin[],real value,int count);

destin String zur Aufnahme des Wandlungsergebnisses


value Zu wandlende Realzahl
count Anzahl zu wandelnder Stellen (ohne Dezimalpunkt und
Minuszeichen)

Bemerkung Die rtoa Funktion wandelt eine Realzahl in einen String.


Bei zu wenig Stellen wird der Wert gerundet, bei zu vielen
Stellen wird der String mit Nullen aufgefüllt.
Wird als count 0 verwendet erfolgt die Wandlung in einen
String in Exponentialdarstellung. Unter DOS wird NICHT
in Exponentialdarstellung gewandelt sondern nur der Wert
für count intern mit 10 angesetzt.

Rückgabewert Anzahl der gewandelten Zeichen incl. terminierendem


Nullcharacter.

Siehe auch ator

Beispiel {
char destin[];
real realzahl;
int len;

ator(realzahl,"1.234";
...
len=rtoa(destin,realzahl,3);
...
}

Ergebnis destin="1.23";
len=5

119
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

rtoi

Kurzbeschreibung Wandelt eine Realzahl in einen Integer

long rtoi(real value);

value Zu wandlende Realzahl

Bemerkung Die rtoi Funktion wandelt eine Realzahl in einen Integer.

Rückgabewert Gewandelter Wert als Integer

Siehe auch itor

Beispiel {
long destin[];
real realzahl;

ator(realzahl,"5.234";
...
destin=rtoi(realzahl);
...
}

Ergebnis destin=5;

120
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

send_and_receive
Kurzbeschreibung Senden und Empfangen eines Telegramms

void send_and_receive(unsigned char response[],


unsigned char request[])

response Steuergeräte-Antworttelegramm (V)


request Steuergeräte-Anforderungstelegramm

Bemerkung Diese Funktion sendet ein Telegramm an ein Steuergerät


und empfängt die Antwort.

ACHTUNG: Die Telegrammlänge darf 1018 Bytes nicht


überschreiten!

Rückgabewert -

Siehe auch send_frequent, recv_frequent, stop_frequent

Beispiel unsigned char request[];


unsigned char response[];
request = {0x0D, 0x00, 0x05, 0x00}; /*
Anforderungstelegramm */
send_and_receive(response, request);

Ergebnis -

121
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

send_frequent
Kurzbeschreibung Senden und Empfangen von Telegrammen im
Frequentmodus

void send_frequent(unsigned char request[])

request Steuergeräte-Anforderungstelegramm

Bemerkung Diese Funktion sendet das übergebene Telegramm immer


wieder an das Steuergerät (Frequentmodus). In diesem
Modus wird ein erneuter Aufruf von send_frequent oder
von send_and_receive mit der Fehlermeldung IFH_0006
beantwortet. Der Frequentmodus wird mit stop_frequent
beendet (send_frequent und send_and_receive wieder
möglich)

ACHTUNG: Die Telegrammlänge darf 1018 Bytes nicht


überschreiten!

Rückgabewert -

Siehe auch recv_frequent, stop_frequent

Beispiel unsigned char request[];


unsigned char response[];
request = {0x0D, 0x00, 0x05, 0x00};
send_frequent(request);
recv_frequent(response);
recv_frequent(response);

Ergebnis -

122
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

set_answer_length
Kurzbeschreibung Setzen der Telegrammparameter/Antwortlänge

void set_answer_length(int telparam[])

telparam Telegrammparameter

Bemerkung Das Interface benötigt beim Senden eines Telegramms


Telegrammparameter. Mit den Telegrammparametern
wird entweder der Verbindungsaufbau zum Steuergerät
gesteuert oder es wird mit ihnen die Information über die
erwartete Antwortlänge und den Antwortoffset übergeben.
Während der laufenden Kommunikation mit dem
Steuergerät sind die Telegrammparameter meistens für
alle SG-Telegramme gleich. Damit die Telegramm-
parameter nicht mit jedem Telegramm mitgesendet
werden müssen, können sie vom Anwender mit der
Funktion set_answer_length gesetzt werden. Die
Telegrammparameter werden beim Senden eines
Telegramms immer automatisch an den Anfang des
Telegramms gesetzt. Werden vom Anwender keine
Telegrammparameter angegeben, so werden die
Defaultwerte verwendet, die beim Setzen der
Kommunikationsparameter belegt wurden. Sollen nur
Telegrammparameter an das Interface übergeben werden
müssen diese zuerst mit set_answer_length gesetzt
werden und anschließend mit send_and_receive an das
Interface übergeben werden. Das zu sendende
Telegramm ist in diesem Fall leer (mit dataclear geleerter
puffer).
telparam[0] Kontroll-Code/Antwortlänge:
In Verbindung mit den BMW Protokollen Konzept 1,
Konzept 2, Konzept 3, Konzept 4, DS1 und DS2 wird
telparam[0] als Antwortlänge interpretiert.
Mit der Antwortlänge wird angegeben, wie lang die
erwartete SG-Antwort ist.
Bei Konzept 1 , DS1, DS2 und Konzept 3:

positiv: Zahl der erwarteten Bytes im


Antworttelegramm des SG
(Antwortlänge konstant)

123
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

negativ: Position der Antwortlänge im Antwort-


telegramm (ab Byte 0)
(Antwortlänge variabel)
Bei Konzept 2 und 4: Maximale Anzahl der Blöcke, die die
gewünschte Information enthalten.
In Verbindung mit KWP 2000 (KWP 2000 Standard, KWP
2000 BMW, BMW-FAST, KWP 2000*) wird telparam[0] als
Kontroll-Code interpretiert.
0x0000: Normaler Telegrammverkehr zwischen
Interface und Steuergerät wird durchgeführt.
0xFFFF telparam[1] wird als Kommando interpretiert.
telparam[1] Kommando /Antwortoffset:

In Verbindung mit den BMW Protokollen Konzept 1,


Konzept 2, Konzept 3, Konzept 4, DS1 und DS2 wird
telparam[0] als Antwortoffset interpretiert.
Nur bei variabler Antwortlänge bei Konzept 1, DS1, DS2.
In diesem Fall erfolgt die Berechnung der Antwortlänge
folgendermaßen:

Länge = (Antwortlänge + 1) + Antwortoffset

In Verbindung mit KWP 2000 (KWP 2000 Standard, KWP


2000 BMW, BMW-FAST, KWP 2000*) wird telparam[1] als
Kommando interpretiert.
0x0000: Normaler Telegrammverkehr zwischen
Interface und Steuergerät wird durchgeführt.
0x0010 Wenn telparam[0]=0xFFFF, dann Start-
Communication- Kommando.
0x0011 Wenn telparam[0]=0xFFFF, dann Stop-
Communication- Kommando.
Die detailierte Beschreibung der Telegrammparameter ist
der Parametrieranleitung für das entsprechende
Diagnose-Protokoll zu entnehmen.

Defaultwert für die Telegrammparameter nach dem


Setzten der Steuergeräteparameter:
Konzept 1 3 DS1,DS2 (5,6) 2,4 sonst
Länge -2 52 -1 1 0
Offset 0 0 0 0 0

Rückgabewert -

124
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Siehe auch set_communication_pars

Beispiel int awlen[] = {-2,0}; /* Die Antwortlaenge


steht bei Konzept 2 */
/*an der 2. Stelle im
Telegramm */
set_answer_length(awlen);

Ergebnis

125
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

set_communication_pars
Kurzbeschreibung Setzen der Kommunikationsparameter

void set_communication_pars(unsigned int param[])

param Kommunikationsparameter

Bemerkung Mit dieser Funktion werden die für die Kommunikation mit
einem Steuergerät erforderlichen Kommunikations-
parameter gesetzt. Die Parameter haben ein
interfaceunabhängiges Format. Wurden die Parameter mit
dieser Funktion gesetzt, muß die Anwendersoftware auf
Grund eines Interfacewechsels nicht geändert werden.
Eine Ausnahme bildet das Konzept 0x0000FF00. Dieses
Konzept ist eine Kennung für den IFH-EDIC, daß die
folgenden Parameter eins zu eins an das EDIC
durchgereicht werden.

Die Parameter für ein Konzept bestehen entweder aus


einer Folge von Integer- oder Long-Werten. Das
höherwertige Byte im Konzeptparameter (param[0])
entscheidet darüber, welches Format die Parameter
haben.

0x01xx: long-Werte
0x00xx integer Werte

Die Anzahl und der Inhalt der Parameter zu einem


Konzept ist konzeptabhängig.

Die Funktion set_communication_pars muß vor jedem


Ansprechen eines neuen Steuergerätes aufgerufen
werden. Zusätzlich zu den Kommunikationsparametern
wird im EDIABAS entsprechend dem eingestellten
Konzept der Telegrammvorspann mit Defaultwerten
belegt. Genaueres zum Telegrammvorspann siehe unter
set_answer_length.

Integer-Parameter für die Konzepte


Konzept 1
Konzept 2 ISO 9141
Konzept 3

126
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Konzept 2 DDE
Konzept DS1
Konzept DS2

param[0] Konzept
Konzept 1 =1
Konzept 2 ISO 9141 =2
Konzept 3 =3
Konzept 2 DDE =4
Konzept DS1 =5
Konzept DS2 =6
param[1] Baudrate
Wird nur bei Konzept-1, DS1, DS2 ausgewertet
param[2] Reizadresse
Wird vom Interface nur bei Konzept-2, -3 und -4
ausgewertet, wird aber für EDIABAS benötigt
param[3] Wakeup
Zeit in ms. 0 ms bedeutet kein WakeUp
(Nur bei Konzept 1)
param[4] IdleTime
Zeit in ms zwischen dem WakeUp und dem Start des
ersten Telegramms (Nur bei Konzept 1 mit WakeUp)
param[5] Auszeit
Zeit in ms, innerhalb der das SG auf ein Telegramm vom
Interface geantwortet haben muß
param[6] Regenerationszeit
Zeit in ms, die nach der Antwort des SG vergehen muß,
bis wieder gesendet werden darf
param[7] Telegr.Endezeit
Zeit in ms nach der auf Telegrammende entschieden wird
param[8] Bytezwischenzeit (optional)
Bytezwischenzeit für DS2 im ms.
param[9] Checksumme (optional)
Angabe, wie die Telegrammchecksumme gebildet und
überprüft werden soll. Wird nichts angegeben, wird die
Checksumme des zu sendenden Telegramms
automatisch vom Interface gebildet und die Checksumme
des empfangenen Telegramms überprüft. Die
Checksummenbehandlung ist bitkodiert.

127
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Bit 0 = 0: Die Checksumme des zu sendenden


Telegramms muß vom Benutzer gebildet
werden.
Bit 0 = 1: Die Checksumme des zu sendenden
Telegramms wird vom Interface gebildet
(default).
Bit 1 = 0: Die Checksumme des empfangenen
Telegramms wird überprüft.
Bit 1 = 1: Die Checksumme des empfangenen
Telegramms wird nicht überprüft.

Long-Parameter für das Konzept BMW-Fast

param[0] Konzept
BMW-FAST = 0x10F
param[1] Baudrate
0 bis 115200 Baud (= 115200Baud)
param[2] Auszeit
Zeit in ms, innerhalb der das SG auf ein Telegramm vom
Interface geantwortet haben muß (= 200 ms).
param[3] Regenerationszeit
Zeit in ms, die nach der Antwort des SG vergehen muß,
bis wieder gesendet werden darf (= 3 ms).
param[4] Telegramm Endezeit
Zeit in ms nach der auf Telegrammende entschieden wird
(= 3 ms).
param[5] Anzahl Negative response code 0x78
Anzahl der maximalen Negative response code 0x78
Antworten des SG (= 2).
param[6] Auszeit Negative response code 0x78
Zeit in ms, innerhalb der das SG nach Negative response
code 0x78 geantwortet haben muß (= 5000 ms).
param[7] Checksumme (optional)
= 1 (default)
Angabe, wie die Telegrammchecksumme gebildet und
überprüft werden soll. Wird nichts angegeben, wird die
Checksumme des zu sendenden Telegramms
automatisch vom Interface gebildet und die Checksumme
des empfangenen Telegramms überprüft. Die
Checksummenbehandlung ist bitkodiert.

128
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Bit 0 = 0: Die Checksumme des zu sendenden


Telegramms muß vom Benutzer gebildet
werden.
Bit 0 = 1: Die Checksumme des zu sendenden
Telegramms wird vom Interface gebildet.
Bit 1 = 0: Die Checksumme des empfangenen
Telegramms wird überprüft.
Bit 1 = 1: Die Checksumme des empfangenen
Telegramms wird nicht überprüft.

Long-Parameter für das Konzept KWP2000 BMW

param[0] Konzept
KWP2000 BMW = 0x10C
param[1] Baudrate
0 bis 115200 Baud (= 10400 Baud)
param[2] Auszeit
Zeit in ms, innerhalb der das SG auf ein Telegramm vom
Interface geantwortet haben muß (= 200 ms).
param[3] Regenerationszeit
Zeit in ms, die nach der Antwort des SG vergehen muß,
bis wieder gesendet werden darf (= 3 ms).
param[4] Telegramm Endezeit
Zeit in ms nach der auf Telegrammende entschieden wird
(= 3 ms),
param[5] Bytezwischenzeit
Bytezwischenzeit in ms.(= 0 ms)
param[6] Anzahl Negative response code 0x78
Anzahl der maximalen Negative response code 0x78
Antworten des SG (= 2)
param[7] Auszeit Negative response code 0x78
Zeit in ms, innerhalb der das SG nach Negative response
code 0x78 geantwortet haben muß (= 5000 ms).
param[8] TesterPresent Time
Zeit nach der letzten SG-Antwort bis zum nächsten Tester
Present Telegramm in ms (= 3000 ms).
param[9] TesterPresent Telegramm Länge
Länge des TesterPresent Telegrams maximal 11 (= 5)

129
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

param[10]. bis.
param[20] TesterPresent Telegramm
TesterPresent Telegramm. Ist das Telegramm kürzer als
11 Zeichen sind die restlichen Zeichen mit 0 anzugeben.
param[21] StartCommunication Telegramm Länge
Länge des StartCommunication Telegrams maximal 11 (=
5)
param[22] bis
param[32] StartCommunication Telegramm
StartCommunication Telegramm. Ist das Telegramm
kürzer als 11 Zeichen sind die restlichen Zeichen mit 0
anzugeben.
param[33] Checksumme (optional)
= 1 (default)
Angabe, wie die Telegrammchecksumme gebildet und
überprüft werden soll. Wird nichts angegeben, wird die
Checksumme des zu sendenden Telegramms
automatisch vom Interface gebildet und die Checksumme
des empfangenen Telegramms überprüft. Die
Checksummenbehandlung ist bitkodiert.
Bit 0 = 0: Die Checksumme des zu sendenden
Telegramms muß vom Benutzer gebildet
werden.
Bit 0 = 1: Die Checksumme des zu sendenden
Telegramms wird vom Interface gebildet.
Bit 1 = 0: Die Checksumme des empfangenen
Telegramms wird überprüft.
Bit 1 = 1: Die Checksumme des empfangenen
Telegramms wird nicht überprüft.

Long-Parameter für das Konzept KWP2000 *

param[0] Konzept
KWP2000 * = 0x10D
param[1] Baudrate
0 bis 115200 Baud (= 10400 Baud)
param[2] Auszeit
Zeit in ms, innerhalb der das SG auf ein Telegramm vom
Interface geantwortet haben muß (= 200 ms).
param[3] Regenerationszeit

130
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Zeit in ms, die nach der Antwort des SG vergehen muß,


bis wieder gesendet werden darf (= 3 ms).
param[4] Telegramm Endezeit
Zeit in ms nach der auf Telegrammende entschieden wird
(= 3 ms),
param[5] Bytezwischenzeit
Bytezwischenzeit in ms.(= 0 ms)
param[6] Anzahl Negative response code 0x78
Anzahl der maximalen Negative response code 0x78
Antworten des SG (= 2)
param[7] Auszeit Negative response code 0x78
Zeit in ms, innerhalb der das SG nach Negative response
code 0x78 geantwortet haben muß (= 5000 ms).
param[8] TesterPresent Time (optional)
Zeit nach der letzten SG-Antwort bis zum nächsten Tester
Present Telegramm in ms (= 3000 ms).
param[9] TesterPresent Telegramm Länge (optional)
Länge des TesterPresent Telegrams maximal 11 (= 6)
param[10]. bis.
param[20] TesterPresent Telegramm
TesterPresent Telegramm. Ist das Telegramm kürzer als
11 Zeichen sind die restlichen Zeichen mit 0 anzugeben.
param[21] Checksumme (optional)
= 1 (default)
Angabe, wie die Telegrammchecksumme gebildet und
überprüft werden soll. Wird nichts angegeben, wird die
Checksumme des zu sendenden Telegramms
automatisch vom Interface gebildet und die Checksumme
des empfangenen Telegramms überprüft. Die
Checksummenbehandlung ist bitkodiert.
Bit 0 = 0: Die Checksumme des zu sendenden
Telegramms muß vom Benutzer gebildet
werden.
Bit 0 = 1: Die Checksumme des zu sendenden
Telegramms wird vom Interface gebildet.
Bit 1 = 0: Die Checksumme des empfangenen
Telegramms wird überprüft.
Bit 1 = 1: Die Checksumme des empfangenen
Telegramms wird nicht überprüft.

131
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Long-Parameter für das Konzept KWP2000 Standard


param[0] Konzept
KWP2000 Standard = 0x10B
param[1] Steuergeräteadresse (0 bis 0xFF)
param[2] Einstellungen
Checksumme:

132
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Bit 0:

133
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

134
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

0: Das Checksummen Byte wird beim Senden nicht


vom Interface erzeugt. Das Checksummen Byte
muß im Anforderungstelegramm enthalten sein.
1: Das Checksummen Byte wird beim Senden vom
Interface erzeugt.Das Checksummen Byte darf im
Anforderungstelegram nicht enthalten sein.

135
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Bit 1:

136
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

137
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

0: Das Checksummen Byte wird von Interface geprüft.


Eine fehlerhafte Checksumme wird als Fehler
gewertet
1: Eine fehlerhafte Checksumme wird ignoriert.
Headerformat:
Bit 2 bis 4 (0,1,2,3,4)
Der Wert muß in jedem Fall gesetzt werden.
Der Parameter bestimmt welcher Header verwendet wird,
wenn der Header vom Interface erzeugt wird.
0: CARB-Header
1: 1-Byte Header
2: 1-Byte Header mit Längenbyte
3: 3-Byte Header
4: 3-Byte Header mit Längenbyte
Adressierung:

138
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Bit 5:

139
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

140
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

0: Physikalische Adressierung
1: Funktionale Adressierung
TesterPresent Behandlung:

141
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Bit 6:

142
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

143
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

0: Der TesterPresent Request wird entsprechend den


Vorgaben bei TimeTesterPresent und Tester
Present Message gesendet
1: TesterPresent wird nicht automatisch gesendet
Reserviert
Bit 7
param[3] BusyRepeatRequest Wiederholungen (0 bis 1000)
Anzahl der max. Wiederholungen, falls das Steuergerät
auf einen Request mit „BusyRepeatRequest“
(Responsecode $21) antwortet.
= 0: Es wird keine Wiederholung durchgeführt, die
Antwort wird an den Host weitergereicht.
<> 0: Der Request wird nach P3max-5ms wiederholt bis
entweder kein BusyRepeatRequest mehr vom SG
gemeldet wird oder bis die Anzahl der
Wiederholungen erreicht ist. Die letzte Antwort wird
an den Host geliefert.
param[4] ErrorRepeat (0 bis 1000)
Anzahl der Wiederholungen, falls ein
Kommunikationsfehler auftritt.
= 0: Es wird keine Wiederholung durchgeführt, die
Fehlermeldung wird an den Host weitergereicht.
<> 0: Nach einem Kommunikationsfehler wird der
Kommunikationsvorgang wiederholt bis entweder
kein Kommunikationsfehler mehr auftritt oder die
Anzahl der Wiederholungen erreicht ist. Trat zuletzt
kein Kommunikationsfehler auf, so wird die
empfangene Response an den Host gemeldet.
Andernfalls wird eine Fehlermeldung geliefert.
param[5] P3max (10 bis 65500)
Maximale Wartezeit zwischen zwei Requests; wird bei
aktiviertem Handling nach „Busy-RepeatRequest“
(P3max-5ms) und RequestCorrectlyReceived-
ResponsePending (P3max) verwendet.
param[6] ResponsePending Wiederholungen (0 bis 65535)

144
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Anzahl der max. Wiederholungen falls das Steuergerät auf


einen Request mit RequestCorrectlyReceived-
ResponsePending (Responsecode $78) antwortet.
=0: Es wird nicht auf die eigentliche Response
gewartet; vielmehr wird die Response
RequestCorrectlyReceived-ResponsePending als
Antwort an den Host weitergereicht.
<> 0: Nach einer Response RequestCorrectlyReceived-
ResponsePending wird die Wartezeit P3max
gestartet. Wird innerhalb von P3max erneut ein
RequestCorrectlyReceived-ResponsePending
empfangen, so wird P3max erneut gestartet, wenn
die Anzahl der eingestellten Wiederholungen noch
nicht erreicht ist. Kommt auch auf die letzte
Wiederholung als Response RequestCorrectly-
Received-ResponsePending vom SG zurück, so
wird Timeout an den Host gemeldet.
param[7] Diagnosestart Einstellungen (0,1,2)
Dieser Parameter wird beim Dienst DiagnoseStart
ausgewertet.
0: Als Reizung wird eine 5-Baud-Reizung mit der
angegegebenen Steuergeräteadresse durch-
geführt. Die Einstellung bei Sync-Measurement wird
berücksichtigt.
1: Es wird keine Reizung durchgeführt, die
Kommunikation mit dem SG beginnt mit dem ersten
Request. Die Baudrate wird fest entsprechend
param[9] eingestellt.
2: Es wird eine schnelle Initialisierung über ein
Wakeup-Pattern durchgeführt. Das Wakeup-Pattern
wird über WUPt, WUPl festgelegt. Die Baudrate
wird fest entsprechend param[9] eingestellt.
param[8] SyncMeasurement (0,1)
Wird nur berücksichtigt bei param[7] = 0.
0: Baudrate wird entsprechend param[9] eingestellt.
1: Baudrate wird gemessen und entsprechend
Messung eingestellt.
param[9] Baudrate

145
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Eingestellte Baudrate. Nur wirksam bei:


param[7]= 0 und SyncMeasurement = 1
bzw. bei:
param[7]<>0.
Sinnvolle Einstellung: 10416Bd
param[10] W0 (5 bis 6550 ms)
Wartezeit vor der Initialisierung der Kommunikation
(Initialisierung entsprechend Einstellung param[7],
Diagnosestart Einstellungen).
Sinnvolle Einstellung: 300ms
param[11] W1 (0 bis 6550 ms)
Timeout: Zeit zwischen dem Ende der 5Baud Reizadresse
und dem Syncbyte.
Sinnvolle Einstellung: 300ms
param[12] W2 (0 bis 6550 ms)
Timeout: Zeit zwischen dem Ende des Syncbytes und
dem ersten Keybyte.
Sinnvolle Einstellung: 20ms
param[13] W3 (0 bis 6550 ms)
Timeout: Zeit zwischen dem Ende des ersten Keybyte und
dem zweiten Keybyte.
Sinnvolle Einstellung: 20ms
param[14] W4a (2 bis 6550 ms)
Zeit zwischen dem zweiten Keybyte vom SG und dem
invertierten zweiten Keybyte durch den Tester.
Sinnvolle Einstellung: 40ms
param[15] W4 (0 bis 6550 ms)
Timeout: Zeit zwischen dem inv. zweiten Keybyte vom
Tester und der invertierten Adresse vom SG.
Sinnvolle Einstellung: 50ms
param[16] W5 (1 bis 6550 ms)
Zeit bevor der Tester nach einem Kommunikationsfehler
die Reizung beginnt.
Sinnvolle Einstellung: 5000ms

146
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

param[17] P1 (0 bis 6550 ms)


Timeout: Zeit zwischen Einzelbytes, die das SG innerhalb
einer Response einhalten muß.
Sinnvolle Einstellung: 20ms
param[18] P2 (0 bis 6550 ms)
Timeout: Intermessage Timeout zwischen Tester Request
und SG Response, bzw. zwischen zwei SG-Responses.
Sinnvolle Einstellung: 50ms
param[19] P3 (0 bis 6550 ms)
Zeit zwischen SG Response und nächstem Tester
Request.
P3<P2: wird nur eingehalten bei physikalischem Request
und abgeschalteter DataSegmentation, ansonsten wird
mindestens P2 abgewartet.
Sinnvolle Einstellung: 55ms
param[20] P4 (0 bis 3200 ms)
Bytezwischenzeit die vom Tester beim Senden eines
Request eingehalten wird.
Wert 0 ... 0x7FFF: P4 in ms
Wert 0x8000 ... 0xFFFF: P4 in 0,1 ms
0x8000 == 0 entspricht keiner Interbytezeit.
Sinnvolle Einstellung: 10ms
param[21] P3* (1 bis 6550 ms)
Einsprungzeit beim Absetzen eines Requests während
Periodic Transmission
Sinnvolle Einstellung: P2min-5ms = 5..20ms
param[22] Time Tester Present (0 bis 6550 ms)
Ist nach der letzten SG-Antwort diese Zeit abgelaufen
ohne daß vom Host ein neuer Request zum Senden an
das SG gesendet wurde, so wird der Unten definierte
TesterPresent Request gesendet.
Es gilt immer:
TimeTesterPresent >= P3

147
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Außerdem sind die Einschränkungen bezüglich P2, P3 zu


berücksichtigen.
Sinnvolle Einstellung: 4000ms
param[23] Länge der TesterPresent Message (0 bis 11)
0: Der letzte Tester Request wird zum
Aufrechterhalten der Verbindung verwendet.
1-11: Länge des zu sendenden Requests zum
Aufrechterhalten der Verbindung incl.
Checksumme.
param[24] bis
param[34] Zeichen der Tester Present Message
Ist die TesterPresent Message kürzer als 11 Zeichen, so
sind die restlichen Zeichen mit Wert 0 anzugeben.
Die Checksumme ist unabhängig von der Einstellung für
die Checksummenerzeugung (param[2]) immer mit
anzugeben.
Sinnvolle Einstellung abhängig vom verwendeten
Headerformat (1-,2-,3-,4-Byte Header).
Beispiel für 3-Byte-Header, physikalische Adressierung:
81H, <phys. SG-Adresse>,<Testeradresse>, 3EH,
<8-Bit-Additions-Checksumme>,
00H,00H,00H,00H,00H,00H
param[35] WUPt (15 bis 65535)
Gesamtdauer des Wakeup Patterns bei der schnellen
Initialisierung,
Einheit der Zahlenangabe: 100µs
Sinnvolle Einstellung: 500
param[36] WUPl (15 bis 65535)
Dauer des Lowpegels des Wakeup Patterns. Nach Ablauf
der Zeit TWupLow wird TWupGes-TWupLow mit
Highpegel abgewartet.
Einheit der Zahlenangabe: 100µs
Sinnvolle Einstellung: 250
param[37] Länge der StartCommunication Message (0 bis 11)

148
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Länge des Telegrammes das direkt nach dem


Wakeuppattern zu senden ist.
0: Keinen StartCommunication Request senden. Nach
dem Wakeup Pattern geht es weiter mit dem ersten
Request.
1-11: Länge des zu sendenden Requests zum Aufbau
der Verbindung incl. Checksumme.
Sinnvolle Einstellung: 5
param[38] bis
param[48] Zeichen der StartCommunication Message
Zeichen der StartCommunication Message. Ist das
Telegramm kürzer als 11 Zeichen, so sind die restlichen
Zeichen mit Wert 0 anzugeben.
Die Checksumme ist unabhängig von der Einstellung für
die Checksummenerzeugung (param[2]) immer mit
anzugeben.
Beispiel für physikalische Adressierung:
81H, <phys. SG-Adresse>,<Testeradresse>, 81H,
<8-Bit-Additions-Checksumme>,
00H,00H,00H,00H,00H,00H
param[49] Einstellungen (0,1)
0: Übernehmen sämtlicher Parameter von
SetECUPars. Wird SetECUPars bei laufender
Steuergerätekommunikation gesendet, so wird die
Steuergerätekommunikation abgebrochen und
anschließend neu aufgebaut.
1: Übernehmen aller, bei laufender Kommunikation
relevanten Parameter.
param[50] Einstellungen
Arbitration Handling
Bit 0:
Arbitration Handling (nur bei funktionaler Adressierung)
0: Arbitration Handling abgeschaltet. Bei
Übertragungsfehlern beim Empfang der Responses
wird nicht abgewartet ob die SG’s die Übertragung
wiederholen.

149
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

1: Arbitration Handling aktiviert. Bei


Übertragungsfehlern beim Empfang der Responses
wird TimeArbitrationIdle abgewartet bis der
Empfang erneut aufgesetzt wird.
5Baud Address Parity
Bit 1 und Bit 2 (0,1,2)
Einstellung des Paritybit bei der 5 Baud Reizadresse
0: 5Baud Adresse wird ohne Änderung gesendet
(Datenformat 8N1).
1: Zur 5Baud Adresse wird das 8.Bit (MSB) mit
ungerader Parität gebildet (Datenformat 7O1).
2: Zur 5Baud Adresse wird das 8.Bit (MSB) mit
gerader Parität gebildet (Datenformat 7E1).
DataSegmentation
Bit 3
DataSegmentation Handling (nur bei physikalischer
Adressierung des Requests). Bei funktionaler
Adressierung des Requests werden grundsätzlich alle
Responses empfangen.
0: DataSegmentation Handling aktiviert. Nach
Empfang einer jeden Response wird P2 gestartet.
Wenn innerhalb von P2 keine weitere Response
empfangen wird, so sind alle Responses zum
gesendeten Request empfangen. Es werden alle
Responses an den Host gemeldet.
1: DataSegmentation Handling deaktiviert. Nach
Empfang der ersten Response wird nicht P2
gestartet, sondern gleich P3. Es wird nicht auf
weitere Responses gewartet. Die empfangene
Response wird an den Host gemeldet.
TesterPresent Handling
Bit 4
Einstellung des Verhaltens bei Kommunikationsfehlern bei
Tester Present.
0: Fehler bzw. Timeout beim Empfang der
Response(s) werden ignoriert, die Kommunikation
zum SG wird nicht abgebrochen.

150
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

1: Bei Fehlern bzw. Timeout beim Empfang der


Response(s) wird die Kommunikation zum SG
abgebrochen. Beim nächsten Request durch den
Host wird die Verbindung zum SG wieder
aufgebaut.
Sinnvolle Einstellung: 0
Header Generierung
Bit 5
0: Der Header wird nicht vom Interface erzeugt. Die
Daten im Kommando SendTelegramm müssen die
vollständige Headerinformation enthalten
1: Der Header wird vom Interface erzeugt. Die Daten
im Kommando SendTelegram dürfen keine
Headerinformationen enthalten.
Sinnvolle Einstellung: 0
Baudrate Highbits
Bit 6 und Bit 7
Höchstwertige Bits der Baudrate.
Beispiel: Baudrate ist 128000 (0x1F400) Baud
Param[9] = 62464 (0xF400)
Bit 6 = 1, Bit 7 = 0
param[51] ArbitrationIdle Zeit (1 bis 6500 ms)
Zeit bis ein Zeichen auf dem Bus nach einer Arbitrierung
als neuer Messagebeginn interpretiert wird. Werden nach
einem Arbitrierungsfehler weitere Zeichen empfangen
bevor die Zeit TimeTesterArbitration abläuft wird die Zeit
neu gestartet. Erfolgt die Arbitrierung aufgrund eines
Timeouts (P1) wird soweit möglich die Time
ArbitrationIdle korregiert. Dabei gibt es folgende
Abhängigkeiten:
P1 >= TimeArbitrationIdle: TimeArbitrationIdle ist
1ms. D.h. Nach P1 wird
1ms gewartet.
P1 < TimeArbitrationIdle: TimeArbitrationIdle wird
wie eingestellt verwendet.
Sinnvolle Einstellung:
P1max < TimeArbitrationIdle < P2min (21ms)

151
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

param[52] Reserviert
param[53] Reserviert
param[54] Reserviert
param[55] Reserviert
param[56] Tester Adresse
Testeradresse, wird verwendet wenn der Header vom
Interface erzeugt wird.
param[57] Reserviert
param[58] Reserviert
param[59] Reserviert

Rückgabewert -

Siehe auch set_answer_length

Beispiel unsigned int parameter[] = {1, 9600, 0x0D,


0, 0, 500, 100, 500};
set_communication_pars(parameter);
// Parameter werden ans EDIC durchgereicht
unsigned char parameter[] = {0x00, 0xff,
0x00, 0x00, ...};
set_communication_pars(parameter);

Ergebnis -

152
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

set_program_voltage
Kurzbeschreibung Setzen der Programmierspannung

void set_program_voltage(int voltage)

voltage Programmierspannung in Millivolt

Bemerkung Mit dieser Funktion wird die Programmierspannung ein-


bzw. ausgeschaltet. Die Höhe der Programmierspannung
wird in Millivolt festgelegt (0 - 33000 mV). Spannung = 0
Volt bedeutet Programmierspannung "aus".

Rückgabewert -

Siehe auch -

Beispiel set_program_voltage(12000); /* Spannung auf


12 Volt */

Ergebnis -

153
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

set_repeat_counter
Kurzbeschreibung Setzt die Anzahl der Wiederholungen bei
Steuergerätekommunikation

void set_repeat_counter(long count)

count Anzahl der Wiederholungen

Bemerkung Tritt bei einer Steuergerätekommunikation ein Fehler auf


(IFH_0010 oder IFH_0009), so wird der Kommunikations-
befehl an der Interfacehandler automatisch wiederholt. Die
Anzahl der Wiederholungen kann mit der Funktion
set_repeat_counter eingestellt werden. Voreingestellt ist
der Wert 2.

Rückgabewert -

Siehe auch open_communication, close_communication,


set_communication_pars, set_answer_length,
send_and_receive, send_frequent, recv_frequent,
recv_keybytes

Beispiel {
/* Schnelle Entscheidung ob SG da */
set_repeat_counter(0); // keine
Wiederholung
send_and_recv(...
/* Warte bis SG da */
set_repeat_counter(10000); // 10000
Wiederholungen
send_and_recv(...
}

Ergebnis -

154
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

set_trap_mask
Kurzbeschreibung Setzen des Trapmaskregisters

long set_trap_mask(long mask)

mask Trapmaske

Bemerkung Im Trapmaskregister wird festgelegt, welche


Fehlermeldungen an das Laufzeitsystem weitergeleitet
werden, bzw. welche Fehlermeldungen von der
Beschreibungsdatei ausgewertet werden sollen. Dazu ist
für einige Fehlermeldungen ein Bit im Trapmaskregister
reseviert worden. Ist dieses Bit 0, so wird der Fehler dem
Laufzeitsystem gemeldet. Ist dieses Bit 1, so kann der
Fehler in der Beschreibungsdatei mit Hilfe von get_error
ausgewertet werden. set_trap_mask setzt alle Bits des
Trapmaskregisters auf einmal mit dem Bitmuster des
Parameters mask. Der Defaultwert für alle Bits ist 0; somit
kann der Urzustand jederzeit mit set_trap_mask(0)
wiederhergestellt werden.

Trapmaske: Maske = 2^(Trapbit0) + 2^(Trapbit1) + ...

155
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Trapbit im Fehlernummer und Konstante Trapnumm


Register [1] Fehlerbeschreibung [4] er f.
get_error
BIT 00 ---------undefiniert---------- -- --
BIT 01 reserviert -- --
BIT 02 BIP_0002: IFH Aufruf fehlerhaft 0x00000004 02
BIT 03 reserviert -- --
BIT 04 reserviert --
BIT 05 reserviert --
BIT 06 BIP_0006: User File Fehler 0x00000040 06
BIT 07 reserviert -- --
BIT 08 reserviert -- --
BIT 09 BIP_0009: Versionsfehler 0x00000200 09
BIT 10 BIP-0010: Fehler bei Konstantenzugriff 0x00000400 10
BIT 11 IFH_0001: Fehler an Schnittstelle Host-Interface 0x00000800 11
BIT 12 IFH_0002: Interface meldet sich nicht 0x00001000 12
BIT 13 IFH_0003: Datenübertragung zum Interface gestört 0x00002000 13
BIT 14 IFH_0004: Kommando an Interface fehlerhaft 0x00004000 14
BIT 15 IFH_0005: Interface interner Fehler (Defekt) 0x00008000 15
BIT 16 IFH_0006: Interface nimmt Kommando nicht an 0x00010000 16
BIT 17 IFH_0007: Falsche Versorgungsspannung am D-Bus 0x00020000 17
BIT 18 IFH_0008: Fehler an Schnittstelle zum SG 0x00040000 18
BIT 19 IFH_0009: Steuergerät meldet sich nicht 0x00080000 19
BIT 20 IFH_0010: Datenübertragung Interface - SG gestört 0x00100000 20
BIT 21 IFH_0011: Unbekanntes Interface 0x00200000 21
BIT 22 IFH_0012: Datenpuffer Überlauf 0x00400000 22
BIT 23 IFH_0013: Funktion im Interface nicht vorhanden 0x00800000 23
BIT 24 IFH_0014: Konzept wird nicht unterstützt 0x01000000 24
BIT 25 IFH_0015: U-Batt wurde kurz unterbrochen 0x02000000 25
BIT 26 IFH_0016: Die Zündung wurde ausgeschaltet 0x04000000 26
BIT 27 reserviert -- --
BIT 28-31 reserviert -- --
Tabelle 1: Aufteilung des Trapmaskregisters und korrespondierende
Trapnummern.

Rückgabewert Der Wert des Trapmaskregisters vor dem Aufruf

Siehe auch geterror, get_trap_mask

Beispiel {
set_trap_mask(0x00180000);
send_and_recv(.....);
if(get_error(19))
job_status="DIAGNOSE-FEHLER";
else
job_status="OKAY";
}

156
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Ergebnis job_status = "DIAGNOSE-FEHLER" wenn SG


nicht antwortet.

157
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

set_variable_result
Kurzbeschreibung Ausgabe von variablen Ergebnissen

void set_variable_result(char ergebnisName[], long ergebnistyp,


long longErg, real realErg, char stringErg[], unsigned char dataErg[])

ergebnisName Name des Ergebnisses


ergebnistyp Ergebnistyp:
1: long
2: real
3: string
4: data
longErg Ergebniswert, wenn Ergebnistyp = 1
realErg Ergebniswert, wenn Ergebnistyp = 2
stringErg Ergebniswert, wenn Ergebnistyp = 3
dataErg Ergebniswert, wenn Ergebnistyp = 4

Bemerkung Mit dieser Funktion kann abhängig vom Jobverlauf ein


variables Ergebnis zurückgegeben werde. Der
Ergebnisname und der Ergebnistyp müssen nicht im
Jobheader definiert sein. Sie werden erst zur Laufzeit
festgelegt.

Rückgabewert -

Siehe auch var_result_long, var_result_real, var_result_string,


var_result_data

Beispiel {
char wert[]="mein Ergebniswert";
unsigned char y[];
real x;

set_variable_result("ERGEBNIS",3,0,x,wert,y
);
}

Ergebnis Entspricht ERGEBNIS = "mein Ergebniswert"

158
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

setProgressRange
Kurzbeschreibung Gibt eine Fortschrittsbereich von 0 bis Range an.

void setProgressRange(long range)

range Wert des Fortschrittsbereichs.

Bemerkung Mit dieser Funktion wird ein Fortschrittsbereich


angegeben. Die aktuelle Fortschrittsposition kann sich in
diesem Bereich bewegen. Nach dem Aufruf von
setProgressRange ist die Fortschrittsposition noch
undefiniert. Sie muß anschließend mit incProgressPos
initialisiert werden. Überschreitet die Fortschrittsposition
den Fortschrittsbereich wird sie automatisch auf den
Maximalwert gekürzt.

Rückgabewert -

Siehe auch incProgressPos

Beispiel
setProgressRange(500);
incProgressPos(0); // Start mit 0 Prozent
:
incProgressPos(100); // 20 Prozent
: // bearbeitet
incProgressPos(300); // 80 Prozent
: // bearbeitet
incProgressPos(200); // 100 Prozent
// bearbeitet

///////////////////////////////////////////
////////
// Im ENDE-Job
setProgressRange(0); // Bearbeitungsstand
// zuruecksetzen

Ergebnis -

159
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

shdataget
Kurzbeschreibung Kopiert den Inhalt des globalen Datenspeichers in einen
Zielpuffer.

long shdataget(char id[], unsigned char destin[])

id ID des globalen Datenspeichers


destin Zielpuffer (V)

Bemerkung Mit dieser Funktion wird der gesamte Inhalt des globalen
Datenspeichers in den Zielpuffer kopiert. Vor dem
Kopiervorgang wird der Zielpuffer gelöscht. Die ID (Name)
des Datenspeichers ist ein maximal 32 Zeichen langer
Asciiz-String (C-String). Auch ein Leerstring ist eine
gültige ID. Wird als ID ein Leerstring verwendet, dann wird
der Inhalt des Datenspeichers immer in den Zielpuffer
kopiert. Sonst wird der Datenspeicher nur kopiert, wenn
für die Befüllung die selbe ID verwendet wurde.

Rückgabewert TRUE (1), wenn der globale Datenspeicher gefunden und


der Inhalt kopiert wurde.
FALSE (0), wenn der globale Datenspeicher nicht
gefunden, und der Inhalt nicht kopiert wurde.

Siehe auch shdataset

Beispiel unsigned char local[];

shdataget("myID",local);

Ergebnis -

160
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

shdataset
Kurzbeschreibung Befuellt den globalen Datenspeicher mit dem Inhalt des
Quellpuffers.

void shdataset(char id[], unsigned char source[])

id ID des globalen Datenspeichers


source Quellpuffer

Bemerkung Mit dieser Funktion wird der gesamte Inhalt des


Quellpuffers in den globalen Datenspeicher kopiert. Vor
dem Kopiervorgang wird der globale Datenspeicher
gelöscht. Die ID (Name) des Datenspeichers ist ein
maximal 32 Zeichen langer Asciiz-String (C-String). Auch
ein Leerstring ist ein gültiger Name. Bei einem
nachfolgenden Auslesen des Datenspeichers muß
entweder die übergebene ID oder ein Leerstring
verwendet werden.

Rückgabewert -

Siehe auch shdataget

Beispiel unsigned char source[];

shdataset("myID",source);

Ergebnis -

161
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

stop_frequent
Kurzbeschreibung Beenden des Frequentmodus

void stop_frequent()

Bemerkung Diese Funktion beendet das wiederholte Senden und


Empfangen von Telegrammen.

Rückgabewert -

Siehe auch send_frequent, recv_frequent

Beispiel -

Ergebnis -

162
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

strcat
Kurzbeschreibung Hängt einen String an einen anderen an

void strcat(char destin[],char source[])

destin Zielstring, an den angehängt werden soll (V)


source Quellstring, der angehängt werden soll

Bemerkung Die Funktion strcat hängt an den bestehenden


nullterminierten String destin den String source an. Es
werden nur soviele Zeichen angehängt, daß destin
einschließlich des Nullcharacters noch in ein Stringregister
paßt, d.h.maximal 1023 Zeichen. Beide Strings können die
Länge 0 haben. Der Quellstring bleibt unverändert.

Rückgabewert -

Siehe auch get_token, strcat, strcmp, strcpy, strcut, strerase,


strinsert, strlen, strncpy, strrevers

Beispiel {
char destin[]="01234";
char source[]="56789";

strcat(destin,source);
}

Ergebnis destin="0123456789" , source="56789"

163
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

strcmp
Kurzbeschreibung Vergleicht zwei Strings

long strcmp(char s1[],char s2[])

s1 String1 (V)
s2 String2

Bemerkung Die Funktion vergleicht die beiden Strings s1 und s2. Sind
die beiden Strings gleich lang und in allen Zeichen
identisch, so wird auf gleich entschieden, sonst auf
ungleich.

Rückgabewert 0 wenn beide Strings gleich sind, <> 0 wenn nicht.

Siehe auch get_token, strcat, strcmp, strcpy, strcut, strerase,


strinsert, strlen, strncpy, strrevers

Beispiel {
int x; int y; int z;
char s1[]="ABC";
x=strcmp(s1,"ABC");
y=strcmp(s1,"ABCD");
z=strcmp(s1,"abc");
}

Ergebnis x=0, y=1, z=1

164
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

strcpy
Kurzbeschreibung Kopiert einen String

void strcpy(char destin[],char source[])

destin String, auf den kopiert werden soll (V)


source String, der kopiert werden soll

Bemerkung Mit strcpy wird der String source nach destin kopiert. Es
werden alle Zeichen von source bis zum Nullcharacter
kopiert. Der Zielstring destin wird vorher gelöscht.

Rückgabewert -

Siehe auch get_token, strcat, strcmp, strcpy, strcut, strerase,


strinsert, strlen, strncpy, strrevers

Beispiel {
char destin[]="ABC";

strcpy(destin,"XD");
}

Ergebnis destin= "XD"

165
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

strcut
Kurzbeschreibung Kürzen eines Strings

void strcut(char s[],int count)

s Zu kürzender String (V)


count Anzahl der zu kürzenden Zeichen

Bemerkung Die Funktion strcut kürzt den String s um count Zeichen.


Der String kann nicht kürzer als 0 Zeichen lang werden.

Rückgabewert -

Siehe auch get_token, strcat, strcmp, strcpy, strcut, strerase,


strinsert, strlen, strncpy, strrevers

Beispiel {
char buffer[]="ABCDF";
strcut(buffer,3);
}

Ergebnis buffer = "AB"

166
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

strerase
Kurzbeschreibung Löschen von Zeichen in einem String

void strerase(char s[],int pos,int count)

s zu ändernder String (V)


pos Position, ab der gelöscht werden soll
count Anzahl der zu löschenden Zeichen

Bemerkung Die Funktion strerase löscht eine beliebige Anzahl von


Zeichen aus einem String. Die verbleibenden Teile des
Strings werden zusammengeführt. Ab der Position pos
werden count Zeichen gelöscht. Ist das Stringende
erreicht, so wird der Vorgang abgebrochen. Es bleibt dann
als Rest nur noch der String bis pos.

Rückgabewert -

Siehe auch get_token, strcat, strcmp, strcpy, strcut, strerase,


strinsert, strlen, strncpy, strrevers

Beispiel {
char buffer[]="ABCDEFGHIJKLM";
strerase(buffer,3,3);
}

Ergebnis buffer="ABCGHIJKLM"

167
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

strinsert
Kurzbeschreibung Fügt Zeichen in einen String ein

void strinsert(char destin[],char source[],long pos)

destin Zu ändernder String (V)


source Einzufügender String
pos Position ab der eingefügt werden soll

Bemerkung Die Funktion strinsert fügt den String source in den String
destin ein. Es wird ab der Position pos eingefügt. Wird der
String destin länger als ein Stringregister, d.h. 1023
Zeichen, so wird der Rest abgeschnitten.

Rückgabewert -

Siehe auch get_token, strcat, strcmp, strcpy, strcut, strerase,


strinsert, strlen, strncpy, strrevers

Beispiel {
char buffer[]="ABCGHIJKLM";
strinsert(buffer,"DEF",3);
}

Ergebnis buffer = "ABCDEFGHIJKLM"

168
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

strlen
Kurzbeschreibung Ermittelt die Länge eines Strings

long strlen(char string[])

string String, dessen Länge ermittelt wird

Bemerkung Die Funktion strlen ermittelt die Länge eines Strings. Die
Länge eines Strings ist die Anzahl der in ihm enthaltenen
Zeichen, ohne den abschließenden Nullcharacter.

Rückgabewert Die Länge des Strings (0 .. 1023)

Siehe auch get_token, strcat, strcmp, strcpy, strcut, strerase,


strinsert, strlen, strncpy, strrevers

Beispiel {
char string[]="ABCDEF"
long x;

x=strlen(string);
}

Ergebnis x=6

169
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

strncpy
Kurzbeschreibung Kopiert eine Anzahl Zeichen aus einem String

void strncpy(char destin[], char source[], int count)

destin String, auf den kopiert werden soll (V)


source String, der kopiert werden soll
count Anzahl der maximal zu kopierenden Zeichen

Bemerkung Mit strcpy wird der String source nach destin kopiert. Ist
der String destin länger als count, so werden nur die
ersten count Zeichen kopiert. Der Zielstring wird nicht
gelöscht.

Rückgabewert -

Siehe auch get_token, strcat, strcmp, strcpy, strcut, strerase,


strinsert, strlen, strncpy, strrevers

Beispiel {
char destin[]="ABCDEFGH";

strncpy(destin,"XYZABCDEF",3);
}

Ergebnis destin= "XYZDEFGH"

170
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

strrevers
Kurzbeschreibung Umdrehen eines Strings

void strrevers(char string[])

string Umzudrehender String (V)

Bemerkung Die Funktion strrevers dreht den String string um, d.h.
das letzte Zeichen wird zum ersten u.s.w.

Rückgabewert -

Siehe auch get_token, strcat, strcmp, strcpy, strcut, strerase,


strinsert, strlen, strncpy, strrevers

Beispiel {
char destin[]="ABCDEFGH";

strrevers(destin);
}

Ergebnis destin = "HGFEDCBA"

171
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

tab2fix
Kurzbeschreibung Auslesen der Werte aus der aktuellen Tabellenzeile und
Wandlung in eine Zahl.

void tab2fix(long wert, char spalte[])

wert In eine Zahl gewandelter Wert aus der Tabelle (V)


spalte Spalte der Tabelle, aus der der Wert genommen wird

Bemerkung Die Funktion tab2fix liest einen Wert aus der aktuellen,
mit tabseek oder tab_suche_index bestimmten
Tabellenzeile und wandelt ihn in eine Zahl. Der Text von
spalte gibt an, aus welcher Spalte der Wert zu holen ist.
Ist die Spalte nicht vorhanden, so wird der Fehler
BIP_0010 (Constant Data Access Error) [4] ausgelöst.

Rückgabewert -

Siehe auch tabget, tab_suche_index, tabseek, tabset, tabsetext

Beispiel int fehlerNr = 0x11;


unsigned long uw1;

tabset("FUmweltMatrix");
tab_suche_index("ORT", fehlerNr)
tab2fix(uw1, "UW1_NR");

Ergebnis -

172
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

tab_suche_index
Kurzbeschreibung Sucht in einer Tabellenspalte nach einem Wert der Form
0x##

long tab_suche_index(char column[], char value)

column Spalte, in der der Wert gesucht werden soll


value Wert nach dem gesucht werden soll

Bemerkung Die Funktion tab_suche_index wandelt value in einen


String der Form "0x##" und sucht ihn in der Spalte
column. Der Suchvorgang beginnt immer in der zweiten
Tabellenzeile. Nach erfolgreicher Suche meldet die
Funktion TRUE (<>0) , ansonsten FALSE (0) zurück.
Wurde der Wert gefunden, so steht der Lesezeiger für die
Tabelle auf der Zeile mit dem gefunden Wert, wenn nicht,
dann auf der letzten Zeile der Tabelle (wichtig für
Defaultwerte). Die Elemente dieser Zeile können dann
mittels tabget ausgelesen werden. Ist die Spalte nicht
vorhanden wird der Fehler BIP_0010 (Constant Data
Access Error) [4] ausgelöst.

Rückgabewert TRUE wenn der Wert gefunden wurde, sonst FALSE

Siehe auch tab_suche_unsigned, tabget, tabset, tabsetext

Beispiel table TST[3][]={


{ "NAME", "WERT", "NUMMER" },
{ "EINS", "1000", "0x00" },
{ "DREI", "2000", "0x03" }
}

{
char buffer[];
tabset("TST");
tab_suche_index("NUMMER",3);
tabget(buffer,"NAME");
}

Ergebnis buffer = "DREI"

173
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

tab_suche_unsigned
Kurzbeschreibung Sucht in einer Tabellenspalte nach einen vorgegebenen
vorzeichenlosen Wert

long tab_suche_unsigned(char column[], unsigned long value)

column Spalte, in der der Wert gesucht werden soll


value unsigned-long-Wert nach dem gesucht werden soll

Bemerkung Die Funktion tab_suche_unsigned sucht den


vorzeichenlosen Wert value in der Spalte column. Als
Wert value ist ein vorzeichenloser (unsigned) Wert zu
übergeben, ansonsten wird eine interne arithmetische
Konvertierung (ggf. mit Sign-Extension) vorgenommen.
Die Tabellenelemente der Spalte column werden intern in
Zahlenwerte umgewandelt und jeweils mit dem unsigned-
long-Wert value verglichen. Beginnt ein Tabellenelement
mit den Zeichen "0x" oder "0X", so wird das
Tabellenelement als hexadezimale Zahl interpretiert. In
allen anderen Fällen wird des Tabellenelement als
dezimale Zahl interpretiert. Der Suchvorgang beginnt
immer in der zweiten Tabellenzeile. Nach erfolgreicher
Suche meldet die Funktion TRUE (<>0) , ansonsten
FALSE (0) zurück. Wurde der Wert gefunden, so steht der
Lesezeiger für die Tabelle auf der Zeile mit dem gefunden
Wert, wenn nicht, dann auf der letzten Zeile der Tabelle
(wichtig für Defaultwerte). Die Elemente dieser Zeile
können dann mittels tabget ausgelesen werden. Ist die
Spalte nicht vorhanden wird der Fehler BIP_0010
(Constant Data Access Error) [4] ausgelöst.

Rückgabewert TRUE wenn der Wert gefunden wurde, sonst FALSE

Siehe auch tab_suche_index, tabget, tabset, tabsetext

174
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

Beispiel table TST[3][]={


{ "NAME", "WERT", "NUMMER" },
{ "A", "0", "0x0000" },
{ "B", "768", "0x0300" }
}

{
char buffer[];
unsigned long index;

tabset("TST");
index=0x300;
tab_suche_unsigned("NUMMER",index);
tabget(buffer,"NAME");
}

Ergebnis buffer = "B"

175
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

tabget
Kurzbeschreibung Auslesen der Werte aus der aktuellen Tabellenzeile

void tabget(char destin[],char column[])

destin Stringpuffer zur Aufnahme des Wertes (V)


column Spalte aus der der Wert genommen wird

Bemerkung Die Funktion tabget liest einen Wert aus der aktuellen, mit
tabseek oder tab_suche_index bestimmten
Tabellenzeile. Der Wert von column gibt an, aus welcher
Spalte value zu holen ist. Ist die Spalte nicht vorhanden,
so wird der Fehler BIP_0010 (Constant Data Access
Error) [4] ausgelöst.

Rückgabewert -

Siehe auch tab_suche_index, tabseek, tabset, tabsetext

Beispiel siehe tabset

176
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

tabline
Kurzbeschreibung Positioniert den Lesezeiger auf die angegebene Zeile

long tabline(long line)

line Zeilennummer in der Tabelle (die erste Zeile hat die


Nummer 0)

Bemerkung Die Funktion tabline positioniert den Lesezeiger auf die


angegebene Zeile. Die erste Zeile hat die Nummer Null.
Existiert eine Zeile, die der Nummer entspricht, meldet die
Funktion TRUE (!0) , ansonsten FALSE (0) zurück.
Existiert keine Zeile, die der Nummer entspricht, so steht
der Lesezeiger auf der letzten Zeile der Tabelle (wichtig
für Defaultwerte). Die Elemente dieser Zeile können dann
mittels tabget ausgelesen werden.

Rückgabewert TRUE wenn die Zeile existiert, sonst FALSE

Siehe auch tab_suche_index, tabseek, tabset, tabsetext

Beispiel siehe tabseek

177
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

tabseek
Kurzbeschreibung Sucht in einer Tabellenspalte nach einem Wert

long tabseek(char column[], char value[])

column Spalte in der der Wert gesucht werden soll


value Wert nach dem gesucht werden soll

Bemerkung Die Funktion tabseek sucht in der Spalte column den


String value. Der Suchvorgang beginnt immer in der
zweiten Tabellenzeile. Nach erfolgreicher Suche meldet
die Funktion TRUE (!0) , ansonsten FALSE (0) zurück.
Wurde der Wert gefunden, so steht der Lesezeiger für die
Tabelle auf der Zeile mit dem gefunden Wert, wenn nicht,
dann auf der letzten Zeile der Tabelle (wichtig für
Defaultwerte). Die Elemente dieser Zeile können dann
mittels tabget ausgelesen werden. Ist die Spalte nicht
vorhanden, so wird der Fehler BIP_0010 (Constant Data
Access Error) [4] ausgelöst.

Rückgabewert TRUE wenn der Wert gefunden wurde, sonst FALSE

Siehe auch tab_suche_index, tabget, tabset, tabsetext

Beispiel siehe tabset

178
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

tabset
Kurzbeschreibung Auf- und Rücksetzen der Tabellenbearbeitung
void tabset(char tabname[])
tabname Name der Tabelle mit der gearbeitet werden soll

Bemerkung Tabellen sind konstante zweidimensionale Arrays aus


Strings. Die Werte in der ersten Zeile benennen die
Spalten. In jeder Spalte kann nach einem Wert gesucht
werden (tabseek, tab_suche_index). Aus der Zeile in der
der Wert gefunden wurde, kann jede Spalte ausgelesen
werden (tabget). Die Tabellenbearbeitung muß initialisiert
werden. Dazu dient die Funktion tabset, der die
Bearbeitung auf eine bestimmte Tabelle setzt. Der Name
der Tabelle muß als String übergeben werden. Nach
tabset muß zuerst tabseek oder tab_suche_index
aufgerufen werden bevor tabget verwendet werden darf.
Ist die Tabelle nicht vorhanden, so wird der Fehler
BIP_0010 (Constant Data Access Error) [4] ausgelöst.
Rückgabewert -
Siehe auch tab_suche_index, tabget, tabseek, tabset, tabsetext

Beispiel table TST[3][]={


{ "NAME", "WERT", "NUMMER" },
{ "EINS", "1000", "0" },
{ "ZWEI", "2000", "3" }};
char buffer[];
tabset("TST");
tabseek("NAME","EINS");
tabget(buffer,"NUMMER"); // buffer = "0"
tabget(buffer,"WERT"); // buffer =
"1000"
tabseek("NUMMER","3");
tabget(buffer,"NAME"); // buffer =
"ZWEI"

Ergebnis -

179
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

tabsetext
Kurzbeschreibung Auf- und Rücksetzen der Tabellenbearbeitung
void tabsetext(char tabfile[],char tabname[])
tabfile Steuergeräte-Beschreibungsdatei, in der sich die Tabelle
tabname befindet
tabname Name der Tabelle mit der gearbeitet werden soll

Bemerkung Tabellen sind konstante zweidimensionale Arrays aus


Strings. Die Werte in der ersten Zeile benennen die
Spalten. Für den Zugriff auf eine Tabelle muß die
Tabellenbearbeitung auf diese gesetzt werden. Befindet
sich die Tabelle in einer anderen Steuergeräte-
Beschreibungsdatei, so dient hierzu die Funktion
tabsetext. An die Funktion sind die Namen der
Steuergeräte-Beschreibungsdatei und der Tabelle zu
übergeben. Für den Zugriff auf eine Tabelle der eigenen
Steuergeräte-Beschreibungsdatei ist als tabfile ein Leer-
String zu übergeben (entspricht der tabset Funktionalität).

Die Suche nach tabfile erfolgt im ECU-Verzeichnis. Zuerst


wird nach einer Varianten-Beschreibungsdatei gesucht.
Bei fehlgeschlagener Suche wird zusätzlich nach einer
Gruppen-Beschreibungsdatei gesucht.

Nach tabsetext muß zuerst tabseek oder


tab_suche_index aufgerufen werden bevor tabget
verwendet werden darf. In jeder Spalte der Tabelle kann
nach einem Wert gesucht werden (tabseek,
tab_suche_index). Aus der Zeile in der der Wert
gefunden wurde, kann jede Spalte ausgelesen werden
(tabget). Der Aufruf von tabsetext muß in dem Job
erfolgen, in dem sich auch die entsprechenden
Tabellenzugriffe befinden.
Rückgabewert -
Siehe auch tab_suche_index, tabget, tabseek, tabset
Beispiel tabsetext("file","TST"); // file.prg/grp
Ergebnis -

180
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

uitoad
Kurzbeschreibung Wandelt eine unsigned Zahl in einen String in dezimaler
Darstellung

void uitoad(char destin[],unsigned long value)

destin Puffer zur Aufnahme des Strings (V)


value zu wandelnde Zahl

Bemerkung Die Funktion uitoad wandelt die Zahl value in einen String
in dezimaler Darstellung ohne Vorzeichen. Es werden
keine führenden Nullen ausgegeben.

Rückgabewert -

Siehe auch itoad, atoi, atoy, bcd2ascii, hex2ascii, itoax, ascii2hex

Beispiel {
char destin[];

uitoad(destin,4294967295);
...
}

Ergebnis destin="4294967295"

181
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

updateInfo
Kurzbeschreibung Erzeugt ein Stringergebnis während der Jobbearbeitung

void updateInfo()

Bemerkung Mit dieser Funktion wird ein Stringergebnis erzeugt, das


noch während der Jobbearbeitung abgefragt werden kann.

Rückgabewert -

Siehe auch -

Beispiel updateInfo(”Job laeuft...”);

Ergebnis -

182
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

userbreak
Kurzbeschreibung Erzeugt die Fehlermeldung "BIP-0008: BEST BREAK"

void userbreak()

Bemerkung Die Funktion erzeugt die Fehlermeldung "BIP-0008: BEST


BREAK".

Rückgabewert -

Siehe auch make_error

Beispiel userbreak();

Ergebnis -

183
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

var_result_data
Kurzbeschreibung Erzeugt ein nicht im Job-Header definiertes Dataergebnis

void var_result_data(char name[], char value[])

name Name des Ergebnisses


value Wert des Dataergebnisses

Bemerkung Die Funktion erzeugt ein Dataergebnis mit dem


Ergebnisnamen name und dem Wert value. Der
Ergebnisname name wird erst zur Laufzeit vom Job
bestimmt.

Rückgabewert -

Siehe auch set_variable_result, var_result_long, var_result_real,


var_result_string

Beispiel char resultname[] = "X";


char resultvalue[] = { 0x12, 0x34, 0xFF };

var_result_data(resultname,resultvalue);

Ergebnis -

184
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

var_result_long
Kurzbeschreibung Erzeugt ein nicht im Job-Header definiertes Longergebnis

void var_result_long(char name[], long value)

name Name des Ergebnisses


value Wert des Longergebnisses

Bemerkung Die Funktion erzeugt ein Longergebnis mit dem


Ergebnisnamen name und dem Wert value. Der
Ergebnisname name wird erst zur Laufzeit vom Job
bestimmt.

Rückgabewert -

Siehe auch set_variable_result, var_result_data, var_result_real,


var_result_string

Beispiel char resultname[] = "X";


long resultvalue = 0x10;

var_result_long(resultname,resultvalue);

Ergebnis -

185
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

var_result_real
Kurzbeschreibung Erzeugt ein nicht im Job-Header definiertes Realergebnis

void var_result_real(char name[], real value)

name Name des Ergebnisses


value Wert des Realergebnisses

Bemerkung Die Funktion erzeugt ein Realergebnis mit dem


Ergebnisnamen name und dem Wert value. Der
Ergebnisname name wird erst zur Laufzeit vom Job
bestimmt.

Rückgabewert -

Siehe auch set_variable_result, var_result_data, var_result_long,


var_result_string

Beispiel char resultname[] = "X";


real resultvalue;

ator(resultvalue,"1.23");
var_result_real(resultname,resultvalue);

Ergebnis -

186
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

var_result_string
Kurzbeschreibung Erzeugt ein nicht im Job-Header definiertes Stringergebnis

void var_result_real(char name[], char value[])

name Name des Ergebnisses


value Wert des Stringergebnisses

Bemerkung Die Funktion erzeugt ein Stringergebnis mit dem


Ergebnisnamen name und dem Wert value. Der
Ergebnisname name wird erst zur Laufzeit vom Job
bestimmt.

Rückgabewert -

Siehe auch set_variable_result, var_result_data, var_result_long,


var_result_real

Beispiel char resultname[] = "X";


char resultvalue[] = "ABC";

var_result_string(resultname,resultvalue);

Ergebnis -

187
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

wait
Kurzbeschreibung n Sekunden warten

void wait(long time)

time Wartezeit in Sekunden

Bemerkung Die Funktion wait wartet time Sekunden. wait wartet


maximal time Sekunden und minimal time-1 Sekunden.
Wenn time = 0 ist, wird nicht gewartet.

Rückgabewert -

Siehe auch getasciidate, getasciitime, getdate, getdate

Beispiel {
wait(1);
}

Ergebnis wartet 1 Sekunde

188
EDIABAS — BEST/2 FUNKTIONSREFERENZ
Bibliotheksfunktionen

waitex
Kurzbeschreibung n Millisekunden warten

void waitex(unsigned long time)

time Wartezeit in Millisekunden

Bemerkung Die Funktion waitex wartet die angegebene Zeit in


Millisekunden. Die Genauigkeit (Auflösung) der Wartezeit
ist betriebssystemabhängig. Wenn time = 0 wird nicht
gewartet.
Die Funktion waitex basiert auf einem internen Zähler,
welcher betriebssystemabhängig überlaufen kann:

Win16/32: Millisekunden seit Systemstart (Überlauf nach


2^32 Millisekunden)

Unix: Sekunden seit 00:00 Uhr (Überlauf nach 24


Stunden)

Bei Überlauf des internen Zählers erfolgt ein Abbruch der


Funktion waitex.

Rückgabewert TRUE Ablauf der Wartezeit


FALSE Zählerüberlauf

Siehe auch gettickcount, getasciidate, getasciitime, getdate,


getdate

Beispiel {
waitex(1000);
}

Ergebnis wartet 1 Sekunde

189
EDIABAS — BEST/2 FUNKTIONSREFERENZ
LITERATURVERZEICHNIS

LITERATURVERZEICHNIS
[1] EDIABAS: BEST/1 Sprache & Interpreter
[2] EDIABAS: BEST/2 Sprachbeschreibung
[3] EDIABAS: API-Schnittstellenbeschreibung
[4] EDIABAS: Fehlerreferenz

190
EDIABAS — BEST/2 FUNKTIONSREFERENZ
INDEX

INDEX

—A— —G—
AdjustKWP2000TesterPrStartComm 25, 30 generateRunError 21
ascii2ascii 17, 31 generateRunError 74
ascii2hex 17, 33 get_battery_voltage 14, 27, 67
atoi 17, 34 get_error 21, 68
ator 18, 35 get_error2 21, 70
atoy 17, 36 get_ignition_voltage 14, 27, 71
get_token 16, 72
get_trap_mask 21, 68, 73
—B— getasciidate 22, 75
bcd2ascii 17, 37 getasciitime 22, 76
bittest 23, 38 getCfgInt 24, 77
bytetest 23, 40 getCfgString 24, 78
getdate 22, 79
getETXblock 25, 80
—C— GetKWP2000Block 25, 81
clear_error 21 gettickcount 22
close_communication 13, 43 gettickcount 83
gettime 22, 84

—D—
—H—
data_to_real 18, 44
datacat 19, 45 hex2ascii 17, 85
dataclear 19, 46
datacmp 19, 47 —I—
datacopy 19, 48
dataerase 19, 49 ifboot 14, 27, 86
datainsert 19, 50 ifgetport 14, 27, 87
datalen 19, 51 ifinfo 14, 88
datarevers 19, 52 ifinfoExt 14, 89
dataset 19, 53 ifloopt 14, 27, 90
doNewInit 21, 54 ifrawmode 14, 28, 91
ifrecv 14, 92
ifrequeststate 14, 28, 93
—E— ifreset 14, 27, 94
enableClampHandling 24, 56 ifsend 14, 95
enableIfhTrace 24, 55 ifsetport 14, 27, 96
enableIgnitionHandling 24, 57 ifsireset 14, 28, 97
enableUbattHandling 24 iftype 14, 98
enableUBattHandling 58 ifvers 14, 28, 99
incProgressPos 15, 100
INITIALISIERUNG 10
—F— isDebugLevel 24, 101
fclose 20, 59 isSimulation 24, 102
fopen 20, 60 itoad 17, 103
fread 20, 61 itoax 17, 104
freadln 20, 62 itor 18, 105
fseek 20, 63
fseekln 20, 64 —M—
ftell 20, 65
ftellln 66 make_error 21
ftelln 20

191
EDIABAS — BEST/2 FUNKTIONSREFERENZ
INDEX

—N— tabget 23, 176


tabline 23, 177
new_set_of_results 15, 107 tabseek 23, 178
tabset 23, 179
tabsetext 180
—O—
open_communication 13, 108 —U—
uitoad 17, 181
—P— updateInfo 15, 182
parcount 15, 109 userbreak 21, 183

—R— —V—
real_to_data 18, 110 var_result_data 15, 184
realadd 18, 111 var_result_long 15, 185
realcomp 18, 112 var_result_real 15, 186
realdiv 18, 113 var_result_string 15, 187
realmul 18, 114
realresult 18, 115 —W—
realsub 18, 116
recv_frequent 13, 27, 117 wait 22, 188
recv_keybytes 13, 26, 118 waitex 22, 189
rtoa 18, 119
rtoi 18, 120

—S—
send_and_receive 13, 26, 121
send_frequent 13, 27, 122
set_answer_length 123
set_communication_pars 13, 26, 126
set_program_voltage 14, 27, 153
set_repeat_counter 13, 154
set_trap_mask 21, 68, 155
set_variable_result 15
setProgressRange 15, 159
shdataget 19, 160
shdataset 19, 161
stop_frequent 13, 27, 162
strcat 16, 163
strcmp 16, 164
strcpy 16, 165
strcut 16, 166
strerase 16, 167
strinsert 16, 168
strlen 16, 169
strncpy 16, 170
strrevers 16, 171

—T—
tab_suche_index 23, 173
tab_suche_unsigned 23, 174
tab2fix 23, 172
Tabellen 179, 180

192