短信通过AT与GSM手机是给错误命令(SMS by AT commands with GSM mob

2019-06-27 08:23发布

我发送短信通过AT与GSM手机的命令。 我想发送大量像成千上万的消息。 我读了由GSM手机,我们可以把每分钟6-8短信。 但是,当我发送消息,然后有人会,有人不会。 我正在从Excel文件中的信息意味着目标号码和消息文本。 你能告诉我,为什么一些短信会,有些不是。 我的代码

        SmsFields smsObj = null;
        List<SmsFields> smsColl = null;
        SerialPort serialport = null;
        StringBuilder strbuild = new StringBuilder();
        try
        {
            //Validate the form 
            if (!Validation()) return;

            serialport = new SerialPort();

            ////Sets the properties of serial port object
            serialport.PortName = cboPort.SelectedItem.ToString();
            serialport.BaudRate = 9600;
            serialport.Parity = Parity.None;
            serialport.DataBits = 8;
            serialport.StopBits = StopBits.One;
            serialport.Handshake = Handshake.RequestToSend;
            serialport.DtrEnable = true;
            serialport.RtsEnable = true;

            //Open the port to send sms
            serialport.Open();

            //Check if port is opened or not
            if (!serialport.IsOpen)
            {
                MessageBox.Show("Serial port is not opened. Please try with other port");
                return;
            }

            //Create smsFields class's object and fill the data in the generic collection
            smsObj = SmsFields.Instance;
            smsColl = smsObj.FillData(txtFilePath.Text);

            if (smsColl == null)
            {
                MessageBox.Show("No data found in the excel table");
                return;
            }
            //Gets the single record from SmsFields class and sends the message
            foreach (SmsFields sms in smsColl)
            {

                //checks phone status
                serialport.WriteLine("AT" + Environment.NewLine);
                //Configures message as SMS (0 for PDU format) and (1 for text format)
                serialport.WriteLine("AT+CMGF=1" + Environment.NewLine);

                //Sets message center number
                serialport.WriteLine("AT+CSCA=\"" + txtServiceNo.Text + "\"" + Environment.NewLine);

                //Sets destination number
                serialport.WriteLine("AT+CMGS=\"" + sms.DestinationNo + "\"" + Environment.NewLine);

                //Specifies message and sends Ctrl+z
                serialport.WriteLine(sms.Message + (char)26);

                //Displays buffer containing output messages
                System.Threading.Thread.Sleep(4000);
   }

Answer 1:

我觉得你的问题是,你是不是在等待发送下一个命令前最后的结果代码(即OK,ERROR和其他一些)。 但问题是,新指令将引发持续的命令中止,如果还没有完成。 引述V.250 :

5.6.1中止命令

...

命令中止通过从DTE到任何字符的DCE的传输来实现的。

因此,发送AT命令时, 始终 ,你必须在发送下一个命令之前等待最终结果代码。

我可能会建议重构serialport.WriteLine("ATxxx" + Environment.NewLine)sendCommand(serialport, "ATxxx")的功能? 然后你可以添加等待那个函数结束最终结果代码。



Answer 2:

试一下,看看如果有未发送的消息的模式。 因为那么则可能是消息中的数字格式或无效字符的问题。

此外,一些注意事项:

  1. 你是不是做任何错误检查。 我想确保我得到了预期的答复调用每个命令后。

  2. 您正在使用Environment.NewLine完成每一行。 我认为这是与底层操作系统的属性发生更改。 该AT标准然而正是上使用终止COMMANDLINES的字符非常清晰。

  3. 手机是真正的混蛋。 只是因为你按照规范或文档并不意味着他们做的。 假设每部手机模型的行为从所有其他不同。 看点一。



文章来源: SMS by AT commands with GSM mobile is giving error
标签: c# at-command