مجموعه ای ارزنده از دستورات ارتباطی گرد آوری شده از سایت ها
Communications
A tool to provide a visual means to send and receive data through serial ports
terminal_online_installer.exe
serial-port-terminal1.software
Split then Conant Concatenated_SMS
issues-with-concatenated-sms-pdu
"ATD+98913.....;"+Chr(13) ' Dial
ATD (Dial), ATA (Answer), ATH (Hook control) and ATO (Return to online data state), AT+CMGS (Send SMS message), AT+CMSS (Send SMS message from storage), AT+CMGL (List SMS messages) and AT+CMGR (Read SMS messages).
AT commands are instructions used to control a modem. AT is the abbreviation of ATtention. Every command line starts with "AT" or "at". That's why modem commands are called AT commands.
دستورالعمل هایی هستند که برای کنترل مودم استفاده می شوند . AT اختصار ATtention است. هر خط با AT یا at شروع می شود یعنی دستورات مودم AT commands نامیده می شوند.
Cell Phone Book Find :
AT+CPBF command is used to find the entries of the phone book
AT
OK
AT+CMGF=1
OK
AT+CMGW="+85291234567"
> A simple demo of SMS text messaging.
+CMGW: 1
OK
AT+CMSS=1
+CMSS: 20
OK
CMGW : Write To Storage
CMSS : Send message from storage
Contact Phone Book Read
AT+CPBR=1
</a>”>AT+CPBR=?
+CPBR: (1-100),40,25
OK
Chr(26) : Ctrl+Z
OpenSerialPort
dim StrInput as string * 11
Open "Com1:9600,n,8,1" for binary Access Read Write as #1
Put #1,,Chr(2)+"Hello World"+Chr(13)+Chr(26)
Sleep 100
ATD : Dial
ATH0
ATM0
D : Dial
H : Hang
L : Redials last number dialed
P : Pulse dial
T : Tone Dial
M0 : Speaker off
M1 : Speaker is on until a carrier detect
M2 : Speaker is always on
M3 : Speaker is on during answering only
بین هر دستور AT باید یک فاصله زمانی کوتاه باشد تا Ok را برگرداند.اگر fail دهد انجام نخواهد شد.
Example :
StringCmd="ATDT" & PhoneNumber & vbCrLf
Sleep 100
StringCmd="ATM1" & vbCrLf
Sleep 100
StringCmd="ATH0" & vbCrLf
ATDT = attention dial tone
ATH1 = attention pickup handset (you should hear a dial tone)
ATH0 = attention hang up
ATM1L3 = m is for speaker, l is for volume
ATM1L3 ، که در بالا گفته شد M برای بلندگو و L برای حجم صدا
DT : Tone dial
DP : Palse Dial
L0 : Volume Off
L1 : Volume low
L2 : Volume medium
L3 : Volume High
ATH0 : Hang Up ( go on-hook)
ATH1 : Pick Up ( go off-hook )
AT+CMGW: Used to store a message in the SIM. After the execution of the command, the ‘>’ sign appears in the next line where the message can be entered.
برای ذخیره پیام در SIM استفاده می شود.بعد از اجرای دستور ، علامت < در خط بعد ظاهر می شود که پیام آنجا وارد می گردد.یعنی اول شماره موبایل نوشته می شود بعد اینتر یا (Chr(13 یا vbcrlf و زمانیکه علامت بزرگتر ظاهر شده پیام Write می شود و بعد Crtl+Z یا (26)Chr ارسال می شود ، پس بین ارسال خط اول و نوشتن پیام باید یک فاصله کوتاه زمانی باشد اگر علامت < پیدا یا مشاهده نشد یعنی قادر به Write نیستید. نوشتار آن به روش زیر بیان شده
SYNTAX: AT+CMGW=” Phone number”> Message to be stored Ctrl+z
مطلب از سایت داخلی :
AT+CMGF فعال کردن مد TEXT یا PDU برای ارسال پیام کوتاه
Example:AT+CMGF=1 TEX MODE & AT+CMGF=0 PDU MODE
AT+CMGS ارسال پیام کوتاه
Example: AT+CMGS="0913222222"
AT+CMGR خواندن پیام کوتاه های ذخیره شده
Example:AT+CMGR=1 خواندن اولین پیام
AT+CNUM نمایش شماره تماس گیرنده
AT+GSMBUSY رد تماس دریافتی
PurgeComm empties the buffer without transmission or reception (its a delete basically)
پس ما داده را می بایست به بافری ( بافر حافظه ای در Ram برای ذخیره اطلاعات : موقت ) انتقال بدهیم ، این تابع Api بافر را بدون انتقال یا پذیرشی خالی می کند
بافرهای یک فایل مشخص را Flush می کند و باعث می شود تمام داده های بافر در یک فایل نوشته شوند.
A buffer flush is the transfer of computer data from a temporary storage area to the computer's permanent memory
Lib "Kernel32"
ارسال داده های محدوده انتخابی به تکست فایل :
"C:\Program Files (x86)\Webcam Surveyor\WebcamSurveyor.exe /capture"
/imgclose : take a snapshot img and close app
SMS PDU ( POCKET DATA UNIT ) :
Introduction to SMS PDU Mode. The PDU mode offers to send binary information in 7 bit or 8 bit format. ... The SMS message, as specified by the Etsi organization (documents GSM 03.40 and GSM 03.38), can be up to 160 characters long, where each character is 7 bits according to the 7-bit default alphabet.
معرفی : حالت PDU ارسال اطلاعات باینری را در قالب ۷ یا ۸ بیتی ارائه می دهد.. پیامک همانطور که توسط سازمان Etsi مشخص شده می تواند تا 160 کاراکتر طول داشته باشد ، هر کاراکتر ۷ بیت است طبق الفبای پیش فرض ۷ بیتی.
1 byte= 8 bits
پس هر کاراکتر ۷ یا 8 بیت یا یک بایت است
مطلب زیر هم جالبه در Encoding و Concat کردن ، در پیام های یونیکد ( منظور اینجا فارسی ) که طول رشته بیشتر از 67 است ( utf+16 ) و ماکزیمم ارسال در هر پارت 67 کاراکتر است البته جز تک پارت که 70 کاراکتر می شود ارسال کرد حداکثر 256×256 کاراکتر. کدینگ GSM ، جایگزینی را برای Ascii بسط داده و جدولش رو هم ذکر کرده و در حالت سنگل 160 کاراکتر می توان ارسال کرد برای چند پارتی 153 کاراکتر در هر پارت.
messaging-services/character-sets/
این Encoding شامل قسمت های مختلفی است
مرحله اول مشخص کردن مرکز پیام :
اول شماره موبایل بصورت دو رقم جدا شده اگر عددی فرد افتاد به آن F اضافه می شود و هر کدام برعکس می شود .اگر در اول شماره + ( بیانگر شماره بین المللی ) باشد 91 بجای مثبت جایگزین می شود در غیر اینصورت 81 ، بعد از جدا کردن و معکوس کردن هر دو رقم ، شمرده می شوند که نتیجه به اول عبارت اضافه نی شود مثال :
+98930=919830=91 8903=03 91 89 03=03918903
تابع می نویسید یا پراپرتی در نظر می گیرید که شماره رو بگیره یا چون مرکز پیام در گوشی مشخص است 001100 را بکار ببرید بجای اعمال شماره موبایل sender
قسمت دوم گزارش پیام :
عدد 31 برای موافق بودن و 11 برای عدم تمایل که به مرکز پیام اضافه می شود
قسمت رفرنس پیام :
فرضا پیام ذخیره ای شده ای را می خواهید بفرستید و چون ندارید اینکس 0 است و ندارید از 00 استفاده کنید.
قسمت شماره مقصد :
اگر مثبت جلوش باشه ( شماره بین المللی ) عدد 91 و در غیر اینصورت عدد 81 و اول ارقام بصورت تکی شمارش میشه ( مثل مرکز پیام نیست که دورقم جدا میشه و بعد شمارش ) یعنی اگر شماره شما معمولی باشد مثل 780 ... 0939 و تعداد کاراکتر آن 11 باشد میشود در نتیجه اول عدد هگزادسیمال قرار میگیرد ( شمارش کاراکتر ) و بعد عدد 81 و بعد اعداد موبایل که دو تا دوتا جدا شد برعکس می شود اگر عدد فردی در آخر ماند با F0 جمع می شود.مثلا اگر موبایل ورودی 09390000018 باشد چون معمولی است ( نقیشون ) عدد 81 را در نظر بگیرید فعلا ... تعداد کاراکتر موبایل 11 رقم است در نتیجه شمارهِ هگزادسیمال آن می شود B که چون باید دو رقم ذکر شود یک صفر قبل از آن می گذاریم و می شود 0B اگر دوازده رقم بود میشد 0C
09-39-00-00-01-8
0C819093000010F8
قسمت بعدی 00 قرار داده شود
قسمت بعد کاراکترها قرار می گیرند و طول در اول آن قرار می گیرد
09300000016 :
81-09-30-00-00-01-6
L : 07
81 90 03 00 00 10 F0+6
81 90 03 00 00 10 F6
مثال زیر از یونیکد 8 برای ارسال تکست استفاده کرده و CMGF یا فرمت باید تنظیم شود. 001100 از خود آن دستگاه که سیم نصب است ارسال می کند احتیاج به قید شماره سیم دستگاه نیست.
00
11
00
Reciever Number Len =0C (09390000018)
National = 81
Number =9093000010F8
PID=00
DCS ( Data Coding Scheme ) =08 Unicode 16 utf+16
Validity Period=AA : 4 Days , 2 Hours
UDL(Data Len)=08
06450648062F0628
0011000C819093000010F80008AA0806450648062F0628
حاوی ارسال کلمه مودب البته فقط 70 کاراکتر همراا با Space می فرستد که برای بیشتر از آن باید پارت پارت شود و هر کدام index ترتیبی میگیرد فرضا 01 و ....
online-sms-pdu-decoder/ < ----چک کنید
AT+CMGF=0 'Set PDU mode
AT+CSMS=0 'Check if modem supports SMS commands
AT+CMGS=23 'Send message, 23 octets (excluding the two initial zeros) '
>0011000B916407281553F80000AA0AE8329BFD4697D9EC37
Ctrl+Z Or Chr(26)
Character to Hex :
h ... Ascii code=104
104/16=6.5 ..... خارج قسمت برابر 6
mod(104,16)=8 ....(104-16×6)=8 ( باقیمانده تقسیم )
ascii(104) to Hexadecimal=68
hex(68) to ascii = 6×16^(1)+8×16^(0)=104
decimal number
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
hexa decimal number
1 2 3 4 5 6 7 8 9 A B C D E F
HEX(459) : تبدیل دسیمال به هگزادسیمال
459÷256=1 خارج قسمت
459-1×256=203
203÷16=12 خارج قسمت C
203-12×16=11 باقیمانده B
Decimal 459 = 1CB Hexadecimal
البته خود اکسس اینکار رو انجام میده احتیاجی به محاسبات یا نوشتن تابع نیست.
برای ارسال یونیکدها از utf+16 بهره می بریم و Dcs یا دیتا کد آن می شود 08 و می بایست دسیمال آن به هگزادسیمال تبدیل شود پس داریم :
HTML DECIMAL : حرف م عربی
6×16^(2)+4×16^(1)+5×16^(0)=1605
HTML HEX : 645
1605÷256=6 خارج قسمت
1605-6×256=69 مانده
69÷16=4 خارج قسمت
69-4×16=5 مانده
HTML DEC 1605 = HTML HEX 645
در ارسال دیتا حتما 645 به 0645 تبدیل شود
پس طبق فرمول بالا متوجه شدید که چطور می شود دسیمال را به هگزا و برعکس تبدیل کرد، فرضا در خواندن دیتا اگر هگز 0645 را دریافت کردید متوجه می شوید که اول صفر آن برداشته میشود و بعد از سمت راست عدد شروع به توان گذاری ترتیبی عدد 16 از صفر می کنید و در عدد مربوطه ضرب می شود.
0645=645=6×16^2+4×16^1+5×16^0=1605
Chrw(1605)=م
بازم احتیاج به نوشتن کد برای تبدیل هگزا 0645 به دسیمال 1605 نیست خود اکسس اینکار را انجام میدهد.کافیست قبلش "H&" بگذارید و ......
0011000B916407281553F80008AA0406450646
003100 شماره مرکز پیام
LEN=0B طول شماره ارسالی
National=81
Number Reverse 2 Digits=9003000010F7
(ارسال به شماره 09300000017 )
0B تعداد رقم ها می شود 12 و به هگزا
PID=00
DCS=08 Data Coding Unicode utf+16
Validity=AA اعتبار ۴ روز
UDL=02 طول دیتا
UD=0645
برای حالت ارسال در زمان و تاریخ خاص است که از time stamp می شود استفاده کرد.در لینک هایی که گذاشته شده مشخص است چک کنید.
AT+CMGS=15 ( از بعد از شماره مرکز شمارش دوتایی شروع می شود )
0691891901500001000B819003000010F70008020633
LEN=06
918919015000 : SMC +98110050
01
00
Len reciever=0B
Number=819003000010F7 : 9300000017
PID=00
DCS=08 کدینگ Utf+16
UDL=02 طول داده در زیر
UD=0633 س
AT+CMGS=16
With Validity : دو رقم بعد از 08 کدینگ
0691891901500011000B819003000010F700080B020633
PDU TYPE : SMS-SUBMIT
0031000B819003000010F700080B020633
0031000B819003000010F70008BB020633
مثالی دیگر از کد کردن برای ارسال :
برای ارسال حتما باید شماره ارقام دوتایی ارسال شود قبل از ارسال کدینگ که در پائین ترش آمده این شمارش دوتایی از همان 11 شروع می شود
AT+CMGS=38
06918919015000 حاوی شماره مرکز پیام
1100
0B819073000010F7 حاوی شماره گیرنده
00
08 کدینگ
0B مدت اعتبار پیامک
زیرین دو رقم اول حاوی طول رشته به کد ( هگزا ) ... طول خود رشته 12 است چون از کد html استفاده کردیم 12 را در 2 ضرب کردیم ( 0645 دورقم شمارش میشود 2 بیت ) شد 24 و خارج قسمت 24 به 16 و باقیمانده را کنار هم گذاردیم شد 18 و بعد از 18 هگزای هر کارکاتر به html بیان شده یعنی decimal هر کاراکتر به هگزادسیمال تبدیل شده.
1806330644062706450020062F06480633062A002006450646
سلام دوست من
SMSC#+9891100500 مرکز پیام
Receipient:09370000017 ارسال به موبایل
Validity:Rel 1h مدت یکساعت
TP_PID:00
TP_DCS:08 کدینگ
TP_DCS-popis:Uncompressed Text
No class
Alphabet:UCS2(16)bit
سلام دوست مم
Length:12 طول رشته بانضمام فاصله ها
حداکثر تا 70 کاراکتر در این حالت قابل ارسال است
AT+CMGS=46
0031000B819003000010F700080B20
06370631062D0020062C0647063400200645063306A9064600200645064406CC
Receipt requested
SMSC#
Receipient:09300000017
Validity:Rel 1h
TP_PID:00
TP_DCS:08
TP_DCS-popis:Uncompressed Text
No class
Alphabet:UCS2(16)bit
طرح جهش مسکن ملی
Length:16
کدینگ زیر برای ارسال متن یونیکد در تاریخ 29 دسامبر 2021 با درخواست تحویل پیام ( 24 )
فرمت PDU :
حروف الفبا ممکن است متفاوت باشند و چندین گزینه رمزگذاری هنگام نمایش پیامک وجود دارد رایج ترین آنها PCDN و PCCP437 و IRA و GSM و 8859-1 است . وقتی پیامکی را در یک برنامه رایانه ای می خوانید ، توسط دستور AT+CSCS تنظیم می شوند
ارسال پیامک در زمان موردنظر :
06918919015000240DD0E474D81C0EBB01000812218251000000020645
06918919015000000B819003000010F000812218251000000020645
Octal Number To Decimal
Oct : 150
1×8^(2)+5×8^(1)+0×8^(0)=104
ادغام پیامک ها ( بیشتر از 70 کاراکتر در یونیکدها :
0041000B819003000010F7
PID=00
DCD=08
LEN=08
050003000301 : 1/3
DATA=0645
Example of the UDH for an sms split into two parts:
UDH : DATA HEADER
CC : یک رفرنس است می توانید خودتان 00 یا 01 بگذارید
05 00 03 CC 01 02
05 00 03 CC 02 02
یک از دو و دو از دو تعداد در آخر آمده فرضا اگر در یونیکد تعداد کاراکتر بیش از 70 بود باید در دو پارت با رفرنس یکسان که CC نامگذاری شده ارسال گردد ولی زمان تحویل اینها Concatenate می شوند
05 00 03 CC 01 01 :UDH FOR SINGLE PART
در لینک زیر کاملا توضیح داده شده :
06918919015000
240B819003000010F7
0008122192515151000406450646
برای ارسال پیام به صورت دوپارتی :
"AT+CMGF=0"+Chr(13) ' Enter ...<CR>
"AT+CMGS=21"+Chr(13)
"0041000B819003000010F7000808050003CC02010645"+Chr(26) ' Ctrl+Z
"AT+CMGF=0"+Chr(13) ' Enter ...<CR>
"AT+CMGS=21"+Chr(13)
"0041000B819003000010F7000808050003CC02020646"+Chr(26) ' Ctrl+Z
در کد کردن بالا پیام به دو پارت تقسیم شد حرف م و ن را ارسال میکند البته در قالب یک پیامک از 004100 حتما استفاده شود در CMGS طول نوشته می شود بصورت دوتایی از 41 تا آخر که در اینجا 21 است
تماما تست شده با هایپر ترمینال و شماره مورد نظر دریافت نموده پس از صحت کدها مطمئن باشید.
در Encoding اسپلیت شده 004100 ثابت است و همینطور 050003 ( فقط باید یک رفرنس برای پیام مشخص کنید فرضا از 00 تا FF و برای هر پارت یکی باشد شماره موبایل عوض شد تغییر کند بالا CC فرض شد) و بعد تعداد کل پارت و شماره پارت تغییر می کند . شماره موبایل گیرنده را کد کنید . کاراکترها را 67 تا 67 تا جدا کنید ، فرضا تعداد کاراکترهای فارسی و غیره به انضمام Space هایی که بین حروف است 230 باشد پس می شود 4 پارت یعنی 3 پارت با طول 67 و یک پارت باطول 29 .... در 67 کاراکتر پارت اول لوپ بزنید و هگزادسیمال آنرا با تابع $Hex بگیرید همانطور که گفته شد باید به فرمت 0000 باشد( حتما اگر هگز 645 بود باید به فرمت 0645 در آید می توانید از تابع $ Format استفاده کنید ) بعد از اتمام طول آنرا بانضمام هدر آن که 01 03 00 03 00 05 ( بالا توضیح دادیم بعد از 03 عدد 00 رفرنس این چهار پارت است که در چهارپارت باید همین باشد و بعدی تعداد پارت ها و 01 نیز شماره پارت که یک است )
خلاصه مطلب بالا ، ابتدا طول رشته ی ارسالی با تابع Len گرفته می شود( برای پیام فارسی حداکثر طول رشته در هر پارت 67 است ) و سپس تعداد پارت های ارسالی مشخص میشود بعد در هر پارت لوپ زده میشود که هگزادسیمال آن بدست آید با فرمت 0000 و در نهایت به هدر که توضیج داده شده حاوی تعداد کل و شماره پارت است متصل شده و طول کل آن ( دوتا دوتا ) در اول آن قرار می گیرد و در نهایت به کدشده شماره گیرنده و ثابت 004100 می پیوندد و تعداد کل از 41 تا آخر بصورت دوتایی در CMGS قرار داده میشود. به ترتیب ارسال می شوند CMGS ، ارسال اینتر ، ارسال کدینگ انجام گرفته برای پارت اول ، ارسال کنترل + Z .... اگر طول رشته کمتر از 70 بید در هدر بجای تعداد کل 01 و بجای شماره پارت 01 لحاظ میشود 01 01 00 03 00 05 ، عدد 05 در اینجا طول هدر است .
تصویر زیر نمایی از استخراج Phone Book با دستور AT+CPBR=1,99 است ، 99 منظور تعداد است ممکن است در دفترچه شما 150 شماره موجود باشد لذا باید بجای 99 از 150 استفاده بنمائید
To Get Phone Book Data with Open Statement
AT+CMGL=ALL ' Message List
واقعا کم لطفیه اگر این مطالب استثنایی رو مطالعه کنید و در نظر سنجی شرکت
نکنید