الرسائل القصيرة عن طريق أوامر AT مع GSM mobile يعطي خطأ
-
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")
وظيفة ؟ ثم يمكنك إضافة انتظار النتيجة النهائية في تلك الوظيفة.
نصائح أخرى
في محاولة لمعرفة ما إذا كان هناك نمط الرسائل التي يتم إرسالها.لأن ثم قد تكون هناك مشكلة مع تنسيق أرقام أو أحرف غير صالحة في الرسالة.
أيضا, بعض الملاحظات:
كنت لا تفعل أي خطأ التحقق.وأود التأكد من أن لدي المتوقع الرد بعد استدعاء كل أمر.
استخدام البيئة.السطر لإنهاء كل صف.أفترض أن هذا هو العقار الذي يتغير مع نظام التشغيل الأساسي.في معيار غير واضح بالضبط الأحرف استخدام إنهاء commandlines.
الهواتف النقالة هي حقيقية الأوغاد.فقط لأنك تتبع المواصفات أو الوثائق لا يعني أنها.نفترض أن كل نموذج الهاتف يتصرف مختلفة من كل أخرى.انظر النقطة 1.