| 
			| 
					
						| sabbatazh 
								Помогающий    Offline | 
								|  | «  : 18-03-2015 19:08 »  |  | 
 
 Здравствуйте, Уважаемые знатоки! Возник вопрос и нужна Ваша помощь!  Как из программы на С# управлять 3G модемом, т.е. : Включить\отключить (сон\пробудить); подключить\отключить от сети?!  Хотя бы подскажите направление в котором рассматривать эту проблему...    Спасибо! Добавлено через 3 часа, 37 минут и 5 секунд: Может быть, что модем не поддерживает набор АТ-команд?!  |  
						| 
								|  |  
								| « Последнее редактирование: 18-03-2015 22:45 от sabbatazh » |  Записан | 
 |  |  | 
	| 
			| 
					
						| darkelf 
								Молодой специалист    Online | 
								|  | « Ответ #1 : 19-03-2015 06:32 »  |  | 
 
 К сожалению не большой знаток модемов, но вроде таких модемов сейчас, наверное, и быть не должно. Модем у Вас виден, как COM-порт? Вы пытались обращаться к нему через штатные утилиты ОС, если у Вас Windows, то, например, через HyperTerminal? Вы настроили для COM-порта к которому подключен модем скорость, число битов данных, число стоп-битов, чётность и паритет? Кто производитель 3G модема, как называется модель? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| zubr 
								Гость
 | 
								|  | « Ответ #2 : 19-03-2015 06:49 »  |  | 
 
 Для вышеназванных действий (включить\выключить, подключить\отключить) не нужны AT-команды.Для включения\выключения модема смотри в сторону утилиты devcon, для подключить\отключить от сети - rasdial.
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| sabbatazh 
								Помогающий    Offline | 
								|  | « Ответ #3 : 20-03-2015 14:53 »  |  | 
 
 Для вышеназванных действий (включить\выключить, подключить\отключить) не нужны AT-команды.Для включения\выключения модема смотри в сторону утилиты devcon, для подключить\отключить от сети - rasdial.
 
 Спасибо! буду разбираться! а то уже написал код доступа к ком порту, к диаллапу стучусь на СОМ-порт, а к подключенному по USB не могу достучатся АТ-командами... это ведь тоже не правильно?darkelf , вот как у меня происходит процесс достукивания к модему, модем по USB, определяется по 3 разным СОМ-портам (Win 7), пробовал по каждому ничего не работает:  private AutoResetEvent receiveNow = new AutoResetEvent(false);private SerialPort comport = new SerialPort("COM9");
 
 private void button1_Click(object sender, EventArgs e)
 {
 bool error = false;
 
 if (comport.IsOpen == true) comport.Close();
 
 comport.BaudRate = int.Parse("9600");
 comport.DataBits = int.Parse("8");
 comport.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "One");
 comport.Parity = (Parity)Enum.Parse(typeof(Parity), "None");
 comport.Handshake = (Handshake)Enum.Parse(typeof(Handshake), "None");
 //comport.ReadTimeout = SerialPort.InfiniteTimeout;
 comport.ReadTimeout = 300;
 comport.WriteTimeout = 300;
 comport.DataReceived += new SerialDataReceivedEventHandler(AcceptData);
 
 // comport.WriteBufferSize = int.Parse("1024");
 
 try
 {
 // Open the port
 comport.Open();
 }
 catch (UnauthorizedAccessException) { error = true; }
 catch (IOException) { error = true; }
 catch (ArgumentException) { error = true; }
 
 if (error) MessageBox.Show("ERROR", "!!!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
 else
 {
 if (comport != null)
 {
 // Show the initial pin states
 comport.DtrEnable = true;
 comport.RtsEnable = true;
 
 
 comport.DiscardOutBuffer();
 comport.DiscardInBuffer();
 receiveNow.Reset();
 comport.Write("ATE0" + "\r");
 
 string input = ReadResponse(comport, 300);
 textBox1.AppendText(input + "\r\n");
 
 comport.Write("ATA" + Convert.ToChar(13).ToString());
 Thread.Sleep(500);
 comport.Write("ATE0" + Convert.ToChar(13).ToString());
 Thread.Sleep(500);
 
 comport.Close();
 textBox1.AppendText("порт закрыт" + "\r\n");
 
 }
 }
 }
 
 private void AcceptData(object sender, SerialDataReceivedEventArgs e)
 {
 SerialPort port = (SerialPort)sender;
 string str;
 //Thread.Sleep(100);
 str = port.ReadLine();
 
 textBox1.Invoke(new MethodInvoker(delegate
 {
 textBox1.AppendText(str + "\r\n");
 }));
 }
 
 public string ReadResponse(SerialPort port, int timeout)
 {
 string buffer = string.Empty;
 try
 {
 do
 {
 if (receiveNow.WaitOne(timeout, false))
 {
 string t = port.ReadExisting();
 buffer += t;
 }
 else
 {
 if (buffer.Length > 0)
 throw new ApplicationException("Response received is incomplete.");
 else
 throw new ApplicationException("No data received from phone.");
 }
 }
 while (!buffer.EndsWith("\r\nOK\r\n") && !buffer.EndsWith("\r\n> ") && !buffer.EndsWith("\r\nERROR\r\n"));
 }
 catch (Exception ex)
 {
 throw ex;
 }
 return buffer;
 }
 }
 !  |  
						| 
								|  |  
								| « Последнее редактирование: 20-03-2015 14:58 от sabbatazh » |  Записан | 
 |  |  | 
	| 
			| 
					
						| darkelf 
								Молодой специалист    Online | 
								|  | « Ответ #4 : 21-03-2015 15:08 »  |  | 
 
 а то уже написал код доступа к ком порту, к диаллапу стучусь на СОМ-порт, а к подключенному по USB не могу достучатся АТ-командами... это ведь тоже не правильно?darkelf, вот как у меня происходит процесс достукивания к модему, модем по USB, определяется по 3 разным СОМ-портам (Win 7), пробовал по каждому ничего не работает:
 
 пожалуйста расшифруйте, что значит "ничего не работает". Компьютер вообще не включается? COM-порт не открывается? открывается, но в ответ на выданные запросы ничего не говорит? Попробуйте всё-таки воспользоваться штатными утилитами ОС (HyperTerminal), прежде чем писать код. консольная утилита mode что-нибудь говорит про эти com-порты? и опять - какая модель и кто производитель модема? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Aether | 
								|  | « Ответ #5 : 21-03-2015 16:37 »  |  | 
 
 COM-порт не открывается? Попробуйте всё-таки воспользоваться штатными утилитами ОС (HyperTerminal), прежде чем писать код.
 Я полагаю, что 3G модем - это нечто современное, далёкое от COM порта и технологии связи по телефонным проводам. Похоже, что ТС ищет какое-то API для управления, вообще, классом таких устройств. Я не сталкивался с такой проблемой, поэтому посоветовать нечего. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| sabbatazh 
								Помогающий    Offline | 
								|  | « Ответ #6 : 23-03-2015 16:12 »  |  | 
 
 а то уже написал код доступа к ком порту, к диаллапу стучусь на СОМ-порт, а к подключенному по USB не могу достучатся АТ-командами... это ведь тоже не правильно?darkelf, вот как у меня происходит процесс достукивания к модему, модем по USB, определяется по 3 разным СОМ-портам (Win 7), пробовал по каждому ничего не работает:
 
 пожалуйста расшифруйте, что значит "ничего не работает". Компьютер вообще не включается? COM-порт не открывается? открывается, но в ответ на выданные запросы ничего не говорит? Попробуйте всё-таки воспользоваться штатными утилитами ОС (HyperTerminal), прежде чем писать код. консольная утилита mode что-нибудь говорит про эти com-порты? и опять - какая модель и кто производитель модема?USB-Модем, называется - Verizon; Компьютер работает, все хорошо; COM-порт - открывается; при обращение к нему ничего  в ответ не получаю; Добавлено через 1 минуту и 46 секунд:COM-порт не открывается? Попробуйте всё-таки воспользоваться штатными утилитами ОС (HyperTerminal), прежде чем писать код.
 Я полагаю, что 3G модем - это нечто современное, далёкое от COM порта и технологии связи по телефонным проводам. Похоже, что ТС ищет какое-то API для управления, вообще, классом таких устройств. Я не сталкивался с такой проблемой, поэтому посоветовать нечего.а то уже написал код доступа к ком порту, к диаллапу стучусь на СОМ-порт, а к подключенному по USB не могу достучатся АТ-командами... это ведь тоже не правильно?darkelf, вот как у меня происходит процесс достукивания к модему, модем по USB, определяется по 3 разным СОМ-портам (Win 7), пробовал по каждому ничего не работает:
 
 пожалуйста расшифруйте, что значит "ничего не работает". Компьютер вообще не включается? COM-порт не открывается? открывается, но в ответ на выданные запросы ничего не говорит? Попробуйте всё-таки воспользоваться штатными утилитами ОС (HyperTerminal), прежде чем писать код. консольная утилита mode что-нибудь говорит про эти com-порты? и опять - какая модель и кто производитель модема?USB-Модем, называется - Verizon; Компьютер работает, все хорошо; COM-порт - открывается; при обращение к нему ничего  в ответ не получаю; COM-порт не открывается? Попробуйте всё-таки воспользоваться штатными утилитами ОС (HyperTerminal), прежде чем писать код.
 Я полагаю, что 3G модем - это нечто современное, далёкое от COM порта и технологии связи по телефонным проводам. Похоже, что ТС ищет какое-то API для управления, вообще, классом таких устройств. Я не сталкивался с такой проблемой, поэтому посоветовать нечего.определяется модем: Novatel Wireless Application Port(СОМ8); Novatel Wireless GPS Port(СОМ7); Novatel Wireless Status Port(СОМ9); при обращении к каждому по отдельности результата нет! Спасибо! |  
						| 
								|  |  
								| « Последнее редактирование: 23-03-2015 16:14 от sabbatazh » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Aether | 
								|  | « Ответ #7 :  23-03-2015 17:19 »   |  | 
 
 при обращении к каждому по отдельности результата нет!
 И, вряд ли будет. 1) Это устройство именуется модемом лишь номинально, на деле это сложный компьютер с радио штучками и иными модулями внутри. 2) Устройство, как я понимаю, присоединяется к USB порту. А стало быть, если и существуют COM7, 8, 9, то это виртуальные порты - управляться могут несколько иначе, нежели обычный физический UART типа 16550A. 3) COM порт - это штука далеко не простая, чтобы общаться по нему нужно чётко знать специфику подключённого оборудования, то есть: - настройки COM порта в устройстве, такие как скорость, число бит в транзакции, число стоп битов... - конкретный вид протокола... - команды управления устройством, их правильный синтаксис... Итог: вся эта информация, возможно, может представлять собой коммерческую тайну фирмы-разработчика этого устройства. Прямой путь без знания этой документации невозможен. Возможно, нужно идти от обратного, например, какое штатное ПО шло в комплекте с этим устройством? Возможно, существует альтернативное открытое ПО, например, под Linux`ом, из которого можно почерпнуть что и как. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| sabbatazh 
								Помогающий    Offline | 
								|  | « Ответ #8 : 23-03-2015 21:32 »  |  | 
 
 Терминалом не достучался в сей дивайс... Перепробовал все настройки...
 Документация содержит только характеристики, драйвера на Линух нет!
 
 печаль! или у меня руки кривые...
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  | 
	| 
			| 
					
						| sabbatazh 
								Помогающий    Offline | 
								|  | « Ответ #10 : 29-03-2015 10:03 »  |  | 
 
  Спасибо! Буду разбираться! |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| sabbatazh 
								Помогающий    Offline | 
								|  | « Ответ #11 : 30-04-2015 07:49 »  |  | 
 
 Здравствуйте, Уважаемые Форумчане! После танцев с бубном вокруг пресловутого модема получилось его определить как модем в ДУ - произошел глюк в винде, и с третьего раза переустановки драйверов система определила 3G-модем как модем и присвоила ему ком порт. получилось достучатся до него по ком порту, нацарапал код:         private SerialPort comport = new SerialPort("COM5");
 private AutoResetEvent receiveNow;
 
 
 public bool SetupComPort()
 {
 bool error = false;
 
 // If the port is open, close it.
 if (comport.IsOpen == true) comport.Close();
 
 receiveNow = new AutoResetEvent(false);
 try
 {
 comport.DataReceived += new SerialDataReceivedEventHandler(AcceptData);
 // Set the port's settings
 comport.BaudRate = int.Parse("230400");
 comport.DataBits = int.Parse("8");
 comport.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "One");
 comport.Parity = (Parity)Enum.Parse(typeof(Parity), "None");
 comport.Handshake = (Handshake)Enum.Parse(typeof(Handshake), "None");
 
 // Open the port
 comport.Open();
 
 _Message("Port Modem Open: " + comport.PortName);
 }
 catch (UnauthorizedAccessException) { error = true; }
 catch (IOException) { error = true; }
 catch (ArgumentException) { error = true; }
 
 if (error) MessageBox.Show("Could not open the COM-port MODEM.  Most likely it is already in use, has been removed, or is unavailable.", "COM Port Unavalible", MessageBoxButtons.OK, MessageBoxIcon.Stop);
 else { }
 
 return error;
 }
 
 public void CloseComPort()
 {
 comport.Close();
 
 comport.DataReceived -= new SerialDataReceivedEventHandler(AcceptData);
 
 comport = null;
 }
 
 
 private void AcceptData(object sender, SerialDataReceivedEventArgs e)
 {
 try
 {
 if (e.EventType == SerialData.Chars)
 {
 receiveNow.Set();
 //_Message("Modem Accept Data...");
 }
 }
 catch (Exception ex)
 {
 throw ex;
 }
 }
 
 public bool SendData(string command, int responseTimeout)
 {
 bool error = false;
 try
 {
 comport.DiscardOutBuffer();
 comport.DiscardInBuffer();
 receiveNow.Reset();
 comport.Write(command + "\r");
 
 string input = ReadResponse(responseTimeout);
 
 _Message(input);
 
 }
 catch (FormatException) { error = true; }
 catch (TimeoutException) { error = true; }
 
 return error;
 }
 
 public string ReadResponse(int timeout)
 {
 string buffer = string.Empty;
 try
 {
 do
 {
 if (receiveNow.WaitOne(timeout, false))
 {
 string t = comport.ReadExisting();
 buffer += t;
 }
 else
 {
 if (buffer.Length > 0)
 _Message("Response received is incomplete.");
 else
 _Message("No data received from phone.");
 }
 }
 while (!buffer.EndsWith("\r\nOK\r\n") && !buffer.EndsWith("\r\n> ") && !buffer.EndsWith("\r\nERROR\r\n"));
 }
 catch (Exception ex)
 {
 throw ex;
 }
 return buffer;
 }
 код работает! пробую отправить в модем команду:NPortModem.SendData("ATI", 300); //данные о модемеNPortModem.SendData("AT+CSQ", 300); //качество сигнала проходят, возвращаются данные. но как только пытаюсь включить/выключить возвращаются ошибки:NPortModem.SendData("AT+CFUN=0", 300); //выключить телефон (Ошибку возвращает) задержка в 10 сек...NPortModem.SendData("AT+CFUN=1", 300); //включить телефон (ERROR) воспользовался данными с сайта http://www.activexperts.com/mobile-messaging-component/at/etsi/ но чет я не нашел тут команд управления модемом... Может я так смотрел или не туда, или я не так что-то делаю?! Спасибо!  |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| sabbatazh 
								Помогающий    Offline | 
								|  | « Ответ #12 : 13-05-2015 10:53 »  |  | 
 
 получаю от модема следующие данные: Port Modem Open: COM5ATE0
 
 OK
 
 AT+CSQ
 
 27, 99
 
 OK
 
 ATI
 
 Manufacturer: NOVATEL WIRELESS INCORPORATED
 Model: MiFi2200 VZW
 Revision: Q6085BDRAGONFLY_V167_029.0201 [2010-10-01 15:49:01]
 ESN: 0x5BB59059
 +GCAP: +CIS707-A, CIS-856-A, +MS, +ES, +DS
 
 OK
 а вот команды на включение и отключение (состояния) модема не проходят: AT+CFUN?
 ERROR
 
 AT+CFUN=?
 
 ERROR
 
 AT+CFUN=??
 
 ERROR
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| darkelf 
								Молодой специалист    Online | 
								|  | « Ответ #13 : 13-05-2015 13:28 »  |  | 
 
 sabbatazh, сорри, не могу ничего подсказать.. Тут  пытаются выключать какой-то NOVATEL-овский модем через команду +CFUN=4, а сбрасывать через +CFUN=6. Правда это для LTE, как я понимаю, что для 3G такое может и не поддерживается. В общем - попробуйте посмотреть тут  и вообще тут , может увидите что-нибудь для себя полезное. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| sabbatazh 
								Помогающий    Offline | 
								|  | « Ответ #14 : 21-09-2015 05:56 »  |  | 
 
 Здравствуйте, Уважаемые Знатоки! пришлось купить новый модем HUAWEI...  Удалось получить управление над модем с помощи АТ-команд и DotRas https://dotras.codeplex.com/ public bool Connect(string dialerEntryName)//bool monitorSignalUpdates{
 if (!NPortModem.SetupComPort())
 {
 NPortModem.SendData("ATZ", 300);//сброс модема...
 NPortModem.SendData("AT", 300); //Get the modem's attention
 NPortModem.SendData("AT+CFUN=1", 300);
 Thread.Sleep(500);
 NPortModem._CloseComPort();
 
 RasPhoneBook rpb = new RasPhoneBook();
 rpb.Open(true);
 if (!rpb.Entries.Contains(dialerEntryName))
 {
 rpb.Entries.Add(RasEntry.CreateBroadbandEntry(dialerEntryName, RasDevice.GetDeviceByName("HUAWEI Mobile Connect - 3G Modem", RasDeviceType.Modem), true));
 }
 _rd = new RasDialer();
 _rd.EntryName = dialerEntryName;//"3G Connection";
 _rd.PhoneNumber = "#777";
 try
 {
 handle = _rd.Dial();
 
 _Message("Подключение в интернет прошло успешно…\r\n");
 
 //Thread.Sleep(1000);
 return true;
 }
 catch (Exception ex)
 {
 MessageBox.Show(ex.Message, "Интернет соединение");
 //MessageBox.Show("Невозможно подключится к интернету!!!", "Интернет соединение", MessageBoxButtons.OK, MessageBoxIcon.Stop);
 }
 return false;
 }
 else
 {
 handle = null;
 MessageBox.Show("Нет подключения к модему!!!", "Интернет соединение", MessageBoxButtons.OK, MessageBoxIcon.Stop);
 return false;
 }
 }
 
 public void Disconnect()
 {
 if (!(this._rd == null))
 {
 if (this._rd.IsBusy)
 {
 // The connection attempt has not been completed, cancel the attempt.
 this._rd.DialAsyncCancel();
 }
 else
 {
 if (!(handle == null))
 {
 // The connection attempt has completed, attempt to find the connection in the active connections.
 RasConnection connection = RasConnection.GetActiveConnectionByHandle(this.handle);
 if (connection != null)
 {
 // The connection has been found, disconnect it.
 connection.HangUp();
 }
 }
 }
 }
 _Message("Отключили интернет…\r\n");
 
 Thread.Sleep(1000);
 if (!NPortModem.SetupComPort())
 {
 NPortModem.SendData("ATZ", 300);//сброс модема...
 NPortModem.SendData("AT", 300); //Get the modem's attention
 NPortModem.SendData("AT+CFUN=0", 300);
 Thread.Sleep(500);
 NPortModem._CloseComPort();
 }
 _Message("Выключили модем…\r\n");
 }
 главное правильно настроить СОМ-порт... нашел ошибку в настройке скорости на один 0 ошибся, и по 64 разрядной виндой работало с перебоями, не мог понять в чем дело, а тут стартанул под 32 и сразу ошибку обнаружил, чудеса от винды... но то и ладно... отладил и все заработало... и подобрал временные интервалы для нормальной "парковки" модема... Спасибо Всем за помощь! |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |