Documentos de Académico
Documentos de Profesional
Documentos de Cultura
85540 Haar
Tel.: 089/45656-0 Fax: 089/45656-499
INPA
Interpreter fr Prfablufe
Benutzerdokumentation
Autoren:
Georg Luderbck
Michael Koch
Roland Stadtmller
Daniel Frey
Datum: 07.01.2003
INPA.DOC
Version 2.5
INPA
Benutzerdokumentation
V 2.5
1 Einleitung
Bei der Einfhrung von neuen Steuergerten oder Steuergertevarianten in der Fertigung mu fr die
Behandlung von Problemfllen ein Diagnoseprogramm fr dieses Steuergert, z.B. fr die Nacharbeit,
bereitgestellt werden. Bisher erfolgte dies durch eine Erweiterung der Diagnoseprogramme, die fr den
Einsatz im Kundendienst entwickelt wurden.
Um auf die Anforderungen im Werk flexibler und vor allem schneller reagieren zu knnen, wurde
zunchst ein Prototyp, spter dann in der Ausbaustufe 1 ein eigenstndiges Prfablaufsystem
entwickelt, das es einem geschulten Bearbeiter vor Ort ermglicht, Nacharbeitsprogramme fr das
Werk zu entwickeln.
Diese Nacharbeitsprogramme werden in einer Prfablauf-Beschreibungssprache formuliert, die
wiederum in der jetzt vorliegenden Ausbaustufe 2 um die Anforderungen fr einen mglichst
universellen Anwendungsbereich erweitert wurde. Das hier beschriebene Ablaufsystem INPA
(INterpreter fr PrfAblufe) zeichnet sich durch die folgenden Eigenschaften aus:
leicht zu erlernen
Entsprechend dem vorgesehenen Einsatzbereich des INPA erfolgt der Zugriff auf Informationen des
Fahrzeugs (bzw. des zu diagnostizierenden Steuergerts) ber das Elektronikdiagnose-Basis-System
EDIABAS und ber die EDIC Hardware.
Seite 2
INPA
Benutzerdokumentation
V 2.5
1.1 Inhaltsverzeichnis
1 EINLEITUNG ........................................................................................................................................ 2
1.1 Inhaltsverzeichnis.................................................................................................................. 3
2 BERSICHT ......................................................................................................................................... 5
2.1 nderungsstand .................................................................................................................... 6
3 SYSTEMBESCHREIBUNG .................................................................................................................. 8
Seite 3
INPA
Benutzerdokumentation
V 2.5
Seite 4
INPA
Benutzerdokumentation
V 2.5
2 bersicht
Das vorliegende Dokument dient dem Systemverstndnis zum Interpreter fr Prfablufe (INPA); der
Leser dieser Benutzerdokumentation erhlt im Kapitel 3 einen berblick ber die mglichen
Anwendungsgebiete und ber die fr den Benutzer sichtbaren Komponenten des INPA.
Kapitel 5 beschreibt den Aufbau von Prfablaufbeschreibungsdateien, den prinzipiellen Ablauf von
Prfungen und die zur Beschreibung (und zur Ausfhrung) von Prfungen zur Verfgung stehenden
Sprachelemente (z.B. auch die Funktionen der Standardbibliothek). Damit wird der Leser in die Lage
versetzt, Prfungen in einer Prfablauf-Beschreibungssprache zu formulieren und ablaufen zu lassen.
Die Auflistung der Sprachelemente im Unterkapitel 5.3 ist auch zum Nachschlagen gedacht.
Das Kapitel 6 gibt einen groben berblick ber die Softwarestruktur und die Komponenten des INPA
Ablaufsystems. Dieses Kapitel soll im Hinblick auf Softwarepflegemanahmen die
Grobzusammenhnge der Moduln erlutern.
Diese INPA Benutzerdokumentation richtet sich an
Mitarbeiter aus Abteilungen der Fa. BMW, die Prfablufe in der Fertigung in eigener
Verantwortung festlegen oder abndern
Mitarbeiter aus Abteilungen der Fa. BMW, die Prfablufe im Labor festlegen
Seite 5
INPA
Benutzerdokumentation
V 2.5
2.1 nderungsstand
Ersterstellung Version 1.0, 20.09.1993
berarbeitung V1.1 06.10.1993:
Kapitel 2:
eingefgt
Kapitel 3.3.7:
Textformatierungen nher erlutert
berarbeitung V1.2, 02.02.1994:
Kapitel 3.3.7:
DTM-Funktionen und Stringarrayfunktionen aufgenommen
Hexdump-Beschreibung aktualisiert
Kapitel 3.3.2:
2. Parameter bei LINE-Konstrukt und setscreen-Funktion beschrieben
berarbeitung V1.3, 08.07.1994:
Kapitel 1:
Systemstruktur und Beschreibung aktualisiert
Kapitel 2.1:
Dateistruktur aktualisiert
Kapitel 2.2:
Beschreibung der Konfigurationsdateien aktualisiert
Kapitel 3.1.1:
neues Kapitel zur Beschreibung der pragmas aufgenommen
Kapitel 3.1.2:
Beschreibung des Include-Mechanismus und der Scriptstruktur
aktualisiert
Kapitel 3.3.3:
zweite Funktionstastenebene beschrieben
Kapitel 3.3.7:
Beschreibung der Bibliotheksfunktionen aktualisiert
Kapitel 4:
INPA-Localization-Support beschrieben
Anhang A:
Sprachdefinition aktualisiert (Programmstruktur, pragma)
Anhang B:
Parametrierung bei analogout aktualisiert
berarbeitung V1.4, 17.03.1995:
Kapitel 2:
Einarbeitung der neuen Konfiguration
Kapitel 3.7:
Einarbeitung RK512-Funktionen
Erweiterung DTM-Funktionen
Ersetzung sgselect durch scriptselect
Funktion GetBinaryDataString
Funktion printfile
Funktion calldos entfernt
berarbeitung V1.5, 16.01.1996:
Kapitel 2.2.1:
Erweiterung der Setup-Einstellungen
Kapitel 3.2.3:
Fabdateien
Kapitel 3.3.7:
Einarbeitung der neuen INPAapiFsLesen-Funktion und des Modes
0x40
Einarbeitung der INPAapiFsLesen2-Funktion
Einarbeitung der ELDIStartOpenDialog-Funktion
nderung der togglelist-Funktion
Kapitel 4.2.3:
Aufgenommen
Kapitel 4.2.1:
Sprache heit ENGLISCH
berarbeitung V1.6, 03.04.1996:
Kapitel 2.2.1:
Ergnzung der Setup-Einstellungen
Kapitel 5.3.7:
Funktionen
fileread, Delay, stringtoreal, stringtoint, inttoreal, realtoint
aufgenommen
Funktion fileopen um r-Parameter ergnzt
IS_LESEN-Sonderbehandlung eingefgt
Kapitel 4.2.4:
Kapitel Kommandozeilenoptionen aufgenommen
Seite 6
INPA
Benutzerdokumentation
V 2.5
Seite 7
INPA
Benutzerdokumentation
V 2.5
3 Systembeschreibung
Das System INPA basiert auf WINDOWS (95, NT oder hher) und setzt deshalb zum problemlosen
Betrieb einen PC 80386 (oder hher) mit 32 MB RAM (oder mehr) voraus. Desweiteren ist als
Hardware Schnittstelle zum Fahrzeug, oder zu einem Steuergert, ein Enhanced Diagnostic Interface
Computer (EDIC) vorgesehen.
Die Kommunikation mit dem EDIC wird ber das Elektronikdiagnose-Basis-System abgehandelt, das
als Dynamic- Link-Library (DLL) zur Verfgung stehen mu.
Typische Anwendungsgebiete fr INPA sind:
"schnelle Tests", d.h. Prfablufe die nur einmal oder wenige Male verwendet werden oder
hufigen nderungen unterliegen, (z.B. Untersuchungen in der Entwicklung oder im Labor)
Einbindung von ELDI Ablufen (ELDI ist 16 Bit) ist ab der INPA-Version 5.0.0 (32-Bit) nicht mehr
mglich.
Die Entwicklung von Prfablaufprogrammen erfolgt durch einen geschulten Bearbeiter vor Ort, dem
dazu eine entsprechend flexible Beschreibungssprache an die Hand gegeben wird. Mit einem
(beliebigen) ASCII Editor werden dabei Prfablaufbeschreibungsdateien in der vorgenannten
Beschreibungssprache fr Prfablufe erstellt.
Zur Laufzeit des INPA werden diese Beschreibungsdateien interpretativ abgearbeitet, wobei sich das
System auf die in Abbildung 1 schematisch dargestellten Komponenten sttzt.
Um die Ladezeiten fr die Prfablaufbeschreibungsdateien zu verkrzen und um den Speicherbedarf
zu minimieren wurde das INPA Sytem so implementiert, da es in konfigurierbaren Modi betrieben
werden kann, nmlich als:
INPA Loader zum Laden und Abarbeiten von vorcompilierten Prfablaufbeschreibungsdateien. Die
Konfiguration INPA Loader wird am Einsatzort der Prfung verwendet.
es knnen automatische Ablufe oder vom Benutzer ber die Tastatur gesteuerte Ablufe
formuliert werden
Prfergebnisse (oder andere Ausgaben) knnen auf dem Bildschirm oder in eine Datei (Protokoll)
ausgegeben werden, oder sie knnen als Rckgabewert an ein aufrufendes Programm
zurckgegeben werden
Seite 8
INPA
Benutzerdokumentation
V 2.5
(in
PABS)
formulierten
Prfablufe
enthalten
DLL
DLL
Abbildung 1
Wie in Abbildung 1 dargestellt, besteht der Interpreter fr Prfablufe (INPA) aus mehreren
Komponenten und sttzt sich auch auf Dynamic Link Libraries (z.B. EDIABAS, Protokoll- und Etiketten
Manager sowie Lokalisierungs-DLL fr Mehrsprachlichkeit), die am vorgesehenen Einsatzort z.T. aus
Seite 9
INPA
Benutzerdokumentation
V 2.5
anderen Diagnosesystemen zur Verfgung stehen. Fr Einsatzorte, an denen diese DLLs nicht
bereits vorhanden sind, knnen diese unverndert bernomen werden.
Seite 10
INPA
Benutzerdokumentation
V 2.5
4.1 Installation
4.1.1 Voraussetzung fr den Betrieb des Interpreters
Zum Betrieb des Interpreters mu EDIABAS instaliert sein.
:
:
INPACOMP.EXE :
INPALOAD.EXE :
INPAGER.DLL :
INPAUS.DLL
:
BRIDGE16.EXE :
EDIERROR.TXT :
Verzeichnis BIN
INPA.EXE
Verzeichnis CFGDAT
INPA.INI
INPASCR.INI
STARTGER.IPS
STARTUS.IPS
STARTGER.IPO
STARTUS.IPO
:
:
:
:
:
Verzeichnis HELP
INPAHELP.HLP :
Windows-Hilfedatei zu INPA
Verzeichnis PRT
*.ini
:
INPADOS.DMF :
INPAWIN.DMF :
./ENGLISCH bzw.
Drucker-Initialisierungsdateien
Druckmaskendatei fr INPA-Bildschirmabzge ber PEM
Druckmaskendatei fr INPA-Bildschirmabzge ber
Windows-Standarddrucker
Seite 11
INPA
Benutzerdokumentation
V 2.5
./DEUTSCH
:
E3ETIKET.DMF :
E3PROTOK.DMF:
Verzeichnis TRACE
(enthlt die Temporrdatei fr INPA-Bildschirmabzug bei Betrieb ohne Drucker)
("DRUCKER=NEIN" in INPA-Konfigurationsdatei)
Verzeichnis SGDAT
INPA.H
4.2 Konfiguration
Die Konfiguration von INPA erfolgt mit Hilfe von zwei Konfigurationsdateien, die im Verzeichnis
.\CFGDAT enthalten sind:
Seite 12
INPA
Benutzerdokumentation
V 2.5
Seite 13
INPA
Benutzerdokumentation
V 2.5
Sektion [ENVIRON]:
Druckereinstellungen fr Bildschirmabzge:
DRUCKER=WIN
Bildschirmabzge werden ber den Windows-Druckmanager auf
dem konfigurierten Windows-Standarddrucker ausgegeben.
DRUCKER=PEM
Bildschirmabzge werden auf dem angeschlossenen WinEldiDrucker ausgegeben
DRUCKER=JA
Bildschirmabzge werden auf dem angeschlossenen WinEldiDrucker ausgegeben
DRUCKER=NEIN
Bildschirmabzge werden in die Datei .\TRACE\p.trc ausgegeben
und knnen mit einem DOS-View-Programm angezeigt werden
Einstellung der WINELDI-Protokollierung:
PEM=JA
Aktiviert den Protokoll-Etiketten-Manager.
Einstellungen fr den DatenTabellenManager
(wird ab Version 5.0.0 nicht mehr untersttzt):
DTM=NEIN
DTM ist eine Funktionalitt von Eldi, welches ab Version 5.0.0 nicht
mehr untersttzt wird. Daher ist DTM=NEIN gleich zu setzen (bzw.
aus der Ini-Datei komplett zu streichen), andernfalls erfolgt ein
Warnhinweis beim Start von INPA.
Einstellung der Mehrsprachlichkeit:
LANGUAGE=DEUTSCH
Programmtexte und -meldungen in deutscher Sprache
LANGUAGE=ENGLISCH
Programmtexte und -meldungen in englischer Sprache
Defaulteinstellung des verwendeten Editortyps:
EDITOR=DOS
Scriptbearbeitung mit DOS-Editor als Defaulteinstellung
EDITOR=WIN
Scriptbearbeitung mit Windows-Editor als Defaulteinstellung
Einstellungen fr INPA und INPALOAD unter Verwendung des WINELDI-Eingangshandlers
(wird ab Version 5.0.0 nicht mehr untersttzt):
NETZDATEN=\inpa\bin\net.dat
- Name Einstellungsdatei fr den Netzzugriff auf die Auftragsdaten
DECODIERTABELLE_D_Alle=
- Dekodiertabellen frAuftragsdatendekodierung
DECODIERTABELLE_E_E36=
- Dekodiertabellen fr Auftragsdatendekodierung
SPLITTINGFILE=
- Auftrennungsvorschrift fr Dekodierung (notwendig)
( Die genannten Eintrge sind Defaulteintrge und nur relevant, wenn der Eingangshandler von INPA
bzw. INPALOAD aufgerufen wird )
Art der Scriptauswahl fr INPA (nicht wirksam fr INPALOAD!):
SCRIPTSELECT=LIST
Scriptauswahl ber Auswahlliste entsprechend der jeweiligen
Scriptauswahldatei
SCRIPTSELECT=DIALOG Scriptauswahl ber einen Standarddialog
Default-Scriptauswahldatei fr INPA und INPALOAD:
DEFINI=inpascr.ini
Name der Default-Scriptauswahldatei im Verzeichnis .\CFGDAT
Seite 14
INPA
Benutzerdokumentation
V 2.5
Die brigen Eintrge dieser Sektion werden zur Zeit nicht verwendet und sollen unverndert
bleiben.
Seite 15
INPA
Benutzerdokumentation
V 2.5
Seite 16
INPA
Benutzerdokumentation
V 2.5
Seite 17
INPA
Benutzerdokumentation
V 2.5
Seite 18
INPA
Benutzerdokumentation
V 2.5
<fort_nr>
Fehlernummer
AB-Section [<AB_name>]:
Section, in der Ausblendbedingungen definiert sind, die alle erfllt sein mssen, damit ein Fehler
ausgeblendet wird (Verundung)..
<AB_name>
Bed1=
Bed2=
....
AB Beschreibungen <AB_beschreibung>:
Im folgenden werden die vier Mglichkeiten zur Formulierung von Ausblendbedingungen beschrieben:
1. AAB : Auftragsbezogene Ausblendbedingungen (Barcodemuster) :
<AB_beschreibung> AAB <AAB_Nr>[ <AAB_Nr> ...]
AAB
<AAB_Nr>
Es wird geprft, ob die aktuellen Auftragsdaten die Bedingungen erfllen. Bei nicht vorhandenen
Auftragsdaten, z.B. an einem Nacharbeitsstand, gilt die Bedingung als nicht erfllt.
Seite 19
INPA
Benutzerdokumentation
V 2.5
FS_LESEN
<apiresult_typ>
<apiresult_name>
<operator>
<vergleichswert>
Es wird geprft, ob der aus dem Steuergert mit FS_LESEN ausgelesene Wert des Ergebnisses
<apiresult_name> die Bedingung <operator> <vergleichswert> erfllt.
3. AUFTRAG : Symbolische auftragsbezogene Ausblendbedingungen
<AB_beschreibung>
AUFTRAG
<auftragsdatenname>
<auftragsdatenwert>
Es wird verglichen, ob das Auftragsdatum <auftragsdatenname> den <auftragsdatenwert> hat. Bei nicht
vorhandenen Auftragsdaten, z.B. an einem Nacharbeitsstand, gilt die Bedingung als nicht erfllt.
Seite 20
INPA
Benutzerdokumentation
V 2.5
JOB
<job_parameter>
<apiresult_typ>
SIEHE OBEN
<apiresult_name>
<operator>
SIEHE OBEN
<vergleichswert>
SIEHE OBEN
Es wird geprft, ob das aus dem Steuergert <SGBD_name> mit dem Job <job_name> ausgelesene
Ergebnis <apiresult_name> die Bedingung <operator> <vergleichswert> erfllt.
Der Job darf nur aufgerufen werden, wenn das zugehrige Steuergert <SGBD_name> lt.
Auftragsdaten auch verbaut ist. Ist dies nicht der Fall, so gilt die Bedingung als nicht erfllt
Der Job wird nur einmal gestartet, d.h. im Falle von APIFALSE erfolgt keine Wiederholung.
Seite 21
INPA
Benutzerdokumentation
V 2.5
4.2.3.4 Beispiel
Folgender Fall soll angenommen werden:
Der Fehler 2, Leerlaufsteller/Schliesswicklung, der DME331 soll nur dann ausgeblendet werden,
wenn die in der AAB.FAB formulierte auftragsbezogene Ausblendbedingung 10 erfllt ist, die Fehlerart
Fehler nach Entprellung abgespeichert vorliegt, der Fehler bei einer Motordrehzahl
(Umweltbedingung) zwischen 1500 U/min und 2300 U/min aufgetreten ist, laut Barcodevorgabe das
Gurtstrammer-Beifahrer-Flag gesetzt ist und sich beim Steuergert ASC2E das Telegramm
Test_Drosselklappe ausfhren lt
ODER
Die Fehler 3, 5 und 7 sollen ausgeblendet werden, wenn die Fehlerart sporadisch vorliegt.
Alle Fehler sollen ausgeblendet werden, die bei einer Motordrehzahl kleiner 650 U/min aufgetreten
sind.
Es mu eine Fehlerausblenddatei mit dem Namen DME331.FAB existieren mit folgendem Inhalt:
; FAB-Section ----------------------------------------------------------[FAB]
Fehler= 2 3 4 5 6 7
; F-ORT-NR - Sections ----------------------------------------------------; fr Fehler 2, '
Leerlaufsteller/Schliesswicklung'
[2]
AB=AB1 AB2 AB4
; fr Fehler 3
[3]
AB=AB3 AB4
; fr Fehler 4
[4]
AB=AB4
; fr Fehler 5
[5]
AB=AB3 AB4
; fr Fehler 6
[6]
AB=AB4
Seite 22
INPA
Benutzerdokumentation
V 2.5
; fr Fehler 7
[7]
AB=AB3 AB4
; AB - Sections ----------------------------------------------------------[AB1]
Bed1=AAB 10
Bed2=FS_LESEN APITEXT F_ART1_TEXT == "Fehler nach Entprellung abgesp."
Bed3=FS_LESEN APIREAL F_UW1_WERT > "1500"
Bed4=FS_LESEN APIREAL F_UW1_WERT < "2300"
Bed5=AUFTRAG GURTSTRAMMER_BF == "1"
Bed6=JOB ASC2E TEST_DROSSELKLAPPE "" APITEXT JOBSTAUS == "OKAY"
[AB2]
Bed1=FS_LESEN APIBINARY F_HEX_CODE == "02, 34, 0A, 0B, EF"
[AB3]
Bed1=FS_LESEN APITEXT F_ART5_TEXT == "Fehler sporadisch"
; fr alle Fehlercodes gemeinsam
[AB4]
Bed1=FS_LESEN APIREAL F_UW1_WERT < "650"
Seite 23
INPA
Benutzerdokumentation
V 2.5
Seite 24
INPA
Benutzerdokumentation
V 2.5
13=N_ADV1_D,N_ADV2_D,N_ADV3_D,N_ADV4_D
; AB 14 fuer ZKE1 : Fehler 8 TSH D-Barcode
14=N_TSH1_D,N_TSH2_D,N_TSH3_D,N_TSH4_D
; AB 15/16 fuer BC IV : Fehler Standheizung /-lueftung
15=NO_SL_D
16=NO_SH_D
[AEB]
NEIN=E1,11,2=xx
JA=E1,15,1=x,N
E32=FG,6,1=G
E34=FG,6,1=H
E31=FG,6,1=E
E31_D=FP,6,1=E
NO_SL=E3,3,1=0
NO_SH=E3,3,1=2,N
NO_SL_D=D2,19,1=0
NO_SH_D=D2,19,1=3,N
NO_SL_31=E3,4,1=0
NO_SH_31=E3,4,1=2,N
SA199=E1,14,1=A
EMLVERB=E1,15,1=0,N
NO_ADV1=E3,5,1=1,N
NO_ADV2=E3,5,1=4,N
NO_ADV3=E3,5,1=5,N
NO_ADV4=E3,5,1=7,N
NO_TSH1=E3,5,1=3,N
NO_TSH2=E3,5,1=5,N
NO_TSH3=E3,5,1=6,N
NO_TSH4=E3,5,1=7,N
N_ADV1_D=D2,15,1=4,N
N_ADV2_D=D2,15,1=5,N
N_ADV3_D=D2,15,1=6,N
N_ADV4_D=D2,15,1=7,N
N_TSH1_D=D2,15,1=1,N
N_TSH2_D=D2,15,1=3,N
N_TSH3_D=D2,15,1=5,N
N_TSH4_D=D2,15,1=7,N
Seite 25
INPA
Benutzerdokumentation
V 2.5
4.2.4 Kommandozeilenoptionen
Allen Programmen des INPA-Pakets knnen optional direkt auf der Kommandozeile ein zu
bearbeitendes INPA-Script angegeben werden; z.B.:
INPALOAD.EXE \INPA\CFGDAT\STARTGER.IPO
Beim INPA-Compiler knnen noch Wildcards d.h. Platzhalter fr Dateinamen wie * und ?
angegeben werden. Zustzlich besitzt er eine Batchmodefunktion, die mit dem Parameter -B aktiviert
wird. Der Compiler luft dann im Hintergrund und fordert keine Benutzerangaben an. Zudem kann der
Schalter 16BIT gesetzt werden. In diesem Fall werden Objectfiles erzeugt, die von der letzten 16-Bit
Version von INPA (Version 4.4) interpretiert werden knnen. Eine Kompilierung fr die Version 4.4 ist
nur mglich, wenn das Skript keine Funktionalitt (setitemrepeat, import32) verwendet, die erst ab
Version 5.0.0 existiert.
Syntax:
INPACOMP.EXE <filename.ext> [-16BIT] [-B [<errors.log>]] (nur fr Batchmode des Compilers)
Seite 26
INPA
Benutzerdokumentation
V 2.5
5 Prfablaufbeschreibungsdateien
5.1 Dateistruktur
Abbildung 2 zeigt den schematischen Aufbau einer Prfablaufbeschreibungsdatei. Die Angaben in den
Positionen "Includes", "externe Funktionsdeklarationen" und "globale Datendefinitionen" sind optional;
dagegen ist das Vorhandensein einer Prfablaufbeschreibung mit den Funktionen "inpainit ()" zum
Start und "inpaexit ()" zum Beenden des Prfablaufs (siehe auch 3.2 Ablaufprinzip) zwingend
vorgeschrieben.
Abbildung 2
Zur bersetzungszeit wird ber der Prfablaufbeschreibungsdatei eine Syntaxberprfung
durchgefhrt, die gegebenenfalls zu einer Fehlermeldung fhrt. Prfablaufbeschreibungsdateien, die
nicht fehlerfrei bersetzt werden konnten, sind zur Laufzeit nicht ausfhrbar.
5.1.1 Pragmas
Pragmas sind Anweisungen an den bersetzer zur Steuerung des bersetzungsvorganges. Die
Syntax ist wie folgt definiert:
#pragma <identifer>
Seite 27
INPA
Benutzerdokumentation
V 2.5
#pragma dosedit:
Die o.g. Pragmas verndern die in der Konfigurationsdatei definierte Editor-Einstellung nur fr die
Dauer des bersetzungsvorganges. Nach Abschlu der bersetzung wird wieder die in der
Konfigurationsdatei definierte Default-Editor-Einstellung aktiviert.
5.1.2 Includes
Mit der "#include" Anweisung in der Prfablaufbeschreibungsdatei knnen andere INPA-Scriptdateien
inkludiert werden. Hierbei ist zu beachten, da nur eine Include-Ebene untersttzt wird, d.h.
geschachtelte Includes sind nicht mglich. In den Dateien knnen die Scriptelemente grundstzlich in
beliebiger Reihenfolge auftreten. Allerdings mssen Funktionen und Daten vor Gebrauch definiert
werden, bei Funktionen evtl. eine vorwrts-Deklaration mittels "extern" durchgefhrt werden. Daher ist
es zweckmig Headerdateien mit extern-Deklarationen am Scriptanfang zu includieren und danach
alle globale Daten zu definieren. Anschlieend knnen z.B. Script-Includedateien mit StandardScriptelementen includiert werden, bevor weitere Definitionen von Scriptelementen folgen.
Die Prototypen (extern-Deklarationen) aller Funktionen der INPA-Standardbibliothek befinden sich in
der Datei "inpa.h", welche normalerweise in jedem INPA-Scipt includiert wird.
Syntax:
#include "<dateiname>"
Beispiel:
#include "inpa.h"
Seite 28
INPA
Benutzerdokumentation
V 2.5
16 Bit Pascal
16 Bit C
32 Bit Pascal
32 Bit C
Funktionsname functionname
wird zu
FUNCTIONNAME
_functionname
_functionname@x (wobei x die
Gesamtgre der auf dem Stack
bergebenen Parameter in Byte ist)
functionname
Parameterreihenfolge
auf dem Stack
vorwrts
rckwrts
rckwrts
Aufrumen des
Stacks
Aufgerufene Funktion
Aufrufer
Aufgerufene Funktion
rckwrts
Aufrufer
Aufgrund der Implementierung von INPA spielt der Unterschied beim Aufrumen des Stacks keine
Rolle. Bei 32-Bit-DLL-Aufrufen besteht somit der einzige Unterschied zwischen C und Pascal somit in
der Anpassung des Funktionsnamens.
Bei Aufrufen von 32-System-DLLs ist dabei folgendes zu beachten:
Funktionen in System-DLLs rumen den Stack gem der Pascal-Aufrufkonvention auf, der Name
ist jedoch unverndert (wie in der C-Aufrufkonvention). Da das Aufrumen des Stacks nicht beachtet
werden mu, ist bei der Deklaration von 32-Bit-System-DLL-Funktionen die Aufrufkonvention C zu
benutzen, damit der korrekte Funktionsname verwendet wird. Bei 16-Bit System-DLLs hingegen gilt
wie in alten INPA-Versionen die Konvention pascal.
Beispiel:
Seite 29
INPA
Benutzerdokumentation
V 2.5
extern text_output (in: int zeile, in: int spalte, in: string ausgabetext);
<datentyp> varname;
Beispiel:
byte a = 41;
int i;
long l = -20000;
real druck, temp;
bool valid = FALSE;
string zustand = "offen";
5.1.6 Prfablaufbeschreibung
Die Prfablaufbeschreibung besteht zumindest aus der Initialisierungsfunktion "inpainit()", die den
Prfablauf startet, und der Terminierungsfunktion "inpaexit()", die den Prfablauf beendet (siehe auch
3.2 Ablaufprinzip). ber die Initialisierungsfunktion "inpainit()" werden die anwendungsspezifischen
Prfablufe aufgerufen, die aus Bildschirmbeschreibungen (siehe auch 3.3.2 Bildschirmanzeigen),
Mensteuerung (siehe auch 3.3.3 Mensteuerung) und benutzerdefinierten Funktionen (siehe auch
3.3.1 Funktionen) bestehen knnen.
Die Verwendung von Bildschirmanzeigen und Mensteuerung fr einen Prfablauf ist optional, d.h. es
knnen auch Prfablufe ohne Anzeigen auf dem Bildschirm definiert werden.
Seite 30
INPA
Benutzerdokumentation
V 2.5
Abbildung 3
Die Wurzel des Prfablaufbaumes wird bestimmt durch die Funktion "inpainit ()", die in der
Prfablaufbeschreibungsdatei vorhanden sein mu. Der Prfablauf wird beendet durch einen Aufruf
der (Standard-) Funktion "exit ()", der von beliebiger benutzerdefinierter Stelle aus erfolgen kann. Die
Funktion "exit ()" ruft die Funktion "inpaexit ()", in der benutzerspezifische Endebehandlungen definiert
werden knnen, auf, und fhrt dann eine Endebehandlung fr das System aus.
Fr die Gestaltung eines Prfablaufs ist nur vorgeschrieben, da "inpainit ()" und "inpaexit ()"
vorhanden sind, wobei "inpaexit ()" auch leer sein kann.
Seite 31
INPA
Benutzerdokumentation
V 2.5
5.3 Sprachelemente
Die Festlegung der Prfablufe erfolgt mit Hilfe von benutzerdefinierten Funktionen und Strukturen. Es
stehen folgende Strukturen zur Verfgung:
"SCREEN" zur Beschreibung des Bildschirmaufbaus und der dazugehrigen Ablufe
"MENU" zur Beschreibung der mglichen Benutzerinteraktionen und zur Verknpfung der
beschriebenen Bildschirme
"STATEMACHINE" zur Beschreibung von Ablufen
"LOGTABLE" zum Umsetzen von mehreren abhngigen Eingangsbedingungen in mehrere
abhngige Ausgangsbedingungen
Seite 32
INPA
Benutzerdokumentation
V 2.5
Jeder Parameter in der Deklaration mu vollstndig (mit drei Koeffizienten) angegeben werden. Die
Koeffizienten haben die folgende Bedeutung:
- Richtungsinformation
- in: auf den Parameter darf nur lesend zugegriffen werden
- out: auf den Parameter darf nur schreibend zugegriffen werden
- inout:auf den Parameter darf lesend und schreibend zugegriffen werden
- Parametertyp
- byte ( 8-Bit Integer)
- int (16-Bit-Integer)
- long ( 32-Bit-Integer)
- bool (Wahrheitswert, TRUE oder FALSE)
- string ( Null-terminierte Zeichenreihe)
- Parametername
kann vom Benutzer beliebig definiert werden
Seite 33
INPA
Benutzerdokumentation
V 2.5
Beschreibung:
Jede Deklaration importierter Funktionen beginnt zwingend mit dem Schlsselwort import'oder
import32'
Wahlweise kann zwischen dem Schlsselwort import und lib die verwendete Aufrufkonvention
angegeben werden:
CallConv:
pascal
C
Bei 32-Bit DLLs ist die Aufrufkonvention nur fr die Modifizierung des Funktionsnamens relevant. Bei
32-Bit-System-DLLs mu die Konvention C benutzt werden, damit der korrekte Funktionsname
verwendet wird (siehe Kapitel 5.1.3).
Nach dem Schlsselwort lib mu der Name der Bibliothek angegeben werden. Hier sind folgende
Angaben mglich:
LibName:
C:\TMP\myLib.dll
myLib.dll
Angabe der Bibliothek ohne Pfad ( die Bibliothek muss entweder bereits in den
Arbeitsspeicher von Windows geladen sein, oder liegt in einem der in der
DOS-Umgebungsvariablen PATH eingestellten Pfade bzw. im BINVerzeichniss des INPA-Systems
myLib
Optional kann, getrennt durch zwei Doppelpunkte ( ::) der von der Bibliothek exportierte interne
Name ( ::LibFnc angegeben werden. Damit kann der im INPA-Skript bekannte Name der Funktion
von dem in der externen Bibliothek definierten Namen abweichen.
Anschlieend ist der Funktionsname zu definieren, unter dem das Skript die externe Funktion
ansprechen kann.
Die Deklaration der bergabeparameter fr importierte Funktionen unterscheidet von der externDeklaration in drei Punkten:
- Es kann eine Skriptvariable als returns-Parameter ( Rckgabeparameter ) deklariert werden.
- Die bergabe von Speicherbereichen ( Structures ) und deren Gltigkeitsprfung ist mglich.
- Alle bergebenen Parameterwerte sind temporrer Natur.
Whrend der letzte Punkt nur fr Entwickler von externen Bibliotheken von Interesse ist, sind die
ersten beiden Punkte von entscheidender Bedeutung fr den Skriptentwickler.
Seite 34
INPA
Benutzerdokumentation
V 2.5
Der Parameter wird der Funktion bergeben; diese kann bzw. darf den Wert in der Variablen
nicht verndern ( bergabe einer temporren Variable )
out: Die Funktion kann den Parameter beschreiben, aber nicht lesen. Importierten Funktionen knnen
- entgegen extern deklarierten Funktionen - den Inhalt der Variablen auch lesen; der Wert der
Variablen entspricht dem aktuellen Wert der Variablen. out: entspricht damit bei importierten
Funktionen eher dem Richtungsbezeichner inout:.
inout: Die Funktion kann den Parameter sowohl lesen als auch beschreiben.
<type:>
Art des Parameters:
byte:
int:
long:
real:
string:
8-Bit-integerwert
16-Bit-integerwert
32-Bit-integerwert
8-Byte-Fliekommawert
Nullterminierte Zeichenkette ( String)
Funktion
mit dem
ob der
folgende
Seite 35
INPA
Benutzerdokumentation
V 2.5
WICHTIG:
- Die Parameterliste MUSS mit der tatschlich von der importierten Funktion verarbeiteten
Parameterliste bereinstimmen ( ausgenommen returns:); INPA kann diese Liste nicht selbst
identifizieren, oder sich - nach Aufteten eines Fehlers - wieder erholen.
- INPA bricht - aufgrund des internen Aufbaus - das Script im Fehlerfall nicht sofort ab, sondern
arbeitet den aktuellen Object-Block noch vollstndig ab. Zur Vermeidung sich aufhufender
Fehlermeldung wird daher geraten, in einem Block nur eine importierte Funktion aufzurufen!
- Jeder Aufruf einer importierten Funktion erzeugt einen groen Overhead an Verwaltungsaufwand im
INPA, insbesondere bei 16-Bit-DLLs. Bei sehr hufigem Aufruf von importierten Funktionen kann
die Ablaufgeschwindigkeit des Skripts leiden!
5.3.3 Bildschirmanzeige
Die Bildschirmanzeigen werden ber SCREEN - Konstrukte beschrieben. Dabei stellt ein SCREEN
eine benannte Struktur dar, die ber einen "setscreen (s_name, FrequFlag)" - Aufruf aktiviert wird.
"s_name" steht fr den Namen des SCREENs, FrequFlag beeinflut die zyklische Bearbeitung
(FrequFlag=TRUE fr zyklische Bearbeitung des Screens, FrequFlag=FALSE fr einmalige
Bearbeitung).
SCREENs beschreiben virtuelle Bildschirme mit einer unbeschrnkten Anzahl von logischen Zeilen
(LINE). Logische Zeilen beinhalten die benutzerdefinierten Aktionen und knnen aus mehreren
Anzeigeelementen, und damit auch aus mehreren physikalischen Bildschirmzeilen, bestehen. Die
Koordinatenangaben bei den Anzeigefunktionen einer logischen Zeile erfolgen relativ zum Beginn der
jeweiligen logischen Zeile.
Zur Laufzeit kann der sichtbare Bereich auf dem virtuellen Bildschirm verschoben werden.
Seite 36
INPA
Benutzerdokumentation
V 2.5
Abbildung 4
SCREENs werden zyklisch abgearbeitet (wenn FrequFlag=TRUE bei der Aktivierung mit setscreen),
wobei Funktionen angegeben werden knnen, die zum SCREEN gehren, und die bei jedem
Durchlauf aufgerufen werden. Die zu den LINEs gehrigen Funktionen werden nur aufgerufen, wenn
die entsprechende LINE im sichtbaren Bereich liegt.
Bsp:
Jede logische Zeile besitzt einen eindeutigen Namen "LineSelectText" und wird durch das LINEStatement eingeleitet. Logische Zeilen knnen zur Laufzeit ber ihren Namen aus einem Selektions Men zur vergrerten Bildschirmdarstellung ausgewhlt werden.
Die API-Strings dienen zur Optimierung der Resultabfragen beim EDIABAS-Betrieb. Sie enthalten die
innerhalb der jeweiligen logischen Zeile verwendeten EDIABAS-Resultparameter. Die API-Strings aller
sichtbaren logischen Zeilen knnen in konkatenierter Form mit Hilfe der Bibliotheksfunktion
"getapistring(...)" abgefragt werden, um sie anschlieend bei der EDIABAS-Resultabfrage zu
bergeben, was eine zeitliche Optimierung bewirkt.
Eine logische Zeile kann einen CONTROL-Block zur Realisierung von Steuerfunktionen enthalten. Die
durch diesen CONTROL-Block geklammerten Anwenderfunktionen werden zur Laufzeit auf
Benutzeranforderung ausgefhrt, wenn die logische Zeile im sichtbaren Bildschirmbereich liegt. Eine
Anwendung fr einen CONTROL-Block ist z.B. das Ansteuern von Bauteilen mit anschlieender
Ausgabe des Ergebnisses.
Seite 37
INPA
Benutzerdokumentation
V 2.5
INPAapiCheckJobStatus("OKAY");
LINE ( "Teilenummer", "")
/* Name der Zeile fr vergrerte Darstellung zur Laufzeit */
{
text( 0, 1, "Teilenummer: ");
/* Ausgabe des Texts "Teilenummer" in phys. Zeile 0, Spalte 1*/
INPAapiResultText(t0,"ID_NR",1,"");
/* Abholen der Teilenummer von der Schnittstelle, Ablegen in t0 */
textout( t0, 0, 35);
/* Ausgabe der Teilenummer in phys. Zeile 0, Spalte 35 */
text( 2, 0, "");
/* Leerzeile */
}
LINE ( "Datum_KW", "")
/* Name der Zeile fr vergrerte Darstellung zur Laufzeit */
{
text( 0, 1, "Herstelldatum Woche: "); /* Textausgabe "Herstelldatum Woche:" in phys. Zeile 0, Spalte 1*/
INPAapiResultText(t1,"ID_DATUM_KW",1,"");/* Abholen von der Schnittstelle, Ablegen in t1 */
textout( t1, 0, 35);
/* Ausgabe von t1*/
text( 2, 0, "");
/* Leerzeile */
}
LINE ( "Datum_JAHR", "")
/* Name der Zeile fr vergrerte Darstellung zur Laufzeit */
{
text( 0, 1, "Herstelldatum Jahr: ");
/* Textausgabe "Herstelldatum Woche:" in phys. Zeile 0, Spalte 1*/
INPAapiResultText(t3,"ID_DATUM_JAHR",1,"");/* Abholen von der Schnittstelle, Ablegen in t3 */
textout( t3, 0, 35);
/* Ausgabe von t3*/
text( 2, 0, "");
/* Leerzeile */
}
}
5.3.4 Mensteuerung
Die Mens (MENU) beschreiben vom Benutzer definierte Aktionen, die bei Bettigung einer
Funktionstaste zur Laufzeit ausgefhrt werden sollen. In diese Aktionen knnen auch
Bibliotheksfunktionen eingebunden werden, wie z.B. das Wechseln von MENUs oder SCREENs.
Dadurch lassen sich Prfablufe als Baum- oder Netzstruktur beschreiben.
Zu einem Men knnen innerhalb einer Struktur INIT Funktionen angegeben werden, die einmalig
beim Aktivieren des Mens ausgefhrt werden sollen. Hier kann z.B. mit der Funktion "setmenutitle
("Titeltext")" eine berschrift zum Men angegeben werden.
In jedem Men knnen bis zu 20 Funktionstasten F1..F10 und <Shift>F1..F10 mit Hilfe der ITEM
Konstrukte belegt werden. Diese ITEM Konstrukte legen die Aktionen bei Bettigung der
Funktionstaste durch den Anwender fest. Die Nummer und Beschriftung der Funktionstaste wird mit
nr, bzw "Itemtext" angegeben, wobei die Nummern 1..10 sich auf die Tasten <F1>..<F10> und die
Nummern 11..20 auf die Tastenkombinationen <SHIFT><F1>...<SHIFT><F10> beziehen. Bei
Bettigen der <SHIFT>-Taste findet eine automatische Aktualisierung der Funktionsleiste statt.
Innerhalb eines ITEM-Konstrukts knnen beliebig viele Funktionsaufrufe enthalten sein.
Seite 38
INPA
Benutzerdokumentation
V 2.5
Beispiel:
MENU m_main () /* Hauptmenue */
{
INIT {
INPAapiInit();
setmenutitle( " Grundmenue");
}
ITEM( 2 , "Ident") {
setscreen( s_ident ,TRUE);
setmenu( m_ident );
}
ITEM( 5 , "Status") {
setscreen( s_status ,TRUE);
setmenu( m_status );
}
ITEM( 6 , "Steuern") {
setscreen( cs_steuern ,TRUE);
setmenu( m_steuern );
}
ITEM( 20 , "Ende") {
exit();
}
5.3.5 Statemachines
Statemachines dienen zur einfachen Formulierung von unterbrechbaren Hintergrundaktionen, die
pseudoparallel zu den SCREENs und zu den Funktionstasten betrieben werden. Bei den
Statemachines werden Blcke mit Anwendercode immer vollstndig ausgefhrt bevor ein Wechsel
zum parallel betriebenen Objekt (andere Statemachine, SCREEN oder Funktionstaste) stattfindet. Als
Block wird dabei entweder eine logische Zeile eines SCREENs, oder ein einzelner Zustand einer
Statemachine, oder der einer Funktionstaste zugeordnete Code betrachtet.
Beispielsweise wird der Code der Logischen Zeile 1 ausgefhrt, anschlieend der des Zustands 3,
danach der der logischen Zeile 4, dann wiederum der Code des Zustands 3, da noch kein
Zustandswechsel erfolgt ist, usw. Trifft dazwischen ein Funktionstastenereignis ein, so wird dessen
Code mit hchster Prioritt, also direkt nach Beendigung des gerade bearbeiteten Codeblocks,
ausgefhrt.
Zur Aktivierung bzw. zum Wechsel von Statemachines, zur Zustandsweiterschaltung sowie zum Aufruf
von "Sub-Statemachines" stehen Bibliotheksfunktionen zur Verfgung. Die Verwendung von "SubStatemachines" erlaubt eine logische Aufteilung von Aufgaben, die unterbrechbar sein mssen, in der
von Funktionen bekannten Art und Weise (Aufrufhierarchie). Hierbei kann aus einer Statemachine
durch Aufruf der Bibliotheksfunktion "callstatemachine" eine neue Statemachine als untergeordnete
Statemachine aktiviert werden. Die Aktionen dieser Statemachine sind im Gegensatz zu einer reinen
Funktion unterbrechbar, d.h. die Wechsel zur SCREEN-Bearbeitung und die Behandlung der
Tastaturereignisse findet statt. Ist die Aufgabe der "Sub-Statemachine" beendet, erfolgt durch den
Aufruf der Bibliotheksfunktion "returnstatemachine" die Rckkehr zu der Codestelle in der
bergeordneten Statemachine, von der aus der Substatemachine-Aufruf erfolgte.
Die Schachtelungstiefe der Statemachines ist nicht begrenzt.
Seite 39
INPA
Benutzerdokumentation
V 2.5
Jede Statemachine hat einen Initialisierungszustand ("INIT"), der immer vorhanden sein mu. Der hier
enthaltene Anwendercode wird nach Aktivierung der Statemachine ausgefhrt. Die Verzweigung in den
nchsten Zustand findet auch hier durch den Aufruf der Bibliotheksfunktion "Setstate" statt. Neben
diesem Initialisierungszustand kann eine unbegrenzte Anzahl von Zustnden in der Statemachine
enthalten sein. Jeder Zustand wird durch einen vom Anwender frei definierbaren Namen
gekennzeichnet, wobei zu beachten ist, da die Zustandsnamen innerhalb der Statemachine eindeutig
sein mssen. Jedem Zustand ist ein Block mit Anwendercode zugeordnet. Bei jeder zyklischen
Statemachine-Abarbeitung wird der Codeblock des gerade aktiven Zustandes ausgefhrt. Erfolgt in
dem Zustand keine Verzweigung, so wird bei der nchsten Abarbeitung derselbe Codeblock
ausgefhrt.
Seite 40
INPA
Benutzerdokumentation
V 2.5
Beispiel:
STATEMACHINE sm_motorlaufsignal_ein()
{
int try_repeat_counter;
int TRY_COUNTER_MAX;
string job_state;
string job_state;
bool motor_lauf;
INIT
{
try_repeat_counter = 0;
TRY_COUNTER_MAX = 3;
delete_screen();
print_line("GSA_TEST", 1,10);
print_line("Prfung Motorlaufsignal", 4, 10);
action_box_open("Bitte Motor einschalten");
delay(2000);
}
setstate(MOTORLAUFSIGNAL_TELEGRAMM_SENDEN);
MOTORLAUFSIGNAL_TELEGRAMM_SENDEN
{
if (try_repeat_counter < TRY_COUNTER_MAX)
{
INPAapiJob("GSA","STATUS_LESEN","","");
INPAapiResultText(job_state, "JOB_STATUS", 1, "");
INPAapiResultDigital(motor_lauf, "STAT_MOTOR_SIGNAL_EIN", 1);
try_repeat_counter = try_repeat_counter + 1;
setstate(AUSWERTEN_MOTORLAUFSIGNAL);
}
else
{
callstatemachine( sm_fehlerbehandlung);
...
}
AUSWERTEN_MOTORLAUFSIGNAL
{
...
}
5.3.6 Logiktabellen
Logiktabellen ermglichen die Formulierung von Boolschen Ausdrcken und damit die Umsetzung
von verknpften Eingangsbedingungen in verknpfte Ausgangswerte. Dies erfolgt mit Hilfe von
Binrkonstanten, die durch einen Prfix "0y" bezeichnet werden. Die Bits der Binrkonstanten
entsprechen der Reihenfolge der Logiktabellenparameter, und knnen folgende Werte annehmen:
Seite 41
INPA
Benutzerdokumentation
V 2.5
5.3.7 Kontrollstrukturen
Zur Formulierung der Prfablufe knnen die im folgenden aufgefhrten Kontrollstrukturen verwendet
werden.
- Zuweisung
= (IST GLEICH, ERGIBT SICH ZU)
Syntax siehe Anhang A: Sprachdefinition
Beispiel:
x1 = 5;
Seite 42
INPA
Benutzerdokumentation
V 2.5
- Vergleiche
< (KLEINER), <= (KLEINER ODER GLEICH), != (UNGLEICH), == (GLEICH), >= (GRSSER
ODER GLEICH), > (GRSSER)
Syntax siehe Anhang A: Sprachdefinition
Beispiel:
if (x1 == 5)
{
...
}
- Schleifen
WHILE (expression)
{
statements;
}
Syntax siehe Anhang A: Sprachdefinition
Beispiel:
while (x1 > x2)
{
x1 = x1 - x2;
}
- bedingte Ausfhrung
IF ( expression)
{
statements;
}
ELSE
{
statements;
}
Syntax siehe Anhang A: Sprachdefinition
Beispiel:
if (x1 > 0)
{
x2 = x1;
}
else
{
x2 = 0;
}
Seite 43
INPA
Benutzerdokumentation
V 2.5
Systemfunktionen
Konvertierungsfunktionen
Stringfunktionen
Stringarray-Funktionen
Eingabefunktionen
Ausgabefunktionen
Dateizugriffsfunktionen
Userboxfunktionen
Schnittstellenfunktionen zu Windows
Speichermanipulationsfunktionen
Fileviewer-Funktionen
EDIABAS-Funktionen
Schnittstellenfunktionen zum Protokoll-Etiketten-Manager
Schnittstellenfunktionen zum Daten-Tabellen-Manager (ab Version 5.0.0 nicht mehr
untersttzt)
RK512-Funktionen (ab Version 5.0.0 nicht mehr untersttzt)
WINELDI-Funktion (en) (ab Version 5.0.0 nicht mehr untersttzt)
Die einzelnen Funktionen der o.g. Gruppen werden nachfolgend kurz beschrieben. Die genaue
Funktionsdeklaration ist dem jeweiligen Prototyp in der Headerdatei inpa.h im Verzeichnis .\sgdat zu
entnehmen.
- INPA - Systemfunktionen
-setmenu (menu)
Aktivieren eines Mens (siehe auch 3.3.3 Mensteuerung)
-setscreen (screen, frequ)
Aktivieren eines Screen fr ein- (frequ = FALSE) oder mehrmaligen (frequ = TRUE)
Durchlauf (siehe auch 3.3.2 Bildschirmanzeigen)
-setmenutitle (menutitle)
Angabe des Men -Titels
-settitle (screentitle)
Angabe des Screen - Titels
-setstate (state)
in einer Statemachine Zustand einstellen
-setstatemachine (statemach)
Aufruf einer Statemachine
Seite 44
INPA
Benutzerdokumentation
V 2.5
-callstatemachine (statemach)
Aufruf einer Statemachine als Unterprogramm
-returnstatemachine ()
Rckkehr aus einer Statemachine als Unterprogramm
-settimer (timernum, time)
Timer mit Nummer timernum mit Zeit time in ms aufziehen
-testtimer (timernum, flag)
Timer mit Nummer timernum prfen, bei flag=TRUE ist Timer abgelaufen
-delay(ms)
INPA stoppt die Scriptabarbeitung fr ms - Millisekunden ( negative Werte
entsprechen ( 65536 - |x| ) ms
-getdate (date)
Holen des Systemdatums in den String '
date'
. Das Datum wird im Format dd.mm.yyyy
abgelegt
-gettime (time)
Holen der Systemuhrzeit in den String '
time'
. Die Uhrzeit wird im Format hh:mm:ss
abgelegt.
-setjobstatus ( jobstat)
setzt den Job Status fr WINELDI
-exit()
-exitwindows()
Verlassen von windows
-scriptselect( ScriptIniName)
Aufruf der Scriptauswahl unter Verwendung der angegebenen Scriptauswahldatei
-scriptchange( ScriptFileName)
Beenden des aktuellen Skripts und starten des Skripts '
SkriptFileName'
. Die
Skriptnamen knnen sowohl mit absoluten oder relativen Pfadnamen versehen
werden; die Endungen *.IPO bzw. *.IPS werden automatisch angefgt. Die aktuelle
Kodeliste wird noch vollstndig abgearbeitet, bevor das angegebene Skript gestartet
wird.
Seite 45
INPA
Benutzerdokumentation
V 2.5
-select(MultSelectFlag)
Auswahl von logischen Zeilen; mit MultSelectFlag=FALSE lt sich nur eine Zeile
auswhlen, mit MultSelectFlag=TRUE lassen sich mehrere Zeilen auswhlen.
Auswahlkombinationen lassen sich unter einem logischen Namen (Set) speichern.
Hierzu wird nach Zusammenstellung der Auswahl der Setname im Editfeld der
Dialogbox eingetragen und anschlieend der Button "Speichern" bettigt. Daraufhin
erscheint derSetname in der darunterbefindlichen Set-Liste. Die Auswahl
gespeicherter Sets erfolgt durch Positionierung des Cursors auf den gewnschten
Setnamen in der Set-Liste und Bettigen der Return-Taste. Bei der Positionierung des
Cursors wird die Auswahlanzeige so aktualisiert, da die zum angewhlten Set
gehrige Auswahl direkt angezeigt wird. Die Speicherung der Sets erfolgt Screen- und
Script-bezogen in einem INI-File mit dem Basename des Scripts und der Extension
"INI" im SGDAT-Verzeichnis.
-setitem(nr, text, enable)
Wechseln des Mennamens zur Laufzeit. Der Text in der Auswahlleiste unter dem
Menpunkt '
nr'wird in '
text'gewechselt. '
Enable'gibt an, ob der Menpunkt anwhlbar
ist, oder grau dargestellt wird.
-setitemrepeat(nr, enable)
Normalerweise wird eine Menfunktion einmal ausfhrt, wenn die entsprechende FTaste gedrckt wird (bzw. genaugenommen, wenn sie wieder losgelassen wird). Wird
fr den Menpunkt '
nr'mit dieser Funktion das Repeatflag auf TRUE gesetzt, so wird
die entsprechende Funktion immer wieder aufgerufen, solange die F-Taste gedrckt
ist. Beim Setzen einens neuen Mens wird das Repeatflag wird auf den Default
FALSE gestellt.
-deselect()
Rckkehr von der vergrerten Darstellung zur Gesamtdarstellung
- control()
Aktivieren der Steuerfunktionen des aktiven Bildschirms
- start()
- stop()
Seite 46
INPA
Benutzerdokumentation
V 2.5
Seite 47
INPA
Benutzerdokumentation
V 2.5
- bytetoint ( c, i )
wandelt einen 8-Bit-Integer in einen 16-Bit-Integer um
- inttolong ( i, l )
wandelt einen 16-Bit-Integer in einen 32-Bit-Integer um
- longtoreal ( l, r )
wandelt einen 32-Bit-Integer in einen Fliekommawert um
- hexconvert( HexString, high, mid, low, seg);
zerlegt Hex String in Integer Werte
Es gilt fr alle Konvertierungsfunktionen:
Max-Integer
=
Min-integer
=
Max-Real
=
Min-Real
=
|Kleinster Wert| =
+32767;
-32768;
3.4E +38
-3.4E +38
3.4E-38
- Stringfunktionen
- strcat( DestStr, SrcStr1, SrcStr2);
Konkatenation von SrcStr1 und SrcStr2; das Ergebnis wird in DestStr abgelegt
- strlen( length, SrcStr);
liefert die Anzahl der Zeichen des bergebenen Strings SrcStr
- midstr( DestStr, SrcStr, Index, Count);
ab Position Index des Eingabestrings SrcStr wird die Anzahl Count von Characters im
Zielstring DestStr abgelegt.
- Dynamische Stringarrays:
- StrArrayCreate(out: bool rc, out: int hStrArray)
Erzeugen eines neuen leeren Stringarrays und Rckgabe der Handle dazu
- StrArrayDestroy( in: int hStrArray)
Freigeben des Stringarrays mit dem bergebenen Handle. Das Stringarray ist nach
dem Funktionsaufruf nicht mehr vorhanden.
- StrArrayWrite( in: int hStrArray, in: int index, in: string str)
Eintragen des bergebenen Strings in das Stringarray mit dem bergebenen Handle
unter dem angegebenen Index. Das Array wird in der Gre dem Index entsprechend
dynamisch verndert.
Seite 48
INPA
Benutzerdokumentation
V 2.5
- StrArrayRead( in: int hStrArray, in: int index, out: string str)
Auslesen des Strings mit dem bergebenen Index aus dem Stringarray mit dem
bergebenen Handle. Bei Auslesen von nicht vorhandenen Elementen erfolgt eine
Fehlermeldung auf dem Bildschirm.
Anmerkung: Bei Lesen in Programmschleifen ist die aktuelle Gre des Arrays vor
dem Lesevorgang vom Anwender mit der Funktion StrArrayGetElementCount(...) zu
ermitteln.
- StrArrayGetElementCount( in: int hStrArray, out: int ElementCount)
Rckgabe der Anzahl der im Stringarray mit dem bergebenen Handle enthaltenen
Elemente
- StrArrayDelete( in: int hStrArray)
Lschen des Stringarrays mit dem bergebenen Handle. Das Stringarray ist nach dem
Funktionsaufruf noch vorhanden, alle enthaltenen Elemente wurden gelscht und der
dadurch belegte Speicher freigegeben.
- Eingabefunktionen
Allgemeines: Alle Funktionen zur Eingabe von Zahlenwerten bieten den Inhalt der jeweiligen
Ausgangsvariable als Defaultwert an, sofern dieser innerhalb der angegebenen Grenzwerte liegt. Liegt
er auerhalb der Grenzwerte, so wird kein Defaultwert angezeigt. Die Rckgabe der HEX-Werte erfolgt
als String mit vorangestelltem "0x".
- getinputstate( InputState)
Rckgabe des intern gespeicherten Eingabestatus, der Aufschlu ber die Art der
Beendigung von Eingabefunktionen gibt. Der Eingabestatus kann folgende Werte
annehmen:
0 - Eingabe wurde mit OK beendet
1 - Eingabe wurde mit Abbruch beendet
2 - es wurde bisher noch keine Eingabefunktion aufgerufen
- inputtext( Variable, Titel, Text)
Eingabe eines Textes in einer Dialogbox mit angegebem Titel und Hinweistext in die
angegebene Textvariable
- inputnum( Variable, Titel, Text, MinWert, MaxWert)
Eingabe einer numerischen Gre in einer Dialogbox mit angegebenem Titel und
Hinweistext in die angegebene numerische Variable. Plausibilittsprfung der Eingabe
(Bereich zwischen MinWert .. MaxWert).
- inputint( Variable, Titel, Text, MinWert, MaxWert)
Eingabe einer dezimalen integer-Gre in einer Dialogbox mit angegebenem Titel und
Hinweistext in die angegebene Textvariable. Plausibilittsprfung der Eingabe (Bereich
zwischen MinWert .. MaxWert).
Seite 49
INPA
Benutzerdokumentation
V 2.5
Seite 50
INPA
Benutzerdokumentation
V 2.5
Seite 51
INPA
Benutzerdokumentation
V 2.5
Seite 52
INPA
Benutzerdokumentation
V 2.5
Seite 53
INPA
Benutzerdokumentation
V 2.5
Seite 54
INPA
Benutzerdokumentation
V 2.5
Seite 55
INPA
Benutzerdokumentation
V 2.5
PostInfoFile -
Seite 56
INPA
Benutzerdokumentation
V 2.5
apiResultSets Aufruf; die Anzahl der Ergebnisstze wird in ErgVar zur Verfgung
gestellt; result gibt an, ob der Aufruf erfolgreich durchgefhrt werden konnte
- INP1apiResultReal( result, Wert der Variablen, abzufragendes Ergebnis, Ergebnissatz)
apiResultInt-Aufruf und Ablage des Ergebnisses in der angegebenen Variablen; result
gibt an, ob der Aufruf erfolgreich durchgefhrt werden konnte
- INP1apiResultBinary(result, Ergebnisstring, Ergebnissatz)
apiResultBinary Aufruf mit Ergebnisstring und Ergebnissatz; die vom EDIABAS
angelieferten Daten werden in einem Binrdatenpuffer abgelegt, der ber die Funktion
hexdump (...) ausgegeben werden kann; result gibt an, ob der Aufruf erfolgreich
durchgefhrt werden konnte
- INP1apiErrorCode(Errorcode)
Ermittlung des aktuellen api-Fehlercodes
- INP1apiErrorText(Errortext)
Ermittlung des aktuellen api-Fehlertextes
- GetBinaryDataString( DataString, DataStringLen);
Rckgabe des Pufferinhalts von EDIABAS-Binrdaten als Hexadezimal-String. Der
String enthlt fr jedes Datenbyte zwei Zeichen. Zurckgegeben werden der String
und dessen Lnge.
- PEM - Aufrufe
- PEMInitialisiere ( Result, WinEldiVersion, Pruefstand, RechnerNr);
Initialisieren des PEM mit Setup Daten
- PEMProtokollKopf ( Result, Jobtabelle, JAT_Version, Datum, Zeit, FzgTyp, FgNr);
Protokollkopf auf temp. Datei
- PEMProtokollZeile ( Result, Zeile);
einzeiliges Leerformular auf temp. Datei
- PEMSGZ_Kopfzeile( Result, SGVar, LogUnit, ZeilenSG);
berschrift einer JAT Zeileauf temp. Datei
- PEMTrennLinie( Result);
Formular Trennlinie auf temp. Datei
- PEMEndLinie( Result);
Formular Endlinie auf temp. Datei
- PEMLoescheTabZeilenPuffer( Result);
wenn JAT Zeile i.O. temp. JAT Zeilen Datei lschen
- PEMUebertrageTabZeilenPuffer( Result);
wenn JAT Zeile n.i.O. temp. JAT Zeilen Datei an temp. Datei anfgen
- PEMProtokollAusgabe( Result);
temp Prot. Datei auf Prot Drucker
Seite 57
INPA
Benutzerdokumentation
V 2.5
Seite 58
INPA
Benutzerdokumentation
V 2.5
- DTMLoescheAuftrag ();
Lscht einen Auftrag aus der Tabelle
- DTMVariableEintragen (in: string VarName, in: string VarWert);
Trgt eine Variable in die Tabelle ein
- DTMVariableLoeschen (out: bool rc, in: string VarName);
Lscht eine Variable aus der Tabelle und gibt das Ergebnis zurck
- DTMLoescheAlleVariablen ();
Lscht alle Variablen aus der Tabelle
- DTMSetupVariableEintragen (in: string VarName, in: string VarWert);
Trgt eine Variable in die Tabelle ein
- DTMSetupVariableLoeschen (out: bool rc, in: string VarName);
Lscht eine Variable aus der Tabelle und gibt das Ergebnis zurck
Seite 59
INPA
Benutzerdokumentation
V 2.5
Seite 60
INPA
Benutzerdokumentation
V 2.5
6 Softwarestruktur
Die Software des Interpreters fr Prfablufe ist in mehreren Schichten realisiert. Als oberste Schicht
fungiert die Windows-Benutzerschnittstelle. Sie stellt das Hauptfenster und einige Childfenster fr
INPA bereit und verteilt die eingehenden Windows-Messages (Mouseereignisse, Tastaturereignisse,
...) an die darunterliegenden Softwareschichten. Auerdem wird ber diese Schicht der Startup des
Systems, die globale Ablaufsteuerung whrend der Laufzeit und das ordnungsgeme Beenden des
Programmes gesteuert.
Die Abarbeitung von Prfablaufbeschreibungsdateien zur Laufzeit erfolgt gem dem folgenden
Schema:
(1) Start des Systems mit bersetzen und Interpretieren eines Startup-Scripts; die zur Auswahl
stehenden Prfablaufbeschreibungsdateien werden im Startup- Script konfiguriert
(2) Auswahl einer zu interpretierenden Prfablaufbeschreibungsdatei
(3) bersetzen und Interpretieren der ausgewhlten Datei
(4) Beenden des Prfablaufs und Rckkehr zum Startup-Script
(5) mit (2) neuen Prfablauf starten oder System benden
INPALocalizationSupportDLLs
Seite 61
INPA
Benutzerdokumentation
V 2.5
6.1 Parser
Der Parser fhrt die syntaktische und semantische Sprachanalyse der zu bersetzenden INPA-Datei
gem der INPA-Sprachdefinition durch. Die lexikalische Analyse der Scriptdatei mit Tokenisierung
und Ausblendung der Kommentare wird hierbei mit Hilfe des Scanners vorgenommen. Whrend des
bersetzungsvorganges erzeugt der Parser entsprechende Symbole mit Hilfe der
Symboltabellenverwaltung. Sie stellt dem Parser Funktionen zum Erzeugen, Lschen, Suchen,...
globaler und lokaler Symbole zur Verfgung und fhrt die eigentliche Symbol-Datenhaltung (Symbole
einschlielich symbolspezifischer Information) durch. Die Symbole werden nach Beendigung des
bersetzungsvorgangs nicht mehr bentigt und daher wieder gelscht.
INPA erzeugt keinen ausschlielich linearen Programmcode sondern arbeitet objektorientiert. Es gibt
folgende INPA-Objekttypen:
SCREEN
MENU
STATEMACHINE
LOGTABLE
Die Datenstruktur der Objekte ist problemorientiert und deckt sich mit der in der Sprachdefinition
beschriebenen Form der SCREEN-, MENU-, STATEMACHINE- und LOGTABLE-Konstrukte. Neben
den reinen Daten enthalten die Objekte Verwaltungsfunktionen und Methoden, d.h. Funktionen, die
sich an den speziellen Anforderungen an die Objekte orientieren (z.B. vergrerte
Bildschirmdarstellung und Scrolling bei SCREEN-Objekten). Die INPA-Objekte sind in Form von C++Klassen realisiert.
Die Objekte werden whrend des bersetzungsvorgangs vom Parser mit Hilfe der Objektverwaltung
dynamisch erzeugt (z.B. fr jedes MENU des Anwenders ein MENU-Objekt). Der objektbezogene
Code des Anwenders (z.B. Aktionen pro Funktionstaste) wird als linearer Programmcode (Codeliste) in
den Objekten abgelegt (z.B. eine Codeliste pro belegte Funktionstaste). Hierbei wird weitgehend vom
Prinzip des "information hiding" Gebrauch gemacht (Bsp: die Objektverwaltung kennt nicht den Aufbau
der Codelisten).
Der Code der Anwenderfunktionen wird in je einer Codeliste gespeichert, die vom Objektverwalter
direkt verwaltet wird.
Der Code der in den Objekten abgelegten Codelisten wird whrend des bersetzungsvorganges vom
Codegenerator dynamisch erzeugt. Der Codegenerator stellt dem Parser hierzu Funktionen zum
Erzeugen neuer,leerer Codelisten, zur Erzeugung von Code und zum Zugriff auf Codelisten zur
Verfgung.
Beim erzeugten Code handelt es sich um Code fr eine einfache Stackmaschine.
Seite 62
INPA
Benutzerdokumentation
V 2.5
Die zur Laufzeit bentigten Daten werden vom Parser whrend des bersetzungsvorganges mit Hilfe
der Datenverwaltung erzeugt
6.2 Datenverwaltung
Die Datenverwaltung fhrt die Datenhaltung aller globalen, konstanten und lokalen Daten durch. Die
lokalen Daten werden fr jeden Objekttyp getrennt verwaltet, damit ein Umschalten im Ablauf zwischen
den Objekttypen whrend der Laufzeit gewhrleistet ist (Bsp: Tastendruck whrend SCREENAbarbeitung).
Die Datenverwaltung stellt nach auen einige Schnittstellenfunktionen zum Datenzugriff zur Verfgung:
Funktionen zum Erzeugen und Lschen globaler, konstanter und lokaler Daten
Elementare Datenoperationen whrend der Laufzeit (PUSH, POP, ...)
Zugriffsfunktionen zu Funktionsparametern fr Bibliotheksfunktionen
6.3 Objektverwaltung
Die Objektverwaltung fhrt die Datenhaltung der dynamisch erzeugten INPA-Objekte (s.o.) sowie die
Ablaufsteuerung und Koordination der Objektaktionen whrend der Laufzeit durch. Hierzu stellt sie
nach auen Funktionen mit folgenden Aufgaben zur Verfgung:
1.
2.
3.
4.
5.
6.
(2.)
werden
whrend
der
Der Scheduler der Objektverwaltung wird zur Laufzeit stndig getriggert und sorgt fr die Koordination
der aktiven INPA-Objekte und der Interpretation ihrer Codelisten. Er hat folgende Aufgaben:
6.4 Interpreter
Die von INPA verwendeten Codelisten enthalten Programmcode fr eine einfache Stackmaschine mit
Mglichkeiten der Datenmanipulation (PUSH, POP, ALU-Operationen,...) und Programmverzweigung
(JUMP, JUMPNZ, CALL, ...). Der Interpreter realisiert diese Maschine und ist fr die sequentielle
Interpretation der bergebenen Codelisten zustndig. Bei der Ausfhrung des zu interpretierenden
Codes greift er bei Stack-Datenmanipulationen (PUSH,POP,...) auf Funktionen der Datenverwaltung
Seite 63
INPA
Benutzerdokumentation
V 2.5
6.6 INPA-Localization-Support-DLLs
Die Untersttzung der Mehrsprachlichkeit erfolgt ber Stringtables, welche in je eine INPALocalization-Support-DLL pro Landessprache eingebunden sind. Die Auswahl der Landessprache
erfolgt ber einen Eintrag in der Konfigurationsdatei (s.o.). Nach dem Programmstart wird dieser
Eintrag ausgewertet und die dazugehrige DLL dynamisch geladen. Alle von der Landessprache
abhngigen Texte werden ber Zugriffsfunktionen aus der DLL geladen und temporr gepuffert.
INPA V5.0.x untersttzt deutsche und englische Landessprache.
Seite 64
INPA
Benutzerdokumentation
V 2.5
7 Anhang A Sprachdefinition
program:
{ pragma }
| { include }
| { ext_func_declaration }
| { ext_libcall_decl }
| { g-data-definition }
| { definition }
pragma:
"#pragma" identifier
include:
"#include" string_constant
ext_func_declaration:
"extern" func_dec ";"
ext_libcall_decl:
"import" "pascal" ext_libcall_heading ";"
"import" "\"C\"" ext_libcall_heading ";"
"import" ext_libcall_heading ";"
"import32" "pascal" ext_libcall_heading ";"
"import32" "\"C\"" ext_libcall_heading ";"
"import32" ext_libcall_heading ";"
ext_libcall_heading:
ext_lib_spec func_dec
ext_lib_spec:
"lib" string-constant
definition:
{function-definition}
| { menu-definition }
| { screen-definition }
| { logictable-definition }
| { statemachine-definition }
g-data-definition:
type-specifier init-dec-list ";"
function-definition:
func-dec
func-block
menu-definition:
menu-dec
menu-block
screen-definition:
screen-dec
Seite 65
INPA
Benutzerdokumentation
V 2.5
screen-block
logictable-definition:
logictable-dec
logictable-block
statemachine-definition:
statemachine-dec
statemachine-block
type-specifier:
"byte"
| "int"
| "long"
| "real"
| "bool"
| "string"
object_type_specifier:
"MENU"
| "SCREEN"
| "STATEMACHINE"
| "STATE"
param-dir-specifier:
"in"
| "out"
| "inout"
| "returns"
| "structure"
func-dec:
identifier "(" [func-param-list] ")"
func-param-list:
func-param-equal-type { "," func-param-equal-type }
func-param-equal-type:
param-dir-specifier ":" type-specifier identifier
| param-dir-specifier ":" object_type-specifier identifier
func-block:
"{"
{ l-data-definition}
{ statement }
"}"
l-data-definition:
type-specifier init-dec-list ";"
menu-dec:
"MENU" identifier "(" ")"
Seite 66
INPA
Benutzerdokumentation
V 2.5
menu-block:
"{"
{ l-data-definition }
"INIT" "{" {statement} "}"
{ menu-item-block }
"}"
menu-item-block:
"ITEM" "(" decimal-constant "," string-constant ")" "{" {statement} "}"
screen-dec:
"SCREEN" identifier "(" ")"
screen-block:
"{"
{ l-data-definition }
{ statement }
{ screen-line-block }
"}"
screen-line-block:
"LINE" "(" string-constant , string-constant ")"
"{" {statement}
[ control-line-block ]
"}"
control-line-block:
"CONTROL" "{" {statement} "}"
logictable-dec:
"LOGTABLE" identifier "(" logictable-out-par-list "," logictable-in-par-list ")"
logictable-out-par-list:
"out" ":" "bool" identifier { " " identifier }
logictable-in-par-list:
"in" ":" "bool" identifier { " " identifier }
logictable-block:
"{"
{ logictable-line }
[ logictable-other ]
"}"
logictable-line:
binary_constant ":" binary_mask ";"
logictable-other:
binary_constant ":" "OTHER" ";"
statemachine-dec:
"STATEMACHINE" identifier "(" ")"
Seite 67
INPA
Benutzerdokumentation
V 2.5
statemachine-block:
"{"
{ l-data-definition }
"INIT" "{"
{ statement } "}"
{ statemachine-state-block }
"}"
statemachine-state-block:
identifier "{" {statement} "}"
initializer:
binary
init_dec_list:
init_dec_list_line { "," init_dec_list_line }
init-dec-list_line:
identifier
| identifier "=" initializer
statement:
binary ";"
| assignment ";"
| func_call ";"
| ";"
| if-construct
| while-construct
func_call:
identifier "(" [argument_list] ")"
assignment:
identifier "=" binary
Seite 68
INPA
Benutzerdokumentation
V 2.5
binary:
identifier
| constant
| "(" binary ")"
| "!" binary
| "-" binary
| binary "+" binary
| binary "-" binary
| binary "*" binary
| binary "/" binary
| binary ">" binary
| binary "<" binary
| binary ">=" binary
| binary "<=" binary
| binary "==" binary
| binary "!=" binary
| binary "||" binary
| binary "&&" binary
| binary "^^" binary
| binary "|" binary
| binary "&" binary
| binary "^" binary
argument-list:
binary { "," binary }
statement_statements:
statement
| "{" { statement } "}"
while-construct:
"while" "(" binary ")" statement_statements
if-construct:
"if" "(" binary ")" statement_statements [ "else" statement_statements ]
constant:
int-constant
| real-constant
| bool-constant
| string-constant
int-constant:
decimal-constant
| hexadecimal-constant
real-constant:
( (decimal-constant [ "." decimal-constant] ) | ( "." decimal-constant) )
[exponent-constant]
exponent-constant:
("e" | "E") ["+" | "-"] decimal-constant
bool-constant:
Seite 69
INPA
Benutzerdokumentation
V 2.5
"FALSE"
| "TRUE"
string-constant:
""" {char-lit} """
decimal-constant:
decimal-digit { decimal digit}
binary_prefix:
"0y"
| "0Y"
binary_constant:
binary_prefix binary
_digit { binary_digit }
binary_mask:
binary_prefix binary_mask_digit { binary_mask_digit }
binary_mask_digit:
binary_digit
| "x"
| "X"
binary-digit:
"0"
| "1"
decimal-digit:
"0"
| "1"
...
| "9"
hexadecimal_prefix:
"0x"
| "0X"
hexadecimal-constant:
hexadecimal_prefix hexadecimal-digit { hexadecimal digit}
hexadecimal-digit:
"0"
| "1"
...
| "9"
| "a"
...
| "f"
| "A"
...
| "F"
Seite 70
INPA
Benutzerdokumentation
V 2.5
char-lit:
printing-char
| "\b"
| "\n"
| "\r"
| "\t"
| "\f"
| "\\"
| "\""
| "\'
"
identifier:
(letter | underscore) { letter | decimal-digit | underscore }
letter:
upper-case | lower-case
upper-case:
"A"
| "B"
...
| "Z"
lower-case:
"a"
| "b"
...
| "z"
underscore:
"_"
printing-char:
""
| "!"
...
| "~"
(ASCII-CharSet)
comment:
"/*" { printing-char } "*/"
| "//" { printing-char } "\n"
Seite 71
INPA
Benutzerdokumentation
V 2.5
Seite 72
INPA
Benutzerdokumentation
V 2.5
MENU m_main ()
{
INIT {
INPAapiInit();
setmenutitle( " Grundmenue");
}
ITEM( 1 , "Info") {
infobox("Information","Nacharbeitsprogramm f r SPM redesign, Version 1.1. Bei R ckfragen bitte
melden bei Teepe, TP-420, Tel. FIZ-45572");
}
ITEM( 2 , "Ident") {
setscreen( s_ident ,TRUE);
setmenu( m_ident );
}
ITEM( 4 , "Fehler") {
setscreen( s_fehler ,TRUE);
setmenu( m_fehler );
}
ITEM( 5 , "Status") {
setscreen( s_status ,TRUE);
setmenu( m_status );
}
ITEM( 10 , "Ende") {
INPAapiJob("sm_rd","diagnose_ende","","");
INPAapiCheckJobStatus("OKAY");
exit();
}
}
Seite 73
INPA
Benutzerdokumentation
V 2.5
// *****************************************************
// *** IDENT - Steuergeraeteidentifikation
// *****************************************************
SCREEN s_ident ()
{
text( 1, 0, "Identifikation");
text( 3, 0, "");
INPAapiJob("sm_rd","ident","","");
INPAapiCheckJobStatus("OKAY");
LINE ( "BMW_Teilenummer", "")
{
text( 0, 1, "BMW-Teilenummer: ");
INPAapiResultText(t0,"ID_BMW_NR",1,"");
textout( t0, 0, 35);
text( 1, 0, "");
}
LINE ( "BMW_Hardwarenummer", "")
{
text( 0, 1, "BMW-Hardwarenummer: ");
INPAapiResultText(t8,"ID_HW_NR",1,"");
textout( t8, 0, 35);
text( 1, 0, "");
}
LINE ( "Softwarenummer", "")
{
text( 0, 1, "Softwarenummer: ");
INPAapiResultText(t1,"ID_SW_NR",1,"");
textout( t1, 0, 35);
text( 1, 0,"");
}
LINE ( "Lieferant", "")
{
text( 0, 1, "Lieferanten-Nummer: ");
INPAapiResultText(t2,"ID_LIEF_NR",1,"");
textout( t2, 0, 35);
text( 1, 0,"" );
}
LINE ( "Codier_Index", "")
{
text( 0, 1, "Codier-Index: ");
INPAapiResultText(t3,"ID_COD_INDEX",1,"");
textout( t3, 0, 35);
text( 1, 0,"");
}
Seite 74
INPA
Benutzerdokumentation
V 2.5
MENU m_ident ()
{
INIT {
setmenutitle( " /Ident");
}
ITEM( 10 , "Zur ck") {
setscreen( s_main ,TRUE);
setmenu( m_main );
}
}
Seite 75
INPA
Benutzerdokumentation
// *****************************************************
// *** Fehlerspeicher lesen
// *****************************************************
MENU m_fehler ()
{
INIT {
userboxopen(0,10,20,6,50,"Fehlerspeicher Lesen", "Der Fehlerspeicher wird gelesen !
bitte warten");
INPAapiFsLesen("sm_rd","na_fs.tmp");
userboxclose(0);
viewopen("na_fs.tmp","Fehlerspeicher Lesen");
setmenutitle( " /Fehler/Fehlerspeicher lesen");
}
ITEM( 10 , "Zur ck") {
viewclose();
setscreen( s_fehler ,TRUE);
setmenu( m_fehler );
}
}
V 2.5
...
SCREEN s_fehler ()
{
LINE ( "", "")
{
}
}
// *****************************************************
// *** Status lesen
// *****************************************************
SCREEN s_status ()
{
LINE ( "Textmeldung", "")
{
text( 5, 10, "Anzeige der gewhlten Stati");
text( 8, 10, "Taste <F4>: Analoge Stati (Potentiometerwerte)");
}
}
Seite 76
INPA
Benutzerdokumentation
V 2.5
MENU m_status ()
{
INIT {
setmenutitle( " /Status");
}
ITEM( 4 , "Analog") {
setscreen( s_status_analog ,TRUE);
setmenu( m_status_analog );
}
ITEM( 10 , "Zur ck") {
blankscreen();
setscreen( s_main ,TRUE);
setmenu( m_main );
}
}
// **************************************
// analoge Stati
// **************************************
SCREEN s_status_analog ()
{
INPAapiInit();
text( 1, 0, "Analog-Status auslesen");
text( 2, 0, "Ausgabe der Potentiometer-Spannungen");
INPAapiJob("sm_rd","status_analog_lesen","","");
INPAapiCheckJobStatus("OKAY");
LINE ( "Kopfstuetze", "")
{
text( 0, 1, "Kopfstuetze [Volt]: ");
INPAapiResultAnalog(real0,"STAT_KOPFSTUETZE_WERT",1);
analogout( real0, 1, 30, 0.0,5.0,0.0,5.0, "");
}
LINE ( "Sitzhoehe", "")
{
text( 0, 1, "Sitzhoehe [Volt]: ");
INPAapiResultAnalog(real1,"STAT_SITZHOEHE_WERT",1);
analogout( real1, 1, 30, 0.0, 5.0, 0.0, 5.0, "");
}
LINE ( "Lehne", "")
{
text( 0, 1, "Lehne [Volt]: ");
INPAapiResultAnalog(real2,"STAT_LEHNE_WERT",1);
analogout( real2, 1, 30, 0.0, 5.0, 0.0, 5.0, "");
}
Seite 77
INPA
Benutzerdokumentation
V 2.5
Seite 78
INPA
Benutzerdokumentation
V 2.5
MENU m_status_analog ()
{
INIT {
setmenutitle( " /Status/Analog");
}
ITEM( 2 , "Start") {
start();
}
ITEM( 3 , "Stop") {
stop();
}
ITEM( 4 , "Auswahl") {
select(TRUE);
}
ITEM( 5 , "Gesamt") {
deselect();
}
ITEM( 10 , "Zur ck") {
blankscreen();
setscreen( s_status ,TRUE);
setmenu( m_status );
}
}
inpainit()
{
INPAapiInit();
settitle( " SPM - redesign ");
setmenu(m_main);
setscreen(s_main,TRUE);
}
inpaexit()
{
INPAapiEnd();
}
Seite 79