Seite 1 von 1

Analoge Messwerterfassung / Multimeter 5491A [Perl]

Verfasst: Mi 24. Aug 2011, 16:18
von QME
Guten Tag,
werde analoge Messverstärker verwendet, kann es erforderlich sein, dass die Ausgangssignale (Strom/Spannung) digital eingelesen werden sollen. Ein entsprechendes Multimeter mit RS232-Schnittstelle würde dies ermöglichen.

Im folgenden ein paar Code-Snippets für die Kommunikation mit einem BK Precision 5491A Multimeter in Verbindung mit einem Perl-Script

Initaliserung des Multimeters am angegeben Com-Port
Das Multimeter 5491A muss initialisiert werden, damit die Kommunikation zwischen PC-Schnittstelle und Multimeter hergestellt und aktiviert wird.
Ist alles in Ordnung, gibt das Perl-Script entsprechende positive Rückmeldung - in der Anzeige des Multimeters erscheint der Begriff REMOTE.
Ist der REMOTE Zustand aktiv, werden alle Eingaben am Multimeter direkt ignoriert, es ist dann nur eine Software-Kommunikation möglich.

Code: Alles auswählen

#!/usr/bin/perl
use Tk;
use Win32::SerialPort qw( :STAT 0.19 ); # erforderlich für die serielle Schnittstelle
use strict;

my $schnittstelle = "com3"; # hier wird angegeben welcher COM-Port genutzt werden soll
my $quiet;
my $pass;
my $return;


my $mw = new MainWindow;
$mw->title ("5491A Initialisierung"); # Fenster Titel
my $label1 = $mw->Label (-text=>"Messwert wird geholt");
#my $entry1 = $mw->Entry (-width=>60);


# Constructor & Basic Values

my $ob = new Win32::SerialPort ($schnittstelle, $quiet) || die "Can't open $schnittstelle: $^E\n";    # $quiet is optional
$ob->baudrate (9600) || die "fail setting baudrate";
$ob->parity ("none") || die "fail setting parity";
$ob->databits (8) || die "fail setting databits";
$ob->stopbits (1) || die "fail setting stopbits";
$ob->handshake ("none") || die "fail setting handshake";
$ob->dtr_active (1) || die "fail setting dtr_active";

$ob->write_settings || die "no settings";

sleep 1;


$pass = $ob->write("R1\015\n") or die ("Fehler: $!");

sleep 1;

if (($return = $ob->input) ne "")
{
   $ob->write ($return);
   print "$return";
   $label1->configure(-text=>"Messwert geholt (Initialisierung erfolgreich): $return");
}
else
{
   $label1->configure(-text=>'Es konnte kein Messwert gelesen werden. Bitte Verbindung kontrollieren.');
}
undef $ob;
$label1->pack (-side=>"left");
#$entry1->pack (-side=>"left");
MainLoop;


Umschalten des 5491A Messbereiches - auf Spannung umschalten AUTO DC

Code: Alles auswählen

#!/usr/bin/perl

use Win32::SerialPort qw( :STAT 0.19 );
use strict;

my $schnittstelle = "com3";
my $quiet;
my $pass;
my $return;

my $ob = new Win32::SerialPort ($schnittstelle, $quiet) || die "Can't open $schnittstelle: $^E\n";    # $quiet is optional
$ob->baudrate (9600) || die "fail setting baudrate";
$ob->parity ("none") || die "fail setting parity";
$ob->databits (8) || die "fail setting databits";
$ob->stopbits (1) || die "fail setting stopbits";
$ob->handshake ("none") || die "fail setting handshake";
$ob->dtr_active (1) || die "fail setting dtr_active";

$ob->write_settings || die "no settings";

sleep 1; # Sleep erfordlich
$pass = $ob->write("S10\015\n") or die ("Fehler: $!"); # dies ist der eigentliche Befehl!
sleep 1;
undef $ob;


Umschalten des 5491A Messbereiches - auf Strom umschalten AUTO

Code: Alles auswählen

#möchte man Ströme messen, ist das obige Codebeispiel in folgender Zeile anzupassen:
$pass = $ob->write("S140\015\n") or die ("Fehler: $!");
# kurz gesagt anstatt S10, S140


Befehl - Messwert holen

Code: Alles auswählen

$pass = $ob->write("R1\015\n") # R1\015\n ruft einen Messwert ab!