首页 > 解决方案 > 发送消息时出现 0x0A 和 0x0D 的 RS232 问题

问题描述

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

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

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

IE:

022620255846060A00003003
022620255946060D00003703

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

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

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

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

谢谢

标签: perlserial-port

解决方案


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

通过改变从

$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,因此在这种特殊情况下,接收机器计算校验和并丢弃消息,因为接收和生成的校验和不一样。


推荐阅读