【问题标题】:AT Commands being sent as part of the message, using JAVAAT 命令作为消息的一部分发送,使用 JAVA
【发布时间】:2013-06-24 11:17:59
【问题描述】:

我正在使用 Java 通过 AT 命令从我的 3G 加密狗(GSM 调制解调器)发送 SMS。它大部分都在工作,但有时 SMS 文本包含在此之前触发的部分 AT 命令。这是间歇性的,但需要修复。

相关代码如下:

public void sendMessage(String phoneNumber, String message) throws InterruptedException {
    char qu=34;
    char cz=26;
    send("AT+CMGF=1\r\n");
    Thread.sleep(2000);
    send("AT+CMGS=" + qu + phoneNumber + qu + ",145\r\n");
    send(message + cz + "\r");
  }

public static void main(String args[]) {
    GSMConnect gsm = new GSMConnect("COM22");
    if (gsm.init()) {
      try {
        gsm.connect();
        Thread.sleep(2000);
        gsm.sendMessage("+9172xxxxxxxx", "Test Message sent from GSM Modem using AT Commands.");
        System.out.println("Sleeping for 20 secs");
        Thread.sleep(20000);
        gsm.hangup();
      } catch (Exception e) {
        e.printStackTrace();
      }
    } else {
      System.out.println("Can't init this card");
    }
  }

我有时收到的信息如下:

AT+CMGS="+9172xxxxxxxx", 145 使用 AT 命令测试从 GSM 调制解调器发送的消息。

============

提前感谢您的帮助!

问候, 库马尔吉特

【问题讨论】:

  • 听起来您遇到了多线程问题。您是否不小心一次运行了程序的两个实例?
  • 没错。我不得不向 2 个人发送相同的消息。所以我调用了 gsm.sendMessage 两次。但是,即使我将它发送到一个号码,我也遇到了这个问题。还有一些其他命令正在执行,例如 AT+CREG=?和 ATZ
  • 您需要有一种机制来保证您一次只能从一个程序访问 COM22。
  • 你设置了波特率吗?我遇到了类似的问题,并在一小段延迟后发送命令,否则会发生这种情况,你必须得到延迟的时间
  • AT 命令行应仅以 \r 而不是 \r\n 终止。 stackoverflow.com/a/21503919/23118

标签: java gsm at-command


【解决方案1】:

先买一张大的A3纸,找支红笔写1000遍

我永远不会使用Thread.sleep 来代替读取解析来自调制解调器的响应。

我永远不会使用Thread.sleep 来代替读取解析来自调制解调器的响应。

我永远不会使用Thread.sleep 来代替读取解析来自调制解调器的响应。

我绝不会使用Thread.sleep 来代替读取解析来自调制解调器的响应。

我永远不会使用Thread.sleep 来代替读取解析来自调制解调器的响应。

...

然后阅读this answer按照有关 V.250 的说明进行操作。等到您正确消化了答案中的所有信息,然后再返回修复您的代码(可能需要一些时间才能让所有信息都深入了解)。

当然第一部分是为了搞笑,但我对其余部分非常认真;您必须填补一些巨大的 AT 命令知识“漏洞”。 这应该不是很困难,但需要一些努力。

虽然我无法准确说明您的 AT 命令的某些部分是如何在消息内容中结束的,但其根本原因是您没有按照应有的方式读取和解析调制解调器响应。


TL;DR: 您必须阅读并解析调制解调器发回给您的所有内容。 没有其他方法可以可靠地工作

【讨论】:

    猜你喜欢
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2018-05-15
    • 2012-04-13
    • 1970-01-01
    相关资源
    最近更新 更多