PDA

View Full Version : مشکل با AT Command



ak1_2004
دوشنبه 24 خرداد 1389, 19:21 عصر
سلام
یک کلاس توی همین سایت در این مورد پیدا کردم که اینجا هم آپلود می کنم که ببینید !
اما نمی دونم چه طور ازش استفاده کنم !
مثلا یک تابع داره با 4 تا ورودی برای خوندن اس ام اس با نام read_sms !
اولش شماره اس ام اس مورد نظر هست !
دوم و ... رو نمی دونم !!
اگر می شه راهنمایی کنید !

ak1_2004
دوشنبه 24 خرداد 1389, 19:23 عصر
یا اینکه چطور باید پورت مورد نظر رو برای این کلاس تعریف کنیم !

ak1_2004
سه شنبه 25 خرداد 1389, 10:54 صبح
کسی نمی تونه کمک کنه ؟

mohsenm66
سه شنبه 25 خرداد 1389, 11:46 صبح
GSM_Port.WriteLine("AT+CMGR=" + SMS_Index.ToString + Chr(13))

دستور cmgr براي خواندن پيام هاي ذخيره شده در گوشي است و پارامتر اولي شماره index پيام در گوشي مي باشد
دومي شماره تلفن است
سومي متن پيام است
چهارمي وضعيت پيام

Shahram_Shobeiri
سه شنبه 25 خرداد 1389, 12:32 عصر
اون کلاس رو من نوشتم.
دستور مورد نظر شما sms های موجود در حافظه رو می خونه.
نحوه ساختن نمونه از روی این کلاس به شکل زیره:


Dim My_AT_Com As New Commands(My.Computer.Ports.OpenSerialPort("COM3", 115200, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One))

در واقع تو کانستراکتور باید پورت سریالی که مودم به اون وصله رو معرفی کنی.
پارامتر های read_sms رو به ترتیب توضیح می دم:
SMS_Index(ورودی): اندیس sms در حافظه
SMS_No(خروجی): شماره ارسال کننده sms از طریق این پارامتر بازگردونده میشه
SMS_Text(خروجی): متن sms از طریق این پارامتر برگردونده میشه
Status(خروجی): هر پیام در حافظه 4 وضعیت داره


"Received unread message."
"Received read message."
"Stored unsent message."
"Stored sent message.

این پارامتر هم وضعیت sms برگردونده شده رو برمی گردونه

ak1_2004
سه شنبه 25 خرداد 1389, 17:33 عصر
دستت درد نکنه آقا شهرام
تست می کنم !
اگر مشکلای بود همین جا مطرح می کنم !
کلاس به این خوبی حیف نیست یه راهنما نداره !

ak1_2004
سه شنبه 25 خرداد 1389, 17:40 عصر
اگر امکانش هست یک مثال از استفاده از این تابع خوندن اس ام اس رو بزاری ممنون می شم !

ak1_2004
سه شنبه 25 خرداد 1389, 17:46 عصر
اینم نمونه کدی که نوشتم ولی خطا می ده !


Dim AT_Com As New AT_Commands(My.Computer.Ports.OpenSerialPort(com, speed, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One))
AT_Com.Read_SMS(1, , , )

Shahram_Shobeiri
چهارشنبه 26 خرداد 1389, 00:52 صبح
کد رو به شکل زیر اصلاح کن


Dim AT_Com As New AT_Commands(My.Computer.Ports.OpenSerialPort(com, speed, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One))
dim sender_number, sms_text, sms_status as string
AT_Com.Read_SMS(1, sender_number, sms_text, sms_status)

با این کد sms موجود در اندیس شماره 1 حافظه خوانده شده و متن اون در sms_text ، شماره اون در sender_number و وضعیت اون در sms_status قرار می گیره
البته پارامتر های پورت از جمله نام پورت هم باید درست ست شده باشن
غیر از این فکر نکنم ایراد دیگه وجود داشته باشه

ak1_2004
چهارشنبه 26 خرداد 1389, 08:16 صبح
بعد از لود شدن از این خط ایراد بگیره !


Dim Stat As Byte = Convert.ToByte(Mid(GSM_Port.ReadLine(), 8, 1))

ak1_2004
چهارشنبه 26 خرداد 1389, 20:15 عصر
اقا شهرام چی شدی پس ؟ممنون می شم بگی مشکل از کجاست !

Shahram_Shobeiri
پنج شنبه 27 خرداد 1389, 00:50 صبح
احتمالاً پورت رو درست تولید نکردی یا مشکلاتی از این دست. اون کلاس متد های دیگه ای هم داره از جمله متدی که بررسی می کنه که دیواسی که به پورت متصل شده دستورات at رو پشتیبانی میکنه یا نه. فکر کنم اسمش at_support باشه. با اون متد تست کن ببین باز ایراد میگیره؟ اگه دیدی باز ایراد گرفت بدون اشکال از پورت، gsm modem یا چیزی تو این مایه ها است.

ak1_2004
پنج شنبه 27 خرداد 1389, 08:13 صبح
AT_support رو که چک می کنم False می ده !
ولی با Kylix sms متصل می شه !
یعنی همین پورت ورودی درسته ! COM4 به کلاس ارسال می شه ! ولی چرا وصل نمی شه نمی دونم !

ak1_2004
پنج شنبه 27 خرداد 1389, 08:59 صبح
ببین چک کردم !
تا قبل از این دستور هیچ مشکلی نداره


Dim AT_Com As New AT_Commands(My.Computer.Ports.OpenSerialPort(com, speed, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One))

اما بعد از این مشکل به وجود میاد و سریال پورت اشغال می شه !
و کار نمی کنه !

ak1_2004
شنبه 29 خرداد 1389, 10:56 صبح
ببین از تابع
Clear_Buffer()
رد می شه اما به این خط که می رسه


Dim Stat As Byte = Convert.ToByte(Mid(GSM_Port.ReadLine(), 8, 1))

این اررور رو می ده :

Input string was not in a correct format



پس احتمالا نباید از نحوه اتصال باشه !
ممنون می شم راهنمایی کنی

Shahram_Shobeiri
شنبه 29 خرداد 1389, 11:41 صبح
وقتی at_support رو false میده حتماً ایراد وجود داره. یعنی اون جوابی رو که برنامه انتظار داره مودم بهش نمیده پس خطای input string is not in ... ایجاد میشه.
ببین با هایپر ترمینال تست کن، بعد از همون تنظیماتی که واسه برقراری ارتباط تو هایپر ترمینال استفاده کردی برای پورتت استفاده کن.
یکم صبر کنی یه مثال برات آپ می کنم.

Shahram_Shobeiri
شنبه 29 خرداد 1389, 12:30 عصر
بررسی کردم دیدم اون خطایی که به شما میده به این علته که تو اون اندیس حافظه مسجی وجود نداره. البته ایراد دیگه ای هم که داره اینه که در بعضی موارد از جمله sms های فارسی در تبدیل pdu به متن دچار اشکال میشه و یه مشت کاراکتر بی ربط خروجی میده.
واسه این مورد دوم راه حلی به نظرم نمیرسه.
باشد که دوستان حل کرده مشکل را و قرار دهند جهت استفاده سایرین!

ak1_2004
شنبه 29 خرداد 1389, 17:48 عصر
منتظر مثالت هستم
ممنون

Shahram_Shobeiri
یک شنبه 30 خرداد 1389, 00:49 صبح
اینم یه مثال

ak1_2004
یک شنبه 30 خرداد 1389, 17:32 عصر
سلام
اجراش که می کنم از AT_support خطا می گیره !
البته ابنجوری بگم که False می ده !
حالا جالب اینجاست که اگر همزمان یعنی بعد از اجرای دستورات با VB.NET به HYPERTERMINAL وصل بشی دستورات ارسال شده توسط VB رو نشون می ده !
یعنی مثلا 2 تا اس ام اس آخر رو نمایش می ده !
یا یه دونه ok مربوط به AT support اولش می زاره !
ویندوزم SEVEN هست !

Shahram_Shobeiri
دوشنبه 31 خرداد 1389, 00:43 صبح
این تاپیک رو نگاه کن ببین به کارت می یاد. فکر کنم یه ربط هایی به مورد شما داشته باشد.
http://barnamenevis.org/forum/showthread.php?t=228759

ak1_2004
سه شنبه 01 تیر 1389, 16:42 عصر
سلام
دیروز و امروز 3 تا امتحان داشتم نشد بیام سر بزنم !
شرمنده !
نه از این تناپیک چیزی بیرون نیومد !
من از GSM Modem استفاده می کنم !
و با Hyper راحت وصل می شه ! و همه دستورات رو جواب می ده !
اما با VB مشکل می خورم !
نمی دونم چه مرگشه !

mohsenm66
جمعه 04 تیر 1389, 10:28 صبح
شما براي ارسال اس ام اس هاي چند بخشي يا اس ام اس هاي گروهي چيكار كرده ايد ؟

غلامرضا شریفی
سه شنبه 08 تیر 1389, 19:24 عصر
اين برنامه با c است و كار ميكند