$Lab::Moose::Instrument::Lakeshore340::VERSION
=
'3.930'
;
validated_getter validated_setter setter_params /
;
with
qw(
)
;
has
input_channel
=> (
is
=>
'ro'
,
isa
=> enum( [
qw/A B C D/
] ),
default
=>
'A'
,
);
has
default_loop
=> (
is
=>
'ro'
,
isa
=> enum( [ 1 .. 2 ] ),
default
=> 1,
);
sub
BUILD {
my
$self
=
shift
;
$self
->clear();
$self
->cls();
}
my
%channel_arg
= (
channel
=> {
isa
=> enum( [
qw/A B C D/
] ),
optional
=> 1 } );
my
%loop_arg
= (
loop
=> {
isa
=> enum( [
qw/1 2/
] ),
optional
=> 1 } );
sub
get_T {
my
(
$self
,
%args
) = validated_getter(
\
@_
,
%channel_arg
);
my
$channel
=
delete
$args
{channel} //
$self
->input_channel();
return
$self
->query(
command
=>
"KRDG? $channel"
,
%args
);
}
sub
get_value {
my
$self
=
shift
;
return
$self
->get_T(
@_
);
}
sub
get_sensor_units_reading {
my
(
$self
,
%args
) = validated_getter(
\
@_
,
%channel_arg
);
my
$channel
=
delete
$args
{channel} //
$self
->input_channel();
return
$self
->query(
command
=>
"SRDG? $channel"
,
%args
);
}
sub
get_setpoint {
my
(
$self
,
%args
) = validated_getter(
\
@_
,
%loop_arg
);
my
$loop
=
delete
$args
{loop} //
$self
->default_loop;
return
$self
->query(
command
=>
"SETP? $loop"
,
%args
);
}
sub
set_setpoint {
my
(
$self
,
$value
,
%args
) = validated_setter(
\
@_
,
%loop_arg
);
my
$loop
=
delete
$args
{loop} //
$self
->default_loop;
$value
=
sprintf
(
"%.6G"
,
$value
);
$self
->
write
(
command
=>
"SETP $loop,$value"
,
%args
);
}
sub
set_T {
my
$self
=
shift
;
$self
->set_setpoint(
@_
);
}
sub
set_heater_range {
my
(
$self
,
$value
,
%args
) = validated_setter(
\
@_
,
value
=> {
isa
=> enum( [
qw/0 1 2 3 4 5/
] ) }
);
$self
->
write
(
command
=>
"RANGE $value"
,
%args
);
}
sub
get_heater_range {
my
(
$self
,
%args
) = validated_getter( \
@_
);
return
$self
->query(
command
=>
"RANGE?"
,
%args
);
}
sub
set_control_mode {
my
(
$self
,
$value
,
%args
) = validated_setter(
\
@_
,
value
=> {
isa
=> enum( [ ( 1 .. 6 ) ] ) },
%loop_arg
);
my
$loop
=
delete
$args
{loop} //
$self
->default_loop;
return
$self
->
write
(
command
=>
"CMODE $loop,$value"
,
%args
);
}
sub
get_control_mode {
my
(
$self
,
%args
) = validated_getter(
\
@_
,
%loop_arg
);
my
$loop
=
delete
$args
{loop} //
$self
->default_loop;
return
$self
->query(
command
=>
"CMODE? $loop"
,
%args
);
}
sub
set_mout {
my
(
$self
,
$value
,
%args
) = validated_setter(
\
@_
,
value
=> {
isa
=>
'Num'
},
%loop_arg
);
my
$loop
=
delete
$args
{loop} //
$self
->default_loop;
return
$self
->
write
(
command
=>
"MOUT $loop,$value"
,
%args
);
}
sub
get_mout {
my
(
$self
,
%args
) = validated_getter(
\
@_
,
%loop_arg
);
my
$loop
=
delete
$args
{loop} //
$self
->default_loop;
return
$self
->query(
command
=>
"MOUT? $loop"
,
%args
);
}
sub
set_control_parameters {
my
(
$self
,
%args
) = validated_getter(
\
@_
,
%loop_arg
,
%channel_arg
,
units
=> {
isa
=> enum( [
qw/1 2 3/
] ) },
state
=> {
isa
=> enum( [
qw/0 1/
] ) },
powerup_enable
=> {
isa
=> enum( [
qw/0 1/
] ),
default
=> 1 },
);
my
$channel
=
delete
$args
{channel} //
$self
->input_channel();
my
(
$loop
,
$units
,
$state
,
$powerup_enable
)
=
delete
@args
{
qw/loop units state powerup_enable/
};
$loop
=
$loop
//
$self
->default_loop;
$self
->
write
(
command
=>
"CSET $loop, $channel, $units, $state,"
.
"$powerup_enable"
,
%args
);
}
sub
get_control_parameters {
my
(
$self
,
%args
) = validated_getter(
\
@_
,
%loop_arg
);
my
$loop
=
delete
$args
{loop} //
$self
->default_loop();
my
$rv
=
$self
->query(
command
=>
"CSET? $loop"
,
%args
);
my
@rv
=
split
/,/,
$rv
;
return
(
channel
=>
$rv
[0],
units
=>
$rv
[1],
state
=>
$rv
[2],
powerup_enable
=>
$rv
[3]
);
}
sub
set_input_curve {
my
(
$self
,
$value
,
%args
) = validated_setter(
\
@_
,
%channel_arg
,
value
=> {
isa
=> enum( [ 0 .. 60 ] ) },
);
my
$channel
=
delete
$args
{channel} //
$self
->input_channel();
$self
->
write
(
command
=>
"INCRV $channel,$value"
,
%args
);
}
sub
get_input_curve {
my
(
$self
,
%args
) = validated_getter(
\
@_
,
%channel_arg
,
);
my
$channel
=
delete
$args
{channel} //
$self
->input_channel();
return
$self
->query(
command
=>
"INCRV $channel"
,
%args
);
}
sub
set_remote_mode {
my
(
$self
,
$value
,
%args
)
= validated_setter( \
@_
,
value
=> {
isa
=> enum( [ 1 .. 3 ] ) } );
$self
->
write
(
command
=>
"MODE $value"
,
%args
);
}
sub
get_remote_mode {
my
(
$self
,
%args
) = validated_getter( \
@_
);
return
$self
->query(
command
=>
"MODE?"
,
%args
);
}
sub
set_pid {
my
(
$self
,
%args
) = validated_getter(
\
@_
,
%loop_arg
,
P
=> {
isa
=>
'Lab::Moose::PosNum'
},
I
=> {
isa
=>
'Lab::Moose::PosNum'
},
D
=> {
isa
=>
'Lab::Moose::PosNum'
}
);
my
(
$loop
,
$P
,
$I
,
$D
) =
delete
@args
{
qw/loop P I D/
};
$loop
=
$loop
//
$self
->default_loop();
$self
->
write
(
command
=>
sprintf
(
"PID $loop, %.1f, %.1f, %d"
,
$P
,
$I
,
$D
),
%args
);
}
sub
get_pid {
my
(
$self
,
%args
) = validated_getter(
\
@_
,
%loop_arg
);
my
$loop
=
delete
$args
{loop} //
$self
->default_loop;
my
$pid
=
$self
->query(
command
=>
"PID? $loop"
,
%args
);
my
%pid
;
@pid
{
qw/P I D/
} =
split
/,/,
$pid
;
return
%pid
;
}
sub
set_zone {
my
(
$self
,
%args
) = validated_getter(
\
@_
,
%loop_arg
,
zone
=> {
isa
=> enum( [ 1 .. 10 ] ) },
top
=> {
isa
=>
'Lab::Moose::PosNum'
},
P
=> {
isa
=>
'Lab::Moose::PosNum'
},
I
=> {
isa
=>
'Lab::Moose::PosNum'
},
D
=> {
isa
=>
'Lab::Moose::PosNum'
},
mout
=> {
isa
=>
'Lab::Moose::PosNum'
,
optional
=> 1 },
range
=> {
isa
=> enum( [ 0 .. 5 ] ) },
);
my
(
$loop
,
$zone
,
$top
,
$P
,
$I
,
$D
,
$mout
,
$range
)
=
delete
@args
{
qw/loop zone top P I D mout range/
};
$loop
=
$loop
//
$self
->default_loop;
if
(
defined
$mout
) {
$mout
=
sprintf
(
"%.1f"
,
$mout
);
}
else
{
$mout
=
' '
;
}
$self
->
write
(
command
=>
sprintf
(
"ZONE $loop, $zone, %.6G, %.1f, %.1f, %d, $mout, $range"
,
$top
,
$P
,
$I
,
$D
),
%args
);
}
sub
get_zone {
my
(
$self
,
%args
) = validated_getter(
\
@_
,
%loop_arg
,
zone
=> {
isa
=> enum( [ 1 .. 10 ] ) }
);
my
(
$loop
,
$zone
) =
delete
@args
{
qw/loop zone/
};
$loop
=
$loop
//
$self
->default_loop;
my
$result
=
$self
->query(
command
=>
"ZONE? $loop, $zone"
,
%args
);
my
%zone
;
@zone
{
qw/top P I D mout range/
} =
split
/,/,
$result
;
return
%zone
;
}
sub
set_analog_out {
my
(
$self
,
%args
) = validated_getter(
\
@_
,
output
=> {
isa
=> enum( [ 1, 2 ] ) },
bipolar_enable
=> {
isa
=> enum( [ 0, 1 ] ),
default
=> 0 },
mode
=> {
isa
=> enum( [ 0, 1, 2, 3 ] ) },
input
=> {
isa
=> enum( [
qw/A B C D/
] ),
default
=>
''
},
source
=> {
isa
=> enum( [ 1, 2, 3, 4 ] ),
default
=>
''
},
high_value
=> {
isa
=>
'Num'
,
default
=>
''
},
low_value
=> {
isa
=>
'Num'
,
default
=>
''
},
manual_value
=> {
isa
=>
'Num'
,
default
=>
''
},
);
my
(
$output
,
$bipolar_enable
,
$mode
,
$input
,
$source
,
$high_value
,
$low_value
,
$manual_value
)
=
delete
@args
{
qw/output bipolar_enable mode input source high_value low_value manual_value/
};
$self
->
write
(
command
=>
"ANALOG $output, $bipolar_enable, $mode, $input, $source, $high_value, $low_value, $manual_value"
,
%args
);
}
sub
get_analog_out {
my
(
$self
,
%args
) = validated_getter(
\
@_
,
output
=> {
isa
=> enum( [ 1, 2 ] ) },
);
my
$output
=
delete
$args
{
'output'
};
my
$result
=
$self
->query(
command
=>
"ANALOG? $output"
,
%args
);
my
%analog_out
;
@analog_out
{
qw/output bipolar_enable mode input source high_value low_value manual_value/
} =
split
/,/,
$result
;
return
%analog_out
;
}
__PACKAGE__->meta()->make_immutable();
1;