Chiavi USB per la protezione del SW
Scheda Rele' interfacciabile a PC tramite ethernet web server
Scheda Rele' interfacciabile a PC tramite USB simile ad un PLC
Display LCD interfacciabili a PC tramite USB o Ethernet
Scheda Ethernet con VB6E' anche disponibile una versione della scheda pilotata dall'ethernet Clicca Qui Scheda EthernetClicca qui per scaricare il codice sorgente in VB6 per pilotare la scheda ethernet |
Per pilotare la scheda rele', la scheda display o la chiave USB per la protezione del software occorre saper gestire una porta seriale RS-232 in quanto la porta USB verra' considerata a tutti gli effetti come una porta seriale virtuale, in pratica andrete a inviare i comandi sulla COM3 invece che sulla COM1
Con Visual Basic viene fornito un componente per la gestione della seriale, l' MSCOMM.OCX.
L'MSCOMM dispone di diverse proprietà, di un solo evento ( OnComm() ) e nessun metodo.
Iniziamo col creare un nuovo progetto, rendiamo disponibile il controllo MSCOMM andando sul menù
Progetto->Componenti, e selezionando "Microsoft comm control x.x".
Aggiungete quindi il controllo, ora presente nella barra degli strumenti, nel form (Form1) dando vita al controllo
MSComm1.
Per questioni didattiche preferisco configurare il controllo a run-time, quindi nell'evento Form_Load() inserite
quanto segue:
MSComm1.CommPort = 1 ' Selezioniamo la COM1
MSComm1.Settings = "115200,n,8,1" ' Le impostazioni della seriale
MSComm1.PortOpen = True ' Apriamo la porta.
Impostando la proprietà PortOpen a True si richiede al sistema il permesso d' utilizzo
della porta scelta (COM1). Se la porta è disponibile il sistema operativo la assegnerà a noi, diversamente
se la porta è già utilizzata da un'altro processo verrà generato un errore intercettabile
con l'istruzione ON ERROR.
Per chiudere la porta e rilasciarne il controllo, è sufficiente impostare PortOpen a False.
A questo punto siamo già in grado di inviare dati sulla seriale, per esempio un classico "Ciao Mondo".
A questo punto avete tutto il necessario per comunicare con le schede elettroniche, bastera' inviare sulla seriale virtuale il comando corretto. Per essere sicuri che il comando e' stato accettato e interpretato correttamente dalla scheda e' consigliabile anche controllare che la risposta dalla scheda sia conforme al protocollo.MSComm1.Output = "Ciao Mondo"
Il controllo MSCOMM è asincrono, ossia non occorre che il programma dedichi tutto il suo tempo a controllare
ciò che accade sulla seriale, è il controllo MSCOMM che si preoccupa di informare il programma di
ciò che accade tramite il richiamo dell'evento OnComm() e l'impostazione della proprietà CommEvent.
Quindi l'intera intelligenza della comunicazione è da implementare nell'evento OnComm().
Quando viene richiamato l'evento OnComm(), Nella proprietà CommEvents è riportato l'evento
accaduto. Esso può assumere uno dei seguenti valori (vedi l'help in linea del VB):
Costanti relative agli errori |
||
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. |
Costanti relative agli eventi di seriale |
||
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). |
Non è comunque indispensabile la consultazione della proprietà CommEvent che personalmente
uso solo nelle comunicazioni seriali complesse; vediamo dunque come implementare una semplice ricezione dati dalla
seriale.
Come prima cosa è necessario dire al controllo MSCOMM che desideriamo essere informati della ricezione
dei caratteri, impostando la proprietà Rthreshold a 1. Quindi l'apertura della porta la modifichiamo
come segue.
Private Sub Form_Load()
MSComm1.CommPort = 1 ' Selezioniamo la COM1
MSComm1.Settings = "9600,n,8,1" ' Le impostazioni della seriale
MSComm1.RThreshold = 1 ' voglio essere informato della ricezione di ogni singolo carattere
MSComm1.PortOpen = True ' Apriamo la porta.
End Sub
Aggiungete al Form un controllo testo Text1 (fatelo bello grande) ed impostate la proprietà MultiLine
a True.
A questo punto aggiungete il seguente codice:
Private Sub MSComm1_OnComm()
Dim Rx$
Rx$ = MSComm1.Input ' Leggo il contenuto del buffer di ricezione (e svuoto .Input)
If Len(Rx$) Then ' Se ho ricevuto qualcosa lo scrivo nella TextBox
Text1.Text = Text1.Text & Rx$
End If
End Sub
Nella propriatà Input vengono riportati tutti i caratteri ricevuti. è da notare che la
proprietà Input la si può leggere una sola volta in quanto dopo averla letta (ed in
questo caso assegnata alla variabile Rx$) viene automaticamente azzerata (="").
Per esempio il seguente codice NON FUNZIONA!
If Len(MSComm1.Input) Then
Text1.Text = Text1.Text & MSComm1.Input
perche l' IF svuota il contenuto di Input ed alla text box viene appesa una stringa vuota.
Impostando la proprietà Rthreshold a 1 imponiamo al controllo MSCOMM di richiamare l'evento OnComm()
alla ricezione di ogni singolo carattere. In ogni caso, visto che la segnalazione non viene data in Interrupt-Time,
lo scatenarsi dell'evento OnComm() può avvenire in ritardo se il PC è impegnato in qualche
elaborazione, ed è quindi molto probabile che nella proprietà Input sia contenuto più
di un carattere.
Per poter anche trasmettere, aggiungete il seguente codice:
Private Sub
Text1_KeyPress(KeyAscii As Integer)
MSComm1.Output = Chr$(KeyAscii)
End Sub
Abbiamo così costruito con la TextBox un semplice terminale ASCII.
Il controllo MSCOMM ha un difetto sull'evento OnComm() riscontrabile quando si sta facendo del
DEBUG del proprio codice. Se ad esempio si mette in pausa l'esecuzione del programma, e durante l'attesa giungono
dei caratteri alla seriale, al riavvio del programma non verrà generato alcun evento per i caratteri già
ricevuti.
Una scappatoia per ovviare al problema è quella di aggiungere un TIMER, con una cadenza dell'ordine
dei 250-400 mSec,
che si limita a richiamare la funzione MSComm1_OnComm(), compensando così alla
mancata generazione (in debug) dell'evento OnComm()
Esempio:
Private Sub Timer1_Timer()
Call MSComm1_OnComm
End Function
Per ulteriori informazioni potete contattare un tecnico al Tel 0331 730164 o Cell 347-6651065
Il protocollo di comunicazione e' semplicissimo, nell'esempio si nota come basta inviare sulla seriale il valore 0x30 (che corrisponde al tasto 0 della tastiera) per fare accendere il led, il protocollo prevede anche una risposta per dare evidenza che il comando e' stato ricevuto e accettato, infatti la scheda risponde inviando sulla seriale virtuale il carattere A
In fondo alla pagina troverete il protocollo di comunicazione completo, grazie al quale potrete attivare o disattivare i rele' presenti sulla scheda, accendere o spegnere i due led presenti sulla scheda, leggere lo stato dei pulsanti e leggere il valore dei 4 ingressi presenti sulla scheda.
La scheda puo' funzionare sia connessa al computer, ed e' autoalimentata dal BUS USB e quindi non occorrono alimentazioni esterne, ma puo' anche funzionare in modalita' "stand alone" cioe' scollegata dal PC, cioe' come un vero e proprio PLC, se si sceglie di far funzionare la scheda in modalita' "stand alone" occorre prima programmare e memorizzare quale dovra' essere il comportamento della scheda, proprio come si fa con i PLC, che vanno prima programmati, la forte limitazione della scheda e' che come PLC ha un set limitato di possibili comportamenti, ad esempio si puo' programmare la scheda affinche' il rele' 1 si attivi e disattivi seguendo l'ingresso 1 oppure che il rele' 1 si attivi e disattivi seguendo l'ingresso 1 negato e cosi' via, se si sceglie di far lavorare la scheda in modalita' "stand alone" le possibili configurazioni sono limitate e sono presenti nel protocollo di comunicazione in fondo alla pagina.
La scheda puo' essere utilizzata per sostituire un PLC in quanto e' dotata di 4 ingressi e di 4 rele' (fino a 8 ingressi e 8 uscite per ogni scheda).
E' disponibile un programma demo completo di codici sorgenti scritto in VB.NET nel quale si da un esempio di come comandare la scheda. Scarica il programma completo di codice sorgente: CLICCA QUI
Oltre al codice sorgente e ad un programma gia' compilato c'e' un file .inf che non e' nient'altro che il driver che viene richiesto al momento della prima connessione della scheda, infatti quando si connette la scheda la prima volta al PC l'USB riconosce la presenza del nuovo hardware e ne richiede il driver. Bastera' indicare il percorso del file .inf
Prima di procedere con l'acquisto si consiglia di verificare la disponibilita' del materiale inviando un'email |
Modello | Descrizione | Costo | Spese spedizione |
Schede USB+WiFi |
SNT337 USB+WiFi 2R 0IN | 2 rele' di potenza 0 ingressi | 61 euro | 13 euro |
SNT337 USB+WiFi 4R 0IN | 4 rele' di potenza 0 ingressi | 66 euro | 13 euro |
SNT337 USB+WiFi 4R 4IN | 4 rele' di potenza 4 ingressi | 81 euro | 13 euro |
SNT319 USB+WiFi 8R 0IN | 8 rele' di potenza 0 ingressi | 84 euro | 13 euro |
SNT319 USB+WiFi 8R 4IN | 8 rele' di potenza 4 ingressi | 99 euro | 13 euro |
SNT319 USB+WiFi 8R 8IN | 8 rele' di potenza 8 ingressi | 114 euro | 13 euro |
Scheda Ethernet+WiFi Rele' potenza (230V 10A) |
SNT335 ETH+WiFi 2R 0IN | 2 rele' di potenza | 105 euro | 13 euro |
SNT335 ETH+WiFi 2R 2IN | 2 rele' di potenza 2 ingressi | 110 euro | 13 euro |
SNT335 ETH+WiFi 4R 0IN | 4 rele' di potenza | 115 euro | 13 euro |
SNT335 ETH+WiFi 4R 4IN | 4 rele' di potenza 4 ingressi | 130 euro | 13 euro |
SNT319 ETH+WiFi 8R 0IN | 8 rele' di potenza 0 ingressi | 130 euro | 13 euro |
SNT319 ETH+WiFi 8R 4IN | 8 rele' di potenza 4 ingressi | 145 euro | 13 euro |
SNT319 ETH+WiFi 8R 8IN | 8 rele' di potenza 8 ingressi | 160 euro | 13 euro |
SNT319 ETH+WiFi 0R ANALOG IN | 0 rele' ingressi analogici | 125 euro | 13 euro | SNT319 ETH+WiFi 1R ANALOG IN | 1 rele' di potenza ingressi analogici | 130 euro | 13 euro |
SNT319 ETH+WiFi 2R ANALOG IN | 2 rele' di potenza ingressi analogici | 135 euro | 13 euro |
SNT319 ETH+WiFi 4R ANALOG IN | 4 rele' di potenza ingressi analogici | 145 euro | 13 euro |
SNT319 ETH+WiFi 8R ANALOG IN | 8 rele' di potenza ingressi analogici | 160 euro | 13 euro |
SNT335 ETH+WiFi 2R 2RFID | 2 rele' di potenza 2 ingressi 2 RFID | 120 euro | 13 euro |
SNT331 ETH+WiFi 4R 4IN | 4 rele' di potenza 4 ingressi | 130 euro | 13 euro |
SNT319-320 ETH+WiFi 16R 0IN | 16 rele' di potenza 0 ingressi | 165 euro | 13 euro |
SNT319-320 ETH+WiFi 16R 16IN | 16 rele' di potenza 16 ingressi | 235 euro | 13 euro |
Le schede possono anche essere montate anche su guida DIN (che e' un piccolo supporto di plastica per agganciare la scheda ad una barra DIN), specificare in fase d'ordine, se occorre anche l'aggancio su guida DIN, in quel caso occorre aggiungere il costo del contenitore
Protocollo di comunicazione per scheda seriale virtuale per SNT084
Invio 0 = 0x30 = 48 => Accende led 1 e risponde "A"
Invio 1 = 0x31 = 49 => risponde dando lo stato degli ingressi es "A01010101Z"
Invio 2 = 0x32 = 50 => Spegne led 1 e risponde "B"
Invio 3 = 0x33 = 51 => Spegne tutti i relay e risponde "W"
Invio 5 = 0x35 = 53 => risponde dando lo stato latchato degli ingressi es "A01010101Z"
Invio 6 = 0x36 = 54 => Accende Rele' 1 e risponde "I"
Invio 7 = 0x37 = 55 => Spegne Rele' 1 e risponde "L"
Invio 8 = 0x38 = 56 => Accende Rele' 2 e risponde "M"
Invio 9 = 0x39 = 57 => Spegne Rele' 2 e risponde "N"
Invio a = 0x61 = 97 => Accende Relay 3 e risponde "O"
Invio b = 0x62 = 98 => Spegne Relay 3 e risponde "P"
Invio c = 0x63 = 99 => Accende Relay 4 e risponde "Q"
Invio d = 0x64 = 100 => Spegne Relay 4 e risponde "R"
Invio e = 0x65 = 101 => se input 1 e' alto risponde "S" altrimenti "T"
Invio f = 0x66 = 102 => se input 2 e' alto risponde "U" altrimenti "V"
Invio g = 0x67 = 103 => se input 3 e' alto risponde "W" altrimenti "Y"
Invio h = 0x68 = 104 => se input 4 e' alto risponde "J" altrimenti "K"
Invio i = 0x69 = 105 => se input 5 e' alto risponde "Z" altrimenti "a"
Invio l = 0x6C = 108 => se input 6 e' alto risponde "b" altrimenti "c"
Invio m = 0x6D = 109 => se input 7 e' alto risponde "d" altrimenti "e"
Invio n = 0x6E = 110 => se input 8 e' alto risponde "f" altrimenti "g"
Invio o = 0x6F = 111 => Accende Rele' 5 e risponde "H"
Invio p = 0x70 = 112 => Spegne Rele' 5 e risponde "B"
Invio q = 0x71 = 113 => Accende Rele' 6 e risponde "D"
Invio r = 0x72 = 114 => Spegne Rele' 6 e risponde "E"
Invio s = 0x73 = 115 => Accende Rele' 7 e risponde "F"
Invio t = 0x74 = 116 => Spegne Rele' 7 e risponde "G"
Invio u = 0x75 = 117 => Accende Rele' 8 e risponde "X"
Invio v = 0x76 = 118 => Spegne Rele' 8 e risponde "m"
Invio A,B,C,D,E,F,G,H => Accende Rele' x e lo spegne dopo un secondo ( esempio funzione apri-porta )
Invio L,M,N,O,P,Q,R,S => riponde dicendo se il rele' x e' acceso o spento
Invio T => accende due rele' contemporaneamente
Invio U => accende tre rele' contemporaneamente
Invio V => spegne due rele' contemporaneamente
Invio W => spegne tre rele' contemporaneamente
Invio k => Legge numero memorizzato in eeprom
Invio x,y,X,Y,4,K,Z,j,|,! => scrive numero in eeprom
Invio " => Legge numero memorizzato in eeprom
Invio =,<,J,?,&,(,),[,],{ => scrive numero in eeprom
Invio * => Accende tutti i rele' contemporaneamente
Invio § => risponde con la data e l'ora di compilazione del firmware (10Lug2011 14:27:01 per SNT035; 10Lug2011 16:04:20 per SNT084 ; 10Lug2011 17:57:43 per SNT035 o SNT037 display )
E' possibile anche leggere il numero di volte che la scheda e' stata accesa
Invio w = 0x77 = 119 => Legge il numero di riavii: Parte bassa
Invio z = 0x7A = 122 => Legge il numero di riavii: Parte alta
Clicca Qui per scaricare il programma per pilotare fino a 8 rele'
Clicca Qui per scaricare un'immagine, in scala 1:1 della scheda a 8 rele'
Protocollo di comunicazione per scheda seriale virtuale per SNT037 SNT035
Invio 0 = 0x30 = 48 => Accende led 1 e risponde "A"
Invio 1 = 0x31 = 49 => Accende led 2 e risponde "B"
Invio 2 = 0x32 = 50 => Spegne led 1 e risponde "C"
Invio 3 = 0x33 = 51 => Spegne led 2 e risponde "D"
Invio 4 = 0x34 = 52 => Se pulsante 1 e' premuto risponde "E" altrimenti risponde "F"
Invio 5 = 0x35 = 53 => Se pulsante 2 e' premuto risponde "G" altrimenti risponde "H"
Invio 6 = 0x36 = 54 => Accende Rele' 1 e risponde "I"
Invio 7 = 0x37 = 55 => Spegne Rele' 1 e risponde "L"
Invio 8 = 0x38 = 56 => Accende Rele' 2 e risponde "M"
Invio 9 = 0x39 = 57 => Spegne Rele' 2 e risponde "N"
Invio a = 0x61 = 97 => Accende Rele' 3 e risponde "O"
Invio b = 0x62 = 98 => Spegne Rele' 3 e risponde "P"
Invio c = 0x63 = 99 => Accende Rele' 4 e risponde "Q"
Invio d = 0x64 = 100 => Spegne Rele' 4 e risponde "R"
Invio e = 0x65 = 101 => Se ingresso 1 e' alto risponde "S" altrimenti risponde "T"
Invio f = 0x66 = 102 => Se ingresso 2 e' alto risponde "U" altrimenti risponde "V"
Invio g = 0x67 = 103 => Se ingresso 3 e' alto risponde "W" altrimenti risponde "Y"
Invio h = 0x68 = 104 => Se ingresso 4 e' alto risponde "J" altrimenti risponde "K"
Invio i = 0x69 = 105 => Leggi quante volte hai riavviato la scheda (parte alta)
Invio l = 0x6C = 108 => Leggi quante volte hai riavviato la scheda (parte bassa)
Invio m = 0x6D = 119 => Azzera il numero di riavvii e risponde con 0x71
Leggi l'articolo sulla rivista IoProgrammo numero 136 (Marzo 2009) |