LPT-Control

 

 

Mit dem LPT-Port am PC stehen 8 Datenleitungen zur Verfügung, mit denen diverse Steuerungsaufgaben realisiert werden können. 

 

Testweise wurde für ein Projekt eine "Haussteuerung" simuliert. Konkret ging es dabei um das Schalten von Beleuchtung in 8 Räumen. 

 

 

Die Hardware wurde am LPT-Port mittels der LED-Karte simuliert. Diese könnte aber z.B. durch die K8i Relaiskarte ersetzt werden.

 

Zur Software: 

Das Backend bilden für jeden Ausgang je eine .exe-Datei für das Ein- und Ausschalten des jeweiligen Ausgangs. 

Das Programm liest den jeweiligen Zustand der Ausgänge ein, rechnet je nach gewünschtem Zustand (ein/aus) den nötigen Wert zum Ausgang dazu (8 bit), und schreibt auf den Port.

In C sieht das so aus:

#include <stdio.h>
#include <conio.h>
#include <windows.h>


typedef short _stdcall (*inpfuncPtr)(short portaddr);
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

int main(void)
{
HINSTANCE hLib;
inpfuncPtr inp32;
oupfuncPtr oup32;

short x;
int i, array[8],a,var;

hLib = LoadLibrary("inpout32.dll");
inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");

i=0x378;
x = (inp32)(i);
var = x;


for(a=0;a<8;a++)
{
if(var % 2 == 0)
array[a] = 0;
if(var % 2 == 1)
array[a] = 1;
var = var / 2;
}
if(array[7] == 0 || x < 128)
{
x = x + 128;
(oup32)(i,x);
}
FreeLibrary(hLib);

}

 

Zwar gibt dies für 8 Ausgänge 16 .exe-Dateien, zuzüglich einer .exe um den Zustand einmalig auszulesen, aber diese Art ist sehr flexibel, vor allem im Zusammenhang mit folgendem: 

Nun lassen sich vom PC aus durch aufrufen der .exe-Dateien die einzelnen Ausgänge ein- und ausschalten. Um dies zu Visualisieren, wurde in einer .html ein Grundriss des Hauses als Imagemap erstellt, mit Schaltflächen für an/aus für jeden Raum.

Die Schaltflächen rufen eine .php-Abfrage auf, welche mittels exec-Befehl die zugehörige .exe aufrufen, und aus der .exe den aktuellen Dezimalwert 0-255 des Ausgangszustandes zurückbekommen. Dieser Dezimalwert wird in der .php umgerechnet auf einen 8-bit Binärwert, welcher den Schaltzustand im .html optisch darstellt (Lampe an/aus).

Da das ganze Frontend auf dem Rechner per .html/.php läuft (lokal auf xampp), ist es ein einfaches, auf diese Visualisierung auch aus der Ferne zuzugreifen. Hier bietet sich ein dDNS-Dienst an, wodurch per fester Adresse auf den heimischen Rechner zugegriffen werden kann. So können aus der Ferne alle Funktionen bedient werden. 

 

 

Sich in die gesamte Programmierung einzuarbeiten ist natürlich nicht ganz einfach. Ohne Kenntnisse in HTML, PHP, C, geht nichts. Auch wird man sich zu Anfang mit den direkten Hardwarezugriffen etwas schwer tun, soweit ich weiß, ist noch eine Library (inpout32) zusätzlich notwendig.