звонить с модема gsm в С#

Я хочу позвонить с GSM-модема с помощью С#. Я написал следующий код. но не могу дозвониться. Подскажите пожалуйста в чем ошибка. Также дайте мне знать, как обработать ответ в коде от модема, чтобы я мог отображать сообщение типа «вызов соединения» или «невозможно подключиться».

private void button1_Click(object sender, EventArgs e)  
{  
    SerialPort po = new SerialPort();  
    po.PortName = "COM3";  
    po.BaudRate = int.Parse( "9600");  
    po.DataBits = Convert.ToInt32("8");  
    po.Parity = Parity.None;  
    po.StopBits = StopBits.One;  
    po.ReadTimeout = int.Parse("300");  
    po.WriteTimeout = int.Parse("300");  
    po.Encoding = Encoding.GetEncoding("iso-8859-1");  
    po.Open();  
    po.DtrEnable = true;  
    po.RtsEnable = true;  
    po.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);  
    po.Write("ATD9030665834;");  
}  
public void port_DataReceived(object sender, SerialDataReceivedEventArgs e)  
{  
    if (e.EventType == SerialData.Chars)  
    {  
            //what to write here to display the response??    
    }  
}  

person Community    schedule 12.07.2012    source источник
comment
Можете ли вы сказать, какое значение возвращает функция po.Open();? Это успех??   -  person Swanand    schedule 12.07.2012
comment
да порт открывается. но выполнение этого кода не дает никакого результата   -  person    schedule 12.07.2012
comment
Что вы получаете тогда? Если данные доходят до модема, он снова запускает OK или NACK или что-то в этом роде? Какой GSM модем вы используете? и действительно ли требуется рукопожатие (RTS-CTS)? Читать техпаспорт. Также увеличьте время ожидания чтения.   -  person Swanand    schedule 12.07.2012
comment
Модем в гипертерминале работает нормально. Как обработать ответ в коде не знаю. Нужна помощь для того же, чтобы я мог знать, получаю ли я какой-либо ответ от модема или нет.   -  person    schedule 12.07.2012
comment
Я новичок. Модем сделан в моей фирме самой. это проверено с помощью гипертерминала. Но я не знаю, как отправить эти команды на GSM-модем в кодировке C #.   -  person    schedule 12.07.2012
comment
возможный дубликат кода для совершения звонка из gsm модем с использованием C#   -  person Druid    schedule 12.07.2012
comment
@ Друид, это был только Его вопрос! :П   -  person Swanand    schedule 13.07.2012
comment
@SwanandPurankar: Итак? Все-таки дубликат...   -  person Druid    schedule 17.07.2012


Ответы (2)


Используйте port.WriteLine("ATD"+phno+";");

Это точно решит вашу проблему..

И для обработки ответа используйте port.ReadExisting() и сравните с вашим требованием. Так просто :)

Удачи..

person Cdeez    schedule 17.07.2012

  1. Убедитесь, что вы настраиваете po так же, как Hyper-терминал, так как он работает с Hyperterminal. Настройки гипертерминала обычно такие: Настройки COM-порта

Если он имеет Flow Control как NONE, вам не нужно:

po.DtrEnable = true;         
  po.RtsEnable = true;  

Я не нахожу использования настройки кодировки.

Самое главное, о чем вы забыли, это Добавить "\r" в конце любой AT-команды! Кажется, вы не читали список AT-команд!

person Swanand    schedule 12.07.2012
comment
да. Я дал такие же настройки. но все равно не работает. пожалуйста, дайте мне пример кода для вызова в коде С# с помощью команды AT. - person ; 12.07.2012
comment
ATD+phnumber — это то, что мы даем в гипертерминале. Но как дать эту команду в C#...??? порт.запись(????) - person ; 12.07.2012
comment
Проверьте: codeproject.com/Articles/38705/ - person Swanand; 12.07.2012
comment
понятно. Он работает, предоставляя port.WriteLine(ATD+phnumber+;); - person ; 12.07.2012