|
|
||||||||||||||||||||||||||||||||||||||||||||
19.04.2024 | Archiv # Recherche # Links # Kontakt # Gästebuch # Impressum | ||||||||||||||||||||||||||||||||||||||||||||
Index Login Die Anzeige des Archivs erfolgt grafisch. Ändern |
Programmieren mit IZLTeil 1 und 2
Inhalt - Allgemeine Hinweise - WECHSEL.IZL - 8 Wechseltasten (ein/aus), Datenausgabe als Dezimalwert IZL im Internet Seit dem 18.08.1996 gibt es im Internet ein weiteres Archiv mit IZL-Beispielen und vielen anderen Dingen rund um IZL. Auch das IZL-Magazin ist dort zu finden. Die Adresse lautet: ftp://members.aol.com/geoizl/ Das Inhaltsverzeichnis nennt sich CONTENT.TXT für die englischsprachigen User und INHALT.TXT für die deutschsprachigen. Allgemeine Hinweise Die folgenden Beispiele beziehen sich auf IZL, Version 2.0. Verwendet wurde die aktualisierte Ausgabe vom 05.12.1995. Um IZL 2.0 problemlos nutzen zu können, ist eine Anpassung in den Voreinstellungen notwendig: Im Bereich International / Zahlen: 1000er ","; Dezimalstelle "."; Listenzeichen "," einstellen. Viele der folgenden Beispiele habe ich direkt für meine Steuerprogramme für den Kurzwellenempfänger YAESU FRG-100 bzw. andere serielle Baugruppen entwickelt. Sie lassen sich aber sicher auch für andere Zwecke einsetzen. Alle Daten befinden sich im Verzeichnis BEISPIEL. Auf den folgenden Seiten befindet sich eine Beschreibung zu Programmen selbst, ihrem Zweck und eine kurze Beschreibung der enthaltenen Funktionen, damit sollte es möglich sein, das Programm und seine Funktion zu verstehen. Weitere Erklärungen befinden sich auch innerhalb des Programmes selbst. Auch habe ich gleich den Verwendungszweck angegeben. Mit dieser Sammlung von Beispielen will ich es den IZL-Einsteigern erleichtern zu ersten Erfolgen zu kommen. Die Beispiele erwecken vielleicht nicht gleich den Eindruck der allgemeinen Verwendbarkeit, aber ich habe es an mir selbst gemerkt, das man aus dokumentierten und funktionierenden Beispielen mehr lernt als eine Programmieranleitung vermitteln kann. Diese ist natürlich weiterhin notwendig. Dateneingabe WECHSEL.IZL - 8 Wechseltasten (ein/aus), Datenausgabe als Dezimalwert. Dieses Beispiel basiert auf einem Teilprogramm, welches aus DEMO.IZL (im Lieferumfang von IZL 2.0) entnommen und um die Auswertung der gedrückten Tasten erweitert wurde. Die 8 Tasten stellen jeweils einen Wert in der 8-Bit Reihe dar, also hat die 1. Taste den Wert 128 und die 8. den Wert 1. (128 / 64 / 32 / 16 / 8 / 4 / 2 / 1 ) Diese Folge kann beliebig an die eigenen Ansprüche angepasst werden. In meinem Fall war die 8-Bit Reihe erforderlich, damit die an der seriellen Schnittstelle Auswerteschaltung genau mitgeteilt werden konnte, welcher Ausgang zu schalten ist, um Z.B. eine Lampe ein bzw. auszuschalten. Die Ausgabe des Dezimalwertes in dem Textfeld erfolgt nur zur Überprüfung der Funktion. Erklärung am Beispiel der 1. Taste:
Die Auswertung für den Zahlenwert geschieht in ähnlicher Weise, nur das dort der numerischen Variable o1 ein Zahlenwert zugewiesen wird. Am Ende der Auswertungsroutine "bout" werden diese Zwischenwerte (o1 bis o8) zusammengerechnet und in einem Textfeld unterhalb der Tastenzeile ausgegeben. Dateneingabe TASTEN.IZL - direkte Datenausgabe als Dezimalwert. In diesem Beispiel wird das Zusammenspiel der Funktionen "button" und "startup" dargestellt. Wo man sonst vielleicht jede Taste einzeln definiert hat, so reichen hier ein paar Zeilen IZL-Code. Dies ist auch in dem Zusammenhang sehr wichtig, das die Anzahl der in IZL möglichen Objekte und Funktionen begrenzt sind. Ich verwende dieses Beispiel in meiner Empfängeransteuerung als Möglichkeit des direkten Aufrufes eines Speicherplatzes. Hinweis: die Funktion "startup" wird automatisch beim Start des IZL-Programmes aufgerufen und ausgeführt. Innerhalb der Rahmendefinition wird der Zeilenumbruch auf 8 Zeichen festgelegt.
8EINGANG.IZL - Optische Auswertung. Dieses Beispiel soll die Möglichkeit der grafischen Auswertung eines Dezimalwertes verdeutlichen. Der Wert wird innerhalb des Zahlenfeldes eingegeben und nach einem Klick auf die Taste "testen" ausgewertet und dargestellt. Auch dieses Programm ist auch auf die 8-Bit Reihe ausgelegt, so dass Werte bis maximal 255 eingegeben werden können. Ist der Wert grösser, gibt es eine Fehlermeldung. Beispiel für 8. Ausgabefeld:
E-BINAER.IZL - Auswertung in Dualzahl. Der Aufbau dieses Beispiels ist fast gleich dem von 8EINGANG.IZL (siehe dort). Allerdings wird hier der eingegebene Wert nicht grafisch mit "X" dargestellt, sondern im Binär-Code, also entweder hat die "Auswertungsstelle" den Wert 0 oder 1 an. Sollte ein Wert grösser 255 eingegeben werden, so werden alle 8 Stellen auf 8 gesetzt. Datenauswertung T-SENSOR.IZL - Grafische Auswertung, Beispiel für Temperatursensor. Das hier vorgestellte Programm soll die Grafische Auswertung von Werten am Beispiel eines Temperatursensors demonstrieren. Leider sind die Möglichkeiten dazu in IZL nicht immer im gewünschten Masse verfügbar. Weiterhin ist zu beachten, das die konkrete Festlegung von Skalen nur bedingt anwendbar ist, da Abweichungen zwischen der Farb- und der Schwarz/Weiss-Darstellung auftreten. So werden eventuell 2 Versionen benötigt. Die Werte in das Zahlenfeld am unteren Rand eingegeben und mit einem Klick auf die Taste "Temperatursensor" zur Darstellung gebracht.
Erläuterungen zum Programm siehe nächste Seite.
Datenauswertung DATUM-K.IZL - Datum und Uhrzeit werden bei jedem Klick aktualisiert. Dieses Programm zeigt die Auswertung und Darstellung der Zeit mit Hilfe von IZL. Das Datum und die Uhrzeit werden bei jedem Klick auf die Taste "Auffrischen" abgerufen und dargestellt. Verwendungszweck soll ein Logbuch sein, welches alle aktuellen Daten aus dem Kurzwellenempfänger ausliest (Frequenz, Betriebsart...) und zusammen mit dem Datum und der Uhrzeit in einer Datei auf der Festplatte speichert. Leider werden die Werte, sollten sie aus einer einzelnen Ziffer bestehen, nicht mit einer führenden Null angezeigt, so dass die Anzeige etwas "seltsam" aussieht. Nach dem Start des Programmes wird anstatt der aktuellen Zeit (was mit einer Zuweisung innerhalb der "startup"-Funktion möglich wäre) 00.00.00 - 00:00:00 angezeigt.
# Die Datums und Zeitvariable "showtime" setzt sich aus den
Datenauswertung DATUM-D.IZL - Datum wird bei Aktivierung ständig aktualisiert Das Programm arbeitet ähnlich DATUM-K.IZL, nur wird hier nach einem Klick auf "Start" die Zeit ständig aktualisiert., genauer gesagt, 1 x pro Sekunde. Dies wird durch den Einsatz der TIMER-Funktion erreicht.
showtime=DAY(NOW())&"."& MONTH(NOW())& "."&YEAR(NOW()) &" - " & HOUR(NOW())& ":"& MINUTE(NOW())& ":" & SECOND (NOW()); # Die Datums und Zeitvariable "showtime" setzt sich aus den
Mehrere Screens und anderes Dieses Beispiel soll die Umschaltmöglichkeit zwischen verschiedenen Screens demonstrieren. Dies ist z.B. sehr sinnvoll, wenn man nicht alles auf einen Screen bekommt, weil nur ein begrenzter Platz zur Verfügung steht. Weiterhin zeigt dieses IZL-Programm, wie man die Grösse von Rahmen und Tasten beeinflussen, oder Menüeinträge aus- bzw. einblendet.
CAT4GEOS.IZL - Ansteuerung des Kurzwellenempfängers YAESU FRG-100 Das folgende Programm habe ich speziell für den Kurzwellenempfänger YAESU FRG-100 entwickelt. Es enthält einige der bisher genannten Beispiele. Die ScreenDumps sollen nur zur Demonstration dienen, was mit IZL möglich ist. Die einzelnen Funktionen (Ansteuerung der seriellen Schnittstelle, Frequenzumrechnung, Wandlung Hexadezimal in Dezimal) sind auf diesen speziellen Einsatzzweck zugeschnitten und werden deshalb nicht näher erläutert. Einige wenige Erläuterungen befinden sich innerhalb der IZL-Datei. Sollte es spezielle Fragen zu diesem Programm oder dessen Anpassung an andere Typen geben, so werde ich gerne weitere Erklärungen abgeben. Kontaktadressen sie am Anfang des Dokumentes.
Datenausgabe CSV-AUSG.IZL - Ausgabe von Daten in eine CSV-Datei (kommagetrennte Werte) Dieses Programm soll die Möglichkeit der Ausgabe von Daten in ein Datei aufzeigen. In diesem Fall erfolgt die Ausgabe in eine CSV-Datei, dabei sind die einzelnen Daten durch ein Komma voneinander getrennt. Für eine spätere Auswertung, kann die Datei z.B. in GeoCalc importiert werden. Allerdings ist zu beachten, das in den Eingabefeldern selbst kein Komma enthalten ist, da ansonsten der spätere Import nicht fehlerfrei funktioniert. Wenn das Programm geladen wird, wird die Ausgabedatei (LOGBUCH.CSV) automatisch geöffnet. Die Daten selbst können innerhalb der Eingabemaske eingegeben werden. Durch einen Klick auf die Taste [Daten speichern] werden diese in der Datei abgelegt. Für die nächste Eingabe können die Eingabefelder durch einen Klick auf [Eingabefelder leeren] geleert werden. Um die Datei auch betrachten oder importieren zu können, wenn das Programm selbst noch geöffnet ist, muss die Datei geschlossen werden: [Logbuch schliessen], ein erneutes öffnen ist mit [Logbuch öffnen] möglich. Erweiterungen sind dahingehend möglich, das z.B. das Datum und die Zeit automatisch eingesetzt werden oder diese beiden Werte beim speichern selbst aktualisiert werden. Für mein CAT4GEOS werden die anderen Werte (ausser Sender und Bemerkungen) automatisch aus dem Kurzwellenempfänger ausgelesen, ausgewertet und dargestellt.
Datenauswertung ANZEIGE.IZL - grafische Auswertung eines Wertes in Form eines Zeigerinstrumentes Viele Grössen wurden und werden mit Hilfe eines Zeigerinstrumentes angezeigt. Warum dann nicht auch mit IZL ? In meinem Fall soll die Signalstärke ausgewertet und dargestellt werden. Diese wird direkt über die serielle Schnittstelle aus dem Kurzwellenempfänger ausgelesen. Es sind Werte zwischen 0 und 255 möglich. Um das Beispiel allgemein nutzbarer zu machen, wird der Wert nicht über die serielle Schnittstelle ausgelesen, sondern kann direkt eingegeben werden. Nach einem Klick auf "Zeiger zeichnen" wird dieser Wert ausgewertet und dargestellt. Eine Überprüfung des Wertes erfolgt nur dahingehend, ob er kleiner als 1 ist (also 0), ist dies der Fall, wird der Wert auf 1 gesetzt. Ansonsten gibt es einen Konflikt mit der Parse-Library und eine Fehlermeldung. Denkbar wäre hier auch der Einsatz der Timer-Funktion um den Wert automatisch aktualisieren zu lassen. Zu beachten ist, das das Grafikfeld bei jeder neuen Darstellung immer komplett überschrieben wird. Dies ist notwendig, da es bisher keine Funktion gibt, das Grafikobjekt direkt zu löschen. Es werden immer wieder alle Objekte (Rechtecke, Kreise, Linien) dargestellt !
Datenauswertung DATUMN.IZL - Korrektur der Beispiele (DATUMK und DATUMD) aus Teil 1 Im Teil 1 des IZL-Magazins wurden 2 Beispiele zur Auswertung und Anzeige des Datums und der Zeit veröffentlicht. In diesen Beispielen besteht jedoch der Mangel, das die Zeitanzeige zwar korrekt erfolgt, die Darstellung aber zu wünschen übrig lässt, da die führenden Nullen nicht dargestellt wurden. Dies ist jetzt behoben.
Von vielen Leuten habe ich schon gehört, das es sie stört, das man mit IZL keine eigenständigen Programme erzeugen kann und immer einen Interpreter benötigt, um die Programme nutzen zu können. Dieses "Problem", lässt sich zwar nicht beseitigen, aber man kann dem Benutzer ein eigenständiges Programm "vorgaukeln". Dies geschieht durch eine Änderung oder Erweiterung der GEOS.INI: [fileManager] filenameTokens = { C4G-DIRZ.IZT = "NWPS",255,"IZLP",16418 *.IZT = "IZLP",16418,"IZLP",16418 { "NWPS",255 kennzeichnet dabei den Iconnamen und seine ID, "IZLP", 16418 verknüpft die IZT-Datei mit dem IZL-Interpreter. *.IZT verknüpft alle restlichen IZT-Dateien mit dem Interpreter. Verschiedenes INDICATO.IZL - Indikatorfeld für verschiedene Funktionen Hin und wieder wird eine Anzeige benötigt, das gerade eine Funktion ausgeführt wird. Im folgenden Beispiel werden 2 Möglichkeiten aufgezeigt: die Beschriftung der Taste wird mit jedem anklicken geändert. Es wird immer die Funktion angezeigt, die beim nächsten Klick ausgeführt wird. Zur Verdeutlichung dieser Funktion und gleichzeitig als weiterer Indikator dient das Grafikfeld. Im Grundzustand ist das Feld grün, d.h. die Funktion ist derzeit nicht aktiviert. Klickt man nun auf die Taste [Ein], dann wird deren Beschriftung in [Aus] geändert und das Grafikfeld rot gefüllt, d.h. die Funktion ist gerade aktiv. Das Beispiel wurde mit Hilfe des Trace-Mode von IZL aus dem Programm "Composer" von Holger Laux abgeschaut. Bei dem "Composer" handelt es sich um ein Programm, mit welchem *.SNG Dateien erzeugt, gespeichert, geladen und abgespielt werden können.
SOUND.IZL - Abspielen der GEOS-Systemklänge mit IZL Originalprogramm von Max Mansour.
RAHMEN.IZL - feste Rahmengrössen für verschiedene Systeme Hin und wieder kommt es vor, das feste Rahmengrössen benötigt werden. Auch ist es sinnvoll, diese einzusetzen, wenn das IZL-Programm selbst über mehrere Bildschirme verteilt ist und der Rahmen immer die selbe Grösse haben soll und nicht ständig seine Grösse dem Inhalt (Tasten, Textfelder, Label...) anpasst. IZL bietet dafür den Befehl PIXEL_SIZE innerhalb der Rahmendefinition an.
Verschiedenes PLATFORM.IZL - ermitteln auf welcher Plattform IZL läuft Bei einigen Programmen oder einzelnen Funktionen davon ist es eventuell von Bedeutung zu wissen, auf welcher Plattform (Desktop, HP OmniGo oder CASIO Zoomer) IZL gerade läuft. Es dann zum Beispiel möglich dem Rahmen (siehe RAHMEN.IZL / Seite 15) schon beim Start die richtige Grösse zuzuweisen. Wichtig vielleicht auch bei der Benutzung von Farben, welche nur auf dem Desktop korrekt angezeigt werden. Im folgenden Programm wurde dies durch die Auswertung des Error-Codes welchen die COPY-Funktion liefert möglich. Siehe dazu auch in der Dokumentation von IZL, Bereiche IZL-Ausdrücke (Variablenbenutzung) und GEOS Fehlercodes. function bcopy; copy "a:\hp\phone.pdb", "b:\test.dat"; if ERROR_CODE = 0; put label1, "OmniGo"; delete "b:\test.dat"; else; copy "a:\sdisk.exe", "b:\test.dat"; if ERROR_CODE = 0; put label1, "Zoomer"; delete "b:\test.dat"; else; put label1, "Desktop"; end_if; end_if; end; Zuerst wird versucht die Datei PHONE.PDB aus dem Verzeichnis A:\HP nach B:\TEST.DAT zu kopieren. Die Datei wird dabei auch gleich umbenannt und eventuelle Verwechslungen mit existierenden Dokumenten zu verhindern. Laufwerk A: stellt beim HP OmniGo 100 und beim CASIO Zoomer das ROM-Laufwerk dar. Laufwerk B: ist das interne RAM-Laufwerk. War das kopieren erfolgreich wird der ERROR_CODE 0 übergeben, d.h. das die Funktion erfolgreich war. Da sowohl die Datei (PHONE.PDB) als auch das Verzeichnis (HP) nur auf dem OmniGo existieren, kann davon ausgegangen werden, das IZL auf dem OmniGo läuft. Deshalb wird mit Hilfe des Labels LABEL1 "OmniGo" auf den Bildschirm ausgegeben und die kopierte Datei gelöscht um wieder Platz zu schaffen. Für den Zoomer wird der selbe Ablauf mit der Datei SDISK.EXE durchgeführt. Wird das Programm auf dem Desktop gestartet, so wird auf diesem auf Laufwerk A: zugegriffen, dies lässt sich leider nicht vermeiden. Wurden beide Bedingungen nicht erfüllt, also ERROR_CODE in beiden Fällen ungleich 0, wird "Desktop" über das Label Label1 ausgegeben, da dies zur Zeit die einzigste Alternative zu den beiden Geräten ist. Sollten in Zukunft weitere PDAs (wie der OmniGo oder Zoomer) auf den Markt kommen, sind natürlich weitere Anpassungen im Programm notwendig. Deutsche Umlaute korrekt in IZL darstellen gewünschtes Zeichen notwendiges Zeichen Tastenkombination ß º Umsch Strg Alt + 1 ä è Umsch + ` dann E ö Ü Umsch + Ü ü ? Strg Alt + F Ä Ç Umsch Strg Alt + C Ö á ´ dann A Ü å Strg Alt + A Um zum Beispiel das ä zu erhalten muss in der DOS-ASCII-Datei ein è eingegeben werden. Datenauswertung DATEIAUS.IZL - Datenübernahme und Verarbeitung aus ASCII-Datei Dieses Programm demonstriert die Dateiauswahl mit (FILESEL), das einlesen und verarbeiten der Daten sowie deren Nutzung. Die Idee war das ich auf relativ einfache Weise schnellen Zugriff auf bestimmte Auswahlen an Frequenzen haben wollte (Amateurfunk, Auslandsrundfunk, Wetterfax usw.). Diese Frequenzen hätte ich zwar auch alle in dem Programm selbst unterbringen können, aber dann stösst man recht schnell an die Grenzen (IZL lässt nur eine bestimmte Anzahl von Variablen zu) und man müsste das Programm immer wieder neu complieren. Deshalb wählte ich den Weg über die externen Dateien. Vorbild war im wesentlichen TRIV.IZL bzw. TRIV_IZL.IZL von John Feras. Im Gegensatz zu der Version die ich persönlich einsetze, erfolgt hier die Ausgabe der Daten nicht über die serielle Schnittstelle an den Kurzwellenempfänger, sondern diese werden auf dem Bildschirm unterhalb des Tastenfeldes dargestellt. Zuerstmal der Aufbau der Datendatei: Der Name der Datei ist beliebig, aus ihm sollte aber der Inhalt der Datei erkennbar sein (RUNDFUNK für Rundfunksender oder WETTER für Wetterfax), wichtig ist nur die Endung *.DAT. Diese kann aber auch bei Bedarf geändert werden. Siehe Programmerläuterungen. Die Datendatei besteht in meinem Fall aus 10 x 3 = 30 Feldern, welche alle in einer einzelnen Zeile untergebracht sind. Das heisst es können pro Datei 10 Sender mit ihrem Namen, ihrer Frequenz und ihrer Betriebsart untergebracht werden:
... Der Sendername ist im Beispiel nicht richtig zu lesen, weil IZL keine Sonderzeichen direkt importieren kann. Das heisst, um das Ö richtig darzustellen muss es im GEOS-Code eingegeben werden und dieser unterscheidet sich vom ASCII-Code. Die Codes für die deutschen Sonderzeichen sind auf Seite 16 des IZL-Magazins zu finden. Diese habe ich wie folgt herausgefunden: in einer ASCII-Datei habe ich alle diese Zeichen in ihrer richtigen ASCII-Schreibweise untergebracht. Diese Datei wurde dann mit Hilfe des Programmes "TEXT2GEO" von Kolja Brix in die GEOS-Codes konvertiert und mit dieser Übersicht habe ich dann im Ensemble-Handbuch die dazugehörigen Tastenkombinationen herausgesucht. label ff1, fileframe; display " "; end; label ff2, fileframe; display "Bitte Datendatei ausw"&char(138)&"hlen."; end; # Platzhalter und Erklärung zur Dateiauswahl frame filelist, fileframe; # Rahmen um Dateiauswahlfenster vertical; # Inhalt wird untereinander, center_h; # horizontal zentriert ausgerichtet box; # Rahmen wird dargestellt end; filesel fselector, filelist; # Definition des Dateiauswahlfensters invokes ok; # ruft Funktion ok auf display "*.DAT"; # Dateibeschränkung auf *.DAT end; function fbart; # Betriebsart Auswertung if bart[invokersub] = 0; ba = "LSB"; end_if; if bart[invokersub] = 1; ba = "USB"; end_if; if bart[invokersub] = 2; ba = "CW"; end_if; if bart[invokersub] = 3; ba = "AM"; end_if; if bart[invokersub] = 4; ba = "FM"; end_if; if bart[invokersub] = 64; ba = "AM/N"; end_if; if bart[invokersub] = 128; ba = "CW/N"; end_if; end; # Auswertung mit Hilfe der internen Variable 'invokersub', d.h. # wenn z.B. Taste 2 gedrückt wird, so wird die 2 der Variable # zugewiesen: bart[2], diese wiederum enthält den Wert für die # Betriebsart, welcher aus der Datendatei ausgelesen wurde und # somit wird die Auswertung ermöglicht. function fsend; # Funktion, bei Klick auf Sendetasten dfrequenz = "Frequenz: "& frequenz[invokersub] &" kHz"; dbart = "Betriebsart: " & ba; # "zusammensetzen" der Frequenz und Betriebsart für die # Darstellung put label7, dfrequenz; # Übergabe der Strings an die put label8, dbart; # entsprechenden Label play "notify"; # Spielen eines Hinweistones um das senden zu bestätigen end; function questopen; hide fgesamt; show fileframe; end; # Funktion um neue Datendatei zu wählen: # der Rahmen fgesamt (inklusive des Tastenrahmens...) wird # versteckt und dafür der Rahmen der Dateiauswahl und mit ihm auch # sein Inhalt angezeigt function ok; # Funktion, wenn Datendatei gewählt wurde hide fileframe; # Dateiauswahl verstecken show fgesamt; # Rahmen für Sendertasten anzeigen get fselector, filename; # Dateinamen von Dateiauswahl übernehmen open thefile, filename; # Datei öffnen get thefile, field1; # Zeile für Zeile aus Datei lesen und dem get thefile, field2; # jeweiligen Feld zuweisen if length(field1) <> 0; # Strings um 2 Zeichen kürzen # (Zeilenumbruch wegschneiden) field1 = left(field1, length(field1)-2); end_if; put btn[1], field1; # Übergabe der Strings an die Tasten # (Sendernamen) frequenz[1] =value(field2); # Frequenzzuweisung zu den Tasten bart[1]= value(field3); # Betriebsartzuweisung end; # Das auslesen der einzelnen Zeilen und die Übergabe an die # einzelnen Fehler lässt sich sicher auch weniger umfangreich # gestalten, damit es aber übersichtlich bleibt wurde jede # Teilfunktion einzeln ausgeführt.
Kurzlink hierhin: http://geos-printarchiv.de/3005 |
||||||||||||||||||||||||||||||||||||||||||||
Letzte Änderung am 01.11.2019 |