perl - 发送消息时出现 0x0A 和 0x0D 的 RS232 问题
问题描述
我正在运行一个编写消息并通过 RS232 总线将其发送到设备的代码。
当消息中有 0A(新行)或 0D(回车)字符(或两者)时,我遇到了问题。
阅读方告诉我它不理解该消息(通过向我发送 NAK 响应)。我推断问题出在这两个字符上。
IE:
022620255846060A00003003
022620255946060D00003703
关于如何在不更改 0A 或 0D 的情况下发送相同信息的任何想法?
我用来发送消息的代码是这样的:
my $stt = pack 'H*',$msg;
$ob_w->write($stt);
$msg 等于上述代码之一,$ob_w 是端口本身。
谢谢
解决方案
在这种情况下,这是与串行端口配置相关的问题。
通过改变从
$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,因此在这种特殊情况下,接收机器计算校验和并丢弃消息,因为接收和生成的校验和不一样。
推荐阅读
- kubernetes - 将 kubernetes 部署缩减到 0 并缩减到原始副本集数量
- java - Gradle 测试夹具插件和核心模块依赖项
- javascript - 使用 bootstrap 3 popover 内表未显示在按钮顶部
- oracle - Oracle timestein 问题(日志标记)等待闩锁“日志链插入
- javascript - promis.all 后函数中的行不执行
- c# - 在 Asp.Net Core 3.1 中处理 SignalR 集线器中的所有异常
- windows - 如何检查jenkins是否安装在windows中?
- python - 熊猫模块导出,拆分数据
- cassandra - 将数据插入cassandra的问题
- node.js - 如何在 3.1.6 版本的代码中使用 strapi 上传插件?