سلام.
میخواستم بپرسم که چجوری متوجه بشیم که یک sms جدید رسیده؟ باید روی پورت سرکشی کنیم؟ خود موبایل چجوری تشخیص میده وقتی یک sms جدید میرسه؟ آیا Interrupt داره؟
ممنون.
سلام.
میخواستم بپرسم که چجوری متوجه بشیم که یک sms جدید رسیده؟ باید روی پورت سرکشی کنیم؟ خود موبایل چجوری تشخیص میده وقتی یک sms جدید میرسه؟ آیا Interrupt داره؟
ممنون.
باید خودتون هر چند وقت یک بار چک کنید اس ام اس جدید دریافت شده یا نه
یک نکته را بگم و اون اینه که سیم کارت بیشتر از 15 پیام را ذخیره نمی کنه پس اگه به موقع پیامها را دریافت نکنید و بعد حافظه را آزاد نکنید پیامهای جدید رو از دست میدین
Farshad Nooranian
يك كلاس تعريف كنيد و روي پورتها event بزاريد . خواندن مرطب از پورت كار درستي نيست . در ضمن مگر ميشه همش يك تايمر كار كنه . اينطوري كه برنامه بعد از چند وقت پشت سر هم روشن بودن ميتركه
با تشکر از دوستان.
مثلا یک sms به گوشی خودمون میفرستیم. در شرایط عادی آنتن دهی، یکی دو ثانیه طول می کشه که گوشی ما اعلام کنه یک پیام جدید رسیده. یعنی باید مثلا هر ثانیه پورت رو چک کنیم؟باید خودتون هر چند وقت یک بار چک کنید اس ام اس جدید دریافت شده یا نه
ببخشید، اصلا احتیاجی به این کار نیست. در Net. 2 اینکار انجام شده، یعنی وقتی که داده روی پورت میاد، یک Event به نام DataReceived فراخوانی میشه و میشه با استفاده از Object.ReadExisting رشته موجود در بافر پورت رو خوند.يك كلاس تعريف كنيد و روي پورتها event بزاريد . خواندن مرطب از پورت كار درستي نيست . در ضمن مگر ميشه همش يك تايمر كار كنه . اينطوري كه برنامه بعد از چند وقت پشت سر هم روشن بودن ميتركه
Dim Withevents MySerialPort As New System.Io.Ports.SerialPort
در ضمن ، شما گوشی یا مودمتون رو به Hyper Terminal وصل کنید ، یک Sms بهش ارسال کنید. آیا در Hyper Terminal رشته ورودی رو میبینید یا اینکه باید از دستور AT+CMGL استفاده کنید؟ منظورم اینه که وقتی یک SMS جدید میاد رشته ای روی پورت نمیاد.
حالا این سوال رو میپرسم. به نظر شما با این تفاسیر، گوشی میاد هر ثانیه یک بار دستور AT+CMGL=0 رو اجرا می کنه تا بفهمه که SMS جدید اومده؟
با تشکر از دوستان.
خوب خودت كه داري ميگي با event كار كن . ديگر مشگلت چيست؟
مشکلی ندارم. می خوام بدونم خود گوشی چیکار می کنه؟ در ضمن وقتی ما با AT+CMGL=0 اومدیم و پیام های جدید رو خوندیم، چکار کنیم که دفعه بعدی این پیام ها دوباره توی New Messages نباشند و دوباره به لیست پیام های جدید ما اضافه نشوند؟
وقتي event عمل كرد Raise شد . شما بايد بريزيش هر جا لازم داري . حالا sms جديد كه بياد باز event عمل ميكند يعني هميشه شما sms جديد رو بر ميداري ديگر با قبليها كاري نداري
علی جان شما متوجه منظور من نشدین.
ببینید، فرض کنید که گوشی به USB وصله و HyperTerminal هم جلوی شما قرار گرفته، وقتی پیام جدید میاد HyperTerminal هیچ چیزی رو نشون نمیده، اگر نشون می داد که خوب بود، هر بار SMS جدید میومد ، یک رشته PDU میومد روی پورت و Event فراخوانی میشد و ما اون رشته رو تفسیر می کردیم. ولی وقتی پیام جدید میاد گوشی خودش یک کاری برای خودش می کنه که می فهمه SMS جدید اومده و چیزی رو روی پورت ارسال نمی کنه که ما بفهمیم. ما باید با AT+CMGL ازش بخواهیم به ما بگه.
عزيز دل شما يك طوري در پستهاي بالا به من حمله كردي كه من فكر كردم بلدي ي. ببين توي برنامت اگر event تعريف كني روي پورت يعني وقتي sms مياد يك event عمل ميكنه . و شما مثلا متن و ... رو توي بدنه آن event مثلا ميريزي توي db . مثل clipbord هست كه وقتي مثلا ctrl+c ميزنيم خود windows يك event رو raise ميكنه براي پورت هم ميشه تعريف كرد و بعد توي برنامه استفاده كرد
اولا که ما مخلص شما هستیم.عزيز دل شما يك طوري در پستهاي بالا به من حمله كردي كه من فكر كردم بلدي ي.
ثانیا نمی دونم چرا یا من متوجه منظور شما نمیشم، یا شما متوجه منظور من.
حالا من سوال می پرسم. آیا منظور شما از Event روی پورت اینه که مثلا یک Event به نام NewSmsReceived رو تعریف کنیم، بعد هر وقت که با دستور AT+CMGL=0 متوجه ورود SMS جدید شدید بیایم Event رو Raise کنیم. اینکار رو هم با استفاده از یک Timer هر ثانیه یکبار انجام بدیم. درسته؟
ديگر شما با at+cmgl=0 كاري نداريد . خود پورت event داره . و خودش raise ميشه . raise شدن توسط شما لازم نيست
Farshad Nooranian
میشه یکم بیشتر توضیح بدین
تا اونجایی که من میدونم دستگاههای که مودم جی اس ام هستند یکسری از دستورات باعث میشه به شما رویدادها را گزارش بدند
برای مثال شما این امکان را دارین که به مودم اعلام کنید اگه خطایی رخ داد به من گزارش بده یا نه و یا اگر کسی زنگ زد به ما اعلام بکن یا نه
خوب اگه شما به مودم بگین هر وقت گوشی زنگ میخوره اعلام کن مودم به شما این رویداد را اعلام میکنه و یازی نیست خودتون مرتب این را چک کنید ولی در مورد اس ام اس جدید این طور نیست هیچ رویدادی اعلام نمیشه بلکه این خودتون هستید که باید چک کنید پیامی جدیددی دریافت کرده اید یا نه
حالا اگه رویدادی که شما از اون حرف میزنید غیر از اینیه که من گفتم لطف کنین یکم بیشتر توضیح بدین
موفق و موید باشید
Farshad Nooranian
همونطور که Noorsoft عزیز گفت، EVENT ای در کار نیست. چون به هنگام رسیدن SMS اطلاعاتی روی پورت فرستاده نمیشه، اگر میشد event هم داشتیم. ولی الان که نمیشه نداریم.
سلام
ببخشید منم فضولی کردم ولی یه برنامه دو سه سال قبل دیدم که برای مدارس هوشمند بود کارش هم این بود که تا اس ام اس براش میومد اون سریعا اس ام اس رو میخوند و یک جواب برای آن طرف میفرستاد
منم خیلی میخوام بدونم چه طوری باید بفهمیم که اس ام اس جدید اومده یا نه
در ضمن من تست کردم موبایل وقتی براش یه اس ام اس میاد هیچ چیزی روی پورت سریال نمیفرسته
با سلام
بله یک دستور AT هست بنام:
AT+CNMI=2,1,0,1
که میشه گفت event مودم را برای دریافت sms جدید فعال میکنه از این دستور به بعد هر گاه اس ام اس جدید بیاد به صورت زیر به نمایش در میاد:
+CMTI: "ME",108
این پاسخ از سمت مودم نمایانگر محل ذخیره سازی اس ام اس جدید می باشد.
ضمناً اینو خودم تست کردم و عملاً نتیجشو دیدم![]()
توضیح پارامترهای دستور
+CNMI=<mode>,<mt>,
<mode> buffering mode
<bm>,<ds>,<bfr>
0
Buffer unsolicited result codes in the TA. If TA result
code buffer is full, the oldest indications may be discarded
and replaced with the new received indications.
1 Discard indication and reject new received message
unsolicited result codes when TA-TE link is reserved (e.g. in
on-line data mode). Otherwise forward them directly to the
TE.
2 Buffer unsolicited result codes in the TA when TA-TE link
is reserved (e.g. in on-line data mode) and flush them to the
TE after reservation. Otherwise forward them directly to the
TE.
<mt> rules for storing received SMs
0
No SMS-DELIVER indications are routed to the TE.
1 If SMS-DELIVER is stored into ME/TA, indication of the
memory location is routed to the TE using unsolicited result
code +CMTI: <mem>,<index>
<bm> rules for storing received CBMs
0
No CBM indications are routed to the TE.
<ds> SMS-STATUS-REPORTs routing mode
0
No SMS-STATUS-REPORTs are routed to the TE.
<bfr> TA buffer of unsolicited result codes behaviour
0
TA buffer of unsolicited result codes defined within this
command is flushed to the TE when <mode> 1...3 is entered (OK
response shall be given before flushing the codes).
1 TA buffer of unsolicited result codes defined within this
command is cleared when <mode> 1...3 is entered.
Response
ERROR
+CNMI? +CNMI: <mode>,<mt>,<bm>,<ds>,<bfr>
Farshad Nooranian
با تشکر از Soheil_Programmer و Noorsoft. آقا دمتون گرم جواب داد Ok شد. در ضمن آقای علی کلاهدوزان، متشکرم که در این بحث شرکت کردید ، منظور شما همین بوده احتمالا، گفتین Event داره ، ولی نگفتین چجوری فعال میشه. حالا با این Event و همچنین رویداد DataReceived خود SerialPort میشه ورود SMS جدید رو تشخیص داد.
خیلی خیلی خیلی ممنون.
دمت گرم خیلی باحال بود
نتیجه رو گوشی من که سونی هست اومد درست کار کرد تاخیر کمتر از نیم ثانیه در روی پورت اومد
و روی پورت اومد
:CMTI+
me,12312312
اگه دستور AT+CNMI=2,1,0,1 رو بفرستي, هر بار كه اس ام اس جديد اومد خودش مياد و شماره ايندكس اس ام اس رو بهت ميده.
bye
سلام دوستان
فقط خواستم بگم تو بعضی موبایلها و gsm mpdem ها با دستور زیر خود پیام با CMT+ ظاهر میشه.
AT+CNMI=2,,2,0,1,0
البته اگه AT+CNMI رو سرچ کنید مطالب بسیار مفیدی گیرتون میاد
البته اين دستور بااين value ها براي من error مي داد.و اينطوري حل شد:
at+cnmi=2,1,0,0,0
كه من اينا رو ديدم راجبش،ان شا... مفيد باشه:
http://www.atmel.com/dyn/resources/p...ts/doc8016.pdf2.1.3 New Message Indication (AT+CNMI) “AT+CNMI” configures how the modem signals arrival of new messages to the connected terminal device and how they are stored in the modem. This feature is useful when it comes to reading new messages. Instead of polling the modem periodically for arrival of new messages, “AT+CNMI” can tell when a new message has arrived. The AVR will catch such indication, and set a flag. This ensures that the modem only takes up CPU resources when necessary.
Table 2-4. AT+CNMI command and possible responses
CommandNotes:
Response
Comment
“AT+CNMI=[mode]1,[mt]2,[bm]3,[ds]4,[bfr]5”
”OK”
Mode set
”ERROR”
Error, could not set such mode.
1. [mode] integer type: how messages are buffered.
2. [mt] integer type: indication of new SMS, set to 1.
3. [bm] integer type: Not in use.
4. [ds] integer type: Not in use.
5. [bfr] integer type: Not in use.
واقعا ممنون. اين دستور تا اينجا كه خوب بود. OK داد. ولي هنوز پيامي كه ارسال كردم رو نشون نداده. ولي خودش جاي اميدي هست كه برنامه خطا نگرفته. pdf خوبي بود. باز هم ممنون.
با سلام دوستان اگه اس ام اس ها از طریق پورت وارد میشن!پس میشه پورتوsniff کرد و به دادها دسترسی پیدا کرد؟
سلام دوستان نمیدونم این سوال به دستت شما عزیزان میرسه یا نه
دوستان من دنبال ارسال دستور به دستگاه سانترال پاناسونیک هستم اگه کسی میدونه چطوری خوشحال میشم
ترجیحا به ایمیلم بزنید
soheiladv@gmail.com