کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی
کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی

دستورات AT در ارسال پیام به دستگاه




مجموعه ای ارزنده از دستورات ارتباطی گرد آوری شده از سایت ها



Communications





A tool to provide a visual means to send and receive data through serial ports


terminal_online_installer.exe

serial-port-terminal1.software


hyperterminal.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 نامیده می شوند.


sms/atCommandsIntro


Cell Phone Book Find : 

AT+CPBF command is used to find the entries of the phone book

Cell Phone Book Read :
AT+CPBR command is used to read entries of the phone book
Cell Phone Book Storage :
AT+CPBS command is used to choose the storage of phone book memory
Cell Phone Book Write :
AT+CPBW command is used to write phone book entry




The commands used for SMS text mode mainly include the following.

دستورات استفاده شده برای حالت ارسال تکست که عموما شامل : 

AT+CSMS command is used to select message service

برای انتخاب سرویس پیام 

AT+CMGF command is used to format message

برای فرمت پیام 

AT+CMGR command is used to read the message

برای خواندن پیام

AT+CMGD command is used to delete the message

برای حذف پیام

AT+CMGS command is used to send message
برای ارسال پیام

AT+CMGW command is used to write a message to memory

برای نوشتن پیام به حافظه




howToSendSMSFromPC


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



HyperTerminal



Contact Phone Book Read
AT+CPBR=1


</a>”>AT+CPBR=?
+CPBR: (1-100),40,25
OK


 کتابچه تلفن تا 100 ورودی را پشتیبانی می کند ، حداکثر طول ورودی متن 40 و حداکثر طول شماره تلفن 25 است


جستجو کردن برای ورودی دفترچه تلفن : 

AT+CPBF="Ali"


smspdu

sms-at-commands



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


Do While True
Input #1,strInput
Debug.print Left(strInput,256)
Loop

Close #1


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

M و اعداد مقابلش برای خاموش کردن ، روشن تا زمان اتصال ، روشن کردن بلندگو  یا روشن  بودن فقط زمان پاسخگویی 



بین هر دستور 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+CPOWD=
n -> 0 Power off urgently
1 Normal poweroff


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

PurgeComm empties the buffer without transmission or reception (its a delete basically)

پس ما داده را می بایست به بافری ( بافر حافظه ای در Ram  برای ذخیره اطلاعات : موقت  ) انتقال بدهیم ، این تابع Api بافر را بدون انتقال یا پذیرشی خالی می کند


flushfilebuffers

بافرهای یک فایل مشخص را Flush می کند و باعث می شود تمام داده های بافر در یک فایل نوشته شوند.

A buffer flush is the transfer of computer data from a temporary storage area to the computer's permanent memory



Lib "Kernel32"


ارسال داده های محدوده انتخابی به تکست فایل :


Set rng=Selection
Open myFile For Output As #1
For i = 1 To rng.Rows.Count
    For j = 1 To rng.Columns.Count
cellValue = rng.Cells(i, j).Value
If j = rng.Columns.Count Then
    Write #1, cellValue
Else
    Write #1, cellValue,
End If
Next
Next
Close #1




VISCAcommands


"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=مانده 

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&" بگذارید و ......


online-sms-pdu-decoder

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

rednaxela

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 )


0691891901500024
0B91893900000071
0008122192115030110406450646


Receipt requested
SMSC#+9891100500
Sender:+989300000017
TimeStamp:29/12/21 11:05:03 GMT ?
TP_PID:00
TP_DCS:08
TP_DCS-popis:Uncompressed Text
No class
Alphabet:UCS2(16)bit

من
Length:2





فرمت 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


در لینک زیر کاملا توضیح داده شده : 

Concatenated_SMS


06918919015000

240B819003000010F7

0008122192515151000406450646



To: 380933522620
Message: Hello! Test SMS in GSM-7

Encoded PDU string:
0001000C81839033256202000018C8329B FD0E81A8E5391D346D4E416937E8386DB6 6E1A

Details about PDU string:
1. 00 - skipped SMSC
2. 01 - PDU-Type
3. 00 - TP-MR
4. 0C - length of To number.
5. 81 - type of number (unknown, also tried 0x91 which is international)
6. 83 90 33 25 62 02 - To number
7. 00 - TP-PID
8. 00 - TP-DCS (GSM 7bit, default SMS class)
9. 18 - TP-UD (24 letters)
10. C8 32 ... B6 6E - packed message
11. 1A - ctrl+z





برای ارسال پیام به صورت دوپارتی : 


"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 





واقعا کم لطفیه اگر این مطالب استثنایی رو مطالعه کنید و در نظر سنجی شرکت 

نکنید