Die Relaiskarte kann ich ueber den Webbrowser ansprechen und steuern.
folgen Code wird verwendet:
# URL des Perlscripts
my $script_url = "http://xxx.xxx.xxx:80/cgi-bin/relais/relais.pl";
# URL des HTML-Verzeichnis (ohne Schraegstrich am Ende)
my $noncgi_dir = ".";
# Portadresse (LTP1 => 0x378 / LTP2 => 0x278)
my $port = 0x378;
# Schalter/Tasten-Modus (0 = Schaltermodus, 1 = Tastenmodus)
my $mode = "0";
# Automatische Aktualisierung (0 = aus, 1 oder groesser = Refresh-Intervall in Sekunden)
my $refresh = "15";
# Name der Seite
my $page_name = "Relaiskarten-Steuerung" ;
# Name des Statusfeldes
my $status_name = "Status der Relais";
# Statusfeld anzeigen (0 = Anzeige aus, 1 = Anzeige ein)
my $status_view = "1";
# Namen der Schalter
my @switch_name = ("Schalter 1","Schalter 2","Schalter 3","Schalter 4","Schalter 5","Schalter 6","Schalter 7","Schalter 8");
# Schalter anzeigen (0 = Anzeige aus, 1 = Anzeige ein)
my @switch_view = ("1","1","1","1","1","1","1","1");
# Name des Feldes zum Schalten aller Relais
my $all_name = "Alle Relais";
# Feld "Alle Relais" anzeigen (0 = Anzeige aus, 1 = Anzeige ein)
my $all_view = "1";
# Name des Eingangsfeldes
my $input_name = "Status der Eingnge";
# Eingangsfeld anzeigen (0 = Anzeige aus, 1 = Anzeige ein)
my $input_view = "0";
# Namen der LEDs (n/a = ohne Funktion nicht aendern)
my @led_name = ("n/a","n/a","n/a","Pin 15","Pin 13","Pin 12","Pin 10","Pin 11");
# LEDs anzeigen (n/a = ohne Funktion nicht aendern, 0 = Anzeige aus, 1 = Anzeige ein)
my @led_view = ("n/a","n/a","n/a","1","1","1","1","1");
##############################################################################
use strict;
use CGI;
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);
use Win32::API; # load API module to interface DLL's
my $GetPortVal = new Win32::API("inpout32", "Inp32", ['I'], 'I'); # import Inp32 from DLL
my $SetPortVal = new Win32::API("inpout32", "Out32", ['I','I'], 'I'); # import Out32 from DLL
my @status;
$port = $port + 2;
readPort();
$status[5] = "0"; # Bidirektional aus
writePort();
$port = $port - 2;
if($mode > 0) { setLow(); }
readPort();
if($cgi->param()) {
checkForm();
writePort();
if($mode > 0) {
sleep($mode);
setLow();
readPort();
}
}
printHeader();
if ($status_view > 0) { printStatus(); }
if ($all_view > 0) { printAll(); }
if ($input_view > 0) {
$port = $port + 1;
readPort();
printInput();
}
printRefresh();
printFooter();
##############################################################################
# Port auslesen und Bitstatus setzen
sub readPort {
my $wert = $GetPortVal->Call($port) & 255;
for(my $i = 7; $i >= 0; $i--) {
$status[$i] = int($wert / (2 ** ($i)));
$wert = $wert % (2 ** ($i));
}
}
# Formulardaten auswerten und neuen Bitstatus setzen
sub checkForm {
my $a = $cgi->param("A");
if($a eq "Einschalten") {
for(my $i = 0; $i <= 7; $i++) {
$status[$i] = 1;
}
}
elsif($a eq "Ausschalten") {
for(my $i = 0; $i <= 7; $i++) {
$status[$i] = 0;
}
}
for(my $i = 0; $i <= 7; $i++) {
my $s = $cgi->param("S$i");
if($s ne "") {
my $r = $cgi->param("R$i");
if($r == 0) {
$status[$i] = 1;
}
elsif($r == 1) {
$status[$i] = 0;
}
}
}
}
# Bitstatus auf Port schreiben
sub writePort {
my $wert = 0;
for(my $i = 0; $i <= 7; $i++) {
$wert += $status[$i] * (2 ** ($i));
}
my $return = $SetPortVal->Call($port,$wert);
}
# Bytestatus 0 auf Port schreiben
sub setLow {
my $wert = 0;
my $return = $SetPortVal->Call($port,$wert);
}
# Ausgabe im Browser
sub printHeader {
print "Content-type: text/html
";
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
";
print "<html>
";
print "<head>
";
if($refresh > 0) { print "<meta http-equiv=\"refresh\" content=\"$refresh; URL=$script_url\">
"; }
print "<meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\">
";
print "<link rel=\"stylesheet\" type=\"text/css\" href=\"$noncgi_dir/format.css\">
";
print "<title>$page_name</title>
";
print "</head>
";
print "<body>
";
print "<p><big>$page_name</big></p>
";
print "<form name=\"Relais\" action=\"$script_url\" method=\"post\">
";
}
sub printFooter {
print "</form>
";
print "<p><small>Relais-Steuerung<br>©\; 2009-2010 ANOuBIS </small></p>
";
print "</body>
";
print "</html>
";
}
sub printStatus {
print "<fieldset><legend>$status_name</legend>
";
print "<table><tr>
";
for(my $i = 0; $i <= 7; $i++) {
if($switch_view[$i] > 0) {
if($status[$i] == 1) {
print "<td>
";
if($mode == 0) { print "<img src=\"$noncgi_dir/led_ein.gif\" alt=\"\"><br>
"; }
print "<input type=\"hidden\" name=\"R$i\" value=\"1\">
";
if($switch_name[$i] eq "") {
$switch_name[$i] = "Schalter " . ($i + 1);
}
print "<input type=\"submit\" name=\"S$i\" value=\"$switch_name[$i]\">
";
print "</td>
";
}
elsif($status[$i] == 0) {
print "<td>
";
if($mode == 0) { print "<img src=\"$noncgi_dir/led_aus.gif\" alt=\"\"><br>
"; }
print "<input type=\"hidden\" name=\"R$i\" value=\"0\">
";
if($switch_name[$i] eq "") {
$switch_name[$i] = "Schalter " . ($i + 1);
}
print "<input type=\"submit\" name=\"S$i\" value=\"$switch_name[$i]\">
";
print "</td>
";
}
}
}
print "</tr></table>
";
print "</fieldset>
";
print "<p></p>
";
}
sub printAll {
print "<fieldset><legend>$all_name</legend>
";
print "<table><tr>
";
print "<td>
";
print "<input type=\"submit\" name=\"A\" value=\"Einschalten\">
";
print "</td>
";
if($mode == 0) {
print "<td>
";
print "<input type=\"submit\" name=\"A\" value=\"Ausschalten\">
";
print "</td>
";
}
print "</tr></table>
";
print "</fieldset>
";
print "<p></p>
";
}
sub printInput {
print "<fieldset><legend>$input_name</legend>
";
print "<table><tr>
";
for(my $i = 3; $i <= 7; $i++) {
if($led_view[$i] > 0) {
if($status[$i] == 1) {
print "<td>
";
if($i < 7) { print "<img src=\"$noncgi_dir/led_aus.gif\" alt=\"\"><br>
"; }
else { print "<img src=\"$noncgi_dir/led_ein.gif\" alt=\"\"><br>
"; }
print "<small>$led_name[$i]</small>
";
print "</td>
";
}
elsif($status[$i] == 0) {
print "<td>
";
if($i < 7) { print "<img src=\"$noncgi_dir/led_ein.gif\" alt=\"\"><br>
"; }
else { print "<img src=\"$noncgi_dir/led_aus.gif\" alt=\"\"><br>
"; }
print "<small>$led_name[$i]</small>
";
print "</td>
";
}
}
}
print "</tr></table>
";
print "</fieldset>
";
print "<p></p>
";
}
sub printRefresh {
print "<fieldset><legend>Anzeige</legend>
";
print "<table><tr>
";
print "<td>
";
print "<input name=\"refresh\" type=\"button\" value=\"Anzeige aktualisieren\" onClick=\"javascript:location.href=\'$script_url\';\">
";
print "</td>
";
print "</tr></table>
";
print "</fieldset>
";
}
Gerne wuerde ich dies in die IPS einbinden, aber klappt ned so richtig