Avatar billede jens_nuuk Nybegynder
22. februar 2005 - 02:41 Der er 5 kommentarer

Send SMS med gsm modem og AT+ kommandoer

Hej
Nu har jeg prøvet alverdens kodestumper, men jeg kan ikke finde noget der virker, hverken i text & PDU mode.
Der skulle vel ikke være en derude der har noget liggende.
Hvis jeg bruger et færdigt program kan jeg godt sende en SMS så det er ikke modemet.
Avatar billede scb Praktikant
22. februar 2005 - 08:13 #1
Hvilket modem er det?
-SCB
Avatar billede james_t_dk Juniormester
22. februar 2005 - 08:36 #2
I teorien kan man vel med AT kommandoer sende SMS via en hvilken som helst mobiltelefon. Men problemet er at det ikke er alle Firmaer der understøtter et fuldt sæt AT kommandoer. Og at det ikke er alle der vil fortælle hvilke kommandoer de understøtter. Hvis det er nokia, så har de et udemærket developer forum man bare kan meldes sig ind i.
Avatar billede lindy Nybegynder
30. maj 2005 - 21:05 #3
Prøv:
AT+CMGS=<tlfnr>vbCR
afvent:
>
Skriv besked og afslut med chr(26) det er også CTRL+z
Avatar billede jens_nuuk Nybegynder
30. maj 2005 - 22:39 #4
Der findes 2 måder at sende SMS'er på
1 Text mode
Modemet skal først sættes til Text mode
det kan gøres med
Text Mode AT+CMGF=0 + enter

2 PDU Mode
PDU Mode AT+CMGF=1 + enter
"Vedlagte eksempel er findet på nettet men jeg kan ikke få det til at virke med mit modem "Mobil telefon Siemend SL45"
'Tested on Siemens(19200 baud) and Bosch (9600 baud)

Hvis du får noget af det til at virke er jeg med på en lurer.

Private Sub Command1_Click()
  Dim sms As String
  Dim buffer$
  If MSComm1.PortOpen = False Then
  MSComm1.CommPort = 7
  MSComm1.Settings = "19200,N,8,1"
  MSComm1.InputLen = 0
  MSComm1.Handshaking = comNone
      MSComm1.PortOpen = True
  End If
 
  'echo off
  MSComm1.Output = "atE0" & Chr$(13)
  Do
      DoEvents
  buffer$ = buffer$ & MSComm1.Input
  Loop Until InStr(buffer$, "OK")
  buffer$ = ""
 
  'set pdu mode
  MSComm1.Output = "AT+CMGF=0" & Chr$(13)
  Do
      DoEvents
  buffer$ = buffer$ & MSComm1.Input
  Loop Until InStr(buffer$, "OK")
  buffer$ = ""
 
  sms = MakeSms("004917212345678", "Does it work?")
 
  Debug.Print sms
 
  MSComm1.Output = "AT+CMGS=" & Len(sms) / 2 & Chr$(13)
  Do
      DoEvents
  buffer$ = buffer$ & MSComm1.Input
  Loop Until InStr(buffer$, ">")
  buffer$ = ""
 
  MSComm1.Output = sms + Chr$(26)
 
  Do
      DoEvents
  buffer$ = buffer$ & MSComm1.Input
  Loop Until InStr(buffer$, "OK")
 
  MSComm1.PortOpen = False
 
End Sub


Function MakeSms(number As String, txt As String) As String
  MakeSms = "001100"
  MakeSms = MakeSms + ConvNumber(number)
  MakeSms = MakeSms + "000064"
  MakeSms = MakeSms + ConvTxt(txt)
End Function


Function ConvNumber(num As String) As String

  Dim i As Integer
  Dim numType As String
 
  'default local number
  numType = "81"
 
  'but if international number then .....
  If Left$(num, 3) = "+00" And Len(num) > 3 Then num = Mid$(num, 4): numType = "91"
  If Left$(num, 2) = "00" And Len(num) > 2 Then num = Mid$(num, 3): numType = "91"
  If Left$(num, 1) = "+" And Len(num) > 1 Then num = Mid$(num, 2): numType = "91"
 
 
  ConvNumber = Right$("00" & Hex(Len(num)), 2)
 
  ConvNumber = ConvNumber + numType
 
  For i = 1 To Len(num) Step 2
    ConvNumber = ConvNumber + Mid$(num + "F", i + 1, 1) + Mid$(num + "F", i, 1)
  Next i
 
End Function


Function ConvTxt(txt As String) As String
  Dim i As Integer
  Dim datArr1(1 To 256) As Byte
 
  Dim l As Integer
  Dim touw As String
 
 
  'no more than 160 chars
  If Len(txt) > 160 Then txt = Left$(txt, 160)
 
  l = Len(txt)
 
  ConvTxt = Right$("00" & Hex(Len(txt)), 2)
  For i = 1 To l
    datArr1(i) = Asc(Mid$(txt, i, 1))
  Next i
 
 
  'make a bit stream of septets
  touw = ""
  For i = 1 To l
    touw = ToBin7(datArr1(i)) + touw
  Next i
 
 
  'and convert it to octets
  While Len(touw) > 8
    ConvTxt = ConvTxt + Bin2Hex(Right$(touw, 8))
    touw = Mid$(touw, 1, Len(touw) - 8)
  Wend
 
  ConvTxt = ConvTxt + Bin2Hex(touw)
 
  Debug.Print ConvTxt
End Function


Function ToBin7(ByVal num As Byte) As String
  'convert to padded 7 place binary number
  While num > 0
    ToBin7 = Trim(num Mod 2) + ToBin7
    num = num \ 2
  Wend
   
  ToBin7 = Right$("0000000" + ToBin7, 7)
End Function

Function Bin2Hex(ByVal touw As String) As String
  'convert binary to a padded 2 place hex number
  Dim x As Integer
  Dim num As Long
 
  For x = 1 To Len(touw)
    If Mid$(touw, x, 1) = "1" Then
      num = num + 2 ^ (Len(touw) - x)
    End If
  Next x
 
  Bin2Hex = Right$("00" + Hex(num), 2)
End Function

Private Sub Form_Load()

End Sub

Prøv at søge efter SAGEM AT commands i basic GSM/GPRS applications.
Avatar billede jens_nuuk Nybegynder
30. maj 2005 - 22:41 #5
Undskyld det med modes var lige omvendt.

Text Mode AT+CMGF=1 + enter
PDU Mode AT+CMGF=0 + enter
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester