【问题标题】:How can I continuously read from the serial port in a Perl Win32::GUI program?如何在 Perl Win32::GUI 程序中连续读取串口?
【发布时间】:2009-10-20 15:18:04
【问题描述】:

我想在 Windows XP 下使用Win32::SerialPort 模块从 COM 端口读取文本字符串。

串口有一个秤,可以连续发送当前测量的重量。因为我也在使用Win32::GUI,所以我需要一种读取非阻塞的方法。最好的方法是什么?我应该使用Lookfor 还是streamline?我对文档有点困惑。


原始问题文本: Ich möchte mit dem Modul Win32::SerialPort unter Windows Xp von einem COM-Port ein bestimmten Textstring nur einlesen。 An dem SerialPort ist eine Waage angeschlossen, die Permanent das aktuell gemessene Gewicht ausgibt。 Da ich auch Win32::GUI verwende darf/sollte das einlesen nicht blockierend sein。 Wie stelle ich das am geschicktesten an? sollte ich verwenden Lookfor 还是流线型的? Ich blicke bei dem Manual nicht so richtig durch。

【问题讨论】:

  • Es wäre eine gute Idee diese Frage auf Englisch neu zu formulieren wenn du eine Antwort erwartest... SO ist eine Englisch geprägte Community。 ;-)
  • @MhR: Die Ubersetzung scheint gut mir。 Aber meine Deutche ist nicht sehr gut.... :-)
  • 翻译很棒。
  • 这很有趣;我已经看到很多将串行端口和秤结合起来的问题。很酷!

标签: perl user-interface winapi serial-port


【解决方案1】:

由于设备不断通过串行端口发送信息,您可能需要设置一个计时器并在不阻塞主线程的情况下查看连接中发生了什么。

首先,我将向您指出 Win32::GUI::Tutorial::Part4 讨论计时器的地方。

使用perl.exe,而不是wperl.exe 运行以下示例,因为输出会发送到控制台:

#!/usr/bin/perl

package My::GUI;

use strict; use warnings;

use Win32::GUI();

sub new { bless {} => shift }

sub initialize { # very quick and dirty example
    my $self = shift;

    $self->{window} = Win32::GUI::Window->new(
        -name => 'Main',
        -title => 'Test',
        -onTerminate => sub { -1 },
        -onTimer => sub { $self->onTimer(@_) },
    );

    $self->{timer} = $self->{window}->AddTimer(Timer => 0);
    return $self;
}

sub run {
    my $self = shift;

    my $window = $self->{window};
    $window->Show;
    $window->SetRedraw(1);
    $self->{timer}->Interval(1000);
    Win32::GUI::Dialog();
}

# poll serial port here, don't block
sub onTimer { warn time - $^T, "\n"; return; }

package main;

use strict; use warnings;

My::GUI->new->initialize->run;

输出:

C:\Temp> gui 1 2 3 4 5 6 终止信号 SIGINT(2)

现在,关于Win32::SerialPort 与Win32::CommPort 之间的选择以及哪种方法取决于连接另一端的秤规格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多