Quiero bucle a través de los puertos disponibles: System.IO.Ports.SerialPort.GetPortNames() de encontrar si un puerto es utilizado por un módem GSM. Cualquier idea, por favor.Encuentra puerto del módem GSM en C#
7
A
Respuesta
6
Lo que hice en mi solicitud para una tarea similar:
para comprobar que un módem se conecta al puerto particular, puede enviar comandos AT en este puerto. Esta función devuelve verdadero si a continuación encontramos un módem en el puerto COM actual:
private bool CheckExistingModemOnComPort(SerialPort serialPort) { if ((serialPort == null) || !serialPort.IsOpen) return false; // Commands for modem checking string[] modemCommands = new string[] { "AT", // Check connected modem. After 'AT' command some modems autobaud their speed. "ATQ0" }; // Switch on confirmations serialPort.DtrEnable = true; // Set Data Terminal Ready (DTR) signal serialPort.RtsEnable = true; // Set Request to Send (RTS) signal string answer = ""; bool retOk = false; for (int rtsInd = 0; rtsInd < 2; rtsInd++) { foreach (string command in modemCommands) { serialPort.Write(command + serialPort.NewLine); retOk = false; answer = ""; int timeout = (command == "AT") ? 10 : 20; // Waiting for response 1-2 sec for (int i = 0; i < timeout; i++) { Thread.Sleep(100); answer += serialPort.ReadExisting(); if (answer.IndexOf("OK") >= 0) { retOk = true; break; } } } // If got responses, we found a modem if (retOk) return true; // Trying to execute the commands without RTS serialPort.RtsEnable = false; } return false; }
En la siguiente etapa podemos recoger algunos datos desde el módem. que utilizan los siguientes comandos:
- ATQ0 - Encender confirmaciones (Receive OK en cada solicitud)
- ATE0 - ponga en marcha eco
- ATI - obtener detalles módem
- ATI3 - obtenga los detalles del módem extendido (no todos los módems admiten este comando)
+0
No puedo hacer que esta respuesta funcione –
0
// Check each Availble COM port
foreach (string l_sport in l_available_ports)
{
GlobalVars.g_serialport = GlobalFunc.OpenPort(l_sport, Convert.ToInt32(this.cboBaudRate.Text), Convert.ToInt32(this.cboDataBits.Text), Convert.ToInt32(this.txtReadTimeOut.Text), Convert.ToInt32(this.txtWriteTimeOut.Text));
if (GlobalVars.g_serialport.IsOpen)
{
GlobalVars.g_serialport.WriteLine("AT\r");
Thread.Sleep(500);
string l_response = GlobalVars.g_serialport.ReadExisting();
if (l_response.IndexOf("OK") >= 0)
{
GlobalVars.g_serialport.WriteLine("AT+CMGF=1\r");
Thread.Sleep(500);
string l_response1 = GlobalVars.g_serialport.ReadExisting();
if (l_response1.IndexOf("OK") >= 0)
{
GlobalVars.g_PhoneNo = txt_PhNum.Text;
MessageBox.Show("Connected Successfully", "Connection", MessageBoxButtons.OK, MessageBoxIcon.Information);
lblConnectionStatus.Text = "Phone Connected Successfully.";
btnOK.Enabled = false;
btnDisconnect.Enabled = true;
GlobalVars.g_serialport.WriteLine("AT+CGSN\r");
Thread.Sleep(500);
string l_imei = GlobalVars.g_serialport.ReadExisting();
Console.WriteLine("Modem IMEI:" + l_imei);
if (l_imei.IndexOf("OK", 1) > 0)
{
l_imei = l_imei.Replace("AT+CGSN\r\r\n", null);
l_imei = l_imei.Replace("\r\n\r\nOK\r\n", null);
lbl_ModemIMEI.Text = l_imei;
}
else
{
lblConnectionStatus.Text = "Phone Connected Successfully. Error reading IMEI.";
}
EnableSMSNotification(GlobalVars.g_serialport);
break;
}
else
{
Console.WriteLine("No AT+CMGF cmd response");
}
}
else
{
Console.WriteLine("No AT cmd response");
}
}
else
{
Console.WriteLine("No Phone At:" + l_sport);
}
}
Cuestiones relacionadas
- 1. Módem GSM enviar SMS
- 2. Implementación de un módem GSM para SMS
- 3. Encuentra un puerto libre
- 4. Leer datos del puerto serie
- 5. ¿Cómo comunicarse con el módem USB 3G?
- 6. Encuentra Ficha del propietario/creador en C#
- 7. ¿Cómo se envían los comandos AT GSM utilizando python?
- 8. lectura COM (Módem de serie) en PHP
- 9. Usando Android-emulator para probar comandos AT por COM desde la aplicación externa
- 10. Cambiar el puerto Oracle del puerto 8080
- 11. No lee los datos del puerto serie completo en C#
- 12. Mensajes del puerto de Mach en Objective-C
- 13. ¿Cómo obtengo el puerto UDP del remitente en C?
- 14. Limpiar el buffer de recepción del puerto serial en C#
- 15. Cómo detectar conexiones entrantes en mi módem
- 16. puerto C++ de AtomicLong.lazySet
- 17. ¿Cómo obtengo el nombre descriptivo de un puerto COM en Windows?
- 18. Cómo montar un archivo ".img" (extraído del firmware del módem) en Linux?
- 19. ¿Cuál es el mejor diseño para sondear un módem para datos entrantes?
- 20. Lectura desde el puerto serie en C#
- 21. Lectura del puerto serie en Java
- 22. Verificación abierta del puerto UDP
- 23. Cómo usar ZXing C# Puerto
- 24. Puerto RSA código Java cifrado en C#
- 25. Cambiando el puerto del System.Uri
- 26. C#/C++ en la misma solución - DllImport no encuentra DLL
- 27. cifrado de SMS a través de GSM
- 28. Identificar el algoritmo de cifrado GSM
- 29. Nuevo evento disponible del puerto COM
- 30. C# XPath no encuentra nada
supongo que usted sabe cómo comunicarse con este dispositivo (yo no) - que debería haber alguna operación simple (dicen pidiendo versión del dispositivo/número de serie), puede enviar a cada puerto para encontrar el dispositivo – Carsten
¿Puedo enviar comandos AT a un puerto que no está conectado a un módem? – Dohamsg
seguro - por qué no, no verá ninguna respuesta que sea en mi humilde opinión – Carsten