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