使用perl将AT命令发送到调制解调器

使用perl将AT命令发送到调制解调器,第1张

概述使用perl将AT命令发送到调制解调器

我有一个embedded式linux框与Perl 5.10和GSM调制解调器连接。 我写了一个简单的perl脚本来通过调制解调器设备文件(/ dev / ttyACM0)读/写AT命令。

如果我写一个类似“ATZ r”的simle命令到调制解调器并等待响应,我会收到很奇怪的数据,比如“ n n n n n n n n n n n nATZ n n n n …“,并且数据一直在进来。它几乎看起来像是响应与其他数据混淆了。

我希望像“ATZ nOK n”(如果启用回声)。

如果我用例如minicom手动发送“ATZ”命令一切都按预期工作。

在linux上启用stream量控制的串行通信 – 不良行为

如何在linux中创build虚拟io设备,将数据代理到真实设备?

select()似乎不适用于TTY

如何将windows COM端口输出redirect到文件?

windows 7中的串行端口输出缓冲区大小

这导致我认为这可能是某种perl缓冲问题,但这只是猜测。

我用perl打开设备(我的embedded式linux perl没有Device :: Serialport):

open(FH,"+<","/dev/ttyACM0") or dIE "Failed to open com port $comport";

并一次读取一个字节的响应:

while(1) { my $response; read(FH,$response,1); printf("hex response '0x%02X'n",ord $response); }

我错过了一些初始化或其他东西来得到这个权利?

问候克劳斯

如何确定linux串行端口上的写/输出缓冲区空间的数量?

自定义波特率

串行(UART)caching溢出高速

linux串口监听器和解释器?

C#激活蓝牙串口服务

我不认为你需要while循环。 这个代码应该发送ATZ命令,等待响应,然后打印响应:

open(FH,"+>","/dev/ttyACM0") or dIE "Failed to open com port $comport"; print FH ("ATZn"); $R = <FH>; print $R; close(FH);

这可能与截断有关。 尝试将“+>”更改为“+ <”。

或者它可能与缓冲有关,在open()之后尝试unbuffering输出:

select((select(FH),$| = 1)[0]);

感谢您的回答。 虽然不是我的问题的明确答案,但它确实使我走上了正轨。

正如mti2935所指出的,这确实不是一个perl问题,而只是一个简单的配置问题。

使用具有以下参数的“stty”命令将我的串行端口设置为“预期”模式:

-opost:禁用所有输出后处理

-crnl:不要把CR翻译成NL

-onlcr:不要把NL翻译成CR NL

-echo:不要回显输入(启用此回声,并在调制解调器本身回显给我双重回声,导致我的脚本奇怪的行为)

也可以使用组合设置“raw”以正确的方式设置所有这些参数。

总结

以上是内存溢出为你收集整理的使用perl将AT命令发送到调制解调器全部内容,希望文章能够帮你解决使用perl将AT命令发送到调制解调器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1268336.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存