发送消息时,RS232发出0x0A和0x0D问题

问题描述 投票:0回答:2

我正在运行一个编写消息的代码,并通过RS232总线将其发送到设备。

当消息在消息上有0A(新行)或0D(回车)字符(或两者)时,我遇到问题。

阅读方告诉我它不理解该消息(通过向我发送NAK响应)。我推断出这个问题与这两个字符有关。

即:

022620255846060A00003003
022620255946060D00003703

有关如何在不更改0A或0D的情况下发送相同信息的任何想法?

我用来发送消息的代码是这样的:

my $stt = pack 'H*',$msg;
$ob_w->write($stt);

$ msg等于上述代码之一,$ ob_w是端口本身。

谢谢

perl serial-port
2个回答

0
投票

在这种情况下,这是与串行端口配置相关的问题。

通过改变

$ob_w->stty_icrnl (1);
$ob_w->stty_ocrnl (1);
$ob_w->stty_onlcr (1);
$ob_w->stty_opost (1);

至:

$ob_w->stty_icrnl (0);
$ob_w->stty_ocrnl (0);
$ob_w->stty_onlcr (0);
$ob_w->stty_opost (0);

将修复该消息。上面的一些命令将0x0A和0x0D更改为0x0A0D,因此在这种特殊情况下,接收机器会计算校验和并丢弃该消息,因为接收和生成的校验和不同。

© www.soinside.com 2019 - 2024. All rights reserved.