如何使用AT命令从GSM调制解调器获取端口

问题描述 投票:0回答:1

我正在尝试使用AT命令创建一个SMS应用程序。我想知道的是,如何获得GSM调制解调器的端口而不是硬编码?

下面是我的代码示例。

private void SendSMSTo(string cnum)
    {
        SerialPort _serialPort;

        _serialPort = new SerialPort("COM9", 115200);
        //instead of hard coding the port COM9 I want to get the port from GSM Modem

        Thread.Sleep(1000);

        _serialPort.Open();

        Thread.Sleep(1000);

        _serialPort.Write("AT+CMGF=1\r");

        Thread.Sleep(1000);

        _serialPort.Write("AT+CMGS=\"" + cnum + "\"\r\n");

        Thread.Sleep(1000);

        _serialPort.Write(computation() + "\x1A");

        Thread.Sleep(1000);

        _serialPort.Close();
    }
c# gsm at-command
1个回答
0
投票

我不是Windows用户,但我认为你的问题对Windows来说并不紧张。

正如@Hessam所说,你不能要求调制解调器告诉你它所连接的端口,因为你不能与调制解调器讨论,因为你不知道端口......

我会尝试测试所有可能的端口以检测正确的端口,然后才发送您的短信。为此,你可以从COM1循环到COMXXX(我不知道限制,但把它放得足够大......)并尝试发送一个你知道回复的AT命令。如果你得到了预期的答复,你得到了正确的端口;如果没有,请尝试下一个。如果我记得很清楚,AT命令AT只是回复OK。那将是最简单的选择。否则,您可以选择提供有关调制解调器的完整信息的ATI,或者提供部分信息的AT+GMIAT+GMMAT+GMR等。

所以你有两个功能:

  • detectModemPort(),如果找到或有错误,将回复端口号(或端口名称)
  • SendSMSTo(string port, string cnum)将首先在端口port上打开一个串行连接(因为我们刚刚检测到它而存在),然后将短信发送到cnum

您可能还想看看SuperUser上的this question/answer。看起来有一个devcon.exe命令来发现连接到计算机的设备,但我没有尝试它的Windows bon。

© www.soinside.com 2019 - 2024. All rights reserved.