PC SOFT
DEPOT EN LIGNE
POUR WINDEVWEBDEV ET WINDEV MOBILE

Exemplo de envio de SMS usando placa modem GSM com maquina de estado chip pre pago (Comandos: sOpen, sParameter, sWrite, sRead,
Publié par Boller
dans la catégorie Outils
Nouveautés



Description
Exemplo de envio de SMS usando placa modem GSM com maquina de estado chip pre pago (Comandos: sOpen, sParameter, sWrite, sRead, sClose)

Example of sending SMS using GSM modem card with pre-paid chip state machine (Commands: sOpen, sParameter, sWrite, sRead, sClose)

Exemple d’envoi de SMS à l’aide d’une carte modem GSM avec une machine d’état à puce prépayée (Commandes: sOpen, sParameter, sWrite, sRead, sClose)

Ejemplo de envío de SMS utilizando tarjeta de módem GSM con máquina de estado de chip prepago (Comandos: sOpen, sParameter, sWrite, sRead, sClose)

sopen

sparameter

swrite

sread

SCLOSE

//-------------------------------------------------------------------------------- LINK COMPRA PLACA GSM MODEM SMS

https://pt.aliexpress.com/item/4000890352364.html?spm=a2g0o.productlist.0.0.79c171d1N659RI&algo_pvid=bfe4c13a-c6e3-4ab1-a534-e1820b8adaac&algo_exp_id=bfe4c13a-c6e3-4ab1-a534-e1820b8adaac-0&pdp_ext_f=%7B%22sku_id%22%3A%2210000010452796895%22%7D&pdp_npi=2%40dis%21BRL%21%2147.39%21%21%2124.55%21%21%400bb0622d16546240657643230e5ed1%2110000010452796895%21sea

//-------------------------------------------------------------------------------- CODIGOS USADOS NA TELA

// Summary: <specify the procedure action>
// Syntax:
//[ <Result> = ] ConfigBusca (<descricao>)
//
// Parameters:
// descricao: <specify the role of descricao>
// Example:
// <Specify a usage example>
//
// Return value:
// valor: <specify the role of valor>
PROCEDURE ConfigBusca(descricao)

HReset(T001_Config)

IF HReadSeek(T001_Config,T001_Descricao,descricao,hIdentical) = False THEN

T001_Config.T001_Descricao = descricao
T001_Config.T001_Valor = 0
HAdd(T001_Config)

RESULT 0

ELSE

RESULT NoSpace(T001_Config.T001_Valor)

END

//------------------------------------------------------------------------------------------------------------------------------------------------------------

// Summary: <specify the procedure action>
// Syntax:
//[ <Result> = ] ConfigGrava (<valor>)
//
// Parameters:
// valor: <specify the role of valor>
// Example:
// <Specify a usage example>
//
// Return value:
PROCEDURE ConfigGrava(descricao,valor)

HReset(T001_Config)

IF HReadSeek(T001_Config,T001_Descricao,descricao,hIdentical) = False THEN

T001_Config.T001_Descricao = descricao
T001_Config.T001_Valor = valor
HAdd(T001_Config)

RESULT valor

ELSE IF HReadSeek(T001_Config,T001_Descricao,descricao,hIdentical) = True THEN

T001_Config.T001_Descricao = descricao
T001_Config.T001_Valor = valor
HModify(T001_Config)

RESULT valor

ELSE

T001_Config.T001_Descricao = descricao
T001_Config.T001_Valor = valor
HAdd(T001_Config)

RESULT valor

END

//---------------------------------------------------------------------------------------------------------------------------------------------------------

// Summary: <specify the procedure action>
// Syntax:
//Evento_Abrir_Porta ()
//
// Parameters:
// None
// Example:
// <Specify a usage example>
//
// Return value:
PROCEDURE Evento_Abrir_Porta()

NextTitle("Atenção")

IF EDT_PORTA_SERIAL = "" THEN
Info(" FAVOR, ESCOLHER UM NUMERO DA PORTA SERIAL. ")
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - Porta Serial não informada...")
RETURN
ELSE
gnNumero_Port_Serie = EDT_PORTA_SERIAL
END

IF BTN_CONECTAR..Caption = "ABRIR" THEN
EDT_AtividadeModem = DateToString(DateSys(),"DD/MM/YYYY") +" "+ TimeToString(TimeSys(),"HH:MM:SS")+CR
EDT_AtividadeModem += "Inicializando Modem SMS na Porta COM"+gnNumero_Port_Serie+"..."+CR
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - Inicializada a Porta Serial Com"+gnNumero_Port_Serie)
ELSE
EDT_AtividadeModem = DateToString(DateSys(),"DD/MM/YYYY") +" "+ TimeToString(TimeSys(),"HH:MM:SS")+CR
EDT_AtividadeModem += "A Porta COM"+gnNumero_Port_Serie+", foi Fechada do Modem SMS..."+CR
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - Finalizada a Porta Serial Com"+gnNumero_Port_Serie)
END

bEtat_Port is boolean = falseAllHourglass

IF gbEtat_Port_Serie = False AND gnNumero_Port_Serie > 0

bEtat_Port = sOpen(gnNumero_Port_Serie,2000,2000,sDefaultTimeout)

IF bEtat_Port = True THEN

EDT_AtividadeModem += "A Porta Serial COM"+gnNumero_Port_Serie+" aberta com sucesso!..."+CR

sParameter(gnNumero_Port_Serie,9600,0,8,1,False,False,False)

EDT_AtividadeModem += "Paramentros: 9600,0,8,1"+CR

ToastDisplay(" ABERTURA DA PORTA SERIAL COM SUCESSO. ",toastLong,vaMiddle,haCenter)

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - Aberta a Porta Serial Com"+gnNumero_Port_Serie)

gbEtat_Port_Serie = True

gsMaquina_Estado = "COMANDO_ATE0"

EDT_AtividadeModem += gsMaquina_Estado +CR

sWrite(gnNumero_Port_Serie,"ATE0" + CR)

BTN_CONECTAR..Caption = "FECHAR"

IMG_SMS_ON.Visible = True

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - Atividade de envio de SMS inicializado com sucesso na Porta Serial Com"+gnNumero_Port_Serie)

ELSE
NextTitle("Atenção")
Info("Erro ao tentar abrir a porta!","Remova o modem e conecte na USB novamente")
IMG_SMS_ON.Visible = False
EDT_AtividadeModem += "Erro ao tentar abrir a porta!, remova o modem e conecte na USB novamente."+CR
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - Erro ao tentar abrir a porta!, remova o modem e conecte na USB novamente.")
END

ELSE

sClose(gnNumero_Port_Serie)
gbEtat_Port_Serie = False
ToastDisplay(" A PORTA SERIAL FOI FECHADA COM SUCESSO ",toastLong,vaMiddle,haCenter)
BTN_CONECTAR..Caption = "ABRIR"
IMG_SMS_ON.Visible = False
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - Porta Serial Fechada, processo de envio finalizado.")

END

Trace("DIGITE UM TEXTO")

//-----------------------------------------------------------------------------------------------------------------------------------------------------------

// Summary: <specify the procedure action>
// Syntax:
//Evento_Enviar_Sms_Loop ()
//
// Parameters:
// None
// Example:
// <Specify a usage example>
//
// Return value:
PROCEDURE Evento_Enviar_Sms_Loop()

IF EDT_Telefone ="" THEN
Info("FAVOR INFORMAR UM NUMERO")
RETURN
END

IF EDT_MSG_SMS = "" THEN
Info("FAVOR INFORMAR UM NUMERO")
RETURN
END

IF EDT_Intervalo_seg <= 5 THEN
Info("Intervalo deve ser superior a 5 segundos")
RETURN
END

gnNumero_Mensagens = 0

gbEnviar_texto = True

gbEnviarUmaVez = False


//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

// Summary: <specify the procedure action>
// Syntax:
//Evento_Enviar_Sms_UmaVez ()
//
// Parameters:
// None
// Example:
// <Specify a usage example>
//
// Return value:
PROCEDURE Evento_Enviar_Sms_UmaVez()

IF EDT_Telefone ="" THEN
Info("FAVOR INFORMAR UM NUMERO")
RETURN
END

IF EDT_MSG_SMS = "" THEN
Info("FAVOR INFORMAR UM NUMERO")
RETURN
END

gnNumero_Mensagens = 0

gbEnviar_texto = True

gbEnviarUmaVez = True



//-------------------------------------------------------------------------------------------------------------------------------------------------------

// Résumé : <indiquez ici ce que fait la procédure>
// Syntax:
//Evento_Modem_SMS_LOOP1 ()
//
// Parameters:
// None
// Exemple :
// Indiquez ici un exemple d'utilisation.
//
PROCEDURE Evento_Modem_SMS_LOOP1()

//ENVIO DE POSIÇÃO GPS LATITUDE E LONGITUDE

nNumero_Byte is int = 0
nResult is int = 0

IF EDT_Telefone = "" OR EDT_MSG_SMS = ""
RETURN
END

IF gbEtat_Port_Serie =True THEN

nNumero_Byte = sInEntryQueue(gnNumero_Port_Serie)

IF nNumero_Byte > 0 THEN
gsDados_lidos = sRead(gnNumero_Port_Serie,nNumero_Byte)
EDT_AtividadeModem += gsDados_lidos+CR
END

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - "+ gsMaquina_Estado)

//Enviado com sucesso!!!!
IF Contains(EDT_AtividadeModem,"+CMGS:") = True THEN
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - +CMGS SMS ENVIADO OK ")
nPosicao is int = PositionOccurrence(EDT_AtividadeModem,"+CMGS:",firstRank,FromBeginning) + 6
sNumSMS is string = Middle(EDT_AtividadeModem,nPosicao,10)
EDT_AtividadeModem = Replace(EDT_AtividadeModem,"+CMGS:","+SMS_OK: "+sNumSMS) //RETORNO QUE ENVIOU COM SUCESSO
sNumSMS = Replace(sNumSMS,CR,"")
sNumSMS = Replace(sNumSMS,CRLF,"")
sNumSMS = Replace(sNumSMS,"OK","")
sNumSMS = NoSpace(sNumSMS)
ConfigGrava("SMS_NUM_ANTERIOR",sNumSMS)
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - SMS_OK: "+sNumSMS)
END

IF gsMaquina_Estado = "COMANDO_ATE0"
gnRepetiu_ATE0++
END


IF Contains(EDT_AtividadeModem,"+CGREG: 0,2",IgnoreCase) = True //RESOLVIDO THEN
EDT_AtividadeModem = ""
Wait(5s,waitTimer)
ExecuteProcess(BTN_CONECTAR,trtClick) //fechar
Wait(5s,waitTimer)
ExecuteProcess(BTN_CONECTAR,trtClick) //abrir
END

IF gnRepetiu_ATE0 > 3 //OR Position(gsDados_lidos, "ERR") > 0
ToastDisplay("Modem nao inicializou") /// <------------- ERRO DE NAO INICIALIZACAO DO MODEM
ToastDisplay("Reiniciando o Modem...") /// <------------- ERRO DE NAO INICIALIZACAO DO MODEM
gsMaquina_Estado = "COMANDO_NAO_RESPONDE" /// <------------- ERRO DE NAO INICIALIZACAO DO MODEM
END

// //travou, entao destrava
// IF gbEnviouSMS = True THEN
// gnRepetiu_COMANDO_CMGS++
// IF gnRepetiu_COMANDO_CMGS > 10 THEN
// gsMaquina_Estado = "COMANDO_NAO_RESPONDE" /// <------------- ERRO DE NAO INICIALIZACAO DO MODEM
// gbEnviouSMS = False
// END
// END

//-----------------------------------------------------MAQUINA DE ESTADOS
SWITCH gsMaquina_Estado

CASE "DESLIGADO":

RETURN

CASE "COMANDO_ATE0":

nNumero_Byte = Position(gsDados_lidos, "OK")
IF nNumero_Byte > 0 THEN
gsDados_lidos = ""
EDT_AtividadeModem += "COMANDO CFUN=1"+CR
nResult = sWrite(gnNumero_Port_Serie,"AT+CFUN=1" + CR)
gsMaquina_Estado = "COMANDO_CFUN"
EDT_AtividadeModem += gsMaquina_Estado+":"+nResult+":"+nNumero_Byte+CR
END

CASE "COMANDO_CFUN":

nNumero_Byte = Position(gsDados_lidos, "OK")
IF nNumero_Byte = 0 THEN
gsDados_lidos = ""
EDT_AtividadeModem += "COMANDO CGREG?"+CR
nResult = sWrite(gnNumero_Port_Serie,"AT+CGREG?" + CR)
gsMaquina_Estado = "COMANDO_CGREG"
EDT_AtividadeModem += gsMaquina_Estado+":"+nResult+":"+nNumero_Byte+CR
END

// AT+CFUN=1<>
// OK
//
// Call Ready



// ATE0<>AT+CFUN=1<>
// OK
//
// OK
//
// Call Ready


nNumero_Byte = Position(gsDados_lidos, "OK")
IF nNumero_Byte > 0 THEN
gsDados_lidos = ""
EDT_AtividadeModem += "COMANDO CGREG?"+CR
nResult = sWrite(gnNumero_Port_Serie,"AT+CGREG?" + CR)
gsMaquina_Estado = "COMANDO_CGREG"
EDT_AtividadeModem += gsMaquina_Estado+":"+nResult+":"+nNumero_Byte+CR
END

CASE "COMANDO_CGREG":

//
// Call Ready
//
// SMS Ready
// <0><0>

//<0>}W«{w[uw¿íë

nNumero_Byte = Position(gsDados_lidos, "0,5")
IF nNumero_Byte = 0 THEN
nNumero_Byte = Position(gsDados_lidos, "0,1")
END

nNumero_Byte = Position(gsDados_lidos, "OK")
IF nNumero_Byte = 0 THEN
nNumero_Byte = Position(gsDados_lidos, "0,1")
END

IF nNumero_Byte > 0 THEN
gsDados_lidos = ""
EDT_AtividadeModem += "COMANDO CMGF=1" + CR
nResult = sWrite(gnNumero_Port_Serie,"AT+CMGF=1" + CR)
gsMaquina_Estado = "COMANDO_CMGF"
EDT_AtividadeModem += gsMaquina_Estado+":"+nResult+":"+nNumero_Byte+CR
END

CASE "COMANDO_CMGF":


// +CPIN: READY
//
// Call Ready
//
// SMS Ready
// AT+CMGF=1<>
// OK


//<0>

nNumero_Byte = Position(gsDados_lidos, "OK")
IF nNumero_Byte > 0 THEN
EDT_AtividadeModem += "PRONTO PARA ENVIAR SMS..." + CR +"-------------------------------------"+CR+CR
gsDados_lidos = ""
gsMaquina_Estado = "COMANDO_CMGS"
EDT_AtividadeModem += gsMaquina_Estado+":"+nResult+":"+nNumero_Byte+CR
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - PRONTO PARA ENVIAR SMS... "+ gsMaquina_Estado)
END

CASE "COMANDO_CMGS":

IF gbEnviar_texto = True THEN

//ESSE FLAG JA ESTA SEMPRE TRUE MESMO QUANDO NAO FOI CONFIRMADO O ENVIO DO SMS POR
//POR ISSO NAO PARA EN "COAMNDO CMGS" NAO PODE FICAR SEMPRE TRUE.

gsDados_lidos = ""

EDT_AtividadeModem += "COMANDO CMGS"+CR

nResult = sWrite(gnNumero_Port_Serie,"AT+CMGS=" + Charact(34) + NoSpace(EDT_Telefone) + Charact(34) + CR)

EDT_AtividadeModem += "AT+CMGS=" + NoSpace(EDT_Telefone)+":"+nResult+":"+nNumero_Byte+CR

gsMaquina_Estado = "COMANDO_ENVIA"

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - TELEFONE: "+ EDT_Telefone)

IF gbEnviarUmaVez = True THEN
gbEnviar_texto = False
END

END

CASE "COMANDO_ENVIA":

IF gsDados_lidos = 0 THEN

END


nNumero_Byte = Position(gsDados_lidos, ">")

IF nNumero_Byte > 0 AND gbEnviarUmaVez = True AND gnNumero_Mensagens = 0

gsDados_lidos = ""
EDT_AtividadeModem += "ENVIANDO SMS..."+CR

gbEnviouSMS = True
gnRepetiu_COMANDO_CMGS = 0

nSmsnum is int = ConfigBusca("SMS_NUM_ANTERIOR")
nSmsnum++

IF gbExibeContador=True
nResult = sWrite(gnNumero_Port_Serie, NoSpace(nSmsnum) +" - "+ NoSpace(EDT_MSG_SMS) + " " + Charact(26)) //FINALIZA COM CTRL+Z
ELSE
nResult = sWrite(gnNumero_Port_Serie, NoSpace(EDT_MSG_SMS) + " " + Charact(26)) //FINALIZA COM CTRL+Z
END

gbEnviar_texto = False

EDT_AtividadeModem += "SMS ENVIADO PARA: "+EDT_Telefone +CR+"Mensagem: "+EDT_MSG_SMS+":"+nResult+":"+nNumero_Byte+CR

gsMaquina_Estado = "COMANDO_CMGS"

EDT_AtividadeModem += gsMaquina_Estado + CR

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - SMS ENVIADO PARA: "+EDT_Telefone +CR+"Mensagem: "+EDT_MSG_SMS+" - "+gsMaquina_Estado)

ELSE IF nNumero_Byte > 0 AND gbEnviarUmaVez = False // loop

gsDados_lidos = ""
EDT_AtividadeModem += "ENVIANDO SMS..."+CR

nSmsnum is int = ConfigBusca("SMS_NUM_ANTERIOR")
nSmsnum++

IF gbExibeContador=True
nResult = sWrite(gnNumero_Port_Serie, NoSpace(nSmsnum) +" - "+ NoSpace(EDT_MSG_SMS) + " " + Charact(26)) //FINALIZA COM CTRL+Z
ELSE
nResult = sWrite(gnNumero_Port_Serie, NoSpace(EDT_MSG_SMS) + " " + Charact(26)) //FINALIZA COM CTRL+Z = 26
END

EDT_AtividadeModem += "SMS ENVIADO PARA: "+EDT_Telefone +CR+"Mensagem: "+EDT_MSG_SMS+":"+nResult+":"+nNumero_Byte+CR

gsMaquina_Estado = "COMANDO_CMGS"

EDT_AtividadeModem += gsMaquina_Estado + CR

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - SMS ENVIADO PARA: "+EDT_Telefone +CR+"Mensagem: "+EDT_MSG_SMS+" - "+ gsMaquina_Estado)

nNumero_Byte = Position(gsDados_lidos, "+CMGS")
IF gsDados_lidos <> "" THEN
EDT_AtividadeModem += "SMSNUM: "+gsDados_lidos+CR
numsms is string = gsDados_lidos
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - OK: "+numsms)
numsms = Replace(numsms,CR,"")
numsms = Replace(numsms,CRLF,"")
numsms = Replace(numsms,"OK","")
numsms = Replace(numsms,"+CMGS:","")
numsms = Replace(numsms,"<\r><\n>+CMGS:","")
numsms = Replace(numsms,"<\r><\n><\r><\n>OK<\r><\n>","")
numsms = NoSpace(numsms)
ConfigGrava("SMS_NUM_ANTERIOR",numsms)
EDT_AtividadeModem += "SMS:"+numsms+CR
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - OK: "+numsms)
END
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - SMS ENVIADO... OK... "+gsMaquina_Estado)

END

CASE "COMANDO_FIM_SMS":

nNumero_Byte = Position(gsDados_lidos, "ERR")
IF nNumero_Byte > 0 THEN
gsDados_lidos = ""
gbEnviar_texto = False
gbZero_ini = False
EDT_AtividadeModem += "ERRO VERIFICAR O NUMERO DO CELULAR" + CR
gsMaquina_Estado = "COMANDO_CMGS"
EDT_AtividadeModem += gsMaquina_Estado +CR

Wait(3s,waitTimer)

gsMaquina_Estado = "COMANDO_ATE0"
EDT_AtividadeModem += gsMaquina_Estado +CR
sWrite(gnNumero_Port_Serie,"ATE0" + CR)

RETURN
END



nNumero_Byte = Position(gsDados_lidos, "+CMGS")
IF gsDados_lidos <> "" THEN
EDT_AtividadeModem += "SMSNUM: "+gsDados_lidos+CR
numsms is string = gsDados_lidos
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - OK: "+numsms)
numsms = Replace(numsms,CR,"")
numsms = Replace(numsms,CRLF,"")
numsms = Replace(numsms,"OK","")
numsms = Replace(numsms,"+CMGS:","")
numsms = Replace(numsms,"<\r><\n>+CMGS:","")
numsms = Replace(numsms,"<\r><\n><\r><\n>OK<\r><\n>","")
numsms = NoSpace(numsms)
ConfigGrava("SMS_NUM_ANTERIOR",numsms)
EDT_AtividadeModem += "SMS:"+numsms+CR
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - SMS ENVIADO... OK... "+numsms)
END


nNumero_Byte = Position(gsDados_lidos, "OK")
IF nNumero_Byte > 0 THEN
gsDados_lidos = ""
gbEnviar_texto = False

gnNumero_Mensagens++

IF gnNumero_Mensagens < 10 THEN
gbEnviar_texto = True
ELSE
gbZero_ini = False
END

gsMaquina_Estado = "COMANDO_CMGS"
EDT_AtividadeModem += gsMaquina_Estado +CR
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - OK: "+gsMaquina_Estado)
END

CASE "COMANDO_NAO_RESPONDE": //---------------------------------------- OK

nNumero_Byte = nNumero_Byte
IF nNumero_Byte = 0 THEN//------------------------------------------


gsDados_lidos = ""
EDT_AtividadeModem += "COMANDO ATZ0" + CR //REINICIAR MODEM
sWrite(gnNumero_Port_Serie,"ATZ0"+Charact(26) + CR)

Wait(3s,waitTimer)

gsDados_lidos = ""
sWrite(gnNumero_Port_Serie,"ATE0" + CR) //INICIALIZAR
gsMaquina_Estado = "COMANDO_ATE0"
EDT_AtividadeModem += gsMaquina_Estado +CR

ExecuteProcess(BTN_CONECTAR,trtClick)
Wait(3s,waitTimer)
ExecuteProcess(BTN_CONECTAR,trtClick)

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - ATZ0 / ATE0 / FECHA / ABRE")

END//--------------------------------------------------------

CASE "ERRO": //---------------------------------------- OK

nNumero_Byte = nNumero_Byte
IF nNumero_Byte = 0 THEN//------------------------------------------


gsDados_lidos = ""
EDT_AtividadeModem += "COMANDO ATZ0" + CR //REINICIAR MODEM
sWrite(gnNumero_Port_Serie,"ATZ0"+Charact(26) + CR)

Wait(3s,waitTimer)

gsDados_lidos = ""
sWrite(gnNumero_Port_Serie,"ATE0" + CR) //INICIALIZAR
gsMaquina_Estado = "COMANDO_ATE0"
EDT_AtividadeModem += gsMaquina_Estado +CR

ExecuteProcess(BTN_CONECTAR,trtClick)
Wait(3s,waitTimer)
ExecuteProcess(BTN_CONECTAR,trtClick)

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - ERRO ATZ0")

END//--------------------------------------------------------


OTHER CASE

EDT_AtividadeModem += "COMANDO: OTHER CASE" + CR
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - COMANDO: OTHER CASE")
END

END

//----------------------------------------------------------------------------------------------------------------------------------------------------

// Summary: <specify the procedure action>
// Syntax:
//Evento_Modem_SMS_LOOP2 ()
//
// Parameters:
// None
// Example:
// <Specify a usage example>
//
// Return value:// Automatic procedure:
// The procedure is automatically run, after the window initialization code, with a delay set to 1 second
// It will be repeated in a loop, with a timeout set to 1 second between each call
// Each following call runs the procedure once, without timer
//

PROCEDURE Evento_Modem_SMS_LOOP2()

//ENVIO DE POSIÇÃO GPS LATITUDE E LONGITUDE

nNumero_Byte is int = 0
nResult is int = 0

IF EDT_Telefone = "" OR EDT_MSG_SMS = ""
RETURN
END

IF gbEtat_Port_Serie =True THEN

nNumero_Byte = sInEntryQueue(gnNumero_Port_Serie)

IF nNumero_Byte > 0 THEN
gsDados_lidos = sRead(gnNumero_Port_Serie,nNumero_Byte)
EDT_AtividadeModem += gsDados_lidos+CR
END

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - "+ gsMaquina_Estado)

//Enviado com sucesso!!!!
IF Contains(EDT_AtividadeModem,"+CMGS:") = True THEN
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - +CMGS SMS ENVIADO OK ")
nPosicao is int = PositionOccurrence(EDT_AtividadeModem,"+CMGS:",firstRank,FromBeginning) + 6
sNumSMS is string = Middle(EDT_AtividadeModem,nPosicao,10)
EDT_AtividadeModem = Replace(EDT_AtividadeModem,"+CMGS:","+SMS_OK: "+sNumSMS) //RETORNO QUE ENVIOU COM SUCESSO
sNumSMS = Replace(sNumSMS,CR,"")
sNumSMS = Replace(sNumSMS,CRLF,"")
sNumSMS = Replace(sNumSMS,"OK","")
sNumSMS = NoSpace(sNumSMS)
ConfigGrava("SMS_NUM_ANTERIOR",sNumSMS)
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - SMS_OK: "+sNumSMS)
END

IF gsMaquina_Estado = "COMANDO_ATE0"
gnRepetiu_ATE0++
END

IF Contains(EDT_AtividadeModem,"+CGREG: 0,2",IgnoreCase) = True //RESOLVIDO THEN
EDT_AtividadeModem = ""
Wait(5s,waitTimer)
ExecuteProcess(BTN_CONECTAR,trtClick) //fechar
Wait(5s,waitTimer)
ExecuteProcess(BTN_CONECTAR,trtClick) //abrir
END

IF gnRepetiu_ATE0 > 3 //OR Position(gsDados_lidos, "ERR") > 0
ToastDisplay("Modem nao inicializou") /// <------------- ERRO DE NAO INICIALIZACAO DO MODEM
ToastDisplay("Reiniciando o Modem...") /// <------------- ERRO DE NAO INICIALIZACAO DO MODEM
gsMaquina_Estado = "COMANDO_NAO_RESPONDE" /// <------------- ERRO DE NAO INICIALIZACAO DO MODEM
END

SWITCH gsMaquina_Estado

CASE "DESLIGADO":

RETURN

CASE "COMANDO_ATE0":

nNumero_Byte = Position(gsDados_lidos, "OK")
IF nNumero_Byte > 0 THEN
gsDados_lidos = ""
EDT_AtividadeModem += "COMANDO CFUN=1"+CR
nResult = sWrite(gnNumero_Port_Serie,"AT+CFUN=1" + CR)
gsMaquina_Estado = "COMANDO_CFUN"
EDT_AtividadeModem += gsMaquina_Estado+":"+nResult+":"+nNumero_Byte+CR
END

CASE "COMANDO_CFUN":

nNumero_Byte = Position(gsDados_lidos, "OK")
IF nNumero_Byte > 0 THEN
gsDados_lidos = ""
EDT_AtividadeModem += "COMANDO CGREG?"+CR
nResult = sWrite(gnNumero_Port_Serie,"AT+CGREG?" + CR)
gsMaquina_Estado = "COMANDO_CGREG"
EDT_AtividadeModem += gsMaquina_Estado+":"+nResult+":"+nNumero_Byte+CR
END

CASE "COMANDO_CGREG":

nNumero_Byte = Position(gsDados_lidos, "0,5")
IF nNumero_Byte = 0 THEN
nNumero_Byte = Position(gsDados_lidos, "0,1")
END

IF nNumero_Byte > 0 THEN
gsDados_lidos = ""
EDT_AtividadeModem += "COMANDO CMGF=1" + CR
nResult = sWrite(gnNumero_Port_Serie,"AT+CMGF=1" + CR)
gsMaquina_Estado = "COMANDO_CMGF"
EDT_AtividadeModem += gsMaquina_Estado+":"+nResult+":"+nNumero_Byte+CR
END

CASE "COMANDO_CMGF":

nNumero_Byte = Position(gsDados_lidos, "OK")
IF nNumero_Byte > 0 THEN
EDT_AtividadeModem += "PRONTO PARA ENVIAR SMS..." + CR
gsDados_lidos = ""
gsMaquina_Estado = "COMANDO_CMGS"
EDT_AtividadeModem += gsMaquina_Estado+":"+nResult+":"+nNumero_Byte+CR
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - PRONTO PARA ENVIAR SMS... "+ gsMaquina_Estado)
END

CASE "COMANDO_CMGS":

IF gbEnviar_texto = True THEN

//ESSE FLAG JA ESTA SEMPRE TRUE MESMO QUANDO NAO FOI CONFIRMADO O ENVIO DO SMS POR
//POR ISSO NAO PARA EN "COAMNDO CMGS" NAO PODE FICAR SEMPRE TRUE.

gsDados_lidos = ""

EDT_AtividadeModem += "COMANDO CMGS"+CR

nResult = sWrite(gnNumero_Port_Serie,"AT+CMGS=" + Charact(34) + NoSpace(EDT_Telefone) + Charact(34) + CR)

EDT_AtividadeModem += "AT+CMGS=" + NoSpace(EDT_Telefone)+":"+nResult+":"+nNumero_Byte+CR

gsMaquina_Estado = "COMANDO_ENVIA"

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - TELEFONE: "+ EDT_Telefone)

IF gbEnviarUmaVez = True THEN
gbEnviar_texto = False
END

END

CASE "COMANDO_ENVIA":

nNumero_Byte = Position(gsDados_lidos, ">")

IF nNumero_Byte > 0 AND gbEnviarUmaVez = True AND gnNumero_Mensagens = 0

gsDados_lidos = ""
EDT_AtividadeModem += "ENVIANDO SMS..."+CR


nSmsnum is int = ConfigBusca("SMS_NUM_ANTERIOR")
nSmsnum++

IF gbExibeContador=True
nResult = sWrite(gnNumero_Port_Serie, NoSpace(nSmsnum) +" - "+ NoSpace(EDT_MSG_SMS) + " " + Charact(26)) //FINALIZA COM CTRL+Z
ELSE
nResult = sWrite(gnNumero_Port_Serie, NoSpace(EDT_MSG_SMS) + " " + Charact(26)) //FINALIZA COM CTRL+Z
END

gbEnviar_texto = False

EDT_AtividadeModem += "SMS ENVIADO PARA: "+EDT_Telefone +CR+"Mensagem: "+EDT_MSG_SMS+":"+nResult+":"+nNumero_Byte+CR

gsMaquina_Estado = "COMANDO_CMGS"

EDT_AtividadeModem += gsMaquina_Estado + CR

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - SMS ENVIADO PARA: "+EDT_Telefone +CR+"Mensagem: "+EDT_MSG_SMS+" - "+gsMaquina_Estado)

ELSE IF nNumero_Byte > 0 AND gbEnviarUmaVez = False // loop

gsDados_lidos = ""
EDT_AtividadeModem += "ENVIANDO SMS..."+CR

nSmsnum is int = ConfigBusca("SMS_NUM_ANTERIOR")
nSmsnum++

IF gbExibeContador=True
nResult = sWrite(gnNumero_Port_Serie, NoSpace(nSmsnum) +" - "+ NoSpace(EDT_MSG_SMS) + " " + Charact(26)) //FINALIZA COM CTRL+Z
ELSE
nResult = sWrite(gnNumero_Port_Serie, NoSpace(EDT_MSG_SMS) + " " + Charact(26)) //FINALIZA COM CTRL+Z = 26
END

EDT_AtividadeModem += "SMS ENVIADO PARA: "+EDT_Telefone +CR+"Mensagem: "+EDT_MSG_SMS+":"+nResult+":"+nNumero_Byte+CR

gsMaquina_Estado = "COMANDO_CMGS"

EDT_AtividadeModem += gsMaquina_Estado + CR

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - SMS ENVIADO PARA: "+EDT_Telefone +CR+"Mensagem: "+EDT_MSG_SMS+" - "+ gsMaquina_Estado)

nNumero_Byte = Position(gsDados_lidos, "+CMGS")
IF gsDados_lidos <> "" THEN
EDT_AtividadeModem += "SMSNUM: "+gsDados_lidos+CR
numsms is string = gsDados_lidos
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - OK: "+numsms)
numsms = Replace(numsms,CR,"")
numsms = Replace(numsms,CRLF,"")
numsms = Replace(numsms,"OK","")
numsms = Replace(numsms,"+CMGS:","")
numsms = Replace(numsms,"<\r><\n>+CMGS:","")
numsms = Replace(numsms,"<\r><\n><\r><\n>OK<\r><\n>","")
numsms = NoSpace(numsms)
ConfigGrava("SMS_NUM_ANTERIOR",numsms)
EDT_AtividadeModem += "SMS:"+numsms+CR
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - OK: "+numsms)
END
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - SMS ENVIADO... OK... "+gsMaquina_Estado)

END

CASE "COMANDO_FIM_SMS":

nNumero_Byte = Position(gsDados_lidos, "ERR")
IF nNumero_Byte > 0 THEN
gsDados_lidos = ""
gbEnviar_texto = False
gbZero_ini = False
EDT_AtividadeModem += "ERRO VERIFICAR O NUMERO DO CELULAR" + CR
gsMaquina_Estado = "COMANDO_CMGS"
EDT_AtividadeModem += gsMaquina_Estado +CR

Wait(3s,waitTimer)

gsMaquina_Estado = "COMANDO_ATE0"
EDT_AtividadeModem += gsMaquina_Estado +CR
sWrite(gnNumero_Port_Serie,"ATE0" + CR)

RETURN
END



nNumero_Byte = Position(gsDados_lidos, "+CMGS")
IF gsDados_lidos <> "" THEN
EDT_AtividadeModem += "SMSNUM: "+gsDados_lidos+CR
numsms is string = gsDados_lidos
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - OK: "+numsms)
numsms = Replace(numsms,CR,"")
numsms = Replace(numsms,CRLF,"")
numsms = Replace(numsms,"OK","")
numsms = Replace(numsms,"+CMGS:","")
numsms = Replace(numsms,"<\r><\n>+CMGS:","")
numsms = Replace(numsms,"<\r><\n><\r><\n>OK<\r><\n>","")
numsms = NoSpace(numsms)
ConfigGrava("SMS_NUM_ANTERIOR",numsms)
EDT_AtividadeModem += "SMS:"+numsms+CR
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - SMS ENVIADO... OK... "+numsms)
END


nNumero_Byte = Position(gsDados_lidos, "OK")
IF nNumero_Byte > 0 THEN
gsDados_lidos = ""
gbEnviar_texto = False

gnNumero_Mensagens++

IF gnNumero_Mensagens < 10 THEN
gbEnviar_texto = True
ELSE
gbZero_ini = False
END

gsMaquina_Estado = "COMANDO_CMGS"
EDT_AtividadeModem += gsMaquina_Estado +CR
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - OK: "+gsMaquina_Estado)
END

CASE "COMANDO_NAO_RESPONDE": //---------------------------------------- OK

nNumero_Byte = nNumero_Byte
IF nNumero_Byte = 0 THEN//------------------------------------------


gsDados_lidos = ""
EDT_AtividadeModem += "COMANDO ATZ0" + CR //REINICIAR MODEM
sWrite(gnNumero_Port_Serie,"ATZ0"+Charact(26) + CR)

Wait(3s,waitTimer)

gsDados_lidos = ""
sWrite(gnNumero_Port_Serie,"ATE0" + CR) //INICIALIZAR
gsMaquina_Estado = "COMANDO_ATE0"
EDT_AtividadeModem += gsMaquina_Estado +CR

ExecuteProcess(BTN_CONECTAR,trtClick)
Wait(3s,waitTimer)
ExecuteProcess(BTN_CONECTAR,trtClick)

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - ATZ0 / ATE0 / FECHA / ABRE")

END//--------------------------------------------------------

CASE "ERRO": //---------------------------------------- OK

nNumero_Byte = nNumero_Byte
IF nNumero_Byte = 0 THEN//------------------------------------------


gsDados_lidos = ""
EDT_AtividadeModem += "COMANDO ATZ0" + CR //REINICIAR MODEM
sWrite(gnNumero_Port_Serie,"ATZ0"+Charact(26) + CR)

Wait(3s,waitTimer)

gsDados_lidos = ""
sWrite(gnNumero_Port_Serie,"ATE0" + CR) //INICIALIZAR
gsMaquina_Estado = "COMANDO_ATE0"
EDT_AtividadeModem += gsMaquina_Estado +CR

ExecuteProcess(BTN_CONECTAR,trtClick)
Wait(3s,waitTimer)
ExecuteProcess(BTN_CONECTAR,trtClick)

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - ERRO ATZ0")

END//--------------------------------------------------------


OTHER CASE

EDT_AtividadeModem += "COMANDO: OTHER CASE" + CR
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - COMANDO: OTHER CASE")
END

END

//------------------------------------------------------------------------------------------------------------------------------------------------------------

// Summary: <specify the procedure action>
// Syntax:
// Evento_Parar ()
//
// Parameters:
// None
// Return value:
// None
//
// Example:
// <Specify a usage example>
//
PROCEDURE Evento_Parar()

Log_Sms_Avulso()

IF BTN_CONECTAR..Caption = "FECHAR"

ExecuteProcess(BTN_CONECTAR,trtClick)

END

//variaveis globais
gsDados_lidos = ""
gnNumero_Port_Serie = 0
gnNumero_Mensagens = 0
gsMaquina_Estado = "DESLIGADO"
gbEtat_Port_Serie = False
gbEnviar_texto = False
gbZero_ini = False
gbEnviarUmaVez = False

EDT_AtividadeModem += "Fechando a porta do modem SMS!..."+CR
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - Fechando a porta do modem SMS!...")

gsDados_lidos = ""
EDT_AtividadeModem += "COMANDO ATZ0" + CR
sWrite(gnNumero_Port_Serie,"ATZ0"+Charact(26) + CR)
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - COMANDO ATZ0... Reiniciando Modem...")


Wait(3s,waitTimer)

sWrite(gnNumero_Port_Serie,"ATE0" + CR)
gsMaquina_Estado = "COMANDO_ATE0"
Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - COMANDO ATE0... Inicializando Modem...")



sClose(gnNumero_Port_Serie)

Trace( DateToString(DateSys(),"DD/MM/YYYY") + TimeToString(TimeSys(),"HH:MM:SS") +" - Fechando porta do Modem...")

gsMaquina_Estado = ""

Wait(5s,waitTimer)

//--------------------------------------------------------------------------------------------------------------------------------------------------------

// Summary: <specify the procedure action>
// Syntax:
// Evento_Validar ()
//
// Parameters:
// None
// Return value:
// None
//
// Example:
// <Specify a usage example>
//
PROCEDURE Evento_Validar()

OK is string = [
PRONTO PARA ENVIAR SMS
]

IF Contains(EDT_AtividadeModem,OK,IgnoreCase) = True

EDT_AtividadeModem += "Atividade USB Válida"+CR

IMG_SMS_ON.Visible = True

ELSE

EDT_AtividadeModem += "Remova a placa e conecte novamente na USB"+CR

IMG_SMS_ON.Visible = False

END

//-------------------------------------------------------------------------------------------------------------------------------------------

// Summary: <specify the procedure action>
// Syntax:
// Log_Sms_Avulso ()
//
// Parameters:
// None
// Return value:
// None
//
// Example:
// <Specify a usage example>
//
PROCEDURE Log_Sms_Avulso()

IF gnuserid = 0 THEN
gnuserid = 1
END

T008_SMS_Avulsos.T002_Usuario_ID = gnuserid
T008_SMS_Avulsos.T008_DataHoraEnvio = DateSys()+TimeSys()
T008_SMS_Avulsos.T008_TelefoneCliente = EDT_Telefone
T008_SMS_Avulsos.T008_Mensagem = EDT_AtividadeModem

//----------------------------------------------------------------------------------------------------------------------------------------------------

// Summary: <specify the procedure action>
// Syntax:
//Evento_Enviar_Sms_UmaVez ()
//
// Parameters:
// None
// Example:
// <Specify a usage example>
//
// Return value:
PROCEDURE Evento_Enviar_Sms_UmaVez()

IF EDT_Telefone ="" THEN
Info("FAVOR INFORMAR UM NUMERO")
RETURN
END

IF EDT_MSG_SMS = "" THEN
Info("FAVOR INFORMAR UM NUMERO")
RETURN
END

gnNumero_Mensagens = 0

gbEnviar_texto = True

gbEnviarUmaVez = True


//---------------------------------------------------------------------------------------------------------------VAR GLOBAIS DA JANELA

PROCEDURE MYWINDOW(gsCelular is string = "", gsMensagem is string = "")

//variaveis globais
gnID is 8-byte int = 0
gnQtdeCMGS is int = 0
gnRepetiu_ATE0 is int = 0
gnRepetiu_COMANDO_CMGS is int = 0
gnNumero_Mensagens is int = 0
gsAcao is string = ""
gsDados_lidos is string = ""
gbEtat_Port_Serie is boolean = False
gbEnviar_texto is boolean = False
gbZero_ini is boolean = False
gbEnviarUmaVez is boolean = False
gbExibeContador is boolean = False
gbEnviouSMS is boolean = False
gsMaquina_Estado is string = "DESLIGADO"

EDT_AtividadeModem = gsMaquina_Estado

CBOX_ExibeContador=True
gbExibeContador=True

IF gsCelular <> "" AND gsMensagem <> "" AND Val(EDT_PORTA_SERIAL) > 0 THEN

//gbEnviar_texto = True

gnNumero_Port_Serie = EDT_PORTA_SERIAL

EDT_Telefone = gsCelular

EDT_MSG_SMS = gsMensagem

ExecuteProcess(BTN_CONECTAR,trtClick)

Wait(5s,waitTimer)

ExecuteProcess(BTN_Enviar,trtClick)

Wait(10s,waitTimer)

sClose(gnNumero_Port_Serie)

Wait(3s,waitTimer)

EndProgram()

END

ConfigBusca("SMS_NUM_ANTERIOR")

//------------------------------------------------------------------------------------------------------------------------------------------------------GLOBAL INIT DO PROJETO

//global
HModifyStructure("*")
HCreationIfNotFound("*")
HOpenConnection(MyHfsqlCS_Local)
HChangeConnection("*",MyHfsqlCS_Local)

gnuserid is int = 0

gnNumero_Port_Serie is int = 0

gsRetorno is string = CommandLine()

IF Length(gsRetorno) > 10

//041999491800,"mensagem para o adriano boller via linha de comando"

param_celular is string = Middle(gsRetorno,1,13)

param_mensagem is string = Middle(gsRetorno,14,Length(gsRetorno)-1)

IF Length(gsRetorno) > 10 THEN

IF Open(WIN_SEND_SMS,param_celular, param_mensagem) = True THEN

Close()

END

END

END


DOAÇÕES PODEM SER FEITAS PARA PAYPAL: adrianoboller@gmail.com
Illustrations, copies d'écran
none
none
Avis des utilisateurs
(Pour noter la ressource, cliquez sur Ecrire un avis)
Aucun avis ou commentaire ? Soyez le premier !
A PROPOS
EVALUATION :
00Aucune évaluation
TELECHARGEMENTS :
37
MISE À JOUR :
18 juillet 2022
VERSION :
27
CONCERNE :
WINDEV
Version minimale : 27
TAILLE :
11,7 Mo