ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 串口通信编程一例

串口通信编程一例

原创 Linux操作系统 作者:perltest 时间:2010-05-08 21:26:47 0 删除 编辑

医院新进一台生化分析仪,这台机器可以通过串口和电脑连接,化验结果可以通过串口传到电脑进行处理。

厂家提供了电脑端的软件,经过测试,软件可以接收到化验数据,但打印格式并不符合医院的要求,更重要的是,软件没有数据导出功能,化验结果不能整理到医院HIS系统里。

为了解决上问题,只能重新编程解决问题。

在Google上查询,Perl要处理串口通信要安装Win32::Serialport模块,如果在Linux上可以用Device::Serialport模块。

化验室的电脑是XP,在ActivePerl中安装Win32::Serialport模块,在ActivePerl中试了几次,没有安装好,因为这个模块需要编译,而XP上没有编译器。

后来想起了草莓Perl,自带编译器,所以安装了草莓Perl,顺利完成Win32::SerialPort和Win32::API两个模块。

化验室的电脑只需要接收数据,在Google上查“perl serialport”,会找到一些程序例子,经过简单的修改就可以在串口接收数据。

一旦接收数据成功,其他的问题,比如整理打印格式、写入其他数据库等等,都很好解决。

以下是部分关键代码:

#!/usr/bin/perl

use Win32::SerialPort;

my $port = 'COM1';
my $PortObj = new Win32::SerialPort ($port) || die "Can't open $port: $^E\n";    # $quiet is optional

$PortObj->error_msg(1);            # use built-in error messages
$PortObj->user_msg(1);

$PortObj->databits(8);
$PortObj->baudrate(9600);
$PortObj->parity("none");
$PortObj->stopbits(1);

$PortObj->write_settings || die "Couldn't write settings\n";
sleep 3;

 my $InBytes = 3000;
 my ($count_in, $string_in) = $PortObj->read($InBytes);

 if ($count_in != 0)
 {
  print "Status: $count_in \n$string_in\n";
  print "$string_in\n";
 }


undef $PortObj;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21129783/viewspace-662258/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2016-08-15

  • 博文量
    111
  • 访问量
    132261