PortXXX.txt  vom 18.01.2005

INHALT:
0.  Was ist neu in Version 1.1?
1.  Was soll's?
2.  Was machen die Programme?
3.  Welche Programmiersprachen wurden verwendet?
    3.1 Delphi 3
    3.2 Profan 5.0
    3.3 RapidQ
4.  Was kann die DLL?
5.  Wie geht Schnittstellenprogrammierung?


0.  Was ist neu in Version 1.1?

Steuern der seriellen Schnittstelle unter Win XP:
- Ich konnte jetzt endlich ausgiebig mit Windows XP experimentien. Dabei
  musste ich feststellen, dass unbedingt die serielle Schnittstelle 
  geffnet sein muss, damit Zugriff besteht. Das erledigt die Win API 
  Funktion "CreateFile". Leider lsst sich nicht vermeiden, dass damit 
  auch sofort RTS und DTR ihren Zustand ndern.
- Wenn schon API, dann auch gleich fr das Setzen der Ausgnge (mittels
  EscapeCommFunction) statt direktem Beschreiben der Register.
- Es gibt zwar eine API-Funktion "GetCommModemStatus" zum Lesen der 
  Eingnge (als da wren CTS, DSR, RI und DCD), aber keine zum Lesen 
  der fr die Ausgnge zustndigen Register. Fr die Anzeige dieser 
  Werte wird deshalb weiterhin INP32 aus der inpout32.dll bemht.

Neue IDE fr RapidQ:
- RQWork heit das gute Stck, stammt von einem rumnischen Programmierer 
  und ist Freeware. Der Quelltext hat dafr jetzt die Endung .rqw, ist 
  aber weiterhin eine reine Textdatei. Eine (binre) Formdatei ist hier 
  nicht erforderlich. Weiteres siehe Punkt 3.3.
   

1.  Was soll's? 

Meine Homepage www.FrankSteinberg.de beschftigt sich mit der Ansteuerung von 
Schnittstellen, um damit Aufgaben zum Messen, Steuern und Regeln (MSR) 
realisieren zu knnen. Dabei sollen Computer verwendet werden, die nicht mehr
aktuell und deswegen preiswert zu erhalten sind. Inzwischen gehren dazu 
schon Pentium PCs. Damit sind Programmiersprachen fr Win95 und aufwrts 
interessant. Die beigefgten Programme waren erste Programmierversuche fr 
mich und gleichzeitig ein Test fr die Anwendung einer speziellen 
Schnittstellen-DLL (inpout32.dll), die in gleicher Weise fr Win95/98/ME 
als auch fr die auf WinNT basierenden Versionen (2000/XP) benutzt werden 
kann.


2.  Was machen die Programme?

PortDe, PortPrf und PortRQ schalten alle Ausgnge der gewhlten parallelen 
bzw. seriellen Schnittstelle. Die Werte der beschriebenen Port-Register 
werden anschlieend ausgelesen und angezeigt. Die Programme unterscheiden 
sich im Wesentlichen nur durch die Programmiersprachen, mit denen sie 
erstellt wurden.

LPT1 kann zweimal mit verschiedenen Basisadressen angewhlt werden. 378h 
ist Standard; 3BCh wird manchmal bei Laptops verwendet. Einfach unter 
Start/Einstellungen/Systemsteuerung/Gertemanager/Anschlsse/LPT1
/Ressourcen(E/A-Bereich) nachsehen oder ausprobieren.

Beim Parallelport werden geschaltet:
	+ Datenausgnge D0 - D7
	+ STROBE
	+ AUTO FEED
	+ INIT (RESET)
	+ SELECT INPUT
Bei der seriellen Schnittstelle werden geschaltet:
	+ TxD
	+ DTR
	+ RTS
ACHTUNG:	EIN/AUS bedeuten ca. +12V/-12V bei der seriellen
		und ca. +5V/0V bei der parallelen Schnittstelle.


3.  Welche Programmiersprachen wurden verwendet?

Ziel war es, weitgehend Freeware zu verwenden. Ausnahme ist "PortDe",
das mit Delphi 3 Professional erstellt wurde, was aber sehr gnstig zu 
erhalten ist. Alle verwendeten Programmiersprachen bieten die Mglichkeit, 
die Programmoberflche visuell zu erstellen. 

3.1 Delphi 3
	Dateien:
	- PortDe.dpr		= Delphi-Projektdatei
	- PortDeUnit.pas	= Delphi-Quelltext
	- PortDeUnit.dfm	= Delphi-Formdatei
	- PortDe.exe		= Fertige Anwendung
Die Vollversion von Delphi 3.0 Professional ist im Buch "Delphi fr Kids" 
von Hans-Georg Schumann (ISBN 3-8266-0643-4) enthalten. Fr den uerst 
gnstigen Preis von gut 25 Euro erhalten wir eine professionelle und 
umfangreiche Programmiersprache komplett in deutscher Sprache. Fr Delphi 
gibt es sehr viel Untersttzung im Internet. Auerdem haben wir auch gleich 
noch ein Anfnger-Lehrbuch in der Hand. Die Handbcher sind als PDF auf 
der beileigenden CD enthalten, genauso wie Delphi 1 (zur Windows 3.x-
Programmierung).

3.2 Profan 5.0
	Dateien:
	- PortPrf.prf	= Profan 5.0b-NT Quelltext
	- PortPrf.wfp	= PRFellow Projektdatei
	- PortPrf.exe	= Fertige Anwendung
Profan 5.0 ist die Freeware-Version der Programmiersprache Profan. Die 
aktuelle Version (Shareware) und natrlich auch die hier verwendete Version 
knnen wir unter www.profan.de downloaden. Die Sprache orientiert sich an 
Basic, hat aber einige Besonderheiten. So sind z.B. (in der Version 5.0)
keine Operanden verwendbar (Statt x%=y%+3 hier LET x% = @ADD(y%, 3)).
Vorteilhaft ist sicherlich die gute Hilfefunktion und die durchgngig 
verwendete deutsche Sprache.

Leider ist die "serienmige" Untersttzung zur visuellen Programmierung 
sehr primitiv. Dafr gibt es aber diverse Hilfsprogramme. Einige davon sind 
Freeware. Ich habe PRFellow 2001 verwendet. Das Programm wird nicht mehr 
weiterentwickelt, ist dafr aber als Freeware freigegeben. Nheres siehe 
www.ebs-haase.de .
Leider mssen wir hier, wie auch bei den anderen Hilfsprogrammen einige 
Klippen umschiffen, weil oft aktuellere Versonen als 5.0 vorausgesetzt 
werden. Bei PRFellow haben wir jedoch die Mglichkeit, die INCLUDE-Dateien- 
Quelltext in gewissen Grenzen auf die verwendete Version anzupassen (z.B. 
Befehle neuerer Profan-Versionen durch Win-API Aufrufe zu ersetzen). Das ist 
natrlich nichts fr Anfnger und so bin auch ich da an Grenzen gestoen.
In "PortPrf" habe ich den Aufruf der Include-Dateien stillgelegt 
(auskommentiert). Dafr mssen wir auf SetFormIcon verzichten 
(auskommentiert) und den API-Aufruf GetSysColor selber installieren. Wenn 
wir das jetzt noch nicht verstehen: EGAL. Sinn war, dass es sich auch mit 
der nackten Freeware-Version (also ohne PRFellow) starten/compilieren lsst.  

3.3 RapidQ
	Dateien:
	- PortRQ.rqw	= RQWork / RapidQ-Quelltext
	- PortRQ.exe	= Fertige Anwendung 
RapidQ ist eine sehr eng an Basic angelehnte Sprache. Die EXE-Dateien sind 
trotz Packens mit UPX recht gro und die Ausfhrung ist sehr langsam (was 
wir aber bei den meisten Anwendungen nicht bemerken). Da die Original-IDE 
die Erstellung von Aktionscode nur in sehr bescheidenem Rahmen zulsst, 
habe ich mit der Version 1.1 die alternative IDE "RQWork" verwendet. Die ist 
zwar (noch) nicht perfekt, aber schon um einiges besser, als das Original. 
Wichtig erscheint mir, dass die visuell erstellten Formen auch nachtrglich 
verndert werden knnen und der Aktionscode dabei unbehelligt bleibt (und das 
kann RQWork). Interessant dabei ist, dass beim Starten der IDE die Form 
unseres Programms aus dem Quelltext erzeugt wird. Eine besondere Form-Datei
wird nicht bentigt.

RapidQ wird zwar vom Programmierer nicht mehr weiterentwickelt, eine aktive 
Fangemeinde entwickelt aber weiterhin IDE'en, gefixte Libraries, Help-Dateien,
Include-Code, Beispiele usw.). Vieles ist schwer zu finden, deshalb hier 
einige Links: 
http://lisand1.netfirms.com
(Seite vom Programmierer von RQWork, Download der alten Version 4.0.0.111)			
http://rapid-q.tk
(franzsiche Seite; Download von RQWork Version 4.9.8.100 -empfohlen-)
http://g.yi.org
(groe, hufig aktuallisierte Sammlung fr RapidQ -empfohlen-)
http://groups.yahoo.com/groups/rapidq
(nach kostenloser Registrierung Zugriff auf die aktuellsten Downloads) 
http://groups.yahoo.com/groups/Rq-ide
(wie vor, nur speziell fr RQWork; Download von RQWork Version 4.9.8.100)
http://lisand1.netfirms.com
(Seite vom Programmierer von RQWork, Download der alten Version 4.0.0.111)
http://www.basicguru.com/rapidq
(RapidQ-Originalseite mit Stand August 2000)			


4.  Was kann die DLL?

Die Portzugriffe werden mit "inpout32.dll" realisiert. Diese DLL soll
Portzugriffe auch unter Win NT und dessen Nachfolger (2000, XP) mglich 
machen! Sie enthlt nur die Anweiung Out32 zum Schreiben in ein Port-
Register und die Funktion Inp32, die aus einem Register liest. 
Inpout32.dll muss sich im Ordner des aufrufenden Programms oder im 
Windows-System-Ordner befinden! Bei Win NT muss der Anwender Andministra-
toren-Rechte haben. Infos und Downloads zur DLL unter www.logix4u.net .


5.  Wie geht Schnittstellenprogrammierung?

Ein Tutorial, das die in den Programmen benutzten Port-Register, Bedeutung 
der einzelnen SteuerBits und die Pinbelegungen in epischer Breite beschreibt, 
knnen wir unter www.FrankSteinberg.de/pogss.htm finden. 

Unter Windows hat mir die serielle Schnittstelle einiges Kopfzerbrechen 
bereitet: Mal wurden die Ports geschaltet, mal nicht. Unter Win98 stellte 
sich die Situation wie folgt dar: Die serielle Schnittstelle muss geffnet 
sein, damit die Registerwerte, die wir anstandslos schreiben und lesen 
knnen auch auf die Pins durchgeschaltet werden. Statt des ffnens (ber 
Anweisungen der jeweiligen Programmiersprache oder ber API-Funktionen) 
war es auch ausreichend, im Modem-Steuer-Register Bit3 (Master-Interrupt) 
oder Bit4 (Loop) zu setzen. Selbst wenn die Bits danach wieder gelscht 
wurden, blieb der Zugriff gewhrt. Bit4 mssen wir sogar wieder lschen, 
weil die Loop-Funktion, das externe Schalten der Pins unterdrckt, solange 
Bit4 gesetzt ist. In den vorliegenden Programmen wird deshalb bei jedem 
Schaltbefehl Bit3 (Wert 8) gesetzt. 

Unter Windows-XP (und vermutlich auch bei den anderen auf Win-NT basierenden 
Versionen) muss in jedem Fall die serielle Schnittstelle geffnet werden. Sonst
lsst uns Windows nicht an die Register ran. Die meisten Programmiersprachen 
haben dafr keine eingebauten Funktionen, weshalb wir das Windows API bemhen 
mssen:
 - Funktionen deklarieren  (im Quelltext nach "kernel32" suchen).
   In Delphi ist das mit "uses ... Windows" erledigt.
 - Die Funktionen heien dann
   * CreateFile ...  zum ffnen der Schnittstelle
   * CloseHandle ... zum Schlieen der Schnittstelle
   * EscapeCommFunction ... zum Setzen der Ausgangsleitungen
   * GetCommModemStatus ... zum Lesen der Eingangsleitungen (nur zur Info, wird
                            in diesem Programm nicht verwendet). 


Ich hoffe, ich habe mit den Programmen Anregungen und Hilfe 
fr eigene Projekte gegeben. Wen irgendwas nicht funktioniert,
bitte melden: FrankSteinberg@arcor.de .

Frank Steinberg
SEELZE, im Januar 2005 