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