1 perl user-interface winapi serial-port
我想在Windows XP下使用Win32 :: SerialPort模块从COM端口读取文本字符串.
串口附有刻度,连续发送当前测量的重量.由于我也在使用Win32 :: GUI,我需要一种方法来读取非阻塞.最好的方法是什么?我应该使用Lookfor或streamline?我对文档感到有点困惑.
原始问题文本: Ichmöchtemitdem Modul Win32 :: SerialPort unter Windows Xp von einem COM-Port ein bestimmten Textstring nur einlesen.一个dem SerialPort ist eine Waage angeschlossen,死于永久性的das aktuell gemessene Gewicht ausgibt.Da ich auch Win32 :: GUI verwende darf/sollte das einlesen nicht blockierend sein.Wie stelle ich das am geschicktesten?sollte ich verwenden Lookfor oder精简?Ich blicke bei dem Manual nicht so richtig durch.
由于设备通过串口不断发送信息,您可能需要设置一个定时器,并在不阻塞主线程的情况下查看连接中的内容.
首先,我将指向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;
Run Code Online (Sandbox Code Playgroud)
输出:
C:\Temp> gui 1 2 3 4 5 6 Terminating on signal SIGINT(2)
现在,关于Win32 :: SerialPort与Win32 :: CommPort之间的选择以及哪些方法取决于连接另一端的规模的规格.