خانه / SIM800 / ارسال و دریافت sms در مد pdu با sim800
ارسال و دریافت sms در مد pdu
ارسال و دریافت sms در مد pdu

ارسال و دریافت sms در مد pdu با sim800

ارسال و دریافت sms در مد pdu با ماژول sim800

به طور کلی دو فرمت برای ارسال و دریافت sms در gsm مودمها وجود دارد . فرمت ها عبارت است از text mode و pdu mode که توسط فرمان AT+CMGF در GSM تعیین می گردد . توسط فرمان AT+CMGF=1 مد text فعال و توسط فرمان AT_CMGF=0 مد pdu فعال می شود . اکثر gsm ها از جمله ماژول sim800  از هر دو فرمت pdu , text پشتیبانی می کنند . در برخی از gsm ها و موبایل های قدیمی فقط از فرمت pdu پشتیبانی می شود .

در فرمت text برای ارسال و دریافت sms از کاراکترهای نوشتاری استاندارد استفاده می شود . اما در فرمت pdu اطلاعات ارسال و دریافت باید به صورت قالب خاصی فشرده سازی و رمز نگاری شوند ، که در هنگام دریافت باید این اطلاعات رمزگشایی شوند تا برای ما قابل فهم شوند .

در ادامه به مزیت استفاده از mode pdu خواهیم پرداخت ، همانطور که می دانید تعداد کاراکترهایی که می توانیم در قالب یک sms ارسال کنیم برابر با 140 کاراکتر می باشد . این کاراکترها که شامل همه حروف بزرگ و کوچک و اعداد و علامت ها هستند را کاراکترهای اسکی می نامیم . هر کاراکتر اسکی مقدار 7 بیت از یک کاراکتر(8 بیت) را اشغال می کند . بنابراین زمانی که ما sms را ارسال می کنیم در هر بایت یک بیت بلااستفاده نیز ارسال می شود . در mode pdu ما طی عملیاتی از تمامی ظرفیت بیت ها استفاده می کنیم و تعداد کاراکتری را که می توانیم در قالب یک sms ارسال کنیم برابر با (140*8)/7=160 می باشد .

ارسال sms در mode pdu :

در ادامه با ذکر یک مثال به صورت عملی با نحوه فشرده سازی و ارسال یک پیامک در مد pdu  آشنا می شویم . در این مثال ما می خواهیم کلمه hello را توسط سیمکارت رایتل به شماره مقصد 09120197955 ارسال کنیم .

mode pdu از سه نوع داده خاص استفاده می کند :

  1. octet : گروهی از داده های 8 بیتی به صورت هگزا دسیمال می باشد .
  2. semi-octet : گروهی از داده های 8 بیتی به صورت دسیمال می باشد .
  3. septet : گروهی از داده های 7 بیتی به صورت عدد صحیح می باشد .

کلمه hello شامل 5 کاراکتر است که septet نامیده می شود  . هر کدام از septet ها کاراکترهای 7 بیتی را تشکیل می دهند . برای ارسال باید septet ها به octet تبدیل شوند . اولین septet کاراکتر (h(1101000  می باشد که با افزودن کم ارزشترین بیت از septet دوم  به انتهای h به octet تبدیل می شود (1101000+1=11101000) . کاراکتر دوم 2 بیت از septet سوم دریافت می کند و این عملیات تا septet آخر ادامه می یابد .

ارسال sms در مد pdu
ارسال sms در مد pdu

بعد از اینکه متن sms به داده های octet تبدیل شد ، برای ارسال باید یک سری فیلد که توسط انستیتو استاندارد اروپا (ETSI) مشخص شده ، به قالب sms اضافه شود . کد زیر یک نمونه sms در فرمت pdu  است که به بررسی تمام فیلدهای آن می پردازیم .

ارسال sms در مد pdu
ارسال sms در مد pdu

1 . طول شماره مرکز پیام را در مبنای هگز نشان می دهد . در قسمت 3 توضیح داده خواهد شد .

2 . نوع شماره مرکز پیام می باشد ، اگر شماره با + شروع شود از نوع بین الملل است و به جای آن عدد 91 قرار می گیرد در غیر اینصورت عدد 81 قرار می گیرد .

3 . شماره مرکز پیام از نوع semi-octet می باشد ، در این مثال سیم کارت اپراتور رایتل است و شماره مرکز پیام  989200000920+ می باشد . شماره ها باید دو رقم به دو رقم جدا و برعکس شود . اگر تعداد ارقام شماره فرد باشد باید مقدار F به آخر آن اضافه شود . در نهایت طول شماره مرکز پیام 7 می باشد که در قسمت 1 قرار داده شده است .

02 90 00 00 29 89 91

توسط فرمان زیر شماره مرکز پیام سیم کارت را بدست می آوریم :

4 . گزارش تحویل یا delivery را فعال می کند ، عدد  31 فعال و عدد 11 غیر فعال می باشد .

5 . شماره Index پیام را مشخص می کند ، اگر مقدار 00 باشد متن پیام فعلی و غیر صفر مقدار Index پیام ذخیره شده در حافظه را نشان می دهد .

6 . طول شماره مقصد از نوع semi-octet می باشد .

7 . نوع شماره مقصد را مشخص می کند ، اگر با + آغاز شود از نوع بین الملل است و به جای آن عدد 91 قرار می گیرد در غیر اینصورت عدد 81 قرار می گیرد .

8 . شماره مقصد  09120197955  می باشد ، این شماره باید دو رقم دو رقم جدا و برعکس شود . اگر تعداد ارقام شماره فرد باشد باید مقدار F به آخر آن اضافه شود .

     09 12 01 97 95 5F
81 90 21 10 79 59 F5

9 . پروتکل پیام  از نوع sms یا mms و … را مشخص می کند . بنابراین برای sms مقدار 00 قرار می گیرد .

10 .  نوع کدگذاری محتوی پیام می باشد ، mode pdu دارای دو نوع فرمت Defult Alphabet و UCS2 می باشد . مقدار 00 فرمت Defult Alphabet را فعال می کند و برای ارسال پیام های انگلیسی می باشد . مقدار 08 فرمت (یونیکد)UCS2 را فعال می کند که برای ارسال پیام های فارسی استفاده می شود که در ادامه با ذکر مثال به آن خواهیم پرداخت .

11 . مدت زمانی است که یک sms می تواند در شبکه معلق بماند تا به مقصد تحویل داده شود ، مدت زمان طبق جدول زیر مشخص می شود .

ارسال sms در مد pdu
ارسال sms در مد pdu

12 . طول septet های متن پیام را مشخص می کند ، کلمه hello از 5 septet تشکیل شده است .

13 . متن تبدیل شده به octet پیام که شامل  E8329BFD06 می باشد .

نکته : متن پیام انگلیسی در محدوده کاراکترهای اسکی می باشد که هر کاراکتر معادل یک بایت می باشد . اما اگر متن پیام حروف فارسی یا فارسی و انگلیسی باشد ، باید از استاندارد (Unicode(UCS2 استفاده شود . در مد UCS2 هر کاراکتر فارسی دو بایت را اشغال می کند ، در مد UCS2 دیگر فشرده سازی انجام نمی شود . بنابراین تعداد کاراکترهای فارسی که در قالب یک sms می توان ارسال کرد 140/2=70  کاراکتر می باشد . جدول زیر کاراکترهای یونیکد فارسی و انگلیسی می باشد .

 

ارسال sms فارسی با sim800
ارسال sms فارسی با sim800

 

ارسال sms فارسی در مد pdu با sim800 :

برای مثال معادل کلمه فارسی “سلام” را از جدول استخراج می کنیم (0633064406270645) و در فیلد سیزدهم قرار می دهیم و طبق آموزش داده شده فیلد دهم را برای مد UCS2  برابر 08 قرار می دهیم . طول کاراکترهای پیام نیز 08 است که در فیلد دوازدهم قرار می دهیم .

 

دریافت sms در مد pdu با sim800 :

برای خواندن پیام دریافتی از فرمان AT+CMGR استفاده می کنیم . در مثال زیر پیام حاوی متن “hello” می باشد که به شرح آن می پردازیم :

دریافت sms در مد pdu
دریافت sms در مد pdu

 

1 . طول شماره مرکز پیام را در مبنای هگز نشان می دهد .

2 . نوع شماره مرکز پیام می باشد اگر شماره با + شروع شده باشد از نوع بین الملل است و به جای آن عدد 91 قرار می گیرد در غیر اینصورت عدد 81 قرار می گیرد .

3 . شماره مرکز پیام از نوع semi-octet می باشد ، شماره ها باید دو رقم به دو رقم جدا و برعکس شود .

91 89 19 01 50 00
+9891100500

4 . مربوط به گزارش دریافت یا delivery  می باشد ، اگر شخص ارسال کننده sms درخواست delivery نداده باشد مقدار 04 و اگر درخواست delivery داده باشد مقدار 24 می باشد .

5 . طول شماره مقصد از نوع semi-octet می باشد .

6 . نوع شماره مقصد را مشخص می کند . اگر با + آغاز شود از نوع بین الملل است و به جای آن عدد 91 است در غیر اینصورت عدد 81 می باشد .

7 . شماره فرستنده پیام است ، این شماره باید دو رقم دو رقم جدا و برعکس شود .

91 89 19 02 91 97 55
+989120197955

8 . این بخش مربوط به ارسال sms یا mms است که برای sms مقدار 00 خواهد بود .

9 . این بخش تعیین کننده کاراکترهاي تک بایتی یا دو بایتی است. براي کاراکترهاي تک بایتی 00 و براي کاراکترهاي دو بایتی 08 خواهد بود . که کاراکترهاي دو بایتی براي ارسال کلمات فارسی به کار می رود.

10 . این بخش مربوط به تاریخ و زمان ارسال شدن پیام است که به صورت Semi-Octet می باشد . باید دو رقم دو رقم جدا و برعکس شود . دو رقم اول مربوط به سال است که باید عدد 20 به ابتدای آن اضافه شود . به ترتیب ماه ، روز ، ساعت ، دقیقه ، ثانیه و time zoon است که نماینده موقعیت جغرافیایی بر اساس GMT است و قانون آن تقسیم بر 4 است . که 14/4=3.5 ساعت اختلاف زمانی ایران با گرینویچ می باشد .

81 21 32 02 52 95 41
18 12 23 20 25 59 14
2018/12/23 20:25:59 +14″

11 . این بخش تعداد septet های متن فشرده شده به فرمت pdu می باشد .

12 . این بخش متن اصلی پیام است که به فرمت pdu فشرده شده است و معادل کلمه hello می باشد . در حالت عادی غیر قابل فهم است و نیاز به رمز گشایی دارد .

ارسال sms در مد pdu
ارسال sms در مد pdu

 

رمز گشایی sms در مد pdu :

براي تبدیل شدن به Septet ، اولین  Octet با ارزش ترین بیت خود را به Octet دوم می دهد . Octet دوم با تحویل دو بیت با ارزش خود به Octet سوم و دریافت با ارزش ترین بیت از Octet اول به Septet تبدیل می شود . و به همین ترتیب آخرین Octet پنج بیت با ارزش خود را از دست می دهد و چهار بیت دریافتی از octet چهارم در جلوي آن قرار می گیرد .

برای تشخیص اینکه sms دریافتی انگلیسی هست یا فارسی باید فیلد نهم بررسی شود اگر 00 باشد متن انگلیسی و نیاز به رمزگشایی دارد و اگر مقدار 08 باشد متن پیام فارسی می باشد که نیاز به رمزگشایی ندارد و از جدول مقادیر یونیکد پیام را استخراج می کنیم . مثال زیر نمونه پیام فارسی با متن “سلام” می باشد .

نکته آخر طول قالب یک پیام است ، که به صورت یک عدد دسیمال مقابل فرمان AT+CMGS ارسال می شود . تعداد کاراکترهای بعد از شماره مرکز پیام تقسیم بر دو ، زیرا جفت کاراکتر شمارش می شود .

AT+CMGS=19
> 079189290000900231000B819021107959F50000FF05E8329BFD06 
+CMGS: 6
OK

زبان برنامه نویسی : at+command
نویسنده : حسین غیاثوند
تاریخ انتشار : 1397/10/2

7 دیدگاه

  1. سلام ادمین جان
    بسیار ممنون از مطلب مفیدتون

  2. سلام
    متشکرم ازشما بابت مطالب ارزنده سایتتون. خدا توفیقتون بده.

  3. مطلب بسیار خوبی بود که در هیچ سایت فارسی وجود نداشت. یه مطلب عالی در مورد ارسال و دریافت پیامک در مد pdu. چند تا مطلب رو هم اضافه کنم. ماژول Air200 یه ماژول جی اس ام هست که به همین روش و در مد pdu می توان به راحتی باهاش پیامک فارسی ارسال کرد. اما اکثر روشهای دیگه جواب نمیده و اگه از روشهای دیگه برای ارسال پیامک فارسی استفاده بشه ماژول قفل میکنه و باید فیرمویرش آپگرید بشه. با تشکر از مهندس غیاثوند

    • سلام
      از این که این مطلب برای شما مفید واقع شده خوشحالیم ، موفق باشید.

  4. بسیار ممنون.آقا شما زکاته علمتو دادی.خیلی ارزشمند بود مطالب شما

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.