【问题标题】:making call from gsm modem in C#在 C# 中从 gsm 调制解调器拨打电话
【发布时间】:2023-04-01 01:28:01
【问题描述】:

我想使用 C# 从 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??    
    }  
}  

【问题讨论】:

  • 你能说出 po.Open(); 的返回值是多少吗?成功了吗??
  • 是的,端口正在打开。但执行此代码没有给出任何结果
  • 那你收到了什么?如果数据到达调制解调器,它将返回“OK”或“NACK”或类似的东西?您使用的是哪种 GSM 调制解调器?它真的需要握手(RTS-CTS)吗?阅读数据表。同时增加读取超时。
  • 调制解调器在超级终端中工作正常。我不知道如何处理代码中的响应。需要帮助,这样我才能知道我是否从调制解调器得到任何响应。
  • 我是新手。调制解调器是我公司自己制造的。它使用超级终端进行了测试。但我不知道如何在 C# 编码中将这些命令发送到 gsm 调制解调器。

标签: c# serial-port gsm serial-communication telecommunication


【解决方案1】:

使用 port.WriteLine("ATD"+phno+";");

这肯定会解决你的问题..

要处理响应,请使用 port.ReadExisting() 并与您的要求进行比较。就这么简单:)

祝你好运..

【讨论】:

    【解决方案2】:
    1. 确保您是否将po 配置为与超级终端相同,因为它与超级终端一起使用。 超级终端设置通常如下:

    如果它的流控制为 NONE,那么您不需要:

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

    我找不到设置编码的用途。

    您忘记的最重要的事情是在任何 AT 命令的末尾添加“\r”!好像没看过 AT 命令列表!

    【讨论】:

    • 是的。我确实给出了相同的设置。但它仍然无法正常工作。请给我使用 AT 命令在 C# 代码中调用的示例代码。
    • ATD+phnumber 是我们在超级终端中给出的。但是如何在 C# 中给出这个命令......??? port.write(????)
    • 知道了。它的工作原理是给 port.WriteLine("ATD"+phnumber+";");
    【解决方案3】:
    private void button1_Click(object sender, EventArgs e)
            {
                SerialPort po = new SerialPort();
                po.PortName = "COM10";
                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("ATD01814201013;");
                po.WriteLine("ATD01"+textBoxPhoneNumber.Text+";"+Environment.NewLine);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多