我正在运行一个编写消息的代码,并将其通过RS232总线发送到设备。
当消息上有0A(换行)或0D(回车)字符(或两者都有)时,我遇到了问题。
阅读方告诉我,它不理解该消息(通过向我发送NAK响应)。我推断出问题在于这两个字符。
即:
worker2
是否想到了如何发送相同的信息而不必更改0A或0D?
我用于发送消息的代码是这样的:
022620255846060A00003003
022620255946060D00003703
$ msg等于上述代码之一,而$ ob_w是端口本身。
谢谢
答案 0 :(得分:0)
使用perl输出二进制数据时,似乎有必要将其设置为binmode,然后通过打印输出。请参阅以下文章。
How to work with binary data in a perl script
Input and Output in Binary Mode 1
Input and Output in Binary Mode 2
How to read and write the serial port using perl
Accessing Serial port on windows and Linux
perlport
Handling Binary Files in Perl
答案 1 :(得分: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,因此在这种特殊情况下,接收计算机计算校验和并丢弃消息,因为接收和生成的校验和不相同。