ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

调制解调器启动时执行AT命令的问题

2019-12-01 02:05:06  阅读:345  来源: 互联网

标签:at-command modem c


我正在开发一个应用程序,它将读取数据并将数据写入gsm调制解调器.当我关闭调制解调器并再次打开时,在启动时,我需要发送一个AT命令,以便该调制解调器自动设置为端口给定的设置.当我在超级终端中给出此命令时,它不会显示,但命令会发送到调制解调器.并且调制解调器将自身设置为我为超级终端端口设置提供的设置.从那时起,我可以发送其余命令.但是在我的应用程序中,我无法发送第一个AT命令,因此我是通过超级终端手动执行的.为什么在我的应用程序中没有发生这种情况?我也尝试使用按钮单击发送此命令,但是仍然没有在端口上执行该命令.

        port.Open();
        port.DtrEnable = true;
        port.RtsEnable = true;

        if (port != null)
        {
            btn_connect.Enabled = false;
            btn_disconnect.Enabled = true;
            port.WriteLine("AT");

            port.WriteLine("AT+CLIP=1");

            port.WriteLine("AT+CMGF=1");

            con_status.Text = "Connected at " + cboPortName.Text;
        }

我在应用程序中提供的端口设置为:

            port.PortName = cboPortName.Text;
            port.BaudRate = Convert.ToInt32(this.cboBaudRate.Text); //9600
            port.DataBits = Convert.ToInt32(this.cboDataBits.Text); //8
            port.ReadTimeout = Convert.ToInt32(this.txtReadTimeOut.Text); //300
            port.WriteTimeout = Convert.ToInt32(this.txtWriteTimeOut.Text); //300
            port.StopBits = StopBits.One; //1
            port.Parity = Parity.None; // None
            port.Encoding = Encoding.GetEncoding("iso-8859-1"); 
            port.Open();
            port.DtrEnable = true;
            port.RtsEnable = true;

解决方法:

要检查2件事,波特率和回声.

默认情况下,SerialPort类使用9600.

通常,调制解调器处于AutoBaud模式,当向其发送“ AT”命令时,它将根据COM端口链接的波特率进行调整.这不太可能,但是您的调制解调器可能正在固定的BaudRate上运行,并且无法调整…因此,请检查您在超级终端中使用的是哪个BaudRate,并使用相同的BaudRate.

回声-要查看命令已发送(并且调制解调器正在响应),我相信您需要在调制解调器中打开回声,即,无论您发送给调制解调器并接收到的任何字符都会被发送/回显给您.

(您也可以在超级终端中打开本地回显…但您不想要…您真的想知道调制解调器看到了您的角色)

如果无法使调制解调器回显发送的数据,则说明配置串行端口链接的方式存在问题(即使用错误的流控制握手/奇偶校验等,或未提高流控制状态)行).

假设您的调制解调器配置为使用RTS / CTS流控制,是否尝试过:

port.Handshake = HandShake.RequestToSend? (即硬件控制线流量控制).

因此,看起来该调制解调器的eeprom默认值是不回声(即有人更改了回声并执行了& W0),或者已配置了超级终端,以在打开端口时在调制解调器上将其关闭对它,即它有一个AT“ Initialization String”!).您应该检查该端口的初始化字符串是什么,并在使用SerialPort类时复制/使用它.

另一个最佳实践是在发出下一个AT命令之前等待响应代码-延迟是执行此操作的一种方法,但不是最佳实践,因为某些命令执行所花费的时间可能会有所不同….而某些调制解调器则不会就像在“忙”时收到另一个命令一样.

第一次尝试此命令:

> AT& FE1(重置为出厂设置并打开回显)(请注意,如果您刚刚打开调制解调器,则& F是不必要的,因为那时无论如何它应该都处于出厂设置. E1打开回声).
>等待OK响应代码如果使用超级终端,则只要您在命令中键入命令即可直观地等待响应代码返回(如果使用脚本发送命令则让脚本等待)或发送AT命令在代码中,您的代码将需要捕获响应并采取相应的措施.
>发出下一条命令(例如,您的AT CLIP = 1)
>等待OK,ERROR或命令特定的响应代码.注意:即使使用同一命令,不同的调制解调器也可能使用不同的响应代码.
>发出下一个命令,等等,等等

以下是一些可能方便使用的链接以供参考,例如show flavours或AT命令以及一些超级终端参考.

> http://www.hilgraeve.com/manuals/
> http://www.stanmex.com/documents/fm_software_docs/HowToConfigureGSMModemUsingHyperTerminal.pdf
> http://www.computerhope.com/atcom.htm
> http://www.howtofixcomputers.com/bb/ftopic78209.html
> http://www.multitech.net/developer/wp-content/uploads/2010/10/S000463C.pdf
> http://en.wikipedia.org/wiki/Motorola_phone_AT_commands
> http://www.dataip.co.uk/Reference/ATCommands.php

标签:at-command,modem,c
来源: https://codeday.me/bug/20191201/2077756.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有