الرسائل القصيرة عن طريق أوامر AT مع GSM mobile يعطي خطأ

StackOverflow https://stackoverflow.com/questions/1210934

  •  06-07-2019
  •  | 
  •  

سؤال

أنا إرسال الرسائل القصيرة عن طريق أوامر AT مع جي إس أم الهاتف المحمول.أريد إرسال الجزء الأكبر من الرسالة مثل الآلاف.قرأت أن الهاتف النقال يمكن أن نرسل 6-8 sms لكل دقيقة.ولكن عندما ارسل الرسائل ثم شخص سوف وشخص لا.أنا على الحصول على المعلومات من ملف 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);
   }
هل كانت مفيدة؟

المحلول

أعتقد أن مشكلتك هي أنك لست في انتظار النتيجة النهائية رمز (أيحسنا خطأ و قليل من الآخرين) قبل إرسال الأوامر التاليةالمشكلة مع ذلك هو أن القيادة الجديدة سوف تؤدي إلى إحباط الجارية الأمر إذا لم ينته.اقتباس خامسا-250:

5.6.1 إجهاض الأوامر

...

إجهاض من الأوامر هو إنجاز انتقال من DTE إلى DCE من أي حرف.

لذلك دائما عند إرسال في الأوامر ، يجب أن ننتظر النتيجة النهائية رمز قبل إرسال الأوامر التالية

قد أقترح إعادة بيع ديون serialport.WriteLine("ATxxx" + Environment.NewLine) في sendCommand(serialport, "ATxxx") وظيفة ؟ ثم يمكنك إضافة انتظار النتيجة النهائية في تلك الوظيفة.

نصائح أخرى

في محاولة لمعرفة ما إذا كان هناك نمط الرسائل التي يتم إرسالها.لأن ثم قد تكون هناك مشكلة مع تنسيق أرقام أو أحرف غير صالحة في الرسالة.

أيضا, بعض الملاحظات:

  1. كنت لا تفعل أي خطأ التحقق.وأود التأكد من أن لدي المتوقع الرد بعد استدعاء كل أمر.

  2. استخدام البيئة.السطر لإنهاء كل صف.أفترض أن هذا هو العقار الذي يتغير مع نظام التشغيل الأساسي.في معيار غير واضح بالضبط الأحرف استخدام إنهاء commandlines.

  3. الهواتف النقالة هي حقيقية الأوغاد.فقط لأنك تتبع المواصفات أو الوثائق لا يعني أنها.نفترض أن كل نموذج الهاتف يتصرف مختلفة من كل أخرى.انظر النقطة 1.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top