صفحه 1 از 10 123 ... آخرآخر
نمایش نتایج 1 تا 40 از 377

نام تاپیک: PDU Encoding And Decoding

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    PDU Encoding And Decoding

    تو این تاپیک توضیحات کامل کد کردن و خواندن PDU را توضیح میدم
    امیدوارم دوستان هم همکاری کنند تا یک منبع کامل تو این زمینه آماده کنیم.
    آخرین ویرایش به وسیله noorsoft : چهارشنبه 15 خرداد 1387 در 16:15 عصر

    Farshad Nooranian


  2. #2

    نقل قول: PDU ٍEncoding & Decoding

    سلام .

    تاپیک خیلی مفیدی هست . فقط اگر امکان داره از مباحث پایه شروع کنید . یعنی از صفر !

    مرسی ...

  3. #3
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    قسمت اول:Encode شماره مرکز پیام

    قسمت اول:Encode شماره مرکز پیام



    همانطور که میدونید برای ارسال پیام کوتاه به فرمت PDU نیاز به قسمتهای تفکیک شده اطلاعات هست.

    قسمت اول همانطور که در عکس هم وجود داره از سمت چپ تصویر شروع میشه تعداد جفت کاراکتری است که این رقم بر مبنای تعداد کاراکتر های بعدی تعیین میشه پس توضیح و مثال اونو میزاریم در انتها.

    قسمت دوم نوع شماره هست که آیا این شماره از نوع بین الملل هست ("یعنی با + شروع شده یا خیر")
    اگر شماره با + شروع شده باشه عدد 91 و در غیر این صورت عدد 81 جایگزین میشه و این جفت کاراکتری 1 واحد به تعداد شماره اضافه میکنه.


    قسمت سوم اصل شماره است که میبایست 2 تا،2تا جدا و معکوس بشه و هر جفت 1 واحد به تعداد خانه اول اضافه میکنه و همینطور اگر تعداد اعداد فرد باشه باید عدد آخر با مقدار F0 جمع بشه.

    مثال:
    1) برای یک شماره بین المللی که با + شروع شده.
    +98-912-1234567


    ما میام این شماره رو بر حسب نیاز خودمون تفکیک میکنیم تا مفهوم بهتر درک بشه.
    +98-91-21-23-45-67


    چون با + شروع شده پس عددی که باید در خانه دوم قرار بگیره 91 هست.

    حالا همانطور که شماره رو به صورت جفتهای 2 تایی مشخص کردیم ای جفت هارو معکوس میکنیم و کار رو ادامه میدیم یعنی :

    +89-19-12-32-54-76


    تکلیف + با جایگزاری عدد 91 در خانه دوم مشخص شده پس حذف میشه.نتیجه:

    89-19-12-32-54-76



    پس کدی که تا اینجا تولید شده بدون در نظر گرفته خانه اول که تعداد هست شده:

    91-89-19-12-32-54-76


    با شمارش جفت دوتایی به عدد 7 میرسی پس این عدد را باید به عنوان شمارش گر در مبنای HEX در خانه اول جایگزاری نماییم و این نکته هم در یاد داشته باشید که چون عدد ما یک رقمی است و در اینجا با جفت کاراکتری اعداد سروکار داریم مقدار بی ارزش 0 سمت چپ عدد را جایگزاری میکنیم یعنی 07.

    پس کدی که در انتها داریم :

    07-91-89-19-12-32-54-76


    و کدی که با ید ارسال بشه:
    0791891912325476


    این شده شماره مرکز پیام به صورت PDU در قالب یه شماره بین الملل.

    2) برای یک شماره معمولی.
    0098-912-1234567


    ما میام این شماره رو بر حسب نیاز خودمون تفکیک میکنیم تا مفهوم بهتر درک بشه.
    00-98-91-21-23-45-67


    چون با + شروع نشده پس عددی که باید در خانه دوم قرار بگیره 81 هست.

    در این نوع خواندن شماره همیشه اولین رقم از سمت چپ حذف میشه یعنی وقی شماره با 0098 وارد میشه سمت چپ ترین عدد حذف شده و عدد 098 برای ما باقی میمونه.پس تا اینجا نتیجه شده:

    0-09-89-12-12-34-56-7


    که صفر سمت چپ حذف میشه پس داریم:


    09-89-12-12-34-56-7



    حالا همانطور که شماره رو به صورت جفتهای 2 تایی مشخص کردیم ای جفت هارو معکوس میکنیم و کار رو ادامه میدیم یعنی :

    90-98-21-21-43-65-7


    و چون تعداد ارقام ما فرد هست پس سمت راست ترین عدد با F0 جمع میشه پس داریم:

    90-98-21-21-43-65-F7



    پس کدی که تا اینجا تولید شده بدون در نظر گرفته خانه اول که تعداد هست شده:

    81-90-98-21-21-43-65-F7


    با شمارش جفت دوتایی به عدد 8 میرسی پس این عدد را باید به عنوان شمارش گر در مبنای HEX در خانه اول جایگزاری نماییم و این نکته هم در یاد داشته باشید که چون عدد ما یک رقمی است و در اینجا با جفت کاراکتری اعداد سروکار داریم مقدار بی ارزش 0 سمت چپ عدد را جایگزاری میکنیم یعنی 08.

    پس کدی که در انتها داریم :

    08-81-90-98-21-21-43-65-F7


    و کدی که با ید ارسال بشه:
    0881909821214365F7


    این شده شماره مرکز پیام به صورت PDU در قالب یه شماره معمولی.

    تصویر بالا هم تو ضمیمه اضافه کردم تا اگر احیانا تصویر رو از هاست برداشتم ضمیمه این پست باشه.

    موفق باشید
    عکس های ضمیمه عکس های ضمیمه

  4. #4

    نقل قول: قسمت اول:Encode شماره مرکز پیام

    سلام من دارم با دستورات at command پیام فارسی می فرستم با سی شارپ ولی با فارسی مشکل دارم اگه می شه کمکم کنین یک سورس آماده اگه داشتین بدین ممنون می شم

  5. #5
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    قسمت دوم :Status Report

    قسمت دوم :Status Report یا درخواست گزارش از مرکز پیام

    بعد از تولید رشته بالا شما باید به اطلاع مرکز پیا برسونید که آیا گزارش دریافت این پیام رو نیاز دارید یا نه.

    اگر نیاز دارید عدد :31
    اگر نیاز ندارید عدد:11

    با ید به رشته بالا و دقیقا بعد از شماره مرکز پیام اضافه بشه.

    موفق باشید

  6. #6
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    قسمت سوم : Message Refrence

    قسمت سوم : Message Refrence

    وقتی شما با دستوری مثل AT+CMGW پیامی رو داخل سیم کارت ذخیره میکنی اون پیام یه شماره Index داره که در پاسخ دستور به شما بر میگرده، این شماره همون شمارست که در اصل شما میگی اونو بفرسته.

    که اصطلاحا بهش میگن SMS SUBMIT

    ما اینجا 00 رو برای این مورد در نظر میگیریم بدین معنا که پیام در این کد ارسال میشه و هیچ رفرنسی نداره.

    موفق باشید

  7. #7
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    قسمت چهارم : شماره مقصد

    قسمت چهارم : شماره مقصد


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

    1.کد بین المللی بودن شماره در شمارش لحاظ نمیشود.
    2.شماره به صورت جفت شمارش نمیشود و هر عدد نماینده 1 واحد در شما رش میباشد البته اگر تعداد اعداد فرد باشد باز هم همانند شماره مرکز پیام با F0 جمع میشود ولی مقدار F در تعداد شمارش محاسبه نمیشود.
    3.مقدار سمت چپ ترین عدد حفظ میشود.

    مثال برای نوع بین المللی:

    شماره مقصد :
    +989121234567


    پس داریم:
    تعداد ارقام بدون احتساب + برابر با 12 که چون با مبنای 16 سروکار داریم معادل آن یعنی C را جایگزین میکنیم.یعنی خانه اول شمارش کارکتر میشود :

    0C


    این شماره با + نماینده یک شماره بین الملل شروع شده پس در خانه دوم عدد 91 جایگزین میشود پس تا اینجا داریم:

    0C-91


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

    شماره اصلی شامل:
    98-91-21-23-45-67


    شماره بعد از معکوس شدن و حذف + :
    89-19-12-32-54-76


    ادغام نهایی:

    0C-91-89-19-12-32-54-76


    0C91891912325476


    مثال برای نوع معمولی:

    شماره مقصد :
    09121234567


    پس داریم:
    تعداد ارقام برابر با 11 که چون با مبنای 16 سروکار داریم معادل آن یعنی B را جایگزین میکنیم.یعنی خانه اول شمارش کارکتر میشود :

    0B


    این شماره یک شماره معمولی است پس در خانه دوم عدد 91 جایگزین میشود پس تا اینجا داریم:

    0B-81


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

    شماره اصلی شامل:
    09-12-12-34-56-7


    شماره بعد از معکوس شدن :
    90-21-21-43-65-F7


    ادغام نهایی:

    0B-81-90-21-21-43-65-F7


    0B819021214365F7



    موفق باشید
    عکس های ضمیمه عکس های ضمیمه

  8. #8
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    قسمت پنجم:پروتکلها

    این قسمت از کد ما یه یه حالت رزرو شده داره مخصوص پروتکل های پیام هست که دارای یه مبحث جدا و چه بسا طولانی هست که برای اجتناب و جلوگیری از هر گونه سر در گمی از کد 00 استفاده میکنیم.

    پس قسمت پنجم کد خودمون رو با :00
    پر میکنیم

    موفق باشید

  9. #9
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    قسمت ششم: نوع کاراکترها

    قسمت ششم: نوع کاراکترها

    منظور اینه که شما به BTS میگی متنی که داری میفرستی یه متن معمولی هست یه از کاراکتر های 2 بایتی توش استفاده شده که در این حالت :

    متن معمولی = DefaultAlphabet = شامل 160 کاراکتر برای هر پارت = برابر با کد 00

    کاراکترهای 2 بایتی = UCS2 = شامل 70 کاراکتر برای هر پارت = برابر با کد 08


    موفق باشید

  10. #10
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    قسمت هفتم : طول عمر پیام

    قسمت هفتم : طول عمر پیام

    این قسمت از کد ما شامل طول عمر و مدت زمانی که یک پیام میتونه تو شبکه سردر گم بمونه تا به مقصد برسه هست.

    که برابر است با:

    1 ساعت = 0B
    3 ساعت = 1D
    6 ساعت = 47
    12 ساعت = 8F
    1 روز = A7
    1 هفته = C4
    حداکثر = FF

    موفق باشید

  11. #11

    نقل قول: قسمت هفتم : طول عمر پیام

    نقل قول نوشته شده توسط raravaice مشاهده تاپیک
    قسمت هفتم : طول عمر پیام

    این قسمت از کد ما شامل طول عمر و مدت زمانی که یک پیام میتونه تو شبکه سردر گم بمونه تا به مقصد برسه هست.

    که برابر است با:

    1 ساعت = 0B
    3 ساعت = 1D
    6 ساعت = 47
    12 ساعت = 8F
    1 روز = A7
    1 هفته = C4
    حداکثر = FF

    موفق باشید
    مگر خود مخابرات زمانی رو در نظر نمیگیره؟
    با این وجود خو دبرنامه نویس میتونه این زمان رو تغییر بده، درسته؟
    آیا این امر ممکن هست؟؟

  12. #12

    نقل قول: قسمت هفتم : طول عمر پیام

    نقل قول نوشته شده توسط quiet_buzz مشاهده تاپیک
    مگر خود مخابرات زمانی رو در نظر نمیگیره؟
    با این وجود خو دبرنامه نویس میتونه این زمان رو تغییر بده، درسته؟
    آیا این امر ممکن هست؟؟
    این زمان رو برنامه نویس می تونه تعیین کنه ولی ظاهرا تو ایران اگه پیامی تا دو روز نرسه دیگه ارسال نمیشه برای همیت از دو روز به پایین رو می تونید برای عمر پیامتون در نظر بگیرید

    Farshad Nooranian


  13. #13
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    قسمت هشتم : ارسال یک پیام بدون محتوا

    قسمت هشتم : ارسال یک پیام بدون محتوا

    تا اینجا به آزمایش دستاورد آموزشی میرسیم که یه پیام خالی رو به شماره ای ارسال کنیم.

    مثال 1:

    مشخصات:
    شماره مرکز پیام = 989350001400+
    گزارش=بدون گزارش
    شماره Index=متن فعلی
    شماره مقصد = 09351234567
    پروتکل=00
    نوع محتوا = DefaultAlphabet
    مدت زمان نگهداری = حداکثر
    متن = خالی


    079189390500410011000B819053214365F70000FF


    موفق باشید

  14. #14
    کاربر دائمی آواتار reza6384
    تاریخ عضویت
    آبان 1386
    محل زندگی
    تهران - شهرک ژاندارمری
    سن
    40
    پست
    740

    نقل قول: قسمت هشتم : ارسال یک پیام بدون محتوا

    نقل قول نوشته شده توسط raravaice مشاهده تاپیک
    قسمت هشتم : ارسال یک پیام بدون محتوا

    تا اینجا به آزمایش دستاورد آموزشی میرسیم که یه پیام خالی رو به شماره ای ارسال کنیم.

    مثال 1:

    مشخصات:
    شماره مرکز پیام = 989350001400+
    گزارش=بدون گزارش
    شماره Index=متن فعلی
    شماره مقصد = 09351234567
    پروتکل=00
    نوع محتوا = DefaultAlphabet
    مدت زمان نگهداری = حداکثر
    متن = خالی


    079189390500410011000B819053214365F70000FF


    موفق باشید
    سلام. ضمن تشکر از شما و Noorsoft عزیز ، کدی که این بالا نوشتید رو نتونستم کامل کنم و جواب بگیرم، البته همه کارهایی که راجع به Encoding گفته شد انجام دادم و جواب گرفتم ، اما توی رشته ای که برای ارسال SMS می فرستم Delivery Report مشخص نشده :


    AT+CMGF=0
    OK
    AT+CSMS=0
    OK
    AT+CMGS=14
    >0011000B819021214365F70000FF00 (CTRL+Z)
    00 : Length of SMSC information
    11 : First octet of the SMS-SUBMIT message.
    00:TP-Message-Reference
    0B819021214365F7: Destination
    00:TP-PID. Protocol identifier
    00:Data coding scheme
    FF:validity period
    00: lenght of message


    این رشته که من نوشتم و ارسال کردم از روی لینکی که در یکی از صفحات این تاپیک جناب Noorsoft لطف کردن قرار دادن هست و جواب گرفتم ، سوالم اینه که پس Delivery Report کجای این رشته هست ؟

    سوال بعدی من اینه که وقتی که SMS ارسال شد یک پیام میاد به پورت Com :

    +CMGS: 17

    این یعنی چی؟

    سوال بعدی من اینه که من با یک گوشی نوکیا N73 کار می کنم، و دستور

    AT+CMGL = "ALL"

    رو می زنم Error میده.

    خیلی ممنون، ببخشید که سوالهام رو باهم پرسیدم.

  15. #15

    نقل قول: قسمت هشتم : ارسال یک پیام بدون محتوا

    این رشته که من نوشتم و ارسال کردم از روی لینکی که در یکی از صفحات این تاپیک جناب Noorsoft لطف کردن قرار دادن هست و جواب گرفتم ، سوالم اینه که پس Delivery Report کجای این رشته هست ؟
    دوست عزیز یک PDU میتونه یک یا بعضی از قسمتها را نداشته باشه و این اشکالی ایجاد نمی کنه

    سوال بعدی من اینه که وقتی که SMS ارسال شد یک پیام میاد به پورت Com :

    +CMGS: 17
    این یعنی چی؟
    این شماره Index ارسال پیامه

    سوال بعدی من اینه که من با یک گوشی نوکیا N73 کار می کنم، و دستور

    AT+CMGL = "ALL"
    رو می زنم Error میده.

    خیلی ممنون، ببخشید که سوالهام رو باهم پرسیدم.
    بعضی از گوشی ها بعضی از دستورات را ساپورت نمی کنن این هم از همون مورد هاست
    برای تست این قبیل موارد شما AT+CMGL? را وارد کنید اگر OK گرفتین دستور شما ساپورت میشه

    Farshad Nooranian


  16. #16
    کاربر دائمی آواتار reza6384
    تاریخ عضویت
    آبان 1386
    محل زندگی
    تهران - شهرک ژاندارمری
    سن
    40
    پست
    740

    نقل قول: PDU Encoding And Decoding

    سلام.
    من توی Encoding مربوط به محتوای پیام مشکل دارم. کدی رو که نوشتم در زیر قرار می دم، لطفا بگین چرا به مشکل بر می خوره. مشکل اینه که همونطور که دیدیم، هر 8 کاراکتر میاد در 7 بایت می شینه. من موقع ارسال Sms ها دیدم که مثلا وقتی میفرستم Reza Mohammad حرف آخر اون که d هست فرستاده نمی شه و برای رشته های بزرگتر تعداد حرف های بیشتری فرستاده نمیشه، یعنی همون تعدادی که به خاطر PDU Encoding کم شده، مثلا توی یه رشته که 24 حرف داره 3 حرف آخر نمی رسه و ....

    در ضمن من برای تبدیل باینری به هگزا دسیمال و همچنین گرفتن کد یک کاراکتر خودم تابع نوشتم، لطفا اگر این توابع توی NET2. موجود هستند بگین.

    تابع شامل 6 مرحله هست :
    1-پیدا کردن کد هر کاراکتر و تبدیل آن به هگزا دسیمال = Step1
    2-تبدیل کدهای هگز به باینری = Step2
    3-حذف MSB هر Octet که میشه Step3
    4- برعکس کردن هفت تایی ها = Step4
    اضافه کردن تعدادی صفر به سمت چپ رشته تا طول رشته مضرب 8 بشود
    5-برعکس کردن 8 تایی ها، البته شما نوشته بودین که به هگز تبدیل می کنین و بعد برعکس می کنین که فرقی نداره، من اول هشت تایی ها رو برعکس کردم و بعد به هگز تبدیل کردم و این میشه Step5
    6- تبدیل باینری ها به هگزا دسیمال، البته چون تابع Convert.ToInt16 اعداد بین یک تا 15 رو به یک رقم هگز تبدیل می کنه و ما دوتا دوتا می خواهیم، هر 4 بیت 4بیت رو جدا کردم و هگز کردم.


    Function EncodeOnePartDefaultAlphabetMessage(ByVal Message AsString) AsString
    Dim Step1 AsString = ""
    Dim Step2 AsString = ""
    Dim Step3 AsString = ""
    Dim Step4 AsString = ""
    Dim Step5 AsString = ""
    Dim Step6 AsString = ""
    Dim Result AsString = ""
    Dim OS, OE AsInteger' Octet Start and Octet End Pointers

    Dim Messagelen AsInteger
    Messagelen = Message.Length
    Dim MessageLenStr AsString = ""
    Dim Octet AsString = ""
    Dim Tetra AsString = ""
    For i AsInteger = 0 To Message.Length - 1
    Step1 +=
    Me.GetHexadecimalCharCode_ASCII(Message.Chars(i))
    Next
    For i AsInteger = 0 To Step1.Length - 1
    Step2 +=
    Me.ConvertHexToBinary(Step1.Chars(i))
    Next
    OS = 1
    OE = 7
    While OE < Step2.Length
    Octet = StrCpy(Step2, OS, OE)
    Step3 += Octet
    OS += 8
    OE += 8
    EndWhile
    OE = Step3.Length - 1
    OS = OE - 6
    While OS >= 0
    Octet = StrCpy(Step3, OS, OE)
    Step4 += Octet
    OS -= 7
    OE -= 7
    EndWhile
    If Step4.Length Mod 8 <> 0 Then
    Dim Zeros AsInteger
    Zeros = 8 - (Step4.Length Mod 8)
    For i AsInteger = 1 To Zeros
    Step4 =
    "0" + Step4
    Next
    EndIf
    OE = Step4.Length - 1
    OS = OE - 7
    While OS >= 0
    Octet = StrCpy(Step4, OS, OE)
    Step5 += Octet
    OS -= 8
    OE -= 8
    EndWhile
    OS = 0
    OE = 3
    While OE < Step5.Length
    Octet = StrCpy(Step5, OS, OE)
    Step6 +=
    Me.ConvertBinaryToHex(Octet)
    OS += 4
    OE += 4
    EndWhile

    Dim LN AsInteger = Step6.Length / 2
    If LN >= 0 And LN < 16 Then
    MessageLenStr = "0" & CStr(Hex(LN))
    Else
    MessageLenStr = CStr(Hex(LN))
    EndIf
    Result = MessageLenStr & Step6
    Return Result
    EndFunction



    ****************


    Function GetHexadecimalCharCode_ASCII(ByVal Character AsChar) AsString
    Dim CharIndex AsInteger = -1
    Dim Result AsString = ""

    For i AsInteger = 0 To 255
    If Chr(i) = Character Then
    CharIndex = i
    ExitFor
    EndIf
    Next
    If CharIndex <> -1 Then
    If CharIndex > 0 And CharIndex < 16 Then
    Result = "0" + CStr(Hex(CharIndex))
    ElseIf CharIndex >= 16 And CharIndex <= 255 Then
    Result = CStr(Hex(CharIndex))
    EndIf
    EndIf
    Return Result
    EndFunction


    فکر کنم پستم خیلی طولنی شد، ببخشید، مشکله دیگه، باید حل بشه.

    با این کد چند تا خروجی رو ازش می نویسم :

    String : 'Reza' => 04D2B23E0C
    String : 'Reza Mohammad' => 0CD2B23E0C6ABED1E1763B4C06
    String : 'This is a test sms for sending' => 1B54747A0E4ACF416110BD3CA783E6ED39C8FC9683E6653739 ED3E03

    رشته اول مشکلی نداره و کامل می رسه ، رشته دوم حرف آخرش نمی رسه و رشته سوم سه حرفش نمی رسه. لطفا اگر می شه این رشته ها رو با برنامه خودتون تست کنین و خروجیتون رو با این خروجی ها مقایسه کنین و بگین اشکال کارم کجاست.

  17. #17

    نقل قول: قسمت هشتم : ارسال یک پیام بدون محتوا

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

  18. #18
    کاربر تازه وارد آواتار hosseinmehr
    تاریخ عضویت
    شهریور 1385
    محل زندگی
    يزد
    سن
    42
    پست
    45

    نقل قول: PDU Encoding And Decoding

    به امید موفقیت.
    با تشکر.
    واقعا هظ کردم.
    آخرین ویرایش به وسیله hosseinmehr : چهارشنبه 29 اردیبهشت 1389 در 23:41 عصر

  19. #19

    نقل قول: PDU Encoding And Decoding

    سلام دوستان من یک سوال دارم
    تو کلاس Atsms
    من با استفاده از متد GetPdu رشته مورد نظرم رو دریافت میکنم طولش رو هم محاسبه میکنم
    برای فرستادنش وقتی از serialderiver.sendcmd یا write استفاده میکنم ارور Port close میده
    لطفا راهنمایی کنید

  20. #20
    کاربر جدید آواتار aysha_6586
    تاریخ عضویت
    خرداد 1389
    محل زندگی
    گلستان
    سن
    37
    پست
    28

    نقل قول: PDU Encoding And Decoding

    سلام
    من با استفاده از این تاپیک pdu رو ساختم کار هم میکنه فقط یه مشکلی هست
    تو اس ام اس های چند قسمته منتظر میشم اوکی پارت اول بیاد بعد پارت دوم رو میفرستم ولی پارتها نصفو نیمه به هم میچسبن ولی اگه یه delay کوچیک بینشون بدم درست میشه
    البته چیز ثابتی هم نیست یه روز با 3،4 ثانیه درست شد یه روز با 6،7 ثانیه!!
    ظاهرا برای مشخص کردن آخر pdu کاراکتری آخرش میذارین که تو این تاپیک اشاره ای بهش نشده
    سیرچیدم به نتیجه نرسیدم
    ممنون میشم منو راهنمایی کنین

  21. #21

    نقل قول: PDU Encoding And Decoding

    پست بسیار یسیار مفیدی بود...
    واقعا دست شما درد نکنه
    بسیار کمکم کرد
    از همه ی کسانی که در ارائه ی این مطالب تلاش کردند،متشکرم...

  22. #22
    کاربر جدید
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    18

    نقل قول: PDU Encoding And Decoding

    این عکس ها را چرا من نمی بینم

  23. #23

    نقل قول: قسمت هشتم : ارسال یک پیام بدون محتوا

    سلام
    در mcorlib یک Even برای delivery اس ام اس ارسالی وجود دارد که message refrence,time را برمی گرداند.از چه دستور At Command میشه استفاده کرد. که بشه فهمید اس ام اس ارسالی به شماره ارسالی رسید یا نه ؟

  24. #24
    کاربر دائمی آواتار faravaghi
    تاریخ عضویت
    مهر 1388
    محل زندگی
    مشهد
    پست
    233

    نقل قول: قسمت هشتم : ارسال یک پیام بدون محتوا

    نقل قول نوشته شده توسط M.Fekri مشاهده تاپیک
    سلام
    در mcorlib یک Even برای delivery اس ام اس ارسالی وجود دارد که message refrence,time را برمی گرداند.از چه دستور At Command میشه استفاده کرد. که بشه فهمید اس ام اس ارسالی به شماره ارسالی رسید یا نه ؟
    برای فهمیدن اینکه پیام رسیده یا نه شما لازم نیست دستوری بنویسید. بلکه خود اپراتور میگه که کی رسیده!
    شما برای اینکه بتونی جواب اپراتور رو بگیری باید یک سری تنظیمات رو مودم انجام بدی:

    • ابتدا باید تو پیامی که میفرستی مشخص کنی که می خوای تایید ارسال رو بگیری.


    • سپس باید برای گرفتن این تایید پارامترهای دستور زیر رو تنظیم کنی:

    Test Command

    AT+CNMI=?

    Response
    +CNMI: (list of supported <mode>s),(list of supported <mt>s),(list of
    supported <bm>s),(list of supported <ds>s),(list of supported <bfr>s)
    OK

    AT+CMNI=3,1,0,2,0

    که اگه این جوری باشه، جواب به شکل زیر میاد:
    +CDSI: "SR",54

    که یعنی باید اول بیای حافظه رو از SM به SR تغییر بدی :
    AT+CPMS="SR"

    دوم اینکه با دستور زیر بیای تو حافظه 54 رو بخونی ببینی چیه:
    AT+CMGR=55

    یادتون باشه بعد از این کار حافظه رو که تغییر دادین به حالت قبل برگردونین تا اگه پیام اومد بتونین اون رو بخونید.
    و حالا اگه این جوری پارامترها رو تغییر بدین:
    AT+CNMI=1,2,0,1,0

    جواب به شکل زیر میاد:
    +CDS: 25
    06918919015000062A0B81************1180105171318111 80105171538100

    که دیگه لازم نیست کاری بکنید فقط کافیه این کد PDU رو تفسیر کنید.(ستاره ها نمایانگر شماره تلفن است).

    • سپس وقتی داری پورت COM رو اسکن میکنی هرقت به کدی دریافت میکنی باید ایون رو تفسیر کنی که چیه اگه گزارش تایید ارسال بود بعد بری یه رویدادی رو فراخوانی کنی و بگی پیام رسید.

    تذکر: لازمه بگم تمام این چیزهایی که گفتم تو حالت PDU است. البته فرقی با حالت Text نداره ولی یک تبدیل PDU میفته گردن خودتون.

    روزه، نمازهاتون مقبول درگاه حق

  25. #25

    نقل قول: قسمت هشتم : ارسال یک پیام بدون محتوا

    متاسفانه AT+CMGR=?
    error می ده.

  26. #26
    کاربر دائمی آواتار faravaghi
    تاریخ عضویت
    مهر 1388
    محل زندگی
    مشهد
    پست
    233

    نقل قول: قسمت هشتم : ارسال یک پیام بدون محتوا

    سلام،
    همین جور شلاقی سوال کردی!
    نقل قول نوشته شده توسط aloneman2005 مشاهده تاپیک
    متاسفانه AT+CMGR=?
    error می ده.
    آیا شما در جواب دستور AT جوابی که میگیرین OK است یا Error ؟
    اگه OK باشه پس نتیجتا این جوری برداشت میشه که وسیله ای که شما دارین از این دستور پشتیبانی نمیکنه!!! ولی اگه Error باشه یعنی شما به مودم متصل نیستید.
    نقل قول نوشته شده توسط aloneman2005 مشاهده تاپیک
    توی دستور AT+CNMI=3,1
    ما توی قسمت اول یعنی mode فقط 0و1و2 داریم . چطور شما 3 رو آوردید.
    اینکه مودم شما چیرو پشتیبانی می کنه به خودش مربوطه!!!
    مگه من گفتم حتما اونی که من نوشتم وحی منزله!!!!
    مودمی که من دارم DWM-152 است و مثل اینکه شما گفتین حالت 3 نداره و دارم از روش دومی که گفتم استفاده می کنم. البته اینم بگم تو نرم افزارم اومدم حالتهای مختلف رو دیدم، از بهترین تا بدترین، به ترتیب هر کدوم جواب داد از اون استفاده می کنم.
    نقل قول نوشته شده توسط aloneman2005 مشاهده تاپیک
    این SR چیه
    من توی فرمان ها فقط MT,ME,SM رو دیدم
    AT+CPMS="SR"

    این دستور هم مثل نقل بالا است. تو بعضی از مودم ها این رو داره.SR به معنی Status Report است.
    یعنی گزارش وضعیت تو بعضی مودم ها رو می تونید این جوری بخونید. اگه حالت 3 تو مودمی نباشه قاعدتا این رو هم نداره پس بهتره از حالت دوم استفاده کنید و پارامترها رو این جوری تنظیم کنید:
    AT+CNMI=1,2,0,1,0

    جوابش فقط رو هوا میاد، اگه وقتی اومد نتونستی بگیری از دست میره و دیگه هیچ!!! بدی کار همینه.
    یک مدل مودم دیلینک هست، DWM-156 :
    AT+CMNI=3,1,0,2,0
    AT+CPMS="SR"

    این چیزایی که گفتم رو پشتیبانی میکنه. در ضمن در مورد دستور:
    AT+CUSD=1,"*140*11#",15

    که برای گرفتن شارژ است رو به چه زیبایی براتون جواب میده. اگه کسی خواست مودم بخره این مدل را انتخاب کنه بهتره.
    یا حق

  27. #27

    نقل قول: قسمت هشتم : ارسال یک پیام بدون محتوا

    توی دستور AT+CNMI=3,1
    ما توی قسمت اول یعنی mode فقط 0و1و2 داریم . چطور شما 3 رو آوردید.

  28. #28

    نقل قول: قسمت هشتم : ارسال یک پیام بدون محتوا

    این SR چیه
    من توی فرمان ها فقط MT,ME,SM رو دیدم

  29. #29
    کاربر دائمی آواتار reza6966
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    شیراز
    پست
    234

    نقل قول: قسمت هشتم : ارسال یک پیام بدون محتوا

    چک کردن پیام کوتاه جدید و ایجاد یک کنترل از طریق پیام کوتاه

    با سلام خدمت دوستان عزیز
    من یه برنامه می خوام بنویسم که به محض رسیدن یک اس ام اس متن آن را چک کند و مثلا اگه نوشته بود SHUTDOWN یه کد را اجرا کند و کامپیوتر را خاموش کند
    دوستان کسی می تونه من رو راهنمایی کنه ؟؟؟؟؟

    مشکل من اینه که چجوری کدی بنویسم که به محض رسیدن پیام جدید متوجه بشه و متن پیام رو چک کند ؟؟؟؟

    ممنون می شم

  30. #30
    توي اين پست تصميم دارم يكي از كامل ترين و منعطف ترين نمونه هايي رو كه توي نت ديدم رو بزارم .. اين نمونه به زبان VB.NET پياده سازي شده و واقعا در اين زمينه محشر هست ..

    اينم يك رفرنس جامع براي كار با SMS در C#‎

    يك نمونه براي vb كارها در زمينه ي كار با SMS

    اينم يكي ديگه براي كار با SMS در VB

    اينم براي دريافت SMS در VB

    اينم يك نمونه براي ارسال SMS در VB

    يك نمونه براي C#‎ كارها ...

    خوب فعلا كافيه .. چيز بهتري در اين زمينه ندارم ديگه .. منتظر ياري گرم مدير اين بخش كه قرار بود با هم همكاري كنيم تا يك كتابخانه كامل در اين زمينه بسازيم هستم ...

    با تشكر از زحمات raravaice عزيز ... خيلي ممنون ...

    يا حق ...
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله noorsoft : چهارشنبه 15 خرداد 1387 در 10:59 صبح دلیل: دسترسی آسان

  31. #31
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    قسمت نهم : تهیه محتوای پیام برای 1 پارت پیام در مود DefaultAlphabet

    قسمت نهم : تهیه محتوای پیام برای 1 پارت پیام در مود DefaultAlphabet



    با در نظر گرفتن مقدار اسکی هر کاراکتر و حذف سمت چپ ترین بیت از 8 بیت میتونیم به علامت 7 بیتی اون کاراکتر برسیم:

    مثلا برای کاراکتر a داریم

    HEX=61
    Binary 8 bit= 01100001
    Binary 7 bit = 1100001


    و همینطور برای کاراکتر ® داریم


    HEX=AE
    Binary 8 bit = 10101110
    Binary 7 bit = 0101110


    یک استثناء
    نکته مهم برای کاراکتر @ داریم :


    HEX=64
    Binary 8 bit = 01000000
    Binary 7 bit = 1000000


    ولی به دلیل اینکه از تداخل این کاراکتر با À پرهیز کنیم چون برای À داریم:


    HEX=C0
    Binary 8 bit = 11000000
    Binary 7 bit = 1000000


    به جای علامت 7 بیتی @ که در اینجا مشابه هست مقدار 0 رو در نظر میگیریم و چو ما به هفت بیت نیاز داریم معادل 0000000 رو به کد خودمون پیوست میدیم.

    ------------------------------------------------------------
    در مطالب بالا ماتونستیم هر کاراکتر رو به مقدار 7 بیتی خودش تبدیل کنیم.
    حالا باید این مقادیر باینری رو به صورت پشت سر هم به معادل HEX در مبنی 8 بیتی تبدیل کنیم که با ذکر یک مثال مسئله رو براتون روشن میکنم.

    مثلا برای کلمه @©Book داریم.


    B
    HEX=42
    Binary 8 bit = 01000010
    Binary 7 bit = 1000010

    o
    HEX=6F
    Binary 8 bit = 01101111
    Binary 7 bit = 1101111

    o
    HEX=6F
    Binary 8 bit = 01101111
    Binary 7 bit = 1101111
    k
    HEX=6B
    Binary 8 bit = 01101011
    Binary 7 bit = 1101011

    ©
    HEX=A9
    Binary 8 bit = 10101001
    Binary 7 bit = 0101001

    @
    Binary 7 bit = 0000000


    پس تا اینجا داریم :

    1000010-1101111-1101111-1101011-0101001-0000000
    حالا باید همه نتیجه رو بر عکس کنیم یعنی :


    0000000-0101001-1101011-1101111-1101111-1000010
    اگر دقت کنید در کد بالا ما 42 بیت داریم که بر 8 تقسیم نمیشه پس تا جایی که کد باینری ما بر 8 بخش پذیر باشه از سمت چپ به اون 0 اضافه میکنیم یعنی:


    000000-0000000-0101001-1101011-1101111-1101111-1000010
    حالا 8 بیت 8 بیت جدا سازی میکنیم تا کد ما بیاد رو مد 8 بیتی یعنی :


    00000000-00000010-10011101-01111011-11110111-11000010
    حالا این کد رو به معادل HEX اون بر میگردونیم یعنی :


    00-02-9D-7B-F7-C2
    اگر یادتون باشه یه بار باینری هارو برعکس کردیم حالا دوباره این کارو روی HEX انجام میدیم یعنی:

    C2-F7-7B-9D-02-00
    کلمه ما آماده ارسال هست ولی هنوز تعداد اون معلوم نیست.
    این عدد تعداد کاراکتر های وارد شده ما در مبنای 16 هست که در اینجا 6 کاراکتر داریم.دقت کنید چون داریم 1 بیت از هر کاراکتر کم میکنیم امکان داره تعداد جفت کد هگز ما این عدد نشه پس باید محاسبه این عدد رو از روی مجموع کل کاراکتر های وارد شده انجام بدیم.

    پس کد نهایی ما میشه:


    06-C2-F7-7B-9D-02-00
    وچیزی که باید ارسال بشه

    06C2F77B9D0200
    مبارکه;)

    موفق باشید
    عکس های ضمیمه عکس های ضمیمه

  32. #32
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    قسمت دهم : تهیه محتوای پیام برای 1 پارت پیام در مود UCS2

    قسمت دهم : تهیه محتوای پیام برای 1 پارت پیام در مود UCS2 ("کلمات فارسی و UTF-8")

    خوشبختانه کار ما برای این مورد خیلی راحت تره!
    اما چرا؟! :)

    توی این مد بر خلاف DefaultAlphabet (که برای هر کاراکتر با 1 بایت سرو کار داریم) با 2 بایت سرو کار داریم.

    یعنی توی DefaultAlphabet برای کاراکتر a معادل هگز داشتیم برابر با 61 ولی اینجا معادل هگز اون میشه 0061

    علت اونم که خودتون بهتر از من میدونید چون کاراکتر ها در مد UTF-8 در 2 بایت ذخیره میشن.

    ومیتونم بهتون اینو بگم که هیچکدوم از مراحل پیچیده حالت DefaultAlphabet در اینجا انجام نمیشه.

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

    فقط به یه نکته باید توجه کنید که هم تو این مد و هم تو مد DefaultAlphabet باید رعایت بشه اونم اینکه توی مد DefaultAlphabet صفر بی ارزش یعنی 0 در سمت چپ عدد درسته که از لحاظ ریاضی بی ارزش هست ولی اینجا ما لازمش داریم.

    مثلا معادل اسکی در پایه HEX برای حرف م عدد 645 هست ولی چون برای هر کاراکتر در این مد 4 تا صفر رزرو شده حتما باید صفر سمت چپ گذاشته بشه یعنی برای حرف م داریم 0645

    با یه مثال مسئله رو روشن میکنم:

    پیام رو با جمله زیر کد میکنیم.

    داش مهران شیطونی نکن.

    د = 06F2
    ا = 0627
    ش = 0634
    Space = 0020
    م = 0645
    ه = 0647
    ر = 0631
    ا = 0627
    ن = 0646
    Space = 0020
    ش = 0634
    ی = 06CC
    ط = 0637
    و = 0648
    ن = 0646
    ی =
    06CC
    Space = 0020
    ن = 0646
    ک = 06A9
    ن =
    0646
    . = 002E


    پس کدی که باید ارسال بشه :


    062F062706340020064506470631062706460020063406CC06 370648064606CC0020064606A90646002E
    تعداد کاراکتر های ما در این مثال 21 عدد است که چون داره توی 2 بایت ذخیره میشه پس در اصل داره 42 بایت ارسال میشه که عدد 42 در مبنای 16 برابر میشه با 2A که باید قبل از متن قرار بگیره یعنی:

    2A062F062706340020064506470631062706460020063406CC06 370648064606CC0020064606A90646002E
    خیلی راحت بود مگه نه.;)

    مخلص داش مهران و بقیه دوستان هم هستیم.;)

    موفق باشید

  33. #33

    نقل قول: PDU ٍEncoding & Decoding

    دوستان از زحمات همه ممنون من یکسری برنامه مفید آماده کردم در حال ترجمه یک منبع بسیار کامل و جامع PDf هستم که تو این تاپیک بزارم

    همینطور که همه دوستان میدونن شما در PDU میتونین خیلی از قسمتها را وارد نکنین پس شناسایی و از کد درآوردن اینگونه پیامها بسیار مشکه برای همین داشتن یک منبع همراه با سورس کد های اون قسمت با زبانهای VB6 .nte C#‎ فکر کنم مفید باشد

    برای توضیح بشتر این را بگم که ممکنه شما شماره مرکز فرسنتده یا زمان طول عمر پیام و ... دیگه را در PDU نداشته باشین

    باز هم از همکاری دوستان سپاسکزارم
    آخرین ویرایش به وسیله noorsoft : چهارشنبه 15 خرداد 1387 در 10:57 صبح

    Farshad Nooranian


  34. #34

    نقل قول: PDU ٍEncoding & Decoding

    نقل قول نوشته شده توسط noorsoft مشاهده تاپیک
    دوستان از زحمات همه ممنون من یکسری برنامه مفید آماده کردم در حال ترجمه یک منبع بسیار کامل و جامع PDf هستم که تو این تاپیک بزارم

    همینطور که همه دوستان میدونن شما در PDU میتونین خیلی از قسمتها را وارد نکنین پس شناسایی و از کد درآوردن اینگونه پیامها بسیار مشکه برای همین داشتن یک منبع همراه با سورس کد های اون قسمت با زبانهای VB6 .nte C#‎ فکر کنم مفید باشد
    الوعده وفا...... پس چي شد؟

  35. #35
    کاربر جدید
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    منزل شخصي
    سن
    42
    پست
    13

    نقل قول: قسمت دهم : تهیه محتوای پیام برای 1 پارت پیام در مود UCS2

    سلام با تشکر پست خیلی خوبتون . من نمیدونم چطوری کد UCS2 هر کارکتر فارسی رو استخراج کنم؟ مرجعش چیه؟

  36. #36

    نقل قول: PDU ٍEncoding & Decoding

    raravaice عزير من اسم كوچيكتون رو نميدونم پس تا موقع اي كه اسمت رو نگي به نام كاربريت صدات ميزنم ..

    اقا زحمت كشيدي اين رفرنس رو ارائه دادي .. اگه كاملش كني عالي ميشه .. همون طور كه ديدي من نمونه هايي رو گذاشتم كه هر كدوم براي خودشون يك سري مشكلاتي رو داشتن ...

    ايا شما نمونه ي خوبي براي اين كار سراغ دارين كه از انعطاف بالايي برخوردار باشه ؟؟

    دارم روي اين موضوع كار ميكنم و دارم تركيبي از بهترين نمونه ها رو بازنويسي ميكنم .. اگه شما هم چيز خوبي دارين در اختيار بزارين ... اگه كارم با موفقيت رو به رو شد همين جا ميزارمش ..

  37. #37
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    نقل قول: PDU ٍEncoding & Decoding

    به خدا توکل کن و مابقی بحث رو که درباره ارسال در 2 یا چند پارت پیام دنبال هم هست رو گوش کن.;)
    من کلا یه دوره زیاد سر به سر موبایل و سیم کارت و BTS هاش میزاشتم هر چی هست اطلاعات اون دورست.
    کامل و بدون نقص و همینطور تست شدست حالا از روی مطالب شما به هر زبانی که دوست داشتی بشین سورس بنویس.

    موفق باشید

  38. #38

    نقل قول: PDU ٍEncoding & Decoding

    مشتاقانه منتظر اس ام اس پارتي هستم من توي زبان برنامه نويسي محدوديتي ندارم ... بعد از تكميل شدن رفرنست رندوم ميزنم به يه زبان ترجمش ميكنم

    بعد از اين بحث ميپريم روي AT ها كه بايد سه نفري روش بحث كنيم ... من و تو و noorsoft .. نميدونم چرا اصلا پيداش نيست !!! ؟ به اميد خداوند تبارك يك چيز توپ سه تايي جمع و جور ميكنيم ...

    راستي اسم شريف رو نگفتي ... !!

    يا حق ...

  39. #39
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944
    همانطور که در قسمت های قبل به صورت بخش به بخش گفتم برای تهیه یک کد PDU قابل ارسال ما به چند قسمت تفکیک شده نیاز داریم که به ترتیب شامل :

    1.تعداد ارقام شماره مرکز پیام
    2.نوع شماره مرکز پیام "81,91"
    3.خود شماره مرکز پیام به صورت برعکس دوتایی
    4.کد درخواست گزارش از مرکز پیام"31،11"
    5.Message Refrence
    6.تعداد ارقام شماره مقصد
    7.نوع شماره مقصد"91,81"
    8.خود شماره مقصد به صورت برعکس دوتایی
    9.نوع پروتکل که شما برای SMS همیشه 00 رو جایگزین کنید.
    10.نوع فرمت که :08 برای UTF و 00 برای معمولی که در حالت 08 هر پارت شامل حداکثر 70 کاراکتر و در حالت 00 هر پارت شامل حداکثر 160 کاراکتر میباشد.
    11.طول عمر پیام
    12.تعداد بایتهای محتوای پیام
    13.محتوای پیام

    حالا برای ایجاد پارت های بعدی همه اون کارها باید انجام بشه فقط یه چیزایی این وسط اضافه میشه یا تغییر میکنه.

    1.وقتی پیام شما بیشتر از 1 پارت هست("حالا بر حسب نوع میشه یک پارت رو به 160 یا 70 کاراکتر تقسیم کرد اشاره من به صورت کلی مسئله هست") کد درخواست در هر حالتی که هست با 40H جمع میشه.
    یعنی برای عدم ارسال گزارش داریم51H و برای ارسال گزارش داریم 71H

    2.عدد ثابت 060804 دقیقا بعد از مرحله 12 و قبل از مرحله 13 جاگزاری میشه که کارش اینه که به مرکز پیام میگه این پیام ادامه دارد.

    3.بعد از این عدد ثابت 32 بیت رزرو شده داریم که حاوی یه عدد تصادفی برای شماره گزاری پیامهای ماست یعنی چی؟
    پیامی که ما در چند پارت میفرستیم بعد از این که مرکز پیام با کد 060804 متوجه شد ادامه داره و بتونه با دقت رد یابی کنه به یه کد احتیاج داره که در این قسمت قرار میگیره و میتونه یه عدد تصادفی بین 0000 و FFFF باشه و این عدد در سرآیند همه قسمتهای این پیام قرار میگیره.

    4.بعد از این عدد تصادفی که در اصل کد پیام ما هست باید به مرکز پیام بفهمونیم که منتظر چند قسمت باید باشه پس 16 بیت بعد از اون رو به این کار اختصاص دادن یعنی از 02 تا FF که میشه : 02 پیام من 2 قسمت داره و FF پیام من 255 قسمت داره.

    5.بعد از اینکه تعداد کل رو فرستادیم حالا باید ترتیب رو مشخص کنیم و به مرکز پیام بگیم این پیامی که الان رسیده دستت قسمت شماره چندم پیام هست که از 01 شروع میشه و با تعداد کل تموم میشه و بدین صورت ترتیب پشت سر هم قرار گرفتن هم لحاظ کردیم.

    6.محتوای پیام رو بدون هیچ تغییری وارد میکنیم.

    یه نکته که باید بهش خوب دقت کنید اینه که:

    060804-0000-02-01

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

    مسئله یه کم پیچیده است ولی خیلی مهم و جالبه.
    یه مثال میزنم که موضوع مشخص بشه:

    شماره مرکز پیام = 989350001400+
    شماره مقصد = 09351234567
    فرمت و محتوی پیام = فارسی شامل 200 کاراکتر "م"
    تمایل به دریافت گزارش دارم=71 چو در چند پارت داره ارسال میشه
    طول عمر پیا حداکثر باشه=FF

    خوب ، یه حساب کتاب میکنیم ببینیم متن ما قرار هست توی چند پارت ارسال بشه.
    از اونجایی که فرمت ما UTF هست پس در هر پارت حداکثر باید 70 کاراکتر جا بگیره یعنی :

    همانطور که گفتم ما 7 بایت سر بار اضافه داریم پس باید بشه.


    200 / 66 = 3.03


    یعنی 3 قسمت کامل و یه جزء کوچک که توی قسمت 4 قرار میگیره.
    پس پیام ما در حقیقت 4 پارت داره.

    پس کدی که باید برای قسمت اول تولید بشه به ترتیب میشه :

    1.تعداد بایتهای شماره مرکز پیام + کد نوع شماره = 07
    2.نوع شماره مرکز پیام که اینجا با "+" شروع شده= 91
    3.شماره مرکز پیام به صورت معکوس شده= 893905004100
    4.درخواست گزارش = 71
    5. رفرنس پیام = 00
    6.تعداد ارقام شماره مقصد = 0B
    7.نوع شماره مقصد چون معمولی هست = 81
    8. بر عکس شده شماره مقصد = 9053214365F7 "چون تعداد 11 فرد هست رقم آخر با F0 جمع شده"
    9.نوع پروتکل = 00
    10.نوع فرمت چون UTF هست پس = 08
    11.مدت زمان انتظار در شبکه حداکثر = FF
    12. تعداد بایتهای پیام اول = 8B ("توضیح در پاورقی ")
    13.عدد ثابت = 060804
    14.کد تصادفی پیام = 661D
    15.تعداد کل قسمتها = 04
    16.شماره ردیف پارت قسمت اول = 01
    17.محتوی پیام شامل = [66 بار تکرار (0645) که معادل کد اسکی حرف "م" هست و با یه ضرب ساده در 2 بایت میشه همون 132 بایتی که نیاز داشتیم]

    همونطور که حساب کردیم ما اینجا 3 تا پارت کامل داری و یه پارت نصفه پس پارت دوم و سوم فقط در شماره ردیف پیام تغییر میکنن یعنی:

    پارت دوم:
    تمامیه مراحل در پارت اول مشترک است غیر از مرحله :

    16.شماره ردیف پارت قسمت دوم = 02

    پارت سوم:
    تمامیه مراحل در پارت اول مشترک است غیر از مرحله :

    16.شماره ردیف پارت قسمت سوم = 03

    در پارت چهارم
    تمامیه مراحل در پارت اول مشترک است غیر از مرحله :

    12. تعداد بایتهای پیام چهارم =0B "ا 3 بایت عدد ثابت + 2 بایت عدد تصادفی + 1 بایت تعداد کل قسمتها + 1 بایت شماره ردیف پیام + 4 بایت محتوای پیام که شامل 2 تا "م" باقیمانده هست"


    16.شماره ردیف پارت قسمت چهارم = 04

    17.محتوی پیام = 2 بار تکرار (0645)


    در نتیجه محتوای پارت اول چیزی شبیه به کد زیر میشه :


    079189390500410071000B819053214365F70008FF8B060804661D040106450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645
    پارت دوم

    079189390500410071000B819053214365F70008FF8B060804661D040206450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645
    پارت سوم

    079189390500410071000B819053214365F70008FF8B060804661D040306450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645
    پارت چهارم

    079189390500410071000B819053214365F70008FF0B060804661D040406450645
    یه نکته برای دوستانی که از AT Command استفاده میکنن اینکه لازم نیست این کدها حتما در یک بار ارسال و یا پشت سر هم ارسال بشه.

    شما میتونید این کد ها رو در فواصل زما حتی 1 دقیقه و به صورت کاملا نا مرتب هم بفرستید یعنی اول پارت 2 بعد 3 بعد 1 و بعد 4 رو بفرستید البته مدت زمان وقفه به BTS شما بستگی داره که معمولا روی BTS های ایران تا 30 ثانیه به من جواب داده.
    پس عجله نکنید;)

    مهم
    پ.و: همانطور که تا الان باید متوجه شده باشید ما بدون احتساب شماره مرکز،شماره گیرنده و بقیه علائم برای متن و محتوای 1 پارت پیام حداکثر 140 بایت جا داریم که شمارش اون دقیقا از بعد از بایت شمارشگر محتوی شروع میشه.

    یعنی اگر بر مبنای 8 بیت حساب کنیم 140 کاراکتر داریم و چون در مد
    DefaultAlphabet برای هر کاراکتر 7 بیت داریم پس کلا میتونیم 160 کاراکتر ارسال داشته باشیم و همچنین به دلیل اینکه در مد UCS2 برای هر کاراکتر 16 بیت داریم یعنی هر کاراکتر 2 بایت پس کلا میتونیم 70 کاراکتر رو ارسال کنیم.

    حالا توی مد UCS2 وقتی پیام از 1 پارت بیشتر میشه ما مجبور 7 بایت هدر شامل :(3 بایت کد ثابت، 2 بایت شماره تصادفی ،1 بایت تعداد کل پیامها ،1 بایت شماره پیام فعلی) رو در محتوی پیام بگنجونیم
    پس در نتیجه 140 بایت منهای 7 بایت برابر میشه با 133 بایت.
    یعنی ما میتونیم 133 بایت از محتوی متن پیام شماره 1 رو اینجا بزاریم اما تو مد UCS2 یه ولی داریم:
    توی حالت UCS2 همانطور که گفتم هر کاراکتر 2 بایت داره پس با احتساب 133 بایت فضای خالی که موجود داریم میتونیم 66 کاراکتر و 1 بایت بفرستیم و چون این بایت باقیمانده نیاز به بایت مکمل داره تا تفهیم باشه و اون بایت مکمل بلاجبار توی پارت بعدی قرار گرفته این بایت هم از اینجا حذف میکنیم و به پارت بعدی اضافه میکنیم یعنی ما توی هر پارت پیام UCS2 به صورت مولتی پارت 132 بایت رو جا میدیم که میشه 66 کاراکتر و بیشتر از این امکان نداره.
    ----------------------------------------

    موفق باشید
    آخرین ویرایش به وسیله raravaice : پنج شنبه 16 خرداد 1387 در 22:51 عصر دلیل: چند تا مورد که توی پست 50 بهش اشاره شده بود

  40. #40
    VIP آواتار raravaice
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    Tehran
    سن
    40
    پست
    1,944

    قسمت دوازدهم : نکته آخر برای ارسال پیام کوتاه طول دستور AT شما

    قسمت دوازدهم : نکته آخر برای ارسال پیام کوتاه طول دستور AT شما

    اگر شما قصد داشته باشید با AT به مودم پیام ارسال کنید اول از همه باید طول دستور رو بهش بگید و بعد از زدن کلید Enter محتوی دستور رو وارد کنید.

    این عدد برابر میشه با : تعداد کل بایتهای ایجاد برای هر پارت - بایت شمارش شماره مرکز منهی بایت نوع منهی تعداد بایتهایی که شماره مرکز پیام رو تشکیل میده.

    مثلا برای مثالی که تو قسمت بالا گفتم طول پارت 1 و 2 و 3 برابر میشه با 153 و طول پارت 4 برابر میشه با 25

    موفق باشید

صفحه 1 از 10 123 ... آخرآخر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •