==== Hilfsprogramm p2fVDA =====
==== Anforderung ====
Im Zusammenhang mit der Erstellung von Etiketten mit RFID-Transpondern für die Automobilindustrie und ihre Zulieferer stellt sich das Problem, die Nutzdaten in eine Form zu konvertieren, die auf den Chip des Transponders geschrieben werden kann. Dazu hat der VDA (Verband der Automobilindustrie) diverse Dokumente in Form unverbindlicher Empfehlungen veröffentlicht, die der Industrie die Standardisierung passiver RFID-Transponder ermöglichen soll.
Die Industrieempfehlungen VDA 5501, 5509, 5510 und VDA 5520 beschreiben technische Anforderungen an RFID-Transponder und die Gestaltung von Datenstrukturen. Die VDA 5500 fasst Gemeinsamkeiten und damit grundsätzliche Anforderungen zusammen und fungiert damit als übergeordneter, allgemeiner Leitfaden. Die Kenntnis dieser Dokumente wird im folgenden unterstellt.
Die Datenstrukturen für das Beschreiben des RFID-Transponder sind in diversen ISO/IEC Normen festgelegt,
und umfassen neben einigen binär kodierten Informationen auch auch eine 6-Bit Kodierung (%%ISO%% 17363-17367) der eigentlichen Nutzdaten. Das sind Konvertierungsaufgaben, die sich mit den Standardwerkzeugen von (p2f) nicht oder nur extrem aufwändig realisieren lassen.
\\
\\
==== Realisierung ====
Für Fälle, in denen das normale Leistungsspektrum von (p2f) nicht ausreicht, gibt es bei der Definition von Formularen ein **System-Anfragefeld**. Mit Hilfe dieses Feldes kann während der Erzeugung eines Formulars ein beliebiges externes Programm aufgerufen werden, das dann die verlangte Aufgabe übernimmt. Dabei können auch Parameter an das Programm übergeben werden, die die zu lösende Anforderung definieren.
Für die Anforderungen des VDA wurde das Programm **[[https://download.spe-systemhaus.de/p2fVDA.exe|p2fVDA]]** geschrieben. Das Programm wurde als sogenannte Systemfeldapplikation geschrieben, die nur innerhalb eines (p2f)-Formulars in einen System-Anfragefeld verwendet werden kann.
Das Programm übernimmt dabei die folgenden Aufgaben:
* Unterstützt passive UHF-Transponder nach %%ISO%%/IEC 18000-63/EPC Class1 Gen2
* Formatiert Daten für MB01 und MB11
* Ergänzt %%EOT%%-Zeichen wenn es fehlt
* Erzeugt notwendige Anzahl von Padding-Zeichen
* Berechnet und erzeugt Längeninformationen
* Baut die Applikation Family Identifier ein (bei MB01)
* Konvertiert Ergebnis der Konvertierungsaufgaben in Form von
* Sequenz von Hexadezimalziffern (Eitkettendrucker)
* Sequenz von (p2f) Hexadezimalzahlen (Tinten- und Laserdrucker)
Ein Aufruf der Systemfeldapplikation ohne Parameter über die Kommandozeile (DOS-Box, Eingabeaufforderung, Konsole) zeigt eine kurze Beschreibung, die möglichen Parameter und ein paar beispielhafte Aufrufe an. Auch die Rückkehrwerte des Programms sind aufgelistet:
\\
\\
p2fVDA V1.3 (c) 2019 by SPE Systemhaus GmbH
Description:
Generates an encoded character string in
hexadecimal representation according to VDA
document 5500. For use in a system request
field of print2forms only.
Mandatory program parameters are:
-k license key
-s String to encode. If it contains spaces
complete parameter must be enclosed by
double quotes.
Optional program parameters are:
-a Application identifier according to
ISO 15961/2 and ISO 17363-17367:
= 0: MB11 is encoded (default),
> 0: MB01 is encoded
-u User data follows (in encoding MB01)
General return codes:
0 - Success
-1 - Failed
-2 - No permission to run
-3 - String longer than 1024 characters
-4 - Unknown program option
-5 - Program option must start with a minus
-6 - Illegal value for application identifier
-7 - No string found to encode
-8 - No application identifier found
-9 - Illegal character in string found
n - Windows error code
Usage in system request field:
p2fVDA -a90 -s4IW0L0XAP68F4050901+GGAB1234 -k\k
MB01 is encoded, vehicle
p2fVDA -aA2 -s1JUN499774731123456789 -k\k
MB01 is encoded, transport unit
p2fVDA -aA1 -u -s37SUN12345678999755512300FFFAS+123456 -k\k
MB01 is encoded, product tagging, MB11 in use
p2fVDA -s1P5221886^2P00C^52PF1F^2Q2^4D15045 -k\k
MB11 is encoded
p2fVDA -aA3 -s26BUN123456789A153097+CS71489453 -k\k
MB01 is encoded, transport item
print2forms (R) is a registered trademark
of SPE Systemhaus GmbH
\\
Wie anhand der Beschreibung zu sehen ist, wird die Selektion, ob die Konvertierung für MB01 oder für MB11 durchzuführen ist, dadurch getroffen, dass ein Application Identifier als Parameter übertragen wird. Wird **-a00** übergeben oder fehlt der Parameter **-a**, wird für MB11 konvertiert. Für einen Application Identifier ungleich Null wird für MB01 konvertiert. Der Application Identifier wird immer in Form zweier Hexadezimalziffern angegeben. Er wird nicht gegen die Tabelle der entsprechenden %%ISO%%/IEC Norm geprüft.
Wird für MB01 konvertiert, kann mit dem Parameter **-u** angegeben werden, dass noch ein weiterer Block MB11 für das Beschreiben des Transponders folgt. Das entsprechende Bit im Header von MB01 wird dann gesetzt.
Der Parameter **-s** schliesslich überträgt die zu kodierenden Nutzdaten. Sollten die Nutzdaten Leerzeichen enthalten, ist der komplette Paramter in doppelte Hochkommata einzufassen. Dabei sollte auf die Verwendung der als 'Reserved' gekennzeichneten Zeichen - insbesondere das doppelte Hochkomma - verzichtet werden.
Kodierung der Steuerzeichen nach %%ISO%% 17363-17367:
^ Funktion ^ Zeichen ^
| <%%EOT%%> End of Text | ! |
| Field Separator | # |
| Unit Separator | $ |
| Group Separator | %%^%% |
| Record Separator | _ |
\\
Rückgabewerte des Programms:
^ Position ^ Inhalt ^
| 1 | Für den Fall, dass der MB01 kodiert werden soll, der Teil der Zeichenkette, der mit in den Bereich der 'Protocol Control' muss. Das sind zwei Byte, kodiert als vier Zeichen lange Folge von Hexadezimal(-)ziffern. Im Fall, dass der MB11 kodiert werden soll, ist diese Zeichenkette leer. |
| 2 | Der Teil der Zeichenkette, der beim MB01 in den Bereich 'EPC' muss, oder beim MB11 in den Bereich 'USER' muss (also inklusive Header). Die Zeichenkette ist eine variabel lange Folge von Hexadezimal(-)ziffern. |
| 3 | Anzahl der kodierten Bytes im Rückgabewert 1. |
| 4 | Anzahl der Hexadezimalziffern im Rückgabewert 1. |
| 5 | Anzahl der kodierten Bytes im Rückgabewert 2. |
| 6 | Anzahl der Hexadezimalziffern im Rückgabewert 2. |
| 7 | Anzahl der kodierten Bytes im Rückgabewert 1 plus der im Rückgabewert 2. |
| 8 | Anzahl der Hexadezimalziffern im Rückgabewert 1 plus der im Rückgabewert 2. |
\\
Ist also wie bei Druckern des Herstellers Zebra der MB01 zu programmieren, muss (unter der Annahme, dass das System-Anfragefeld 'VDA' heist) als Zeichenkette '~VDA:1~VDA:2' benutzt werden, da man bei diesen Druckern die beiden Bereiche des MB01 gemeinsam programmieren kann. Die zu programmierende Länge steht dann in '~VDA:7'.
\\
\\
Der unbedingt erforderliche Parameter **-k** zeigt schon an, dass für die Nutzung des Programms **p2fVDA** eine besondere Freigabe in der Lizenzdatei benötigt wird. Diese Freigabe wird in einen Lizenzschlüssel umgesetzt, der beim Aufruf des Programms immer mitgegeben werden muss.
Der (p2f)-Client und das (p2f)-Gateways stellen diesen Lizenzschlüssel zur Verfügung ((Die Erzeugung von Lizenzschlüsseln für die Nutzung innerhalb von Schablonen wird erst mit dem (p2f)-Client Build 5817 und dem (p2f)-Gateway Build 3087 zur Verfügung gestellt.\\ \\ )), der dann mit dem Platzhalter '\k' in die Schablone des Anfragefeldes mit aufgenommen werden kann.
Eine typische Schablone sähe etwa so aus:
p2fVDA -aA2 -s1JUN\VDA:1 -k\k
In der Ablaufverfolgung kann man dann den expandierten Programmaufruf ansehen: ((Der tatsächlich ausgeführte Programmaufruf ist nicht sichtbar. Siehe auch Hinweis 2.))
p2fVDA -aA2 -s1JUN4853507501904 -kItgmM3Tl10oSUr5IvfkuSlEZpqQvleBdpjPNihjL4iog
\\
\\
==== Hinweise ====
* Vor seiner erstmaligen Benutzung muss das Programm **p2fVDA** in das Installationsverzeichnis von (p2f) kopiert worden sein. Der Aufruf im System-Anfragefeld kann dann, wie hier gezeigt, ohne Pfadangabe erfolgen.
* Das Programm **p2fVDA** kann nur über ein System-Anfragefeld mit Parametern aufgerufen werden. Der Grund dafür liegt darin, dass noch weitere Parameter benötigt werden, die vom Client oder Gateway vor dem eigentlichen Aufruf berechnet und in das sichtbare Aufrufkommando eingebaut werden. In einer Konsole kann das Programm daher lediglich ohne Parameter aufgerufen werden, um die Hilfeinformation zu lesen.
* Falls das **doppelte Hochkomma** gebraucht wird, muss es vor der Parameterübergabe als Escape-Zeichen in der Form '\"' eingesetzt werden. Dies ist notwendig, weil sonst der Kommandoparser der Windows Shell irrtümlich ein Ende der Zeichenkette erkennt.
* Falls das **Circumflex** (Group Separator) innerhalb der Schablone des System-Anfragefeldes benutzt werden muss, ist zu beachten, dass es als Escape-Zeichen in der Form '\^' geschrieben werden muss. Das ist not(-)wendig, weil es sonst in (p2f) innerhalb der Schablone als Feldreferenz missinterpretiert wird.
* Die vielen Längenangaben in den Rückgabewerten sollen dazu beitragen, für die allermeisten Programmier(-)methoden der unterschiedlichen Druckerhersteller auf den Einsatz von **p2fCalc** verzichten zu können.
\\