|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
[VB] COMM Control
Ciao ragazzi,
sto cercando di realizzare un applicazione che sfrutti la porta COM per dialogare tramite comandi AT col cellullare e sia in grado di Leggere e Scrivere la rubrica del cellulare... Sono a buon punto...nel senso che ho: 1) Realizzato Interfaccia Grafica 2) Realizzato Gestione della Lettura dal Cellulare della Rubrica 3) Realizzata Memorizzazione su File della Rubrica Letta 4) Realizzata Lettura da File della Rubrica precedentemente Salvata Ora quello che mi manda è la scrittua sul cellulare della rubrica...qui ho problemi non tanto per scrivere nel cellulare ma per gestire le pause tra una scrittura ed un altra...poichè se scrivo un solo elemento tutto funziona...se creo un ciclo FOR che mi scriva TUTTI i contatti in rubrica non va più nulla e questo perchè o: 1) Devo far passare un po di tempo tra una scrittura ed un altra (send delay) OPPURE 2) Devo andare a scrivere un nuovo elemento solo quando ho avuto la risposta di OK dal cellulare... solo che non riesco a gestire questa cosa....vi posto il mio codice..aiutatemi...: Codice:
Private Sub cmdSalvaCell_Click() Dim iRiga As Integer Dim stemp As String Dim iPausa As Long Dim iTemp As Long AttivaLettura = False If MSComm1.PortOpen = True Then For iRiga = 1 To Griglia.Rows - 2 iTemp = 0 stemp = "AT+MPBW=" & iRiga & ",""" _ & Griglia.TextMatrix(iRiga, 1) & ""","_ & Griglia.TextMatrix(iRiga, 2) & ",""" _ & Griglia.TextMatrix(iRiga, 3) & """," _ & Griglia.TextMatrix(iRiga, 4) MSComm1.Output = stemp + Chr(13) Next iRiga MsgBox "Memorizzazione Rubrica Completata", vbInformation, "Memorizzazione" End If End Sub Codice:
Private Sub MSComm1_OnComm() 'Dichiara la Variabile dove convervare i pacchetti dati Static sIncoming As String 'Quando Sto ricevendo dei dati faccio questo: If MSComm1.CommEvent = comEvReceive Then 'Aggiungo il carattere letto alla stringa sIncoming sIncoming = sIncoming & MSComm1.Input 'Dipende dal carattere con cui termina la nostra stringa If Right(sIncoming, 2) = vbCrLf Then 'Esclude il carattere CrLf dalla stringa sIncoming = Left(sIncoming, Len(sIncoming) - 2) 'Carico la procedura per elaborare i dati Letti Call Elabora(sIncoming) 'Pulisce la variabile sIncoming = "" End If End If End Sub
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
ho provato anche ad inserire un Timer che mi fa da temporizzatore in questo modo:
1) Nella procedura per scrivere la rubrica dopo aver inviato il comando al MsCOMM Controll ho posto a FALSE una variabile booleana 2) Riattivo la variabile booleana all'interno del Timer Ho ovviamente aggiunto del codice alla procedura per scrivere in modo che invii il comando SOLO se la variabile booleana è TRUE...ho quindi impostato il Timer ad un intervallo di 300ms... Solo che non funziona...va in loop continuo poichè durante il ciclo FOR il Timer "non si attiva"...nonstante precedentemente fosse attivo e funzionante...e quindi la booleana non cambia il suo stato e tutto si blocca.... Come posso fare? Help?
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Aug 2002
Città: Biella
Messaggi: 1882
|
Dipende dal tuo cellulare, nn so se ti risponde OK tutte le volte che scrivi, se lo fa allora devi aspettare l'OK, altrimenti puoi mettere un delay da codice vb che ti rappenti di qlc millisecondo il tuo trasferimento
Codice:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sleep 200 '0.2 secondi
__________________
"Analizzando e valutando ogni giorno tutte le idee, ho capito che spesso tutti sono convinti che una cosa sia impossibile, finchè arriva uno sprovveduto che non lo sa e la realizza!" A. Einstein |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
Ah...speravo fossi tu a rispondermi, in fin dei conti sei tu che mi hai insegnato quello che so del VB, cmq..
1) Si il cellulare ogni volta che scrivo mi restituisce l'OK o l'ERROR 2) Ho provato ad inserire lo Sleep solo che non so xkè l'applicazione funziona male...e cmq non mi scrive bene... Mentre non ho provato ad inserire anche il "Do Events" che mi permette di fare se associato allo Sleep? P.S. in rete ho trovato un programma "ATScan" che fa funzionare bene la cosa...ed in pratica aspetta la risposta di OK dal cellulare...come posso fare?
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Aug 2002
Città: Biella
Messaggi: 1882
|
Bhe allora devi tenere sotto controllo il buffer della com, così quando tu incomincia a scrivere lanci il timer (per esempio settato a 100) e monitori il buffer! Quando ti torna OK dal cell allora tu vai a vanti a scrivere nel cell!
cmq io la funzione spleep la metterei ugualmente e fare un ciclo for di questo tipo, poi dopo vedi tu se lo devi modificare! Codice:
For ... DoEvents . . . . Sleep 200 Next
__________________
"Analizzando e valutando ogni giorno tutte le idee, ho capito che spesso tutti sono convinti che una cosa sia impossibile, finchè arriva uno sprovveduto che non lo sa e la realizza!" A. Einstein |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
Quote:
Ma la risposta di OK non mi arriva fin nella procedura di cancellazione poichè il tutto avviene nell'evento del MsCOMM...oltre ad aggiungere lo: DoEvents ... Sleep(x) che mi consigli di fare?
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
Ok, allora o provato a rimanere sulla stessa strada di prima, ovvero col Timer ed ho però inserito il DoEvents subito dopo il FOR ed in questo modo il timer si attiva....ho provato con vari tempi di intervalli del Timer da 200, 250, 300, 400, 500 ma anche a 500ms, seppur avendo notevoli miglioramenti, non tutto viene scritto....su 129 voci della rubrica circa 10 non vengono scritte ed sempre una decina non vengono cancellate quando facciola cancellazione totale....
Non ci sto capendo più molto...help
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
...aiuto...
se volete vi allego i sorgenti del programmino...se può essere di aiuto a risolvere il problema...
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
Ok,
ho risolto il problema facendogli attendere l'OK del controllo MSCOMM, ovviamente ho aggiunto che nel caso la risposta sia "ERROR" faccio mostrare una MsgBox che indica la mancata scrittura di quell'elemento ![]()
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
...mi servirebbe una info...
come faccio a far rilevare automaticamente le porte com disponibili? tipo in HyperTerminal di WinXP, lui automaticamente rileva se la porta com 13 è disponibile e la visualizza nell'elenco...mentre se stacco l'apparecchio lui la toglie dalla lista.... come si fa?
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
nessuno sa aiutarmi?
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Aug 2002
Città: Biella
Messaggi: 1882
|
![]() ![]() ![]() ![]()
__________________
"Analizzando e valutando ogni giorno tutte le idee, ho capito che spesso tutti sono convinti che una cosa sia impossibile, finchè arriva uno sprovveduto che non lo sa e la realizza!" A. Einstein |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:51.