package Omega::DP41::Data::Current;
use warnings;
use strict;
use base 'Exporter';
our $VERSION = '0.3.4';
our @EXPORT = qw(serial_data);
####################
### OS Dependant ###
####################
BEGIN {
require autouse;
autouse->import(
$^O =~ /^win32/i ? "Win32::SerialPort" : "Device::SerialPort"
);
}
########################
### End OS Dependant ###
########################
=head1 NAME
DP41::Data::Current - Module for retrieving data from an Omega brand Thermacouple.
=head1 SYNOPSIS
use DP41::Data::Current;
$temp = serial_data();
=head1 REQUIRES
Requires Device::SerialPort or Win32::SerialPort depending on platform.
=head1 DESCRIPTION
Module for retrieving the current reading on a Omega DP41 Thermocouple. Module has been tested on Omega DP41-RTD only, unknown if it will work with other models. Requires Device::SerialPort or Win32::SerialPort depending on platform.
=head1 AUTHOR/LICENSE
Perl Module DP41::Data::Current, retrieves current reading from Omega DP41-RTD Thermocouple.
Copyright (C) 2008-2009 Stanford University, Authored by Sam Kerr kerr@cpan.org
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
=head2 Functions
One function is exported by default (serial_data).
=head3 serial_data
$temp = serial_data();
Returns the current reading from a DP41 Thermacouple.
=head2 Changelog
04-06-09 - v0.3.4 Added PREREQ_PM => Device::SerialPort to makefile
04-02-09 - v0.3.2 Modified to run on Win32 (experimental!)
=cut
sub serial_data{
my $current;
my $device = "/dev/ttyS0";
my $serial = Device::SerialPort-> new($device, 1);
die "Can't open serial port $serial: $^E\n" unless ($serial);
$serial->user_msg(0);
$serial->databits(7);
$serial->baudrate(9600);
$serial->parity("odd");
$serial->stopbits(1);
$serial->handshake("none");
$serial->datatype('raw');
$serial->dtr_active('T');
$serial->stty_icrnl(0);
$serial->write_settings;
print $serial->write("*X01\r");
my $STALL_DEFAULT=5;
my $timeout=$STALL_DEFAULT;
$serial->read_char_time(0);
$serial->read_const_time(1000);
my $chars=0;
my $buffer="";
my ($count,$saw)=$serial->read(255);
if ($count > 0) {
$chars+=$count;
$buffer.=$saw;
$current = $buffer;
}
$current =~ s/^X......//g;
$current =~ s/\.{1}//g;
return $current;
$serial->close();
}