如何使用AT Command

时间:2019-03-18 07:20:03

标签: c# gsm at-command

我正在尝试使用AT命令创建SMS应用程序。我想知道的是,如何获得GSM Modem的端口,而不是对其进行硬编码?

下面是我的代码示例。

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();
    }

1 个答案:

答案 0 :(得分:0)

我不是Windows专家,但我不认为您的问题对Windows真的很紧。

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

我将尝试测试所有可能的端口以检测正确的端口,然后再发送您的SMS。为此,您可以从COM1COMXXX循环播放(我不知道限制,但将其设置得足够大...),然后尝试发送一个AT命令知道答复。如果您得到预期的答复,那么您获得了正确的端口;如果没有,请尝试下一个。如果我没记错的话,AT命令AT只是回复OK。那将是最简单的选择。否则,您可以选择提供有关调制解调器的完整信息的ATI,或者选择提供部分信息的AT+GMIAT+GMMAT+GMR等之一。

因此您将具有两个功能:

  • detectModemPort(),如果找到端口号(或端口名称)或出现错误,则会使用端口号(或端口名称)答复
  • SendSMSTo(string port, string cnum),它将首先在端口port(由于我们刚刚检测到它而存在)上打开串行连接,然后将SMS发送到cnum

您可能还想看看SuperUser上的this question/answer。似乎有一个devcon.exe命令可以发现连接到计算机的设备,但是我没有Windows操作系统。