From: Michael Traxler Date: Fri, 14 Nov 2014 10:43:53 +0000 (+0100) Subject: Added status/control scripts for power supplies X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=21445f330ba425fd38bd2dc82d5798afb94a8d21;p=daqtools.git Added status/control scripts for power supplies --- diff --git a/users/cern_cbmrich/hameg.pl b/users/cern_cbmrich/hameg.pl new file mode 100755 index 0000000..b9d8c56 --- /dev/null +++ b/users/cern_cbmrich/hameg.pl @@ -0,0 +1,73 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use IO::Socket; +use Time::HiRes qw(usleep); + +sub showUsage { + print "usage: tdk.pl [ON|OFF|ON#|OFF#|MEAS] HOST\n"; + print " where ON/OFF applies to all channels and ON#/OFF# to the number (1-4) specified\n"; + print " example turn off 1 channel: ./hameg.pl OFF1 hameg01\n"; + + exit; +} + +my $cmd = $ARGV[0] or showUsage; +my $peer = $ARGV[1] or showUsage; +my $socket; + +$cmd = uc $cmd; + + +sub measure { + my @values = (); + for(my $chan = 1; $chan <= 4; $chan++) { + usleep 1e5; print $socket "INST OUT$chan\n"; + + usleep 1e5; print $socket "MEAS:VOLT?\n"; my $volt = <$socket>; + usleep 1e5; print $socket "MEAS:CURR?\n"; my $curr = <$socket>; + usleep 1e5; print $socket "OUTP:STAT?\n"; my $stat = <$socket>; + + chomp $volt; + chomp $curr; + chomp $stat; + + $stat = $stat eq "1" ? "ON" : "OFF"; + + print "$peer CH $chan: $curr A @ $volt V ($stat)\n"; + } +} + +sub switchPowerGen { + my $state = shift; + $state = (uc($state) eq 'ON' ? 'ON' : 'OFF'); + usleep 1e5; print $socket "OUTP:GEN $state\n"; +} + +sub switchPowerChan { + my $chan = shift; + my $state = shift; + $state = (uc($state) eq 'ON' ? 'ON' : 'OFF'); + usleep 1e5; print $socket "INST OUT$chan\n"; + usleep 1e5; print $socket "OUTP:STAT $state\n"; +} + + +local $SIG{ALRM} = sub { die 'ERROR: Timed Out'; }; +alarm 3; + +$socket = IO::Socket::INET->new(PeerAddr => $peer, PeerPort => 50000, Proto => "tcp", Type => SOCK_STREAM) or die "ERROR: Cannot connect: $@"; + +if ($cmd eq "ON" || $cmd eq "OFF") { + switchPowerGen $cmd; + measure; +} elsif ($cmd =~ m/^(ON|OFF)([1-4])$/) { + switchPowerChan $2, $1; + measure; +} elsif ($cmd =~ m/^MEAS/) { + measure; +} else { + showUsage; +} + +alarm 0; diff --git a/users/cern_cbmrich/measure_powers.sh b/users/cern_cbmrich/measure_powers.sh new file mode 100755 index 0000000..b28246e --- /dev/null +++ b/users/cern_cbmrich/measure_powers.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +~/trbsoft/daqtools/users/cern_cbmrich/hameg.pl meas hameg01 & +~/trbsoft/daqtools/users/cern_cbmrich/hameg.pl meas hameg02 & +~/trbsoft/daqtools/users/cern_cbmrich/hameg.pl meas hameg03 & +~/trbsoft/daqtools/users/cern_cbmrich/tdk.pl meas tdklambda & + +wait \ No newline at end of file diff --git a/users/cern_cbmrich/tdk.pl b/users/cern_cbmrich/tdk.pl new file mode 100755 index 0000000..10b567c --- /dev/null +++ b/users/cern_cbmrich/tdk.pl @@ -0,0 +1,56 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use IO::Socket; +use Time::HiRes qw(usleep); + +sub showUsage { + print "usage: tdk.pl [ON|OFF|MEAS] HOST\n"; + exit; +} + +my $cmd = $ARGV[0] or showUsage; +my $peer = $ARGV[1] or showUsage; +my $socket; + +$cmd = uc $cmd; + +sub measure { + my @values = (); + + usleep 1e5; print $socket "MEAS:VOLT?\n"; + my $volt = <$socket>; + usleep 1e5; print $socket "MEAS:CURR?\n"; + my $curr = <$socket>; + usleep 1e5; print $socket "OUTP:STAT?\n"; + my $state = <$socket>; + + chomp $volt; + chomp $curr; + chomp $state; + + print "$peer CH 0: $curr A @ $volt V ($state)\n"; +} + +sub switchPower { + my $state = shift; + $state = (uc($state) eq 'ON' ? 'ON' : 'OFF'); + usleep 1e5; print $socket "OUTP:STAT $state\n"; +} + +local $SIG{ALRM} = sub { die 'ERROR: Timed Out'; }; +alarm 2; + +$socket = IO::Socket::INET->new(PeerAddr => $peer, PeerPort => 8003, Proto => "tcp", Type => SOCK_STREAM) or die "ERROR: Cannot connect: $@"; + +if ($cmd eq "OFF" || $cmd eq "ON") { + switchPower $cmd; + measure; +} elsif ($cmd =~ m/^MEAS/) { + measure; +} else { + showUsage; +} + + +alarm 0;