#!/usr/local/bin/perl ## ## write_dac_current - set the value of an EAC DAC ## ## Usage: write_dac_current ## Example write_dac_current eac1 2 .5 ## ## ## FxxxxxZ = bad command data ## bhimebau 9/13/04 - script creation use Socket; if (@ARGV != 3) { print "\nUSAGE: write_dac_current \n"; print "EXAMPLE: write_dac_current eac1 2 0.5\n"; print "Command DAC 2 on eac1 to output 0.5mA\n\n"; exit; } $eac=shift; $channel=shift; $current=shift; if (($eac!="eac1")||($eac!="eac2")||($eac!="eac3")||($eac!="eac4")) { print "command syntax error - $eac not found - you must target eac1, eac2, eac3, or eac4\n"; exit; } if (($channel>15)||($channel<0)) { print "command syntax error - channel number must be between 0 and 15\n"; exit; } if (($current>1)||($current<0)) { print "command_syntax_error - current must be between 0.000 and 1.000 mA\n"; exit; } $dac_counts = $current*1023; $round_counts = sprintf("%d",$dac_counts); # Socket setup $iaddr = inet_aton("$eac") || die "no host: $eac"; $paddr = sockaddr_in("17000",$iaddr); $proto = getprotobyname("tcp"); socket(S,PF_INET,SOCK_STREAM,$proto) || die "socket: $!"; connect(S, $paddr) || die "connect: $!"; select(S); $|=1; select("stdout"); $dac_string=sprintf("D%02x%03xZ",$channel,$round_counts); print S "$dac_string\n"; $result = ; print "$result"; close (S);