Home || Zur XML Code Processor Hauptseite || Hardware Industrieterminals ||


Tutorials:

 

Mit Variablen arbeiten...

Vorweg ein Wort: unsere Programmierer hassen den Begriff "Variablen". Ich persönlich mag ihn: Variablen geben dem XML Code Processor die Würze und sie lassen sich leichter beschreiben als das Wortgebilde, das unsere Programmierer anfangs dafür verwenden wollten. 

Variablen haben einige Vorteile. Mit ihnen lassen sich Werte speichern, berechnen und anzeigen. Variablen bilden die Schnittstelle zwischen dem XML Code Processor (dem Interpreter) und weiteren Linuxprogrammen (den Subroutines) und last-not-least: jeder hat den Begriff irgendwann schon einmal gehört.

Doch keine Angst: das hier wird keine mathematische Einführung in die Wissenschaft von Variablen. Ich möchte einfach nur kurz ein paar Möglichkeiten umreissen, wie Sie im XML Code Processor Variablen verwenden können und was Sie damit anstellen können.

Um es einfacher zu gestalten, unterscheide ich zwischen zwei Arten von Variablen:

1) Systemvariablen, die vom XML Code Processor zur Verfügung gestellt werden

2) Vom Benutzer selbst definierten Variablen.

Für alle Variablenarten gilt: Sie können sie anzeigen, verändern und speichern. Die Besonderheit: Diese Möglichkeiten haben Sie vom XML Code Processor (also von XML heraus) als gleichermaßen von den externen Subroutines im PC Terminal aus. Oder, um es kürzer zu fassen: Sowohl der XML Interpreter als auch externe Subroutines haben Zugriff auf die gleichen Variablen!

Dieser Satz klingt einfach - hat aber in der Praxis enorme Bedeutung. Die Subroutines bieten eine softwaretechnische Erweiterung, um Funktionalitäten zu realisieren, die über Benutzerdisplays, Eingaben und standarisierter Datenverarbeitung hinausgehen. Die Subroutines bilden die Basis, damit Ihr Projekt wirklich individuell wird und Sie mit dem PC Terminal das tun können, was Sie möchten. Aus diesem Grund sind Variablen und Subroutines untrennbar miteinander verbunden. Und das ist auch der Grund, warum ich sie gemeinsam in einem Text zusammenfasse.

Nachstehend ein paar Details....

Systemvariablen - hier arbeitet der Rechner...

Unter Systemvariablen verstehe ich vom XML Code Processor zur Verfügung gestellte Variablen. Hierzu zählen z.B. das aktuelle Datum $date, die aktuelle Uhrzeit $time, die aktuelle IP Adresse $ip und noch so einiges mehr.

Da diese Variablen immer mit Subroutines korrelieren, finden Sie die schnellste Information, wenn Sie sich die Hilfedatei zu den Subroutines durchlesen. (Typischerweise als TXT, DOC oder PDF Datei). Eine Auswahl finden Sie hier:
Subroutine Definition.PDF**

(Beachten Sie bitte, dass diese PDF Datei nicht aktuell sein muss. Aktuelle Versionen finden Sie auf Ihrer CD ROM zum XML Code Processor!)

Mit den Programmierexperten habe ich mich darauf geeinigt, dass Systemvariablen mit beginnenden "$" notiert werden. Auf diese Weise sind sie leichter zu erkennen.

Beispiel:
Die Subroutine "get-date $datum" holt das aktuelle Systemdatum und speichert es in einer Variable namens $datum. Analog dazu setzt "set-date $datum" das Systemdatum auf den in $datum eingegebenen Wert.

So, das war es eigentlich schon, was Sie zu den Subroutines und den Systemvariablen wissen müssen. Verblüffend einfach nicht? Wenn Sie wissen wollen, welche Subroutines in Ihrer aktuellen Softwareversion aktiv sind und wie man sie benutzt - schauen Sie einfach in die Hilfedatei / CD ROM zum XML Code Processor. Neue Versionen werden Sie u.U. im Internet finden - im Support / FTP Bereich zum XML CP.

Sonderfall: Subroutines ohne Systemvariablen

Wenn Sie sich die Liste der standardmässig verfügbaren Subroutines durchlesen, werden Sie einige Subroutines finden, die ohne Variablen auskommen, z.B. "set-date", "set-time" oder "set-ip".

Das Ganze ist ein kleiner Trick, den ich mir gewünscht habe: bei diesen Subroutines wurde auf Angabe einer weiteren Variable verzichtet und stattdessen definiert, dass die zuletzt durchgeführte Eingabe als zu speichernder Wert verwendet wird.

In der Praxis kann Ihnen das das Leben erleichtern. Für Sie bedeutet das z.B. Sie basteln sich einen XML Datensatz in dem der Benutzer ein Datum im Format TT.MM.JJ eingeben kann. Anschliessend rufen Sie unter in den after(n) Subroutines "set-date" auf <after1>set-date</after1> - und flugs speichert der XML Code Processor die aktuelle Eingabe als Systemdatum. (Mit dieser Vorgehensweise können Sie natürlich auch eine Menge Unsinn anstellen, wenn Sie anstelle des Datums eine IP Adresse eingeben. Seien Sie also vorsichtig, wenn Sie diese verkürzten Subroutines verwenden.)

Benutzervariablen - hier variabelt der Benutzer....

Das wird Sie jetzt wenig überraschend: Benutzervariablen sind vom Benutzer definierte Variablen! Das ist auch schon der einzige Unterschied zu den Systemvariablen.

Allerdings - da Sie ein Benutzer und Kunde sind, haben Sie mehr Freiheiten. Sie müssen die Variablen nicht mit "$" beginnen lassen, sondern können den Namen frei wählen. Sie sollten allerdings aufpassen, dass Sie den Namen wiederfinden. Es ist immer hilfreich einen halbwegs sinnvollen Namen zu wählen. Anstatt "xy1234" sollten Sie eine Variable besser "personalnr" nennen. Dann können Sie die nämlich leichter weiterverarbeiten.

Ah - werden Sie fragen: und wie definiere ich Variablen? Oh je - das ist normalerweise etwas für Programmierer und so ziemlich jede Programmiersprache benötigt ein ganzes Kapitel für die Regeln und Konventionen. Aber nicht im XML Code Processor! Im XML Code Processor wird eine Variable NICHT definiert, sondern es gilt die Richtlinie: der im Feld <ID> eingegebene Wert wird automatisch als Variablenname verwendet! (Falls Ihnen das Feld spanisch vorkommt: hier der Link in die XML-Feldbeschreibung.)

Ja - Sie haben richtig gelesen. Wenn Sie sich einen XML Datensatz bauen, der als ID Satzart zum Speichern wie folgt aussieht: <ID>personalnr</ID>, dann finden Sie die Eingabe der Personalnummer in einer von Ihnen geschaffenen Variable "personalnr"!

De facto heisst das für Sie: Sie müssen sich nicht um Variablen kümmern! Der XML Code Processor legt die automatisch an und vewendet dafür jeweils den Inhalt des Feldes <ID>. Bliebe nur noch zu erwähnen, dass in der Variable "personalnr" jeweils die letzte Eingabe gespeichert wird, d.h. wenn Sie fünf Personalnummern eingeben, können Sie jeweils nur auf den letzten Wert zugreifen.

AH - werden die Programmierer unter Ihnen jetzt denken. "Da haben wir die Schwachstelle im XML Code Processor gefunden. Wenn ich viele Variablen verwende platzt das System...". Ja - stimmt lautet die Antwort. Wenn Sie einige tausend Variablen definiert haben, haben Sie eine interne Systemgrenze erreicht. Allerdings haben wir bisher noch kein Programm auf einem PC Terminal getroffen, das auch nur annähernd an diese Grenze herangekommen ist. Und sollten Sie der Erste sein - kein Problem. Kontakten Sie uns, wir erweitern dann die Grenze nach Ihren Anforderungen...

Ich will sehen: Variablen anzeigen....

Das ist wie beim Poker: Der eine oder andere Benutzer will die Variablen nicht nur tief im Geheimen verarbeiten, sondern irgendwann auch im Display sehen. Die XML Feldbeschreibung und der XML Code Generator TRM-CODE-GEN.EXE bieten hierfür Möglichkeiten: im Bereich Variablen (im Code Generator unter Expertenmodus zu aktivieren) können Variablen anzeigt werden.

Generell stehen Ihnen zur Verfügung:
<var(n)-row> und <var(n)-col> um die Zeile und Spalte festzulegen
<var(n)> um die Variable festzulegen, die an der zuvor eingebenen Zeile / Spalte im Display angezeigt werden.

Beispiel: Sie möchten die zuvor eingegebene Personalnummer in Zeile3, Spalte12 sehen, dann lauten die Felder wie folgt:
<var1-row>3</var1-row>
<var1-col>12</var1-col>
<var1>personalnr</var1>

Vermutlich wird Ihnen schon lange klar sein, dass Sie nach diesem Verfahren nicht nur Ihre Benutzervariablen, sondern auch das Systemdatum, die Zeit, die IP Adresse und alle anderen Systemvariablen an beliebigen Stellen im Display darstellen können. Beispiele finden Sie auf dieser Seite: Samples.

Mit Variablen rechnen - die Subroutines werden wach - das MATH Modul

Ich muss es zugeben: Als ich vor einigen Monaten über die Definitionen im XML Code Processor grübelte, war ich nicht der Ansicht, dass irgend jemand jemals mathematische Operationen mit Variablen durchführen will.

Erst als ich Wochen später zu Testzwecken einen XML Datei für eine Maschinenabrechnung zusammenstellte und einen Stückpreis von 4 Euro mit einer eingegebenen Stückmenge multiplizieren wollte, kam mir in den Sinn, dass der XML Code Processor auch rechnen muss.

Gesagt - getan. Das ganze Ding läuft ja auf einem Computer - und der soll bekanntlich auch rechnen können. Die Lösung brachten dann die Programmierexperten: sie programmierten die Subroutine MATH (genannt: das MATH Modul) und gaben mir so die Möglichkeit, Variablen (und auch Konstanten) mathematisch zu verknüpfen.

Das MATH Modul ist also "nur" eine vordefinierte Subroutine. Sie erlaubt als Operation die vier Grundrechenarten + - / *. 

Die Verwendung:

math wert_a OPERATION wert_b wert_ergebnis

Mit dem Ergebnis wert_ergebnis kann man wieder etwas anstellen, es z.B. im Display anzeigen, speichern oder was auch immer.

Ein Beispiel: In Variable "menge" hat der Benutzer eine Stückzahl eingegeben, in Variable "preis" einen Stückpreis. Als Subroutine after(n) nach der Eingabe des Preises wird eingegeben

<after1>math preis * menge zahlbetrag</after1>.

Das Ergebnis der Operation findet sich in der Variable "zahlbetrag" und die kann dann z.B. im nächsten XML Satz im Display angezeigt werden.

Ganz beliebt ist oftmals auch, zu zählen, wie oft jemand eine Artikelnummer eingegeben hat. Dazu können Sie dann eine beliebige Variable verwenden - ich nenne sie jetzt mal AnzahlArtikel und die jeweils um 1 erhöhen.

<after1>math AnzahlArtikel + 1 AnzahlArtikel</after1>

Überflüssig zu erwähnen, dass Sie sich den Inhalt von AnzahlArtikel dann auch wieder im Display anzeigen lassen können. Ein Beispiel finden Sie hier: Sample Menge * Preis.

Analog zu den Beispielen können Sie die vier Grundrechenarten als OPERATION eintragen, also Addition, Subtraktion, Multiplation und Division. Und wieder für die Programmierer unter Ihnen: Sie müssen schon selbst darauf achten, dass Sie nicht durch 0 teilen. Die MATH Subroutine vom XML CP fängt das ab - und macht gar nichts.

Und damit das hier nicht zu lang wird: Die Subroutine MATH hat eine eigene README Hilfedatei. Diese finden Sie auf der CD ROM zum XML Code Processor - oder evtl. Updates im FTP Bereich zum XML CP im Internet. Falls Sie wissen wollen, wie MATH das macht, was Sie persönlich wollen: einfach nachlesen...

Und für diejenigen, die jetzt meinen: die vier Grundrechnenarten sind nicht genug - kein Problem, das ist wie bei James Bond - einfach selber machen...

Eigene Subroutines erzeugen - und unter XML CP verwenden...

Einfach selber machen - oder: selbst Subroutines erzeugen.

Das ist ein beliebtes Thema. Schon recht früh wurde mir bei der Grundkonzeption des XML Code Processors klar: wir brauchen über XML hinaus eine Möglichkeit, weitere Programme zu starten. Also ließ ich mir die Subroutines einfallen, die man wahlweise VOR oder NACH einer Eingabe starten kann. <before(n)> bzw. <after(n)>.

Gleichzeitig bat ich die Programmierexperten mir haufenweise Subroutines zur Verfügung zu stellen. Allerdings gab es hier auch eine Erkenntnis, die glasklar im Raum stand: egal, was wir an fertigen Subroutines mitliefern, der Kunde = SIE werden immer noch Möglichkeiten wünschen, die nicht von uns definiert sind.

Damit war das Thema geboren: Der Kunde muss eigene Subroutines erzeugen können.

In der Praxis ist das nicht besonders schwer - allerdings und das soll an dieser Stelle nicht unerwähnt bleiben: um eigene Subroutines zu erzeugen, müssen Sie programmieren können!

Die Programmierung findet typisch unter Linux in C statt.

Sie benötigen eine Linuxentwicklungsumgebung für die PC Terminals, wie sie z.B. von CoLinux SDK bereitgestellt wird. Ausserdem sollten Sie Programmierkenntnisse in der Sprache C haben. Und last-not-least sollten Sie die CD ROM zum XML Code Processor haben.

Auf der CD ROM zum XML Code Processor finden Sie nämlich die Sourcen der Subroutine Module, dort finden Sie ein Tutorial, wie man eine Subroutine selber programmiert und dort finden Sie Readmes und Hinweise, wie Sie Ihre Subroutine programmieren. Sie können selbstverständlich die von uns definierten Subroutines ändern (z.B. das MATH Modul um neue Rechenarten erweitern) oder gänzlich eigene Module programmieren.

Für Subroutines gilt: Sie haben vollen Zugriff auf die Variablen im XML Code Processor und können die Variablen sowohl lesen als auch schreiben.

Das bedeutet für Sie: Sie können das Ergebnis Ihrer Subroutine in eine Variable speichern, die dann aus XML heraus ausgewertet wird.

Ein Beispiel:

Unter XML geben Sie eine Personalnummer ein und speichern diese in die Variable personal.

Anschliessend programmieren Sie eine Subroutine GetPersonalServer, die diese Personalnummer via TCP / UDP Package an einen Server sendet und von dort eine Antwort mit dem Personalnamen bekommt. Den Personalnamen speichern sie in ebenfalls in der Variable personal.

Aus dem XML CP heraus rufen Sie als Subroutine GetPersonalServer auf, z.B.
<after1>GetPersonalServer personal</after1>.

Im darauffolgenden XML Datensatz zeigen Sie die Antwort der Subroutine im Display an also
<var1-row>1</var1-row>
<var1-col>12</var1-col>
<var1>personal</var1>

Das Ganze war es schon. Mit diesem Verfahren können Sie sich Ihre eigenen Subroutines = Linuxprogramme erzeugen und in Verbindung mit dem XML Code Processor unter XML verwenden. Die Informationen zum Programmierer eigener Subroutines finden Sie auf der CD ROM zum XML Code Processor - und wenn Sie lieber überhaupt nicht selbst programmieren wollen: kontakten Sie unsere Experten. Wir helfen gerne - und eine Subroutine ist manchmal mit wenig Aufwand geschrieben...

Alle Dokumente zu diesem Thema:

XML Code Processor auf dem Gerät - auspacken und loslegen
XML Code Generator - PC Programm TRM-CODE-GEN.EXE Einführung
TRM-CODE-GEN - Installation und erste Schritte.
Tutorial: ein eigenes Programm erzeugen.
Expertenmodus - so gibt es mehr Funktionen
Exkurs - Variablen und Subroutines
TRM-CODE-GEN.exe - Programmbedienung ab Vers. 1.4.x
TRM-CODE-GEN.exe - Programmbedienung ab Vers. 1.5.x
- neu 2008-01
Beispiele und HowTos.

Text: Hans-J. Walter
Textstand: Mai 2007.


Technische Angaben auf diesen Seiten ohne Gewähr. Letzte Änderung: 23.05.2010
(c) hjw 2008 für
www.terminal-systems.de