Panduan Lengkap Pemrograman at COMMAND Pada VB6

Embed Size (px)

Citation preview

By Indra WahyudiD3 A Elektro IndustriPENS

Mengirim SMS Menggunakan Modem GSM

Mengenai cara mengirim SMS menggunakan aplikasi yang dibuat dengan VB6 menggunakan modem GSM. Adapun cara mengirim SMS menggunakan aplikasi VB6 secara sederhana kodenya adalah sebagai berikut:

Option ExplicitPrivate Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Form_Load() With MSComm1 .CommPort = 9 disesuaikan PORT MODEM .Settings = "115200,N,8,1" .Handshaking = comRTS .RTSEnable = True .DTREnable = True .RThreshold = 1 .SThreshold = 1 .InputMode = comInputModeText .InputLen = 0 .PortOpen = True End WithEnd Sub

Private Sub Command1_Click()MSComm1.Output = "AT" & vbCrLfSleep 500MSComm1.Output = "AT+CMGF=1" & vbCrLfSleep 500MSComm1.Output = "AT+CMGS=" & Chr(34) & Text1.Text & Chr(34) & vbCrLfSleep 1000MSComm1.Output = Text2.Text & Chr(26)Sleep 1000End Sub

Menerima dan Menampilkan SMS Baru

Mengenai cara menerima dan menampilkan SMS yang masuk menggunakan AT Command melalui aplikasi VB6. Setelah kita dapat mengirim SMS melalui AT Command dengan menggunakan kode VB6, dan contoh kode untuk mendeteksi modemyang ada disana, dan mengirim kode ussd melalui AT Commandyang ada disana. Sekarang tiba saatnya untuk membicarakan cara menerima SMSdisini.

Maka tanpa kata berpanjang lebar menunggu cacing berbulu, di bawah ini adalah kode VB6 yang mewakili tindakan dengan judul di atas:Option Explicit

Dim strBuffer As String

Private Sub Form_Load() If MSComm1.PortOpen = True Then MSComm1.PortOpen = False With MSComm1 .CommPort = 3 .Settings = "115200,N,8,1" .Handshaking = comRTS .RTSEnable = True .DTREnable = True .RThreshold = 1 .SThreshold = 1 .InputMode = comInputModeText .InputLen = 0 .PortOpen = True End WithEnd Sub

Private Sub Form_Unload(Cancel As Integer) If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End IfEnd Sub

Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive strBuffer = strBuffer & MSComm1.Input Do strBuffer = strBuffer & MSComm1.Input Loop While MSComm1.InBufferCount If InStr(1, strBuffer, "+CMTI") > 0 Then If Right(strBuffer, 1) = vbLf Then Text1.Text = strBuffer End If End If End SelectEnd Sub

Sampai dengan kode di atas, apabila ada SMS baru, maka modem akan memberitahukan kepada kita dengan diawali "+CMTI" misalnya: +CMTI: "SM",11. SM artinya memory yang digunakan adalah SIM card, sedangkan angka 11 mewakili indeks dari SMS tersebut, jadi apabila kita ingin mengakses/membaca SMS tersebut harus menggunakan 11 sebagai indeksnya. Gantilah kode yang terdapat dalam event MSComm1_OnComm() diatas dengan kode dibawah ini, apabila Anda berkeinginan membaca isi SMS baru tersebut.

Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive strBuffer = strBuffer & MSComm1.Input Do strBuffer = strBuffer & MSComm1.Input Loop While MSComm1.InBufferCount If InStr(1, strBuffer, "OK") > 0 Then Text1.Text = strBuffer Dim d() As String d = Split(strBuffer, vbCrLf) strBuffer = "" End If If InStr(1, strBuffer, "+CMTI") > 0 Then Do strBuffer = strBuffer & MSComm1.Input Loop While MSComm1.InBufferCount If Right(strBuffer, 1) = vbLf Then Text1.Text = strBuffer Dim s() As String s = Split(strBuffer, ",") ReadSMSByIndex Trim$(s(UBound(s))) End If End If End SelectEnd Sub

Private Sub ReadSMSByIndex(Index As Integer) strBuffer = "" MSComm1.Output = "AT+CMGR=" & Index & vbCrLf 'baca SMS yang berada di index ke-1End SubSetelah kita modifikasi, maka akan menghasilkan:+CMGR: "REC UNREAD","+6281315673456",,"12/06/26,01:43:51+28"Test SMS. Test SMS.

OK

Lakukan parse (urai, pisah, memilih dan memilah) jika Anda terganggu dan tidak nyaman dengan perolehan response data yang selalu diawali dengan "+CMGR: "REC UNREAD" kemudian koma dan diakhiri dengan kata "OK". Terutama jika Anda bermaksud memasukan data tersebut ke dalam objek ListView atau MSHFlexgrid, dan lain-lain, demikian pula jika bermaksud menghubungkannya dengan database Access, SQLite, MySQL, atau database apa saja tergantung selera Anda, tidak ada paksaan dalam hal ini.

Mengirim Kode USSD

Mengenai cara mengirim kode USSD dari aplikasi yang dibuat menggunakan bahasa pemrograman VB6. USSD merupakan singkatan dari Unstructured Supplementary Service Data. USSD biasanya diawali dengan tanda bintang (*) dan diakhiri dengan tanda pagar (#). Contoh USSD: *888# *388# *123# *123*1*2*4#Dibawah ini merupakan contoh mengirim kode USSD, yang digunakan untuk mengecek pulsa Simpati:

Option Explicit

Dim strBuffer As String

Private Sub Command1_Click() Text1.Text = "" strBuffer = "" If MSComm1.PortOpen = True Then MSComm1.PbortOpen = False With MSComm1 .CommPort = 3 .Settings = "115200,N,8,1" .Handshaking = comRTS .RTSEnable = True .DTREnable = True .RThreshold = 1 .SThreshold = 1 .InputMode = comInputModeText .InputLen = 0 .PortOpen = True .Output = "AT+CUSD=1," & Chr(34) & "*888#" & Chr(34) & ",15" & vbCrLf End WithEnd Sub

Private Sub MSComm1_OnComm() strBuffer = strBuffer & MSComm1.Input Dim x As String If InStr(1, strBuffer, ",15") Then Dim s() As String s = Split(strBuffer, vbCrLf) Dim i As Integer For i = 0 To UBound(s) If InStr(1, s(i), "+CUSD") Then x = s(i) End If Next End If If x "" Then s = Split(x, ",") Text1.Text = Mid$(s(1), 2, Len(s(1)) - 2) End IfEnd Sub

Mendeteksi Port Modem Secara Otomatis

Mengenai cara mendeteksi port modem secara otomatis menggunakan VB6. Pada project sebelumnyaklik disinidandisini. Kita telah berhasil mengirimkan SMS menggunakan modem GSM secara sederhana. Akan tetapi karena sederhana kedua project tersebut tidak diperlengkapi dengan deteksi port modem secara otomatis, sehingga untuk mengetahui port modem Anda lakukan langkah di bawah ini:1. Klik tombol start (sebelah kiri bawah)2. Selanjutnya klik Settings >> Control Panel >> System3. Klik tab Hardware Klik tombol Device Manager4. Klik Node Ports (COM & LPT)5. Carilah di sana akan ada port modem Wavecom/GSM Anda.Sungguh merepotkan sekali, setiap kali port modemnya berubah kita harus selalu mengulangi dan mengulangi langkah-langkah di atas. Mulai saat ini, tinggalkan cara di atas, dan beralihlah padadeteksi port modem secara otomatis. Adapun kode untuk mendeteksi port modem secara otomatis menggunakan VB6 adalah sebagai berikut:

Option Explicit

Dim strBuffer As StringDim intPortNumber As String

Private Sub Command2_Click() On Error Resume Next Dim i As Integer For i = 1 To 20 If MSComm1.PortOpen Then MSComm1.PortOpen = False intPortNumber = i MSComm1.CommPort = i MSComm1.PortOpen = True MSComm1.Output = "AT" & vbCrLf Wait Me, 50 NextEnd Sub

Private Sub Form_Load() With MSComm1 .Settings = "115200,n,8,1" .Handshaking = comRTS .RTSEnable = True .DTREnable = True .RThreshold = 1 .SThreshold = 1 .InputMode = comInputModeText .InputLen = 0 End WithEnd Sub

Private Sub Form_Unload(Cancel As Integer) If MSComm1.PortOpen = True Then MSComm1.PortOpen = False EndEnd Sub

Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive strBuffer = strBuffer & MSComm1.Input End Select Do strBuffer = strBuffer & MSComm1.Input Loop While MSComm1.InBufferCount If InStr(1, strBuffer, "OK") > 0 Then Caption = "COM" & intPortNumber Text1.Text = intPortNumber End IfEnd Sub

Mengirim SMS Disertai Verifikasi Terkirim

Mengenai mengirim SMS menggunakan modem GSM melalui aplikasi yang dibuat menggunakan VB6. Ini merupakan kelanjutan dariproject sebelumnya, pada kesempatan kali, kita akan menambahkan fitur verifikasi, apakah SMS telah terkirim atau gagal terkirim. Nah, bagaimanakah kode untuk mengirim SMS menggunakan modem wavecom melalui aplikasi VB6 yang disertai pesan verifikasi? berikut adalah kodenya:Option Explicit

Dim strBuffer As String

Private Sub Command1_Click() If MSComm1.PortOpen = True Then MSComm1.PortOpen = False With MSComm1 .CommPort = 7 .Settings = "115200,N,8,1" .Handshaking = comRTS .RTSEnable = True .DTREnable = True .RThreshold = 1 .SThreshold = 1 .InputMode = comInputModeText .InputLen = 0 .PortOpen = True End With MSComm1.Output = "AT+CMGS=" & Chr(34) & TxtNumber.Text & Chr(34) & vbCrLf Delay 1 MSComm1.Output = TxtMessage.Text & Chr(26) If WaitForSuccess Then MsgBox "SMS telah terkirim", vbInformation + vbOKOnly Else MsgBox "SMS gagal terkirim", vbCritical, "SMS Gagal" End If End Sub

Private Sub Form_Unload(Cancel As Integer) If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End IfEnd Sub

Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive strBuffer = strBuffer & MSComm1.Input End Select Debug.Print strBufferEnd Sub

Private Function WaitForSuccess() As Boolean Dim i As Integer Dim strInput As String Dim strPart As String Dim c As String, b As String For i = 1 To 5 Do Delay 1 c = strBuffer strBuffer = "" If c = "" Then Exit Do b = strInput & c Loop strPart = b strInput = strInput & strPart If InStr(1, strInput, vbCrLf & "OK" & vbCrLf) > 0 Then Exit For If strPart = "" Then Delay 1 End If Next WaitForSuccess = InStr(1, strInput, vbCrLf & "OK" & vbCrLf) > 0End Function

Private Sub Delay(ByVal HowLong As Date) Dim endDate As Date endDate = DateAdd("s", HowLong, Now) While endDate > Now DoEvents WendEnd Sub

Menambahkan Fitur Auto Reply

Mengenai cara membalas SMS secara otomatis melalui aplikasi VB6. Sebelumnya kita telah membahas mengenai cara menerima SMS baru, nah sekarang kita akan menambahkan fitur auto reply melalui AT Commands dengan aplikasi VB6 yang kita buat sendiri. Adapun contoh kode VB6 membalas SMS otomatis adalah seperti di bawah ini:Option Explicit

Dim strBuffer As StringDim blnFirstLoad As Boolean

Private Sub Command1_Click() If MSComm1.PortOpen = True Then MSComm1.PortOpen = False With MSComm1 .PortOpen = True .Output = "AT+CMGS=" & Chr(34) & TxtNumber.Text & Chr(34) & vbCrLf .Output = TxtMessage.Text & Chr(26) End WithEnd Sub

Private Sub Form_Load() With MSComm1 .CommPort = 7 'port disesuaikan atau beri kode auto detect port modem .Settings = "115200,N,8,1" .Handshaking = comRTS .RTSEnable = True .DTREnable = True .RThreshold = 1 .SThreshold = 1 .NullDiscard = True .InputMode = comInputModeText .InputLen = 0 .PortOpen = True End WithEnd Sub

Private Sub Form_Unload(Cancel As Integer) If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End IfEnd Sub

Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive strBuffer = strBuffer & MSComm1.Input Do strBuffer = strBuffer & MSComm1.Input Loop While MSComm1.InBufferCount If InStr(1, strBuffer, "+CMGR") Then If InStr(1, strBuffer, "OK") Then Text1.Text = strBuffer End If End If If InStr(1, strBuffer, "+CMTI") > 0 Then If Right(strBuffer, 1) = vbLf Then Dim s() As String s = Split(strBuffer, ",") Debug.Print s(UBound(s)) ReadSMSByIndex Trim$(s(UBound(s))) Delay 1 Command1_Click 'Auto reply strBuffer = "" End If End If End SelectEnd Sub

Private Sub ReadSMSByIndex(Index As Integer) strBuffer = "" MSComm1.Output = "AT+CMGR=" & Index & vbCrLf 'baca SMS yang berada di index ke-1End Sub

Private Sub Delay(ByVal HowLong As Date) Dim endDate As Date endDate = DateAdd("s", HowLong, Now) While endDate > Now DoEvents WendEnd Sub

Daftar Pustaka

http://source-code-sms-gateway.blogspot.com/ http://wannabexpert.wordpress.com/2011/11/26/visual-basic-mengirim-sms-menggunakan-modem-gsmhsdpa/ http://sms-gateway-visual-basic.blogspot.sg/2012/07/seri-tutorial-sms-gateway-membuat.html