TEST-PROGRAMM, erstellt unter SUSE-LINUX 8.0

Programmiersprache: PERL

Man sieht mit diesem kleinen Test-Programm, wie einfach es ist:

Hier das Test-Programm:



#!/usr/bin/perl



printf "------------------------------------------------------------\n";

printf "PERL-Programm test2.pl:\n";

printf "TEST CAN-MODUL 31.12.2003 G.FI:\n";

printf "AUSGAENGE so schalten, wie die EINGAENGE gedrueckt werden\n";

printf "\n";

printf "HINWEIS: im Background laeuf gfi_receive, das staendig\n";

printf "den Status der EINGAENGE im File EINGAENGE liefert\n";

printf "------------------------------------------------------------\n";



## so sieht File EINGAENGE z. B. aus: MODUL und STATUS der EINGAENGE

## 0x00000201:111111110000000000000000000000

## 0x00000301:111111110000000000000000000000



#################################################

#### VORSPANN #######

#################################################



open(F_CAN,"|gfi_send -t=isa") || die("FEHLER: open von gfi_send");



$oh=select(F_CAN); $|=1; select($oh);

$oh=select(STDOUT); $|=1; select($oh);



$modul=0x201; ## ADDR des E/A-Moduls



#################################################

#### ab hier wird geschaltet #######

#################################################



$addr=sprintf("0x%x",$modul);



## alle Ausgaenge OFF schalten

printf(F_CAN "$addr 4 0xff\n");



sleep(5);



while(1) { ## Endlos-Schleife

@eingang_old=@eingang;

hole_eingaenge($modul);

for($i=0;$i<8;$i++) {

if($eingang_old[$i] != $eingang[$i]) { ## nur bei Aenderung

if($eingang[$i] == 0) { schalte($addr,$i,0); }

if($eingang[$i] == 1) { schalte($addr,$i,1); }

}

}

}



#################################################

#### FUNKTIONEN ####

#################################################



sub schalte {

my $addr=shift;

my $ausgang=shift;

my $an_aus=shift;



printf "sub schalte, addr: $addr, ausgang: $ausgang, an_aus: $an_aus\n";



if($an_aus == 0) { $cmd="0x04"; }

if($an_aus == 1) { $cmd="0x03"; }



$ausgabe=1;

$ausgabe=$ausgabe << $ausgang;

printf(F_CAN "%s %s 0x%02x\n",$addr,$cmd,$ausgabe);

}



sub hole_eingaenge {

my $modul=shift;



my $such_string=sprintf("0x%08x:",$modul);

printf "hole_eingaenge(), such_string: %s\n",$such_string;



open(F_EING,"EINGAENGE") || die("FEHLER: open von EINGAENGE");

while(my $rec=<F_EING>) {

if($rec =~ /^$such_string/ ) {

for(my $i=0;$i<8;$i++) {

$eingang[$i]=substr($rec,11+$i,1);

}

last;

}

}

close(F_EING);

}



### +------------------------------------------------------------------+

### ! Georg Fischer, Amselweg 7, D-89281 Herrenstetten Germany !

### ! Dipl.-Ing. (FH) Holztechnik !

### ! Email: ==> G-F-I@t-online.de <== (best way to reach me) !

### ! Internet: http://www.fischer-altenstadt.de !

### ! Internet: http://www.holz-technologie-beratung.de !

### ! Telefon: +49-8337-8646 !

### ! Telefax: +49-8337-9118 !

### +------------------------------------------------------------------+