منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : أوامر at بشكل مبسط و موسع --منقول--
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
منقول من المنتدى القديم
الكاتب نور نبهان المزمجر سابقا
بسم الله الرحمن الرحيم


والصلاة والسلام على سيدنا محمد واله وصحبه أجمعين


السلام عليكم ورحمة الله وبركاته


مقدمة : سنتكلم إن شاء الله عن أوامر AT بشكل مبسط و موسع قليلاً بالنسبة للهاتف المحمول
أوامر AT commands: هي مجموعة من الأوامر التي يستخدمها الكمبيوتر للتحكم والتواصل مع أجهزة الاتصالات الخارجية مثل المودم أو الجوال أو GSM modem أو GPRS Modem
الآن وصل الكمبيوتر مع جهاز الموبايل أو المودم المعتبر :
طبعا الهاتف المحمول لابد أن يكون من الأنواع الجديدة أو على الأقل يحوي تقنية متقدمة وليس قديم وأغلب الأنواع الحديثة تدعم أوامر AT Commands وهذا ما يهمنا عموما في سياق الموضوع سنتعرف على كيفية معرفة صلاحية الهاتف لموضوعنا
يتم توصيل الموبايل مع الكمبيوتر بواسطة USB Cable أو أحد الأشكال المعروفة في هذا العصر
[ATTACH=CONFIG]617[/ATTACH]
تعريف الموبايل Driver:
طبعا عند توصيل الجهاز مع الحاسوب عبر الوصلة فأن الحاسوب سيتعرف عليه كجهاز جديد بالتالي لا بد من تعريف هذا الجهاز عبر ملفات التعريف Driver الخاصة به Nokia Connectivity Cable Driver في بحثنا هذا سنعتمد على هاتف من طراز نوكيا Nokia
طبعا مع الجهاز يأتي قرص CD مضغوط يحوي التعريف وبرنامج الاتصال أو بطرق أخرى
يمكنك البحث في الانترنت عن التعريف وبالنسبة للنوكيا أرح نفسك ونصب برنامج آل بي سي سيوت Nokia PC Suite
بعد تنصيب Nokia PC Suite و الانتهاء من التنصيب قم بوصل الجهاز وسيتعرف عليه الجهاز وسيتم تثبيت الملفات اللازمة للوصلة
الآن الوصلة معرفة والجهاز متصل
بعد انتهاء التعريف : نذهب إلى خصائص النظام من لوحة التحكم Device Manager نجد تحت بند Modems المودم نجد انه تم تعريف مودم خاص بجهازك المحمول الذي تم توصيله
[ATTACH=CONFIG]618[/ATTACH]

ومن صفحة خصائص المودم ضمن تبويب Modemنعرف رقم المنفذ المخصص لهذا المودم وهو كما في الصورة المنفذCom4

[ATTACH=CONFIG]619[/ATTACH]

الأمر مشابه للمودم العادي المتصل عبر Serial Port والذي نستخدمه للاتصال بالهاتف أو الانترنيت
الآن الأمور جيدة لدينا هاتف متصل مع الجهاز ومعتبر كمودم ونعرف المنفذ الخاص به يبقى علينا الآن إجراء التجارب لكيفية التعامل مع هذا المودم
الاتصال بالمودم وإرسال الأوامر له: طبعا البرنامج المعتاد هو Hyper Terminal الشهيرة الموجودة مع Windows
أهم خطوة هي أن نتأكد من أن الجهاز يدعم أوامر AT
سنبدأ الآن إن شاء الله بشرح أساسي للتعامل مع Hyper Terminal ثم سننتقل للغة البرمجة حتى نتعرف على كيفية التعامل مع هذه الأوامر من خلال برنامجنا
بالنسبة للـــ Hyper Terminal
نفتح برنامج Hyper Terminal ضمن مساره الافتراضي في الجهاز XP
[ATTACH=CONFIG]620[/ATTACH]

نحدد اسم الاتصالوهو اسم اختياري حسب رغبتك ثم نضغط OK

[ATTACH=CONFIG]621[/ATTACH]

نحدد منفذ الاتصال (Com4)أو المنفذ المخصص للهاتف المحمول الموصول مع الجهاز و الذي تعرفنا عليه سابقا من خلال خصائص المودم طبعا ستجد المنفذ ضمن القائمة

[ATTACH=CONFIG]622[/ATTACH]

يتبع
تظهر نافذة الخصائص للمودم HardWare =Configure اضغط OK
[ATTACH=CONFIG]623[/ATTACH]

تم إعداد البرنامج فتظهر لنا الشاشة التالية لنكتب فيها الأوامر والبيانات التي نريد إرسالها إلى الموبايل وتظهر فيها أيضا رد الموبايل على تلك الأوامر
[ATTACH=CONFIG]624[/ATTACH]

الآن حاول أن تكتب في صفحة البرنامج البيضاء أي حرف إذا لم يظهر مع شيء على الشاشة فقم بعميلة الضبط كما في الصورة التالية
[ATTACH=CONFIG]625[/ATTACH]
انتقل للتبويب الثاني و اضغط على ASCII Setup
[ATTACH=CONFIG]626[/ATTACH]

ضع علامة الاختيار على الخيار الثاني Echo Typed Characters Locally

[ATTACH=CONFIG]627[/ATTACH]

بعد ذلك اكتب AT ثم اضغط Enter إذا ظهر لك OK كما في الصورة التالية فإن الجوال يدعم أوامر AT

[ATTACH=CONFIG]624[/ATTACH]

الآن و الحمد لله تم التأكد من دعم الهاتف المحمول لأوامر AT
يتبع
تطبيق سريع :
طبعا أوامر AT عديدة ومتنوعة من اتصال و إرسال و استقبل و معرفة خصائص وبحث .... الخ ....
وسنختار منها الاستخدامات الشائعة بالنسبة للـــ Hyper Terminal
سنقوم الآن بتجربة إجراء اتصال صوتي عبر رقم هاتف محدد وكذلك إرسال رسالة نصية لهذا الهاتف
أولاً : إجراء اتصال برقم هاتف :
داخل نافذة Hyper Terminal البيضاء نكتب
AT
ثم نضغط زر الإدخال ENTER
فيكون الرد هو OK طبعا تم شرح هذه النقطة من سابق
الآن نكتب الأمر التالي وهو للاتصال ATD أو ATDT وهو على الشكل التالي :
ATDT <+963966993175;>
ثم نضغط زر الإدخال ENTER
ماذا ترى ؟ الآن انظر إلى شاشة جوالك سترى جهازك يقوم بعملية الاتصال
تستطيع تغير الرقم أو كتابته بأي طريقة فربما يكون داخلي أو خارجي المهم أنك تكتب الرقم سواء داخلي أو دولي ADTA 0966993175
ملحوظة ربما تثير فضولك الفاصلة المنقوطة الموجودة في نهاية الرقم فما الغاية منها
هذه الفاصلة المنقوطة تشير إلى المودم على أن المكالمة هي مكالمة صوتية وليست من نوع البيانات أو الفاكس وبدونها سيتم الاتصال بمكالمة بيانات والرقم هو رقم هاتفي بالتالي لن يتم الاتصال فالفاصلة ضرورية لهذه العملية .
ثانياً : إرسال رسالة نصية :
سنبدأ ببعض المعلومات النظرية حول الرسائل وهي مقتبسة من مشاركة الأخ م. عبد الملك هنا
الرسائل النصية القصيرة (ٍSMS) تنقسم في تركيبها إلى قسمين
1- أسلوب النص( Text Mod)
2- أسلوب وحدات البيانات (PDU Mode)

أسلوب وحدات البيانات (PDU mode)

1-تكون الرسالة على شكل سلسلة من البيانات على بالهكسا (hexadecimal) مثال: A782340B11DCEFFF
2-أصعب لأن المبرمج يحتاج إلى معرفة تقسيم ال
Frame وماذا تعنى كل خانة بالهكسا مثال:
A789660B11DCEFFF
A78 : رمز الرسائل القصيرة
9660 : رقم الفتح
B11DC : الرقم المرسل إليه
CEFFF : نص الرسالة
3-أكثر مرونة

أسلوب النص text mod

1-تكون الرسالة بال ASCII بحروف مقروءة للمستخدم
مثال:How Are You
2-الأبسط في الاستخدام ولا يحتاج المبرمج سوى كتابة الرسالة والرقم المرسل إليه بشكل صحيح
3-أقل مرونة وأقل إمكانية لاستخدامها في تطبيقات مختلفة
المثال في فقرة 2 ليس دقيق وإنما للتوضيح فقط
• أسلوب النص أقل مرونة لأن التركيبة ثابتة واللغة ثابتة مثلاُ لو أردت أن ترسل رسالة بالعربي ، لن تتمكن من ذلك إذا كنت تستخدم أسلوب النص
• أسلوب وحدة البيانات تحتاج إلى برنامج للتحويل من هكسا إلى لغة مقروءة عند المستقبل وعلى هذا البرنامج أن يقوم بتحليل سلسلة الهكسا وتفكيكها اعتمادا على معرفته بتركيب إل Frame المستخدم في أسلوب وحدة البيانات
الآن ننتقل لعملية الإرسال :
طبعا لن ننسى الهاتف يدعم AT أليس كذلك؟
الآن نكتب الأمر التالي هو AT+CMGF=?
ثم نضغط زر الإدخال ENTER
وهو يستعلم عن نمط الرسائل التي يدعمها الموبايل وهناك نمطين SMS PDU و SMS Text كما ذكر أنفاً
ورد الموبايل على هذا الأمر هو الرقم 0 و 1 وصفر تعنى النمط SMS PDU و واحد تعنى النمط SMS Text
أي إن الموبايل يدعم النمطين ولو ظهر أحدهما فالموبايل يدعم نوع دون أخر
[ATTACH=CONFIG]628[/ATTACH]

ونحن سنستخدم النمط SMS Text لأنه الأسهل حيث يتم إرسال الرسالة إلى الموبايل على هيئة نص عادى بدون أية معالجة

لذلك سنكتب الأمر التالي لنجعل النمط هو SMS Text

الأمر هو AT+CMGF=1 ثم Enter ورد الموبايل عليه هو OK
[ATTACH=CONFIG]629[/ATTACH]

وزيادة في التأكيد سنستعلم عن النمط المستخدم لنتأكد انه SMS Text

ولذلك سنكتب الأمر AT+CMGF? ليكون الرد 1 مما يعنى أن النمط المستخدم هو SMS Text

لاحظ أن الاختلاف بين هذا الأمر وبين ما كتبناه سابقا هو علامة تساوى

[ATTACH=CONFIG]630[/ATTACH]

الأمر التالي هو AT+CMGS وهو إرسال SMS

وصيغته التالية "AT+CMGS="0966993175 حيث إن الرقم بين العلامتين هو رقم الموبايل الذي تريد أن ترسل له الرسالة

ورد الموبايل على هذا الأمر هو العلامة < حيث ينتظر منك الموبايل أن تكتب نص الرسالة

[ATTACH=CONFIG]631[/ATTACH]

نكتب نص الرسالة ولكن لن ننهى النص بـ Enter ولكن بالضغط على CTRL+Z ليتم إرسال الرسالة

[ATTACH=CONFIG]632[/ATTACH]
ملحوظة :
نعلم أن لكل حرف كود معين يسمى AScii Code (الاسكى كود) وهناك حروف تكتب مثل الحروف العادية وهناك حروف لا تكتب ولكن لها معنى

ونلاحظ انه عند نهاية كل أمر كنا نضغط ENTER وهذا يعنى إرسال حرف الاسكى كود له هو 13 بالنظام العشري وD بالنظام السداسي عشر وهذا الحرف يسمى Carriage Return واختصارا CR

وأيضا نلاحظ انه عن إنهاء الرسالة ضغطنا CRTL+Z وهذا يعنى أننا أرسلنا الحرف الذي كوده 26 بالنظام العشري و A1 بالنظام السداسي عشر واسمه Substitute أو اختصاراً Sub

بعد الانتهاء من هذين القسمين أنوه إلى انه يمكن إجراء جميع أوامر AT بالها يبر وربما بفعالية أكبر من بعض لغات البرمجة لكن كوننا في مجتمع برمجي فما يهمنا أن تكون هذه العمليات تنفذ من خلال برنامجنا .
صراحة أنا الموضوع كله بحثت عنه لأجل إجراء مكالمة ليست صوتية أو بيانات أو فاكس وإنما مكالمة خدمة مثل الاستعلام عن الرصيد و التي تحوي في بدايتها رمز النجمة * وفي نهايتها رمز المربع # ولم تفلح معي إلى الآن مثال *150*5555#
وللامانة ما سبق قمت بتجميعه من هنا وهناك مع اضافة مايلزم وتصويب الخطا بعد التجربة
وكل ما سبق هو مقدمة للرد اللاحق وهو الموضوع الاساسي
نعود لموضوعنا :
بعد أن تركزت في أذهاننا أساسيات هذه العملية و أوامر AT و الفائدة منها سنقوم بكتابة بعض الأكواد التي نتعامل مع AT من خلال برنامجنا
اللغة المستخدمة VB6 ربما يود البعض أن تكون الدوت نت لكن بصراحة لم أتمكن من تحويرها لذلك سأعتمد على الفي بي 6 وربما يساعد الإخوة بأكواد الدوت نت
بسم الله نبدأ :
سنستخدم الأداة Microsoft Comm Control يعني MSComm
ببساطة افتح مشروع جديد
أضف الأداة (Microsoft Comm control 6.0) كما تراها في الصورة التالية :
اضغط CTRL+T للوصول لنافذة الComponents وابحث عن الأداة وأضفها
[ATTACH=CONFIG]633[/ATTACH]

بعد أن تضيف الأداة جهز النموذج على هذا الشكل بالأدوات التالية :
أداة Microsoft Comm control 6.0 عدد 1 تحت مسمى MSComm1
أداة Text عدد 3 تحت مسمى TextCom و TextNum و TextMsg
أداة Command عدد 2 تحت مسمى CommandMsg و CommandCall
هذا هو تصميم الفورم :

[ATTACH=CONFIG]634[/ATTACH]

الآن الصق الكود التالي كاملا :
وهو كود الرسالة للزر الأول و الاتصال للزر الثاني :

كود :
'AT >> VB4ARAB
Private Sub CommandCall_Click()
    'CALL
    MSComm1.CommPort = TextCom.Text
    MSComm1.Settings = "9600,n,8,1"
    MSComm1.InputLen = 0
    MSComm1.PortOpen = True
    MSComm1.Output = "AT" & Chr$(13) & Chr(10)
    MSComm1.Output = "ATDT" & Chr$(34) & TextNum.Text & ";" & Chr$(13) & Chr(10)
    MSComm1.PortOpen = False
End Sub

Private Sub CommandMsg_Click()
    MSG
    MSComm1.CommPort = TextCom.Text
    MSComm1.Settings = "9600,n,8,1"
    MSComm1.InputLen = 0
    MSComm1.PortOpen = True
    MSComm1.Output = "AT" & Chr$(13) & Chr(10)
    MSComm1.Output = "AT+CMGF=1" & Chr$(13) & Chr(10)
    MSComm1.Output = "AT+CMGS=" & Chr$(34) & TextNum.Text & Chr$(34) & Chr(13) & Chr(10)
    MSComm1.Output = TextMsg.Text & Chr(26)
    MSComm1.PortOpen = False
End Sub

الآن شغل البرنامج و أملأ المدخلات المطلوبة : المنفذ و الرقم ونص الرسالة ثم جرب زر الاتصال وزر الإرسال .
الآن سوف نقوم بعملية تسهيل لبرنامجنا حتى لا نجبر المستخدم إلى الذهاب إلى خصائص المودم فسوف نقوم من خلال برنامجنا بالبحث عن المنافذ المتاحة و إضافتها إلى قائمة منسدلة وبذلك نسهل على المستخدم عملية الاختيار .
نضيف موديولModule جديد ونسميه ListCommPorts
ونضع فيه الكود التالي :
كود :
Option Explicit
'// API Declarations
Public Declare Function CreateFile Lib
"kernel32" Alias "CreateFileA" (ByVal
lpFileName As String, ByVal
dwDesiredAccess As Long, ByVal
dwShareMode As Long,
lpSecurityAttributes As
SECURITY_ATTRIBUTES, ByVal
dwCreationDisposition As Long, ByVal
dwFlagsAndAttributes As Long, ByVal
hTemplateFile As Long) As Long
Public Declare Function CloseHandle Lib
"kernel32" (ByVal hObject As Long) As
Long
'// API Structures
Public Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type
'// API constants
Public Const FILE_SHARE_READ = &H1
Public Const FILE_SHARE_WRITE = &H2
Public Const OPEN_EXISTING = 3
Public Const FILE_ATTRIBUTE_NORMAL =
&H80
'// Return TRUE if the COM exists, FALSE
if the COM does not exist
Public Function COMAvailable(COMNum As
Integer) As Boolean
    Dim hCOM As Long
    Dim ret As Long
    Dim sec As SECURITY_ATTRIBUTES
    '// try to open the COM port
    hCOM = CreateFile("\\.\\COM" &
COMNum & "", 0, FILE_SHARE_READ + _
            FILE_SHARE_WRITE, sec,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
    If hCOM = -1 Then
        COMAvailable = False
    Else
        COMAvailable = True
        '// close the COM port
        ret = CloseHandle(hCOM)
    End If
End Function

نعود الآن إلى النموذج form ونعدل قليلا في التصميم ليصبح على الشكل التالي :
[ATTACH=CONFIG]635[/ATTACH]

ماذا أضفنا : أداتين فقط
الأولى زر أمر جديد Command اسمه AvailablComm
الثانية قائمة منسدلة جديدة اسمها cboComm
هذا التصميم الجديد سيتيح لنا معرف المنافذ المتاحة بالنقر على الزر ما هي المنافذ المتاحة
الآن نضع الكود التالي:أسفل الكود في الفورم وهما حدث النقر للزر ليظهر المنافذ المتاحة وكذلك حدث النقر على المنفذ لينتقل الرقم إلى صندوق رقم المنفذ تلقائيا بالضغط عليه

كود :
Private Sub AvailablComm_Click()
    'AvailablComm
    Dim iCount As Integer
    cboComm.Clear
    For iCount = 1 To 25
        If COMAvailable(iCount) Then
            cboComm.AddItem iCount
        End If
    Next
    cboComm.ListIndex = 0
End Sub
Private Sub cboComm_Click()
'print
TextCom.Text = cboComm.Text
End Sub

في كود فحص المنافذ ستجد الرقم 1 الى 25طبعا تستطيع إنقاص الرقم أو زيادته أنا اعتمدت فحص 25 منفذفقط.انتهينا الآن من برنامجنا الصغير الذي يقوم بعمليات الاتصال و إرسال الرسائل.
سنتجه الآن إلى أوامر AT أخرى ربما تكون ذات استخدام قليل لكنه من باب التوسع :لكن قبل الدخول في هذا القسم سنقوم بعمل برنامج صغير أخر بدلاً من الهايبر لتنفيذ أوامرنا عليه أولاً نستعرض بعض الأوامر لل AT وحاول أن تجربها على الهايبر
كود :
AT commands set for Nokia GSM and WCDMA products
Call control
Command Description
ATA Answer command
ATD Dial command
ATH Hang up call
ATL Monitor speaker loudness
ATM Monitor speaker mode
ATO Go on-line
ATP Set pulse dial as default
ATT Set tone dial as default
AT+CSTA Select type of address
AT+CRC Cellular result codes

Data card control commands
Command Description
ATI Identification
ATS Select an S-register
ATZ Recall stored profile
AT&F Restore factory settings
AT&V View active configuration
AT&W Store parameters in given profile
AT&Y Select Set as power up option
AT+CLCK Facility lock command
AT+COLP Connected line identification presentation
AT+GCAP Request complete capabilities list
AT+GMI Request manufacturer identification
AT+GMM Request model identification
AT+GMR Request revision identification
AT+GSN Request product serial number identification (IMEI)

Phone control commands
Command Description
AT+CBC Battery charge
AT+CGMI Request manufacturer identification
AT+CGMM Request model identification
AT+CGMR Request revision identification
AT+CGSN Request product serial number identification
AT+CMEE Report mobile equipment error
AT+CPAS Phone activity status
AT+CPBF Find phone book entries
AT+CPBR Read phone book entry
AT+CPBS Select phone book memory storage
AT+CPBW Write phone book entry
AT+CSCS Select TE character set
AT+CSQ Signal quality

Computer data card interface commands
Command Description
ATE Command Echo
ATQ Result code suppression
ATV Define response format
ATX Response range selection
AT&C Define DCD usage
AT&D Define DTR usage
AT&K Select flow control
AT&Q Define communications mode option
AT&S Define DSR option
AT+ICF DTE-DCE character framing
AT+IFC DTE-DCE Local flow control
AT+IPR Fixed DTE rate

Service
Command Description
AT+CLIP Calling line identification presentation
AT+CR Service reporting control
AT+DR Data compression reporting
AT+ILRR DTE-DCE local rate reporting

Network communication parameter commands
Command Description
ATB Communications standard option
AT+CBST Select bearer service type
AT+CEER Extended error report
AT+CRLP Radio link protocol
AT+DS Data compression

Miscellaneous commands
Command Description
A/ Re-execute command line
AT? Command help
AT*C Start SMS interpreter
AT*T Enter SMS block mode protocol
AT*V Activate V.25bis mode
AT*NOKIATEST Test command
AT+CESP Enter SMS block mode protocol

SMS commands
SMS text mode
Command Description
AT+CSMS Select message service
AT+CPMS Preferred message storage
AT+CMGF Message format
AT+CSCA Service centre address
AT+CSMP Set text mode parameters
AT+CSDH Show text mode parameters
AT+CSCB Select cell broadcast message types
AT+CSAS Save settings
AT+CRES Restore settings
AT+CNMI New message indications to TE
AT+CMGL List messages
AT+CMGR Read message
AT+CMGS Send message
AT+CMSS Send message from storage
AT+CMGW Write message to memory
AT+CMGD Delete message

SMS PDU ode
Command Description
AT+CMGL List Messages
AT+CMGR Read message
AT+CMGS Send message
AT+CMGW Write message to memory

ولاحقا ان شاء الله سنتعلم كيف نستغني عن الهايبر كليا من خلال برنامجنا
بعمل برنامج صغير يقوم باداء مهامه
ومن ثم الى البداية مع الدوت نت

الى ذالك الحين استودعكم بحفظ الله و رعايته
السلام عليكم
المشاريع في المرفقات

ولقد قمت بتجربتها منذ برهة وهي تعمل
الصفحات : 1 2