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

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

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

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

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

decode SMS-SUBMIT



Read following  first : 

SMS-SUBMIT
Bit:
0,1-MTI (00 : Deliver , 01 Submit )
2-RD ( Reject Duplicate )
3,4-VPF
0 0 VP field is not present
0 1 Reserved
1 0 VP field present an integer represented (relative)
1 1 VP field present an semi-octet represented (absolute)
5-SRR (Status report request)
0:A status report is not requested
1:A status report is requested
6-UDHI
When TP-UDHI has value 1, the TP-UD field starts with User Data Header
7-RP

0:Reply Path parameter is not set in this PDU
1:Reply Path parameter is set in this PDU




SMS-SUBMIT :
000100
0B915892214365F7000021493A283D0795C3F33C88FE06CDCB6E32885EC6D341EDF27C1E3E97E72E


-SMSC Defualt in cell phone : 00

-PDU TYPE : 01

00000001

Starting from right  :

bit0,1 : 01 >>> SMS-SUBMIT

bit2 : 0 >>> RD ( Reject duplicate)

bit3,4 : 00 >>> VP (Valudity period)

if 00 means not present

bit5: 0 >>> SRR (Status report requested) if 1 report requested

bit6: 0 >>> UDHI (User data header indicator) ... use for cancatenated message if 1 means header is present like 05 00 03 CC 02 01 (total02/number01)

bit7: 0 >>> RP ( Reply path ) 

-MR : 00 ( Message refrence by SMSC )

-DA : 0B915892214365F7

DA Len : 0B (Destination address Length)

International code : 91 : Display (+)

Number : 58 92 21 43 65 F7

reverse number from begining as 2 digits

58>>>85

So >>>> 85291234567

---From : +85291234567

-PID : 00

-DCS : 00 (Alphabet) (Dada scheme coding)

if Unicode >>> 08

-UD : 21493A283D0795C3F33C88FE06CDCB6E32885EC6D341EDF27C1E3E97E72E

UDL : 21 in hex value (User data length)

UD : 493A283D0795C3F33C88FE06CDCB6E32885EC6D341EDF27C1E3E97E72E


decoding Data : 

-Reverse Hex value


2EE7973E1E7CF2ED41D3C65E88326ECBCD06FE883CF3C395073D283A49


-Hex to binary

00101110 11100111 10010111 00111110

00011110 01111100 11110010 11101101

01000001 11010011 11000110 01011110

10001000 00110010 01101110 11001011

11001101 00000110 11111110 10001000

00111100 11110011 11000011 10010101

00000111 00111101 00101000 00111010

01001001


Change octet to septet

--Get the number of zeros to be remove.

29×833×7=1

29×8-int(29×8/7)×7=1


-Remove 1 Zero from the left of first above binary ( octet : 00101110 )  and convert 7bits 7bits to hex value like as follows : 



0101110:2E

1110011:73

1100101:65

1100111:67

1100001:61

1110011:73

1110011:73

1100101:65

1101101:6D

0100000:20

1110100:74

1111000:78

1100101:65

1110100:74

0100000:20

1100100:64

1101110:6E

1100101:65

1110011:73

0100000:20

1101111:6F

1110100:74

0100000:20

1111001:79

1110011:73

1100001:61

1100101:65

0100000:20

1110011:73

1101001:69

0100000:20

1110100:74

1001001:49


-Binary to Hex and reverse

4974206973206561737920746F207365

6E642074657874206D65737361676573

2E

-Hex to text convertor : 

https://codebeautify.org/hex-string-converter



finally decoded done successfully !!!



Please do not hesitate to forget >>> Like and Comment






















SMS in Alphabet mode



SMS DELIVER:
SCA-PDU TYPE-OA-PID-DCS-SCTS-UDL-UD
SMS-SUBMIT:
SCA-PDU TYPE-MR-DA-PID-DCS-VP-UDL-UD




Mode Alphabet : 160  Character in part 1 ( Ascii 140,binary septet 160 )

Text : Salam

1-Ascii text to Hexadecimal

53 61 6C 61 6D

?H53

2-Decimal to binary




83÷2=41 Reminder 1

41÷2=20 Reminder 1

20÷2=10 Reminder 0

10÷2=5 Reminder 0

5÷2=2 Reminder 1

2÷2=1 Reminder 0

1÷2=0 Reminder 1

Hex53Decimal83=1010011

Hex61Decimal97=1100001

Hex6CDecimal108=1101100

Hex61Decimal97=1100001

Hex6DDecimal109=1101101



3-Change 8 bit to 7 bit  : 10001100>0001100

Seperate 7 digits from Right 

4-Reverse Binary from last hex to the first

1101101 1100001 1101100 1100001 1010011

5-how many 0 reqired?  5×(7+1)-5×7=5

Add 5 Zero to the left 

00000 1101101 1100001 1101100 1100001 1010011

6-Change binary  to hex



0000011011011100001110110011000011010011


0110=0×2^(3)+1×2^(2)+1×2^(1)+0×2^(0)=6


0D33D3






7-Reverse Hex

D3303BDC06



SMS SUBMIT

00311E08810100353800000A05D3303BDC06


MR(Message refrence)=hex(1E):decimal(30)

DCS(Data coding scheme):00

Validity : 0A

UDL(User data length) : 05

UD (User data) : D3303BDC06




Packed




0110001 0110010 0110011 0110100 0110101 0110110 0110111 0111000

Reverse binary:

0111000 0110111 0110110 0110101 01101000110011 0110010 0110001

Add Zero to the first 8×(7+1)-8×7=8

000000000111000 0110111 0110110 0110101 01101000110011 0110010 0110001

Seperate 8 digits 8 digits :

00000000 : 00

01110000 : 70

11011101 : DD

10110011 : B3

01010110 : 56

10001100 : 8C

11011001 : D9

00110001 : 31

Reverse Hex : 

31 D9 8C 56 B3 DD 70 00


0031000881010035850000000831D98C56B3DD7000

Message : 12345678






-Hex

Hex Len:16

54 61 73 68 20 4D 65 6E 65 20 53 69 6C 65 73 68

-Septet

1010100 1100001 1110011 1101000 0100000 

1001101 1100101 1101110 1100101 0100000

1010011 1101001 1101100 1100101 1110011

1101000

-Reverse binary

1101000 1110011 1100101 1101100 1101001

1010011 0100000 1100101 1101110 1100101

1001101 0100000 1101000 1110011 1100001

1010100

-16×(7+1)-16×7=16

-Required Zero at the first =16

8 digits separation

00000000: 00

00000000:00

11010001:D1

11001111:CF

00101110:2E

11001101:CD

00110100:34

11010000:D0

01100101:65

11011101:DD

10010110:96

01101010:6A

00001101:0D

00011100:1C

11110000:F0

11010100:D4

-Revers Hex

D4 F0 1C 0D 6A 96 DD 65 D0 34 CD 2E CF D1 00 00


00310008810100358500000B10D4F01C0D6A96DD65D034CD2ECFD10000

UDL=16(decimal)=10(Hex)

UD=D4F01C0D6A96DD65D034CD2ECFD10000



SCA

Service Center Address information element

Telephone number of the Service Center

PDU Type

Protocol Data Unit

Type

 

MR

Message Reference

successive number (O. .255) of all SMS-SUBMIT Frames set by the MOBILE

OA

Originator Address

Address of the originating SME

DA

Destination Address

Address of the destination SME

PID

Protocol Identifier

Parameter showing the SMSC how to process the SM (as FAX, Voice etc)

DCS

Data Coding Scheme

Parameter identifying the coding scheme within the User Data (UD)

SCTS

Service Center Time Stamp

Parameter identifying time when the SMSC received the message

VP

Validity Period

Parameter identifying the time from where the message is no longer valid in the SMSC

UDL

User Data Length

Parameter indicating the length of the UD-field

UD

User Data

Data of the SM

RP

Reply Path

Parameter indicating that Reply Path exists

UDHI

User Data Header Indicator

Parameter indicating that the UD field contains a header

SRI

Status Report Indication

Parameter indicating if the SME has requested a status report

SRR

Status Report Request

Parameter indicating if the MS has requested a status report

VPF

Validity Period Format

Parameter indicating whether or not the VP field is present

MMS

More Messages to Send

Parameter indicating whether or not there are more messages to send

RD

Reject Duplicate

 

MTI

Message

Type

Indicator

Parameter describing the message type

00 means SMS-DELIVER

01 means SMS-SUBMIT




TPDU Types
TP-MTIdirectionmessage type
0 0MS → SCSMS-DELIVER-REPORT
0 0SC → MSSMS-DELIVER
0 1MS → SCSMS-SUBMIT
0 1SC → MSSMS-SUBMIT-REPORT
1 0MS → SCSMS-COMMAND
1 0SC → MSSMS-STATUS-REPORT
1 1anyReserved


SMS-DELIVER is used to deliver a message from SMSC to a mobile phone.


Bit fields in the first octet of SM-TL TPDU
bit(s)Meaning
1-0TP-Message-Type-Indicator (TP-MTI)
2TP-More-Messages-to-Send (TP-MMS) in SMS-DELIVER (0 = more messages)
2TP-Reject-Duplicates (TP-RD) in SMS-SUBMIT
3TP-Loop-Prevention (TP-LP) in SMS-DELIVER and SMS-STATUS-REPORT
4-3TP-Validity-Period-Format (TP-VPF) in SMS-SUBMIT (00 = not present)
5TP-Status-Report-Indication (TP-SRI) in SMS-DELIVER
5TP-Status-Report-Request (TP-SRR) in SMS-SUBMIT and SMS-COMMAND
5TP-Status-Report-Qualifier (TP-SRQ) in SMS-STATUS-REPORT
6TP-User-Data-Header-Indicator (TP-UDHI)
7TP-Reply-Path (TP-RP) in SMS-DELIVER and SMS-SUBMIT


According to above table ( PDU Type ) :  

Submit : MTI-RD-VPF-SRR-UDHI-RP

Deliver : MTI-MMS-LP-SRI-UDHI-RP



TP-SRI(only set by SMSC) :

0: a status report will not be returned to the SME

1: a status report will  be returned to the SME






00400881010035850008322131313121000B050003CC020106450648

SMS-SUBMIT
Bit:
0,1-MTI (00 : Deliver , 01 Submit )
2-RD ( Reject Duplicate )
3,4-VPF
0 0 VP field is not present
0 1 Reserved
1 0 VP field present an integer represented (relative)
1 1 VP field present an semi-octet represented (absolute)
5-SRR (Status report request)
0:A status report is not requested
1:A status report is requested
6-UDHI
When TP-UDHI has value 1, the TP-UD field starts with User Data Header
7-RP
0:Reply Path parameter is not set in this PDU
1:Reply Path parameter is set in this PDU

11=00010001

31=00110001

61=01100001


006100088101003585000809050003CC02010645
PDU  61 : 01100001
From the rightest digit : 
bit0,1:MTI:01:SMS-SUBMIT
bit 2:RD:0
bit 3,4:VP:00 Not Present
bit 5:SRR:1:report requested
bit6:UDHI:1:Present:050003CC0201
bit7:RP:0


0031000881010035850008BB020645
PDU 31 : 00110001
MTI : 01 : SMS-SUBMIT
-Different with PDU 61
From the rightest digit ( See Bold )
VP : 10 : Present : BB(21 Day validity)
UDHI : 0 : Not Present


0021000881010053850008020645
PDU  21 : 00100001
bit0,1 : 01 : MTI : SMS-SUBMIT
bit 5 : 1 : SRR : status report request
VP : not present
UDHI : not present

0025000881010035850008020645
SMSC:00 >Using Sms center number from cell phone
MR : Message refrence (Hex value) : 00
Usaully originated from SMSC and no need changing it from 00 to another
TO : 10005358 : 01003558
iff Odd Number then Add F to the last then reverse 2-digits from the left
PDU 25 : 00100101
bit0,1 : 01 : SMS-SUBMIT
bit2 : 1 : RD : Reject duplicate
bit3,4 : 00 : VP : not present
bit5 : 1 : SRR : status report requested
bit6 : 0 : UDHI : not present ( use in concatenated message : multi part )
bit 7 : 0 : RP : not present

00F5000881010035850008CC09050003BB04010645
VP:CC:84days
Data header:050003BB0401
UDL:09
UD:050003BB04010645
text: م
SMSC:00 (Use default center in cell)
PDU F5 : 11110101
bit0,1 : MTI : 01 : SMS-SUBMIT
bit2 : RD : 1
bit3,4 : VP : 10 : validity present
bit5 : SRR : 1 : status report requested
bit6 : UDHI : 1 : present ( Concatenated Message )
bit7 : RP : 1 :  present




there are 40, 44, and 60, there are additional header fields because it is a concatenated SMS. This means that the SMS is divided into parts and sent in segments, and then the modem/phone reassembles them. And there are headers for collecting the SMS parts




0021000881010035850008020645

SMS-SUBMIT:
SCA-PDU TYPE-MR-DA-PID-DCS-VP-UDL-UD

PDU TYPE

21=00100001






AT COMMAND : 

Sending in text mode

AT

>ATOK

AT+CMGF=1[ENTER]
Enter the destination phone number
AT+CMGS=”+61419879619”[ENTER]
Enter the text message and terminate it with “CTRL Z”
>hello[CTRL Z]




Baud Rate:19200 : bps
Data Bits : 8
Stop Bits : 1
Parity N : None

AT+CMGS=18 (actual pdu length)
>0011000A814091786991000001
05E8329BFD06[CTRL Z]

+CMGS: 12

OK 

To : 0419879619

Message : hello

PDU type : SMS-SUBMIT (11)

Refrence : 0 (00)

Validity : 10 minutes (01)

Data coding : SMS Default Alphabet

UDL : 05

UD : E8329BFD06



+CMGF: 0
OK
SMS message for is configured for PDU mode
Checking SMS Mode…
AT+CMGS=48

0011000881010035850000aa28D3E614D42CCFE7E17319342FBBE920B3FCDD0605A9A0E1BBDD0EBBC9206A794E2FCB5D


+CMGS: 23

OK


UDL:28

message : SMS Message sent from AT Command Tester.

Hex Value of message : 

534d53204d6573736167652073656e742066726f6d20415420436f6d6d616e64205465737465722e

Length : 40 (2digits)

UDL in alphabet mode is the length of septet before encoding to octet.

40decimal=28hex

40÷2=2 40-2×16=8 so 28



AT COMMAND : READ 


AT+CMGR=1 [ENTER]

+CMGR: 0,,24

07911614786007F0040B911604994743F400009930139100406B05E8329BFD06

OK










برای دفع سنگ کلیه  خربزه را تمیز شسته و با پوست و گوشت و تخم داخل مخلوط کن بریزید تا کامل میکس شود و روزی 2تا ۳ لیوان میل کنید .

 















عبارت Put و Get در VBA



Writes data from a variable to a disk file.


نوشتن داده از یک متغیر یه یک فایل 


نوشتاری عبارت Put : 


Put [ # ] filenumber, [ recnumber ], varname


 طبق نوشتار بالا این عبارت سه قسمت دارد که شماره فایل ( 1 تا 255 ) و نام متغیر ضروری هستند و فقط شماره رکورد Optional یا می تواند خالی رها شود.


دیتا نوشته شده با Put معمولا با Get خوانده می شود


 رکورد یا بایت اول در یک فایل در موقعیت 1  ، رکورد یا بایت دوم در پوزیشن 2 و .... است . اگر recnumber را نادیده بگیرید( omit )  ، رکورد یا بایت بعدی بعد از آخرین عبارت یا دستور Get یا Put ، یا با آخرین تابع Seek اشاره شده  ، نوشته می شود. باید در جداکننده کاما قرار گیرند مثال : 

Put #1,,FileBuffer


برای فایل هایی که در حالت تصادفی یا Random Mode باز ( Open ) می شوند قوائد زیر اعمال می گردد : 

اگر طول دیتای در حال نوشتن کمتر از طول مشخص شده در عبارت Len دستور Open باشد ، Put رکوردهای بعدی را روی مرزهای طول رکورد می نویسد فضای بین پایان رکورد و ابتدای رکورد بعدی با محتویات موجود در بافر پر می شود. از آنجاییکه مقدار data padding را نمی توان با قطعیت پیدا کرد ، بطور کلی ایده خوبی است که طول رکورد با طول داده های نوشته شده مطابقت داشته باشد.اگر طول داده های نوشته شده بیشتر ازطول مشخص شده در عبارت Len دستور Open باشد ، خطائی رخ می دهد. اگر متغیری که نوشته می شود یک رشته بت طول متغیر باشد ، Put یک توصیفگر 2 بایتی می نویسد که شامل طول رشته و سپس متغیر است . طول رکورد مشخص شده توسط Len در دستور Open باید حداقل 2 بایت بیشتر از طول واقعی رشته باشد.... هر کاراکتر یک بایت است ( شامل ۷ یا ۸ بیت ).

 اگرمتغیری ( Variable ) که نوشته می شود یک Variant از نوع عددی باشد ( وقتی بعنوان واریانت مشخص می کنید تمام دیتا تایپ ها راشامل میشود حتی یک Variant نال هم می تواند باشد ولی آبجکت خیر )  Put  دو بایت می نویسد ( هرکاراکتر یک بایت )  که VarType را مشخص میکند و سپس متغیر را می نویسد. بعنوان مثال هنگام نوشتن یک Variant از VarType 3 دستور Put شش بایت می نویسد : دو بایت که با آن متغیر شناسایی می شود و  چهار بایت حاوی داده ( Long ) . طول رکورد مشخص شده توسط Len دستور Open باید حداقل دو بایت بیشتر از تعداد واقعی بایت های مورد نیاز برای ذخیره متغیر باشد.

اگر متغیری که نوشته می شود یک Variant از VarType 8 یا String  باشد ، Put دو بایت می نویسد که VarType را مشخص میکند ، دو بایت که طول رشته را مشخص میکند و سپس دیتا رشته ای را می نویسد. طول رکورد مشخص شده در Len دستور Open باید حداقل چهار بایت بیشتر از طول واقعی رشته باشد. ( VarType یا Variable Type که یک تابع است برای فهمیدن نوع داده متغیر )


برای فایل های باز شده در حالت باینری مثل اتصال به دستگاه از طریق USB ( باز کردن پورت مثل COM1 تا COMn) ، تمام قوائد Random اعمال می شود جز :

بند Len در دستور یا عبارت Open هیچ تاثیری ندارد.Put تمام متغیرها را بطور پیوسته روی دیسک می نویسد بدون Padding بین رکوردها. برای هر آرایه ای غیر از آرایه در یک نوع user-defined ( توسط کاربر مشخص شده ) Put فقط دیتا را می نویسد . هیچ توصیفی نوشته نمی شود. Put رشته هایی با طول-متغیر که جزئی از انواع user-defined نیست را بدون 2 بایت طول توصیفگر می نویسد. تعداد بایت های نوشته شده برابر تعداد کاراکترها در رشته است . برای مثال عبارتهای زیر 10 بایت به فایل شماره یک می نویسد.

VarString$ = String$(10," ")

Put #1,,VarString$ 

  • می توان از دستورات  AT COMMAND در PUT برای ارسال به PORT استفاده کرد






Get [ # ] filenumber, [ recnumber ], varname


Reads data from an open disk file into a variable.

خواندن دیتا از یک فایل باز به یک متغیر


VarString = String(10," ")
Get #1,,VarString 


عبارت # Input برای خواندن دیتا :
varlistRequired. Comma-delimited list of variables that are assigned values read from the file—can't be an array or object variable. However, variables that describe an element of an array or user-defined type may be used.

شامل دو پارت است اولی نام فایل معتبر و دومی فهرست متغیرها که با کاما جدا می شوند( نمی تواند یک متغیر آرایه یا آبجکت باشد) البته متغیرهایی که اجزا یک آرایه یا یک نوع که توسط کاربر تعیین شده را توصیف میکند می تواند استفاده شود.


مثال زیر از عبارت # Input برای خواندن داده ها از یک فایل به دو متغیر استفاده می کند.این مثال فرض میکند  که TESTFILE یا فایل با چند خط داده است که با استفاده از عبارت # Write روی آن نوشته شده است . یعنی هر خط شامل یک رشته داخل کوتیشن ها و یک عدد است که با کاما از هم جدا شده اند.بعنوان مثال 234 , "Hello" .

'تعریف متغیر
Dim MyString, MyNumber
'باز کردن فایل برای گرفتن ورودی
Open "TESTFILE" For Input As #1 
'لوپ زدن تا انتهای فایل 
Do While Not EOF(1)
'خواندن داده در دو متغیر
Input #1, MyString, MyNumber 
'نمایش در محیط وی بی،  کنترل جی را بزنید
Debug.Print MyString, MyNumber 
'بستن فایل
Loop Close #1


مثالی دیگر از کاربرد دستور Put برای نوشتن در حالت Binary و  دستور input برای دریافت 

Open File in Binary Mode :
cmnd$ = cmnd$ + Chr(13)
Put #1, , cmnd$
answer = ""
char = Input(1, #1) 'get first char
While (char <> Chr(13))
DoEvents
If (char > Chr(31)) Then
answer = answer + char
Else
'Do what ever you like
End If
char = Input(1, #1) 'get the next character
Wend
Close #1
Cells(1, 1) = answer

کامند بالا تست نشده ولی به احتمال زیاد درست عمل میکند.


برای گرفتن دسیمال یونیکدها از AscW استفاده کنید و بعد به هگزا تبدیل کنید . تابع Oct هم که دسیمال را به اکتال می دهد. اگر Vba را تایپ کنید و بعد نقطه را وارد کنید لیست توابع را خواهید دید اگر زمانی اسم تابع فراموش شد کمکی به شما خواهد بود.

لطفا در نظر سنجی شرکت کنید











برقراری تماس از طریق مودم GSM با دستورات AT COMMAND یا فایل HYPER TERMINAL و حتی ارسال پیام ( به فرمت PDU )

این مطلب توسط نویسنده‌اش رمزگذاری شده است و برای مشاهده‌ی آن احتیاج به وارد کردن رمز عبور دارید.