Kaeru Gaman hat geschrieben:"at+"?
ist das sicher?
für mich klingt das, als solle es "@cpin" bedeuten...
Der Befehl gehört zum erweiterten Hayes AT Befehlssatz
http://de.wikipedia.org/wiki/AT-Befehlssatz
Jeder Befehl beginnt mit AT auch wenn man das AT in dem Eingabefeld weglassen kann laut msdn (Dort steht aber auch kein Trennzeichen).
Hier mal ein PureBasic Programm, nach dessen Ausführung die Verbindung durch das Modem funktioniert:
Code: Alles auswählen
Procedure WriteModemString(Port, Text.s)
ProcedureReturn WriteSerialPortString(Port, Text, #PB_Ascii)
EndProcedure
Procedure.s ReadModemString(Port, Timeout)
Protected StartTime
Protected Result.s
Protected Buffer.b
Protected FoundCRLF
Result = ""
StartTime = ElapsedMilliseconds()
Repeat
If AvailableSerialPortInput(Port)
BytesRead = ReadSerialPortData(Port, @Buffer, 1)
Result + Chr(Buffer)
StartTime = ElapsedMilliseconds()
FoundCRLF = FindString(Result, #CRLF$, 1)
If FoundCRLF
Result = Left(Result, FoundCRLF - 1)
Break
EndIf
EndIf
If ElapsedMilliseconds() - StartTime > Timeout
Break
EndIf
ForEver
ProcedureReturn Result
EndProcedure
Procedure.s ModemCommand(Port, Text.s, Timeout)
Protected Result.s
WriteModemString(Port, Text)
Result = ReadModemString(Port, Timeout)
If Left(Text, Len(Result)) = Result
Result = ReadModemString(Port, Timeout)
EndIf
Result = Trim(Right(Result, Len(Result) - FindString(Result, ":", 1)))
ProcedureReturn Result
EndProcedure
Enumeration
#MODEM_PIN_NO_STATUS_RECEIVED
#MODEM_PIN_READY
#MODEM_PIN_NEED_PIN
#MODEM_PIN_NEED_PUK
#MODEM_PIN_NO_SIMCARD
EndEnumeration
#MODEM_TIMEOUT = 1000
Procedure OpenModem(PortName.s, Bauds, Parity, DataBits, StopBits, HandshakeMode)
Protected Port
Port = OpenSerialPort(#PB_Any, PortName, Bauds, Parity, DataBits, StopBits, HandshakeMode, 1024, 1024)
If IsSerialPort(Port) And Port <> 0
ModemCommand(Port, "ATZ" + #CRLF$, #MODEM_TIMEOUT)
ModemCommand(Port, "ATE1" + #CRLF$, #MODEM_TIMEOUT)
ProcedureReturn Port
EndIf
ProcedureReturn 0
EndProcedure
Procedure IsModem(Port)
ProcedureReturn IsSerialPort(Port)
EndProcedure
Procedure CloseModem(Port)
If IsSerialPort(Port) And Port <> 0
ModemCommand(Port, "ATZ" + #CRLF$, #MODEM_TIMEOUT)
ProcedureReturn CloseSerialPort(Port)
EndIf
EndProcedure
Procedure ModemGetPINStatus(Port)
Protected Text.s
Protected Result
Result = #MODEM_PIN_NO_STATUS_RECEIVED
If IsSerialPort(Port)
Text = UCase(ModemCommand(Port, "AT+CPIN?" + #CRLF$, #MODEM_TIMEOUT))
Select Text
Case "READY"
Result = #MODEM_PIN_READY
Case "SIM PIN"
Result = #MODEM_PIN_NEED_PIN
Case "SIM PUK"
Result = #MODEM_PIN_NEED_PUK
Case "ERROR"
Result = #MODEM_PIN_NO_SIMCARD
EndSelect
EndIf
ProcedureReturn Result
EndProcedure
Procedure ModemTryPIN(Port, PIN.s)
Protected Text.s
Protected Result
Result = 0
If IsSerialPort(Port)
Text = UCase(ModemCommand(Port, "AT+CPIN=" + #DQUOTE$ + PIN + #DQUOTE$ + #CRLF$, #MODEM_TIMEOUT))
If Text = "OK"
Result = 1
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Procedure ModemTryPUK(Port, PUK.s, PIN.s)
Protected Text.s
Protected Result
Result = 0
If IsSerialPort(Port)
Text = UCase(ModemCommand(Port, "AT+CPIN=" + #DQUOTE$ + PUK + #DQUOTE$ + "," + #DQUOTE$ + PIN + #DQUOTE$ + #CRLF$, #MODEM_TIMEOUT))
If Text = "OK"
Result = 1
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Define Port
Port = OpenModem("COM5", 921600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake)
If IsModem(Port)
Select ModemGetPINStatus(Port)
Case #MODEM_PIN_READY
MessageRequester("Error", "PIN was already entered.")
Case #MODEM_PIN_NEED_PIN
PIN.s = InputRequester("PIN needed", "Input your pin here:", "")
If PIN <> ""
If Not ModemTryPIN(Port, PIN)
MessageRequester("Error", "Wrong PIN")
EndIf
EndIf
Case #MODEM_PIN_NEED_PUK
PUK.s = InputRequester("PUK needed", "Input your puk here:", "")
PIN.s = InputRequester("New PIN number", "Input your new pin number here:", "")
If PUK <> ""
If Not ModemTryPUK(Port, PUK, PIN)
MessageRequester("Error", "Wrong PUK")
EndIf
EndIf
Case #MODEM_PIN_NO_SIMCARD
MessageRequester("Error", "No SIM-Card found.")
Default
MessageRequester("Error", "No Modem found.")
EndSelect
CloseModem(Port)
EndIf
Nur würde ich das gern irgendwie automatisieren und ich dachte durch eben jene Eingabezeile würde es Funktionieren.
Trotzdem danke für eure schnellen Antworten.