【问题标题】:How to get the port from GSM Modem using AT Command如何使用 AT 命令从 GSM 调制解调器获取端口
【发布时间】:2019-08-08 12:31:12
【问题描述】:

我正在尝试使用 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();
    }

【问题讨论】:

标签: c# gsm at-command


【解决方案1】:

我不是 Windows 专家,但我认为你的问题对 Windows 来说不是很严格。

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

我会尝试测试所有可能的端口以检测正确的端口,然后才发送您的 SMS。为此,您可以从COM1 循环到COMXXX(我不知道限制,但把它放得足够大......)并尝试发送您知道回复的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 bon 来尝试它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多