我正在尝试使用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();
}
我不是Windows用户,但我认为你的问题对Windows来说并不紧张。
正如@Hessam所说,你不能要求调制解调器告诉你它所连接的端口,因为你不能与调制解调器讨论,因为你不知道端口......
我会尝试测试所有可能的端口以检测正确的端口,然后才发送您的短信。为此,你可以从COM1
循环到COMXXX
(我不知道限制,但把它放得足够大......)并尝试发送一个你知道回复的AT
命令。如果你得到了预期的答复,你得到了正确的端口;如果没有,请尝试下一个。如果我记得很清楚,AT
命令AT
只是回复OK
。那将是最简单的选择。否则,您可以选择提供有关调制解调器的完整信息的ATI
,或者提供部分信息的AT+GMI
,AT+GMM
或AT+GMR
等。
所以你有两个功能:
detectModemPort()
,如果找到或有错误,将回复端口号(或端口名称)SendSMSTo(string port, string cnum)
将首先在端口port
上打开一个串行连接(因为我们刚刚检测到它而存在),然后将短信发送到cnum
。您可能还想看看SuperUser上的this question/answer。看起来有一个devcon.exe
命令来发现连接到计算机的设备,但我没有尝试它的Windows bon。