Controllo MSComm (comunicazioni) Il controllo MSComm (comunicazioni) fornisce all'applicazione funzioni per le comunicazioni seriali, consentendo la trasmissione e la ricezione di dati tramite una porta seriale. MSComm Il controllo MSComm consente di gestire le comunicazioni nei due modi seguenti: La gestione delle comunicazioni tramite eventi è molto efficace per il controllo delle interazioni tra porte seriali. In molte situazioni può essere utile ricevere un segnale nel momento in cui viene generato un determinato evento, quale l'arrivo di un carattere o una modifica sulle linee CD (Carrier Detect) o RTS (Request To Send). In tali casi, l'evento OnComm del controllo MSComm consente di intercettare e gestire gli eventi di comunicazione. L'evento OnComm consente inoltre di individuare e gestire gli errori di comunicazione. Per un elenco di tutti gli eventi e gli errori di comunicazione, vedere la proprietà CommEvent. Il polling di eventi ed errori può essere inoltre eseguito controllando il della proprietà CommEvent dopo l'esecuzione di ogni funzione critica del programma. Questo metodo è consigliato nel caso di applicazioni autonome e di dimensioni ridotte. Se,ad esempio, si sta scrivendo un semplice programma di composizione di numeri telefonici, potrebbe non essere necessario generare un evento dopo la ricezione di ciascun carattere, in quanto il solo carattere atteso è il segnale OK di risposta del modem. Ogni controllo MSComm utilizzato corrisponde a una porta seriale. Per accedere a più porte seriali con l'applicazione, sarà necessario utilizzare più controlli MSComm. L'indirizzo di porta e di interrupt può essere modificato tramite il Pannello di controllo di Windows. Per il controllo MSComm sono disponibili diverse proprietà importanti. Di seguito sono riportate le proprietà fondamentali. Proprietà CommPort Settings PortOpen Input Output Imposta e restituisce il numero della porta di comunicazioni. Imposta e restituisce in forma di stringa la velocità, la parità, i bit di dati e i bit di stop. Imposta e restituisce lo stato di una porta di comunicazioni, oltre ad attivare e disattivare la porta. Restituisce e rimuove caratteri dal buffer di ricezione. Scrive una stringa di caratteri nel buffer di trasmissione. 1
Evento OnComm L'evento OnComm viene generato a ogni modifica del della proprietà CommEvent, per indicare che è stato generato un evento di comunicazione oppure un errore. Private Sub _OnComm () La sintassi dell'evento OnComm è composta dalle seguenti parti: Espressione che definisce un dell'elenco "Si applica a". La proprietà CommEvent contiene il codice numerico dell'errore o dell'evento che ha generato l'evento OnComm. Si noti che l'impostazione delle proprietà RThreshold o SThreshold su 0 disattiva rispettivamente l'individuazione degli eventi comevreceive e comevsend. Messaggi di errore (controllo MSComm) Nella seguente tabella vengono elencati gli errori intercettabili del controllo MSComm. Costante Valore cominvalidpropertyvalue 380 Valore della proprietà non valido comsetnotsupported 383 Proprietà in sola lettura comgetnotsupported 394 Proprietà in sola lettura comportopen 8000 Operazione non valida quando la porta è aperta 8001 Il di timeout deve essere maggiore di zero comportinvalid 8002 Numero di porta non valido 8003 Proprietà disponibile solo in fase di esecuzione 8004 Proprietà di sola lettura in fase di esecuzione comportalreadyopen 8005 Porta già aperta 8006 L'identificatore di periferica non è valido o non è supportato 8007 La velocità baud della periferica non è supportata 2
8008 Le dimensioni in byte specificate non sono valide 8009 I parametri predefiniti sono errati 8010 L'hardware non è disponibile (bloccato da un'altra periferica) 8011 La funzione non può assegnare le code comnoopen 8012 La periferica non è aperta 8013 La periferica è già aperta 8014 Non è possibile attivare la notifica di comunicazione comsetcommstatefailed 8015 Non è possibile impostare lo stato di comunicazione 8016 Non è possibile impostare la maschera degli eventi di comunicazione comportnotopen 8018 Operazione valida solo quando la porta è aperta 8019 Periferica occupata comreaderror 8020 Errore di lettura dalla periferica di comunicazione comdcberror 8021 Errore interno durante il recupero del blocco di controllo periferica per la porta Costanti del controllo MSComm Costanti di Handshaking Costante Valore comnone 0 Nessuna sincronia. comxonxoff 1 Sincronia XON/XOFF. comrts 2 Sincronia RTS/CTS (Request To Send/Clear To Send). comrtsxonxoff 3 Entrambe le sincronie Request To Send e XON/XOFF. Costanti di OnComm Costante Valore comevsend 1 Evento di invio. comevreceive 2 Evento di ricezione. comevcts 3 Modifica nella linea CTS. comevdsr 4 Modifica nella linea DSR. 3
comevcd 5 Modifica nella linea CD. comevring 6 Individuato segnale telefonico. comeveof 7 Fine file. Costanti di errore Costante Valore comeventbreak 1001 Ricezione di un segnale di interruzione. comeventframe 1004 Errore di frame. comeventoverrun 1006 Overrun della porta. comeventrxover 1008 Overflow del buffer di ricezione. comeventrxparity 1009 Errore di parità. comeventtxfull 1010 Buffer di trasmissione pieno. comeventdcb 1011 Errore imprevisto durante il recupero del DCB (Device Control Block) della porta. Costanti di InputMode Costante Valore cominputmodetext 0 (Predefinita) I dati vengono recuperati con la proprietà Input come testo. cominputmodebinary 1 I dati vengono recuperati con la proprietà Input come dati binari. 4
Proprietà CommEvent Restituisce l'evento o l'errore di comunicazione più recente. La proprietà non è disponibile in fase di progettazione ed è di sola lettura in fase di esecuzione..commevent La sintassi della proprietà CommEvent è composta dalle seguenti parti: Espressione che definisce un dell'elenco "Si applica a". L'evento OnComm viene generato in corrispondenza di ogni evento o errore di comunicazione e il codice corrispondente viene memorizzato nella proprietà CommEvent. Per determinare l'errore o l'evento che ha generato l'evento OnComm, sarà pertanto necessario fare riferimento alla proprietà CommEvent. Il codice restituito dalla proprietà CommEvent può essere uno dei valori indicati nella tabella seguente per gli errori o gli eventi di comunicazione. Le costanti corrispondenti sono inoltre disponibili nella libreria degli oggetti di questo controllo. Le possibili impostazioni degli errori di comunicazione sono: Costante Valore comeventbreak 1001 Ricezione di un segnale di interruzione. comeventframe 1004 Errore di frame. L'hardware ha individuato un errore di frame. comeventoverrun 1006 Overrun della porta. L'hardware non ha letto un carattere prima dell'arrivo del successivo e il carattere è andato perduto. comeventrxover 1008 Overflow del buffer di ricezione. Spazio esaurito nel buffer di ricezione. comeventrxparity 1009 Errore di parità. È stato rilevato un errore di parità. comeventtxfull 1010 Buffer di trasmissione pieno. Spazio esaurito nel buffer di trasmissione durante il tentativo di inserimento di un carattere. comeventdcb 1011 Errore imprevisto durante il recupero del DCB (Device Control Block) della porta. Le possibili impostazioni degli eventi di comunicazione sono: 5
Costante Valore comevsend 1 Nel buffer di trasmissione è presente un numero di caratteri inferiore a quello definito dalla proprietà Sthreshold. comevreceive 2 Numero di caratteri Rthreshold ricevuti. Questo evento viene generato fino a quando non si utilizza la proprietà Input per rimuovere i dati dal buffer di ricezione. comevcts 3 Modifica nella linea CTS (Clear To Send). comevdsr 4 Modifica nella linea DSR (Data Set Ready). Questo evento viene generato solo quando DSR cambia da 1 a 0. comevcd 5 Modifica nella linea CD (Carrier Detect). comevring 6 Individuato segnale telefonico. È possibile che alcuni UART (universal asynchronous receiver-transmitters) non supportino questo evento. comeveof 7 Ricevuto carattere indicatore di fine file (carattere ASCII 26). Proprietà CommPort Imposta e restituisce il numero della porta di comunicazione..commport[ = ] La sintassi della proprietà CommPort è composta dalle seguenti parti: Espressione che definisce un dell'elenco "Si applica a". Valore intero che specifica il numero della porta. In fase di progettazione, è possibile impostare su qualsiasi numero compreso tra 1 e 16. L'impostazione predefinita è 1. Se la porta non esiste, quando si tenta di aprirla con la proprietà PortOpen, il controllo MSComm restituirà l'errore 68 (Periferica non disponibile) Avviso La proprietà CommPort deve essere impostata prima dell'apertura della porta. 6
Proprietà InBufferCount Restituisce il numero di caratteri in attesa nel buffer di ricezione. Non disponibile in fase di progettazione..inbuffercount[ = ] La sintassi della proprietà InBufferCount è composta dalle seguenti parti: Espressione che definisce un dell'elenco "Si applica a" Intero che specifica il numero di caratteri in attesa nel buffer di ricezione. InBufferCount indica il numero di caratteri ricevuti dal modem e memorizzati temporaneamente nel buffer di ricezione. È possibile svuotare il buffer di ricezione impostando la proprietà InBufferCount su 0. Nota Non confondere questa proprietà con la proprietà InBufferSize, che indica le dimensioni totali del buffer di ricezione. Tipi di dati Proprietà InBufferSize Imposta e restituisce le dimensioni in byte del buffer di ricezione..inbuffersize[ = ] La sintassi della proprietà InBufferSize è composta dalle seguenti parti: Espressione che definisce un dell'elenco "Si applica a" Intero che specifica le dimensioni del buffer di ricezione in byte. 7
InBufferSize indica le dimensioni totali del buffer di ricezione. Le dimensioni predefinite sono 1024 byte. Non confondere questa proprietà con la proprietà InBufferCount, che indica il numero di caratteri in attesa nel buffer di ricezione. Nota Maggiore è la dimensione del buffer di ricezione e minore sarà la memoria disponibile per l'esecuzione dell'applicazione. Se tuttavia il buffer è troppo piccolo e non viene utilizzata la sincronia, aumenta il rischio di overflow. Si consiglia di impostare inizialmente il buffer su 1024 byte. Se viene generato un errore di overflow, aumentare la dimensione del buffer in modo da poter gestire la velocità di trasmissione dell'applicazione. Proprietà Input Restituisce e rimuove un flusso di dati dal buffer di ricezione. La proprietà non è disponibile in fase di progettazione ed è di sola lettura in fase di esecuzione..input La sintassi della proprietà Input è composta dalle seguenti parti: Espressione che definisce un dell'elenco "Si applica a". La proprietà InputLen determina il numero di caratteri che vengono letti dalla proprietà Input. Se InputLen è impostata su 0 la proprietà Input leggerà l'intero contenuto del buffer di ricezione. La proprietà InputMode determina il tipo di dati che viene letto dalla proprietà Input. Se InputMode è impostata su cominputmodetext la proprietà Input restituisce dati di testo in una variabile Variant. Se InputMode è cominputmodebinary, la proprietà Input restituisce dati binari in una matrice di byte in una variabile Variant. Variant Proprietà InputLen Imposta e restituisce il numero di caratteri che la proprietà Input legge dal buffer di ricezione. 8
.InputLen [ = ] La sintassi della proprietà InputLen è composta dalle seguenti parti: Espressione che definisce un dell'elenco "Si applica a". Intero che indica il numero di caratteri che la proprietà Input legge dal buffer di ricezione. Il predefinito della proprietà InputLen è 0. Se InputLen è impostata su 0, quando si utilizza tale proprietà il controllo MSComm legge l'intero contenuto del buffer di ricezione. Quando i caratteri indicati in InputLen non sono disponibili nel buffer di ricezione, la proprietà Input restituisce una stringa di lunghezza zero (""). Prima di utilizzare Input, è possibile verificare l'impostazione della proprietà InBufferCount per determinare se è presente il numero di caratteri richiesto. Questa proprietà è utile quando si leggono dati da un computer il cui output è formattato in blocchi di dati a lunghezza fissa. Proprietà OutBufferCount Restituisce il numero di caratteri in attesa nel buffer di trasmissione. Può essere inoltre utilizzata per svuotare il buffer di trasmissione. La proprietà non è disponibile in fase di progettazione..outbuffercount [ = ] La sintassi della proprietà OutBufferCount è composta dalle seguenti parti: Espressione che definisce un dell'elenco "Si applica a". Intero che indica il numero di caratteri in attesa nel buffer di trasmissione. Per svuotare il buffer di trasmissione, impostare la proprietà OutBufferCount su 0. Nota Non confondere la proprietà OutBufferCount con la proprietà OutBufferSize, che indica le dimensioni totali del buffer di trasmissione. 9
Proprietà OutBufferSize Imposta e restituisce le dimensioni totali in byte del buffer di trasmissione..outbuffersize [ = ] La sintassi della proprietà OutBufferSize è composta dalle seguenti parti: Espressione che definisce un dell'elenco "Si applica a". Intero che specifica le dimensioni del buffer di trasmissione. OutBufferSize restituisce il numero di caratteri in attesa nel buffer di trasmissione. La dimensione predefinita è di 512 byte. Non confondere la proprietà OutBufferSize con la proprietà OutBufferCount che restituisce il numero di byte in attesa nel buffer di trasmissione. Nota Maggiore è la dimensione del buffer di trasmissione, minore sarà la memoria disponibile per l'esecuzione dell'applicazione. Se tuttavia il buffer è troppo piccolo e non viene utilizzata la sincronia, aumenta il rischio di overflow. Si consiglia di impostare inizialmente il buffer su 512 byte. Se viene generato un errore di overflow, aumentare la dimensione del buffer in modo da poter gestire la velocità di trasmissione dell'applicazione. 10
Proprietà Output Scrive un flusso di dati nel buffer di trasmissione. La proprietà non è disponibile in fase di progettazione ed è di sola lettura in fase di esecuzione..output [ = ] La sintassi della proprietà Output è composta dalle seguenti parti: Espressione che definisce un obggetto dell'elenco "Si applica a". Stringa di caratteri da scrivere nel buffer di trasmissione. La proprietà Output consente di trasmettere dati di testo o dati binari. Per inviare dati di testo con la proprietà Output è necessario specificare una variabile Variant che includa una stringa. Per inviare dati binari è necessario passare alla proprietà Output una variabile Variant contenente una matrice di byte. Le stringhe ANSI vengono in genere inviate come dati di testo. I dati che includono caratteri di controllo incorporati, quali i caratteri Null, vengono inviati come dati binari. Variant Proprietà PortOpen Imposta e restituisce lo stato della porta di comunicazione (aperta o chiusa). La proprietà non è disponibile in fase di progettazione..portopen [ = ] La sintassi della proprietà PortOpen è composta dalle seguenti parti: Espressione che definisce un dell'elenco "Si applica a". Espressione booleana che indica lo stato della porta di comunicazione. Impostazioni 11
Le possibili impostazioni di sono: Impostazione True False La porta è aperta. La porta è chiusa. L'impostazione della proprietà PortOpen su True determina l'apertura della porta. L'impostazione su False ne determina la chiusura e svuota i buffer di ricezione e trasmissione. Il controllo MSComm chiude automaticamente la porta seriale quando l'applicazione viene chiusa. Prima di aprire la porta, verificare che la proprietà CommPort sia impostata su un numero di porta valido. Se la proprietà CommPort è impostata su un numero di porta non valido, quando si tenta l'apertura della porta il controllo MSComm genera l'errore 68 (Periferica non disponibile). La porta seriale deve inoltre supportare i valori correnti della proprietà Settings. Se la proprietà Settings contiene impostazioni di comunicazione non supportate a livello hardware, è possibile che il funzionamento dell'hardware non sia corretto. Se le proprietà DTREnable o RTSEnable vengono impostate su True prima dell'apertura della porta, tali proprietà verranno impostate su False alla chiusura della porta. In caso contrario, le linee DTR e RTS manterranno lo stato precedente. Boolean Proprietà Settings Imposta e restituisce i parametri di velocità di trasmissione, parità, bit di dati e bit di stop..settings [ = ] La sintassi della proprietà Settings è composta dalle seguenti parti: Espressione che definisce un dell'elenco "Si applica a". Espressione stringa che indica le impostazioni della porta di comunicazione, come descritto di seguito. 12
Se non è valido quando la porta viene aperta, il controllo MSComm genera l'errore 380 (Valore di proprietà non valido). L'argomento prevede quattro impostazioni, con il seguente formato: "BBBB,P,D,S" Dove BBBB è la velocità di trasmissione, P è la parità, D è il numero di bit di dati e S il numero di bit di stop. Il predefinito di è: "9600,N,8,1" Nella seguente tabella sono elencate le velocità di trasmissione valide: Impostazione 110 300 600 1200 2400 9600 (impostazione predefinita) 14400 19200 28800 38400 56000 128000 256000 Nella seguente tabella sono elencati i valori di parità validi: Impostazione E M N O S Pari Segno (Predefinita). Nessuna. Dispari Spazio 13
Nella seguente tabella sono elencati i valori di bit di dati validi: Impostazione 4 5 6 7 8 (predefinita) Nella seguente tabella sono elencati i valori di bit di stop validi: Impostazione 1 (Predefinita) 1.5 2 String Proprietà RThreshold Imposta e restituisce il numero di caratteri che dovranno essere ricevuti prima che il controllo MSComm imposti la proprietà CommEvent su comevreceive e generi l'evento OnComm..Rthreshold [ = ] La sintassi della proprietà Rthreshold è composta dalle seguenti parti: Espressione che definisce un dell'elenco "Si applica a". Intero che indica il numero di caratteri che devono essere ricevuti prima che venga generato l'evento OnComm. Se la proprietà RThreshold è impostata su 0 (impostazione predefinita) verrà disattivata la generazione dell'evento OnComm alla ricezione dei caratteri. 14
Se la proprietà RThreshold viene, ad esempio, impostata su 1, il controllo MSComm genererà l'evento OnComm ogni volta che un singolo carattere viene inserito nel buffer di ricezione. Proprietà SThreshold Imposta e restituisce il numero minimo di caratteri consentito nel buffer di trasmissione prima che il controllo MSComm imposti la proprietà CommEvent su comevsend e generi l'evento OnComm..SThreshold [ = ] La sintassi della proprietà SThreshold è composta dalle seguenti parti: Espressione che definisce un dell'elenco "Si applica a". Intero che indica il numero minimo di caratteri consentito nel buffer di trasmissione prima che venga generato l'evento OnComm. Se la proprietà SThreshold viene impostata su 0 (impostazione predefinita), verrà disattivata la generazione dell'evento OnComm per eventi di transmissione dati. Se la proprietà SThreshold viene impostata su 1, il controllo MSComm genera l'evento OnComm quando il buffer di trasmissione è completamente vuoto. Se il numero di caratteri nel buffer di trasmissione è inferiore al, la proprietà CommEvent viene impostata su comevsend e viene generato l'evento OnComm. L'evento comevsend viene generato una sola volta quando il numero di caratteri supera il di SThreshold. Se, ad esempio, SThreshold è uguale a cinque, l'evento comevsend verrà generato soltanto quando il numero di caratteri nella coda di output passa da cinque a quattro. Se il numero dei caratteri nella coda di output non supera mai quello indicato da SThreshold, l'evento non verrà mai generato. 15
16