2009-07-31 19 views
0

私はGSM携帯電話でATコマンドでSMSを送信しています。私は何千というメッセージを大量に送りたい。私はGSM携帯電話で1分あたり6〜8枚のSMSを送ることができると読んでいます。しかし、私がメッセージを送るとき、誰かが行くと誰かがいない。私はエクセルファイルからの情報を得ています。宛先番号とメッセージテキストを意味します。あなたはなぜいくつかのsmsが行くといくつかの理由を教えてください。私のコードはGSMモバイルでのATコマンドによるSMSのエラー

 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); 
    } 

答えて

1

を参照してください。その問題は、新しいコマンドが完了していない場合、進行中のコマンドの中止を引き起こすということです。 V.250を引用する:

5.6.1中止コマンド

...

コマンドの は、任意の文字のDCE にDTEから 伝送することによって達成される中止。

ATコマンドを送信するときに、あなた次のコマンドを送信する前に、最終的な結果コードを待たなければなりませんので、常に

serialport.WriteLine("ATxxx" + Environment.NewLine)sendCommand(serialport, "ATxxx")にリファクタリングすることをおすすめしますか?そして、その関数の最後に最終結果コードを待つことを追加することができます。

0

です。送信されないメッセージのパターンがあるかどうかを確認してください。そのため、メッセージの数値書式や無効な文字に問題がある可能性があります。

はまた、いくつかの注意事項:

  1. あなたはすべてのエラーチェックを行っていません。私は各コマンドを呼び出した後に期待される応答を得たことを確認します。

  2. Environment.NewLineを使用して各行を終了しています。私は、これが基盤となるオペレーティングシステムによって変化するプロパティであると仮定します。しかし、AT標準は、コマンドラインを終了するためにどの文字を使うべきかについてはっきりしています。

  3. 携帯電話は本物の生徒です。あなたが仕様書に従っているか、文書化されているだけでは意味がありません。各電話モデルが他のすべてのモデルと異なる動作をすると仮定します。私はあなたの問題は、あなたが次のコマンドを送信する前に、最終的な結果コード(つまりOK、ERROR、およびいくつかの他)を待っていないことだと思うポイント1

+0

返信いただきありがとうございますが、一部のSMSが送信されていて、送信中にエラーが表示されていると書いています。だから、その背後にある理由は何でしょうか。私は大量のSMSを送信しているからです。私はこれで各コマンドの返事を得ています。 serialport.ReadExisting(); SMSがなぜ「OK」に返信され、「エラー」に返信されないのか教えていただけますか? – Deepak

+1

エラーがランダムであるかどうか、または一部のメッセージが常に合格し、常に失敗するメッセージがあるかどうかを確認しましたか? 私の推測は依然として不正な形式のメッセージまたはアドレスです。そうでないと、あなたの電話はその多くのメッセージを処理できません。 –

+0

こんにちは、 はい、あなたは正しいです。私は送信されたSMSにランダムに問題が発生しています。いくつかのメンバーには多くの時間SMSが送信され、次回はメンバーに送信されません。私のコードにどんな問題があるのか​​教えてください。 返信いただきありがとうございます – Deepak