MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Sistema di controllo remoto “REMOTECONTROL” Di Marco Massari Istituto Salesiano Beata Vergine di San Luca Via Jacopo della Quercia, 1 Bologna 1 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” INDICE 1. Introduzione p.3 2. Descrizione sistema p.5 - Parte software Programmazione in Visual Basic .Net p.5 Gestione parallela p.5 Rete di collegamento p.6 Applicazione Server p.7 Applicazione Client p.17 - Parte hardware La parallela LPT p.31 Progettazione del circuito p.40 Modulo uscite p.42 Modulo ingressi p.49 Modulo startcommand p.54 Modulo interfaccia p.60 Circuito protezione sovraccarichi p.64 Parte hardware completa p.67 3. Possibili applicazioni del progetto p.70 4. Sperimentazione con PC DIO 96 p.73 5. Evoluzioni future p.75 6. Bibliografia e ringraziamenti p.76 2 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” 1. Introduzione Il sistema Remotecontrol permette di controllare a distanza otto diversi carichi elettrici e lo stato di 5 ingressi digitali attraverso la porta parallela di un computer, oppure attraverso una scheda di input/output dedicata. Il sistema è composto fondamentalmente da due computer con sistema operativo Windows collegati tra di loro attraverso il protocollo TCP/IP. Questi due computer possono essere definiti come: - SERVER Il computer server è quello che permette di usufruire di un determinato servizio attraverso il client. In questo sistema il server è il PC in cui risiede il circuito collegato alla parallela e l’applicazione software server di Remotecontrol. - CLIENT Il computer client è un sistema PC collegato a distanza con il server via protocollo TCP/IP, rete locale o internet, che permetterà all’utente di avere controllo dei carichi elettrici e di essere informato sullo stato attuale delle 8 uscite, inoltre se il modulo ingressi è installato permette anche di controllare 3 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” lo stato di 5 ingressi digitali su parallela o 8 ingressi digitali su scheda dedicata. I programmi residenti nei due sistemi dialogano periodicamente per verificare che l’altro sistema sia effettivamente collegato, per prevenire mancate esecuzioni di comandi per motivi esterni (es. blackout alimentazione server, disconnessione accidentale dei cavi etc.) e per tenere il client costantemente sincronizzato con il server. Si è cercato di rendere il sistema hardware più modulare possibile per permettere all’utente finale di decidere il miglior compromesso tra necessità e possibilità di aggiornamento. Inoltre il sistema modulare permette una veloce sostituzione delle schede in caso di guasti dovuti all’usura o accidentali. Il sistema è nella sua completezza composto da una scheda input, una scheda output, una scheda di interfaccia e una scheda chiamata “Startcommand”. Tutte le schede verranno descritte in maniera dettagliata successivamente (vedi indice). In seguito alla descrizione il sistema può essere riassunto come nell’immagine. 4 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” 2. Descrizione sistema (Parte software) Programmazione in Visual Basic .Net Si è scelto di utilizzare Visual Basic .net come linguaggio per creare il programma client e il programma server perché Visual Basic.Net è un linguaggio di programmazione ad oggetti avanzato che permette di creare applicazioni perfettamente integrate con Windows in maniera veloce e con la semplicità del linguaggio derivato dal BASIC. Inoltre le librerie .Net permettono l’uso di tale linguaggio anche su sistemi Linux dotati di apposito emulatore (progetto MONO http://www.monoproject.com/ ). La programmazione in Visual Basic .net l’ho imparata personalmente da autodidatta e il programma creato ha subito un debug (correzione dei possibili errori ) di una settimana con una rete locale ethernet da 100 Mbit/s. Gestione parallela La porta parallela è gestita dall’applicazione server attraverso una libreria opensource liberamente modificabile chiamata INOUT32 sviluppata da Antonio Giuliana (http://www.visual-basic.it/articoli/agNetInOut.htm ). L’uso di questa libreria è dovuto al fatto che i nuovi sistemi operativi Windows basati su tecnologia NT (Windows NT, 2000, XP, VISTA) non permettono l’accesso diretto per le applicazioni verso le interfacce hardware del computer. Questa caratteristica permette al sistema di essere più stabile e di resistere meglio a software maligni andando però ad intralciare la gestione diretta delle interfacce hardware. Per permettere alle applicazioni di dialogare con le interfacce hardware è necessario creare un driver apposito che permetta il dialogo tra il software in Visual Basic e il kernel (programma base del sistema) che gestisce le periferiche con i driver. Quindi INOUT32 oltre che a fare da driver di periferica per controllare dei registri (in questo caso della parallela) fa anche da ponte con il programma in Visual Basic .net nella gestione di tale driver. INOUT32 può anche gestire anche altre interfacce di input/output purché siano ad 8 bit e siano con caratteristiche simili alla parallela. L’applicazione Remotecontrol server con INOUT32 è stata testata con ottimi risultati anche su un computer con una scheda industriale di controllo di input/output della National Istruments “PC DIO 96” che prevede una gestione degli ingressi ed uscite simile alla parallela. N.B. Prima di avviare Remotecontrol client è necessario istallare la libreria nel sistema eseguendo questa procedura (tutti i file sono nel cd allegato): 5 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Se si utilizza Windows 2000/NT/XP/VISTA -Andare nella cartella principale del programma (solitamente "C:\programmi\remotecontrol server") -Copiare dalla cartella "driver parallela" il file chiamato "inout32d.sys" e metterlo in "C:\windows\system32\drivers". -Sempre nella cartella principale del programma dentro "driver parallela" lanciare "inout32d.reg" -Infine copiare sempre da "driver parallela" la libreria "inout32d.dll" in "C:\windows\system32\" -Riavviare il computer Se si utilizza Windows 98 o Me -Andare nella cartella principale del programma (solitamente "C:\programmi\remotecontrol server") -Copiare dalla cartella "driver parallela" il file chiamato "inout32d.sys" e metterlo in "C:\windows\system32\drivers". -Sempre nella cartella principale del programma dentro "driver parallela" lanciare "inout32d.reg" - Infine copiare sempre da "driver parallela" la libreria "inout32d.dll" in "C:\windows\" -Riavviare il computer Rete di collegamento Le due applicazioni per dialogare tra di loro usano le connessioni di rete gestite dal sistema Windows. Questo permette di avere un’altissima flessibilità sui collegamenti tra il PC server e il PC client, poiché basta che i 2 computer si “vedano” attraverso Windows e Remotecontrol è già in grado di operare. Il collegamento tra i 2 computer può avvenire con tutte le connessioni di rete ad oggi esistenti come Ethernet e Wireless WiFi anche attraverso internet. Ovviamente i collegamenti utilizzati devono supportare il protocollo TCP/IP e tale protocollo deve essere installato nel sistema dei due computer. Per concludere il sistema Remotecontrol ha come principali caratteristiche: - Possibilità di uso in computer non recenti (Pentium I o superiore) con almeno Windows 98 e porta parallela su scheda madre o scheda dedicata oppure scheda di Input/output generica a 8 bit controllabile tramite indirizzo hardware. - Uso di infrastrutture di rete già esistenti sia a livello industriale che domestico come Ethernet LAN, Wireless WiFi e Internet. - Sistema modulare con possibilità di scegliere a piacimento come comporre il sistema in base alle proprie esigenze e di sostituire velocemente eventuali schede danneggiate. - Compatibilità del software con schede di gestione input/output industriali come PC DIO 96 della National Istruments. - Programma ampiamente configurabile a seconda delle proprie esigenze con possibilità di aggiungere etichette testuali per discriminare le uscite. 6 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Applicazione server Remotecontrol server è l’applicazione che gestisce direttamente i circuiti elettronici con gli ingressi e le uscite. Il controllo avviene attraverso la porta parallela del computer (di cui è possibile specificare l’indirizzo sia di input che di output). Remotecontrol server controlla costantemente i valori dei registri di input e output e se è connesso invia i dati al client, altrimenti memorizza il cambiamento per fornire le informazioni nella futura connessione del client. Grazie a questa funzione Remotecontrol server può convivere con altri programmi che controllano il circuito, infatti, nelle opzioni si può decidere se al variare del contenuto del registro di output della parallela il programma debba riscrivere il valore precedente alla variazione oppure mantenere il nuovo valore e inviarlo al client. Inoltre gestisce direttamente la scheda startcommand che disattiva automaticamente gli output nel caso in cui il programma server sia chiuso (normalmente durante l’avvio o l’arresto del sistema). Le sue funzioni principali, oltre a scrivere i comandi e inviare gli stati delle porte, vanno dalla memorizzazione e invio delle etichette applicabili ai singoli bit delle porte per riconoscere velocemente le funzioni a cui sono associati fino alla segnalazione, attraverso notifiche a fumetto, dei comandi ricevuti. Per gestire attraverso il sistema operativo la porta parallela il programma fa uso della libreria INOUT32 scritta da Antonio Giuliana di cui verranno in seguito descritte le caratteristiche tecniche. Questa libreria è in grado di scrivere o leggere nella porta parallela numeri decimali che rispecchiano i valori in binario presenti nei registri interni della parallela (ved. gestione parallela). Il client Remotecontrol riceve via rete dal server direttamente questi valori e nel caso di comandi ne invia di nuovi, ed è il client che si occupa di tutta la parte della decodifica da decimale a binario o vice versa per gestire i singoli bit corrispondenti ai carichi o agli ingressi. Di seguito vengono descritte le opzioni del programma: 7 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” - TAB “GENERALE” Attiva notifiche connessione server e ricezione comandi Permette di decidere se visualizzare o meno le notifiche di server connesso e ricezione comandi dal client. Avvio programma In questa sezione è possibile decidere se fare alcune operazioni alla attivazione del programma, ovvero se attivare subito il server e metterlo in ascolto e se abbassare il programma nella tray di sistema senza visualizzare la finestra principale. Interfaccia hardware In questa sezione è possibile configurare Remotecontrol per farlo funzionare al meglio con l’interfaccia hardware usata. In particolare è possibile attivare gli output (8), gli input (5 o 8 a seconda che l’interfaccia sia una parallela, che permette 5 ingressi, o una scheda di ingresso dedicata a 8 bit controllabile nella stessa maniera della parallela) ed è possibile attivare o meno la funzione di comando per la scheda startcommand. Comportamento in caso di modifica dato in output Questa è la caratteristica principale che permette a Remotecontrol di convivere con altri programmi che gestiscono l’interfaccia hardware. Infatti è possibile decidere se, al variare del valore dato dall’ultimo comando del client, il server debba segnalare il cambiamento o riscrivere l’ultimo dato inviato. - TAB “OUTPUT” Qui è possibile memorizzare le etichette delle varie uscite e l’indirizzo hardware della porta di uscita. 8 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” - TAB “INPUT” Qui è possibile memorizzare le etichette dei vari ingressi e l’indirizzo hardware della porta d’ingresso. Remotecontrol server è compatibile con Windows 98/NT/2000/XP/VISTA/7 a 32 bit ed è possibile utilizzarlo solo dopo aver installato le librerie “.NET framework 2.0” di Microsoft (o superiore). Listato 1 – Interfaccia principale Remotecontrol server (VB.NET) Imports INOUT32_LIB 'importa la libreria Imports System.Net.Sockets '*********************************************** '******** REMOTECONTROL BY MARCO MASSARI ******* '********* OTTOBRE 'O8 - GENNAIO '09 ********** '*********************************************** Public Class Form1 : Inherits System.Windows.Forms.Form Dim baltext As String 'Memorizza il testo da visualizzare nella notifica Public Client As TcpClient 'Attiva le variabili della gestione di ascolto TCP Public NetStr As NetworkStream Public Listener As New TcpListener(5688) 'Si mette in ascolto nella porta 5688 Dim a As String 'contiene i dati ricevuti per la codifica Dim data As String 'Contiene i dati ricevuti Dim senddata As String 'contiene il dato da inviare Dim received As String 'controllo della connessione Client/Server Dim stsend As String 'stringa da inviare Dim lptdata As Byte 'dato in output attuale sulla parallela Private IO As New INOUT32 'dichiara la libreria per gestire 'la parallela (o interfaccia genericaa 8 Bit) Dim Port As Short 'contiene l'indirizzo hardware di output Dim Portin As Short 'contiene l'indirizzo hardware di input Dim lock As Boolean = False 'disattiva la possibilità di cambiare 'le opzioni quando il server è attivato Dim startcommandvalue As Boolean ' attiva il comado del circuito startcommand Dim valntf, valoutact, valinact, valchange, valindata As Boolean 'opzioni input/output Dim valinpn As Byte 'valore attuale in ingersso Dim valoutn As Byte 'valore attuale in uscita Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'attività da fare qurante l'avvio TextBox1.Text = DateString + " " + TimeOfDay + " " + " Server disattivato" NotifyIcon1.BalloonTipTitle = "RemoteControl" NotifyIcon1.Text = "RemoteControl Server" impapp() End Sub Public Sub minimize() 'sub che minimizza il programma Me.ShowInTaskbar = False Me.Visible = False Me.NotifyIcon1.BalloonTipText = baltext Me.NotifyIcon1.BalloonTipIcon = ToolTipIcon.Info Me.NotifyIcon1.ShowBalloonTip(2000) End Sub Private Sub Form1_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed 'attività svolte durante la chiusura If startcommandvalue Then 'se startcommand è usato viene disattivato tmrverify.Stop() Dim indcmd As Byte = 0 IO.Out(Port, 255) IO.Out(Port, 0) For indcmd = (0) To (7) IO.Out(Port + 2, 1) IO.Out(Port + 2, 0) Next IO.Out(Port, 255) IO.Out(Port, 0) 9 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Else 'altrimenti scrive 0 in output e si chiude IO.Out(Port, 0) End If End Sub Private Sub InforToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InforToolStripMenuItem.Click AboutBox1.Show() End Sub Private Sub EsciToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EsciToolStripMenuItem.Click Close() End Sub Public Sub writelpt() 'invia i dati a lpt IO.Out(Port, lptdata) End Sub Private Sub ImpostazioniToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ImpostazioniToolStripMenuItem.Click If lock Then 'se lock è attivo non fa aprire la finestra di modifica impostazioni MsgBox("Non è possibile modificare le impostazioni quando il server è attivo.", MsgBoxStyle.Information) Else Imposta.Show() End If End Sub Public Sub impapp() 'carica tutti i valori dopo avvio o modifica delle impostazioni Dim i As Byte = 0 Dim inin As Byte = 0 Dim data(8) As String Dim indata(8) As String Try Dim imp As New IO.StreamReader("Imprcsrv.txt") stsend = "load" While i < 8 data(i) = imp.ReadLine() stsend = stsend & "," & data(i) i = i + 1 End While While inin < 8 data(inin) = imp.ReadLine() stsend = stsend & "," & data(inin) inin = inin + 1 End While Port = imp.ReadLine Portin = imp.ReadLine If imp.ReadLine Then TextBox1.Text = DateString + " " + TimeOfDay + " Server attivato" listen() AttivaToolStripMenuItem.Enabled = False ArrestaToolStripMenuItem.Enabled = True lock = True End If If imp.ReadLine Then baltext = "Clicca sull'icona per aprire la finestra di controllo" minimize() End If startcommandvalue = imp.ReadLine valntf = imp.ReadLine valoutact = imp.ReadLine valinact = imp.ReadLine valindata = imp.ReadLine valchange = imp.ReadLine stsend = stsend & "," & valoutact & "," & valinact & "," & valindata imp.Close() If startcommandvalue Then RiattivaStartcommandToolStripMenuItem.Visible = True Dim indcmd As Byte = 0 IO.Out(Port, 255) IO.Out(Port, 0) For indcmd = (0) To (9) IO.Out(Port + 2, 1) IO.Out(Port + 2, 0) Next IO.Out(Port, 255) lptdata = 0 writelpt() 10 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” tmrverify.Start() 'attiva le uscite attivando Startcommand Else RiattivaStartcommandToolStripMenuItem.Visible = False tmrverify.Start() lptdata = 0 writelpt() End If If valoutact Then labout.Text = Port labvalout.Text = 0 Else labout.Text = "non usato" labvalout.Text = "non usata" End If If valinact Then labinp.Text = Portin labvalinp.Text = 0 Else labinp.Text = "non usato" labvalinp.Text = "non usata" End If Catch imp As System.IO.FileNotFoundException 'se non trova il file 'attiva la creazione delle impostazioni Imposta.Show() Imposta.Button3.PerformClick() Imposta.Button1.Enabled = False Imposta.Button3.Enabled = False End Try End Sub Private Sub ConfigurazioneLibreriaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConfigurazioneLibreriaToolStripMenuItem.Click Dialog1.Show() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click baltext = "Clicca sull'icona per aprire la finestra di controllo" 'pulsante che 'minimizza la finestra minimize() End Sub Private Sub NotifyIcon1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseClick 'se viene cliccata l'icona minimizzata riattiva il form Me.ShowInTaskbar = True Me.Visible = True Me.Focus() End Sub Public Sub listen() Try 'abilita l'attesa di connessioni AttivaToolStripMenuItem.Enabled = False ArrestaToolStripMenuItem.Enabled = True lock = True Listener.Start() tmrcontrolconnection.Start() Catch MsgBox("Non è possibile avviare più server RemoteControl contemporaneamente.", MsgBoxStyle.Critical) Close() End Try End Sub Private Sub tmrcontrolconnection_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrcontrolconnection.Tick 'timer che controlla se qualcuno si connette If Listener.Pending Then Client = Listener.AcceptTcpClient NetStr = Client.GetStream tmrcontrolconnection.Stop() Listener.Stop() tmrgetdata.Start() connask.Start() 11 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” TextBox1.Text = DateString + " " + TimeOfDay + " " + " Client connesso" If ShowInTaskbar = False And valntf = True Then baltext = "Client connesso" minimize() End If End If End Sub Private Sub connask_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles connask.Tick If Client.Connected Then 'controlla se il client è ancora presente If received = ("OK") Then received = "" Else TextBox1.Text = DateString + " " + TimeOfDay + " " + " Client disconnesso" tmrgetdata.Stop() Listener.Start() tmrcontrolconnection.Start() connask.Stop() If ShowInTaskbar = (False) And valntf Then baltext = "Client disconnesso" minimize() End If End If End If End Sub Public Sub send() 'sub di invio dati If Client.Connected Then If NetStr.CanWrite Then Dim bytei() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(senddata) NetStr.Write(bytei, 0, bytei.Length) End If End If End Sub Private Sub tmrgetdata_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrgetdata.Tick 'timer che controlla se qualche dato è in ingresso If Client.Connected Then If Client.Available > 0 And NetStr.CanRead Then Dim Bytes(Client.ReceiveBufferSize) As Byte NetStr.Read(Bytes, 0, Client.ReceiveBufferSize) data = System.Text.ASCIIEncoding.ASCII.GetString(Bytes) a = data commandrecognition() End If End If End Sub Public Sub commandrecognition() 'riconosce i vari comandi inviati dal client Try If a.Contains("dataload") Then 'caricamento dati senddata = stsend + "," & valoutn & "," & valinpn send() TextBox2.Text = DateString + " " + TimeOfDay + " " + " Richiesta dati client" ElseIf a.Contains("okconnected") Then 'controllo connessione 10: senddata = "okserverconnected" & "," & valoutn & "," & valinpn received = "OK" send() ElseIf a.Contains("writedata") Then 'scrittura nuovo valore in output Dim str As String() = data.Split(",") TextBox2.Text = DateString + " " + TimeOfDay + " " + str(0) + " " + str(1) If ShowInTaskbar = False And valntf = True Then baltext = "Ricevuto comando " + str(0) + " " + str(1) minimize() End If lptdata = str(1) valoutn = lptdata writelpt() GoTo 10 End If Catch 'potrebbero esserci collisioni e questo fa attendere il successivo ciclo di controllo TextBox2.Text = "Attendere..." End Try 12 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” End Sub Private Sub AttivaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AttivaToolStripMenuItem.Click 'attiva il server listen() TextBox1.Text = DateString + " " + TimeOfDay + " " + "Server attivato" End Sub Private Sub ArrestaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ArrestaToolStripMenuItem.Click 'disattiva il server Listener.Stop() tmrcontrolconnection.Stop() tmrgetdata.Stop() connask.Stop() TextBox1.Text = DateString + " " + TimeOfDay + " " + " Server disattivato" AttivaToolStripMenuItem.Enabled = True ArrestaToolStripMenuItem.Enabled = False lock = False End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 'chiude (con la procedura startcommand) il form Close() End Sub Private Sub RiattivaStartcommandToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RiattivaStartcommandToolStripMenuItem.Click 'se è attivo startcommand permette di riattivarlo in seguito a 'disconnessioni fisiche (cavo dati, alimentazioni etc...) tmrverify.Stop() Dim indcmd As Byte = 0 IO.Out(Port, 255) IO.Out(Port, 0) For indcmd = (0) To (9) 'fa avanzare il contatore hardware di startcommand IO.Out(Port + 2, 1) IO.Out(Port + 2, 0) Next IO.Out(Port, 255) IO.Out(Port, 0) writelpt() tmrverify.Start() End Sub Private Sub tmrverify_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrverify.Tick 'timer che verifica i dati presenti nei vari registri delle porte usate e 'li aggiorna con quelli di startcommand If valoutact Then valoutn = IO.Inp(Port) labvalout.Text = valoutn If valoutn <> (lptdata) Then If valchange = (0) Then lptdata = valoutn Else writelpt() End If End If Else valoutn = 0 End If If valinact Then valinpn = IO.Inp(Portin) labvalinp.Text = valinpn Else valinpn = 0 End If End Sub End Class 13 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Listato 2 – Interfaccia impostazioni Remotecontrol server (VB.NET) Public Class Imposta Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 'carica i valori predefiniti TextBox1.Text = "Uscita 1" TextBox2.Text = "Uscita 2" TextBox3.Text = "Uscita 3" TextBox4.Text = "Uscita 4" TextBox5.Text = "Uscita 5" TextBox6.Text = "Uscita 6" TextBox7.Text = "Uscita 7" TextBox8.Text = "Uscita 8" TextBox16.Text = "Ingresso 1" TextBox15.Text = "Ingresso 2" TextBox14.Text = "Ingresso 3" TextBox13.Text = "Ingresso 4" TextBox12.Text = "Ingresso 5" TextBox11.Text = "Ingresso 6" TextBox10.Text = "Ingresso 7" TextBox9.Text = "Ingresso 8" NumericUpDown1.Value = 888 NumericUpDown2.Value = 889 CheckBox1.Checked = True CheckBox2.Checked = True CheckBox3.Checked = True chkntf.Checked = True chkout.Checked = True chkinp.Checked = False tabinp.Enabled = False End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'salva i valori modificati Try If TextBox1.Text.Contains(",") Or TextBox2.Text.Contains(",") Or TextBox3.Text.Contains(",") Or _ TextBox4.Text.Contains(",") Or TextBox5.Text.Contains(",") Or TextBox6.Text.Contains(",") Or TextBox7.Text.Contains(",") Or _ TextBox8.Text.Contains(",") Or TextBox9.Text.Contains(",") Or TextBox10.Text.Contains(",") Or _ TextBox11.Text.Contains(",") Or TextBox12.Text.Contains(",") Or TextBox13.Text.Contains(",") Or TextBox14.Text.Contains(",") Or _ TextBox15.Text.Contains(",") Or TextBox16.Text.Contains(",") Then MsgBox("Le etichette non possono contenere virgole.", MsgBoxStyle.Information) Else Dim wimp As New IO.StreamWriter("Imprcsrv.txt") wimp.WriteLine(TextBox1.Text) wimp.WriteLine(TextBox2.Text) wimp.WriteLine(TextBox3.Text) wimp.WriteLine(TextBox4.Text) wimp.WriteLine(TextBox5.Text) wimp.WriteLine(TextBox6.Text) wimp.WriteLine(TextBox7.Text) wimp.WriteLine(TextBox8.Text) wimp.WriteLine(TextBox16.Text) wimp.WriteLine(TextBox15.Text) wimp.WriteLine(TextBox14.Text) wimp.WriteLine(TextBox13.Text) wimp.WriteLine(TextBox12.Text) wimp.WriteLine(TextBox11.Text) wimp.WriteLine(TextBox10.Text) wimp.WriteLine(TextBox9.Text) wimp.WriteLine(NumericUpDown1.Value) wimp.WriteLine(NumericUpDown2.Value) wimp.WriteLine(CheckBox1.Checked) wimp.WriteLine(CheckBox2.Checked) wimp.WriteLine(CheckBox3.Checked) wimp.WriteLine(chkntf.Checked) wimp.WriteLine(chkout.Checked) 14 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” wimp.WriteLine(chkinp.Checked) If rdbinp5.Checked Then wimp.WriteLine(0) TextBox11.Enabled = False TextBox10.Enabled = False TextBox9.Enabled = False Else wimp.WriteLine(1) TextBox11.Enabled = True TextBox10.Enabled = True TextBox9.Enabled = True End If If rdbsdat.Checked Then wimp.WriteLine(0) Else wimp.WriteLine(1) End If wimp.Close() Form1.impapp() Me.Close() End If Catch MsgBox("Impossibile scrivere file di configurazione.", MsgBoxStyle.Critical) End Try End Sub Private Sub Imposta_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'al caricamento del form carica tutti i valori Try Dim rimp As New IO.StreamReader("Imprcsrv.txt") TextBox1.Text = rimp.ReadLine TextBox2.Text = rimp.ReadLine TextBox3.Text = rimp.ReadLine TextBox4.Text = rimp.ReadLine TextBox5.Text = rimp.ReadLine TextBox6.Text = rimp.ReadLine TextBox7.Text = rimp.ReadLine TextBox8.Text = rimp.ReadLine TextBox16.Text = rimp.ReadLine TextBox15.Text = rimp.ReadLine TextBox14.Text = rimp.ReadLine TextBox13.Text = rimp.ReadLine TextBox12.Text = rimp.ReadLine TextBox11.Text = rimp.ReadLine TextBox10.Text = rimp.ReadLine TextBox9.Text = rimp.ReadLine NumericUpDown1.Value = rimp.ReadLine NumericUpDown2.Value = rimp.ReadLine CheckBox1.Checked = rimp.ReadLine CheckBox2.Checked = rimp.ReadLine CheckBox3.Checked = rimp.ReadLine chkntf.Checked = rimp.ReadLine chkout.Checked = rimp.ReadLine chkinp.Checked = rimp.ReadLine If chkinp.Checked Then rdbinp5.Visible = True rdbinp8.Visible = True End If If rimp.ReadLine = (0) Then rdbinp5.Checked = True Else rdbinp8.Checked = True End If If rimp.ReadLine = (0) Then rdbsdat.Checked = True Else rdbrdat.Checked = True End If If chkinp.Checked = (False) Then tabinp.Enabled = False End If If chkout.Checked = (False) Then Tabout.Enabled = False End If rimp.Close() Catch 15 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” MsgBox("Impossibile leggere il file di configurazione, se è il primo avvio verranno richieste le impostazioni.", MsgBoxStyle.Exclamation) End Try End Sub Private Sub chkinp_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkinp.CheckedChanged 'attiva/disattiva gli input If chkinp.Checked = (False) Then tabinp.Enabled = False rdbinp5.Visible = False rdbinp8.Visible = False Else tabinp.Enabled = True rdbinp5.Visible = True rdbinp8.Visible = True End If End Sub Private Sub chkout_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkout.CheckedChanged 'attiva/disattiva gli output If chkout.Checked = (False) Then Tabout.Enabled = False Else Tabout.Enabled = True End If End Sub Private Sub rdbinp5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdbinp5.CheckedChanged 'modifica l'interfaccio per porta parallela o generca 8 bit come input If rdbinp5.Checked Then TextBox11.Enabled = False TextBox10.Enabled = False TextBox9.Enabled = False Else TextBox11.Enabled = True TextBox10.Enabled = True TextBox9.Enabled = True End If End Sub Private Sub rdbinp8_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdbinp8.CheckedChanged 'modifica l'interfaccio per porta parallela o generca 8 bit come input If rdbinp8.Checked Then TextBox11.Enabled = True TextBox10.Enabled = True TextBox9.Enabled = True Else TextBox11.Enabled = False TextBox10.Enabled = False TextBox9.Enabled = False End If End Sub End Class 16 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Applicazione client L`applicazione client permette di controllare il circuito Remotecontrol via rete LAN attraverso il programma server. In particolare si occupa della decodifica dei valori in decimale ricevuti ed inviati al programma server. Il programma svolge 3 funzioni principali: - Decodifica del dato in ingresso dal circuito Remotecontrol per visualizzare i singoli bit in on o off, questo viene ottenuto periodicamente dal server in seguito al richiamo periodico del client che permette anche il controllo della connessione attiva. - Decodifica del dato in uscita presente attualmente nel registro della parallela del server che come per gli ingressi viene periodicamente inviato dopo la richiesta periodica del client. - Decodifica del valore decimale da inviare partendo dallo stato di tutti gli 8 pulsanti. Dopo il primo invio controlla l’avvenuta ricezione e modifica del valore in output nella parallela e se questa modifica nella ricezione periodica successiva dei valori non ha avuto luogo viene rinviato il dato fino a che non viene scritto il nuovo valore. Questa necessità di usare la codifica è data dal fatto che è molto più semplice gestire come bit gli ingressi e le uscite che, invece, come valori decimali (ovvero quelli gestiti da Remotecontrol server). Per fare questo utilizza una tecnica detta mascheratura di bit che permette di ricreare il valore decimale da inviare partendo da quello precedente, in questo modo alla scrittura di un cambiamento tutti quelli precedenti sugli altri bit delle uscite rimangono intatti. Il suo funzionamento è basato sull’ utilizzo in Visual Basic .net degli operatori logici AND e OR. 17 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” L’operatore OR viene usato quando va modificato il valore da scrivere in output di un solo bit, mentre l’operatore AND viene usato nel controllo dei valori nei registri di input e output per decodificare il valore decimale in singoli bit di stato on o off. Questo è possibile poiché il computer nonostante visualizzi il numero in decimale fa tutte le sue operazioni in linguaggio macchina (binario). L’immagine a fianco permette di capire meglio il funzionamento in Remotecontrol client degli operatori AND e OR. Se per esempio si vuole attivare l’uscita numero 8 il programma client prende il valore precedente dell’uscita output ricevuto dal server e ne fa l’operazione OR con la maschera che ha 1 solo nell’uscita che si vuole attivare, quindi la numero 8. Il risultato sarà un nuovo valore in binario, che il programma tratterà in decimale, da scrivere nella porta parallela che modificherà solo il bit 8. Nel caso in cui il bit da cambiare sia settato il client si predispone per azzerarlo attraverso una maschera che contiene 0 solo nel bit da azzerare ed effettua l’operazione logica AND con il valore precedente nella parallela inviato dal server, in questo modo il bit da azzerare viene azzerato lasciando il resto dei bit invariati. Il controllo del dato in input, proveniente dalla scheda di input processato da Remotecontrol server, e il valore presente attualmente nel registro di output della parallela viene effettuato ponendo una maschera con un bit per volta attivato e viene messo in AND se il bit interessato dalla maschera sarà attivo l’etichetta di quel bit passerà da OFF a ON, viceversa se il bit interessato è disattivato l’etichetta passerà da ON a OFF. L’operazione AND del valore da decodificare viene fatta con i numeri decimali che rappresentano i singoli bit delle uscite quindi: 1, 2, 4, 8, 16, 32, 64 e 128. Il controllo dell’output avviene sempre e se il valore ricevuto periodicamente è uguale a quello precedente viene confermato, mentre in input la decodifica parte solo se il valore precedente è diverso da quello ricevuto. In pratica controlla il valore decimale e se questo è diverso da quello precedente parte controllando il dato che contiene lo stato dei singoli bit. Remotecontrol client può memorizzare fino a 250 indirizzi IP o nomi di computer di rete con l’applicazione server e possono essere richiamati comodamente da una lista presente all’avvio del programma. Per la modifica di questa lista è presente una seconda finestra di modifica delle impostazioni. Di seguito è possibile vedere alcune finestre del programma. 18 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Finestra di avvio Finestra di modifica impostazioni 19 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Remotecontrol client è compatibile con Windows 98/NT/2000/XP/VISTA/7 a 32 o 64 bit ed è possibile utilizzarlo solo dopo aver installato le librerie “.NET framework 2.0” di Microsoft (o superiore). Listato 3 – Interfaccia principale Remotecontrol client (VB.NET) Imports System.Net.Sockets '******************************************************* '**********REMOTECONTROL CLIENT BY MARCO MASSARI******** '************OTTOBRE '08 MODIFICATO GEN 2009************ '******************************************************* Public Class Form1 : Inherits System.Windows.Forms.Form Public NetStr As NetworkStream 'attiva la gestione della rete Public Client As New TcpClient 'attiva comunicazioni TCP Dim data, datas As String 'valori da inviare Dim con As String ' Dim value As Boolean = True ' valore di verifica se connesso o no al server Dim a As Boolean 'vengono dichiarate tutte le variabili dei pulsanti Dim b As Boolean Dim c As Boolean Dim d As Boolean Dim en As Boolean Dim f As Boolean Dim g As Boolean Dim h As Boolean Dim i As Boolean Dim lptdata As Byte 'dato lpt da scrivere nel server Dim sel As String 'memorizza il server selezionato Dim valinact, valindata, valoutact As Boolean 'variabili impostazione del server Dim valueout, valuein As Byte 'variabile delle decodifiche degli stati ingressi uscite Dim canwritenet As Boolean = True 'blocca momentanemante il dialogo quando viene inviato 'un comando Dim cancontrol As Boolean = False ' blocca il sistema di controllo comandi quando 'dialoga con il server Dim act As Boolean = False 'attende il prelievo delle propietà del server per attivare 'l'esecuzione dei comandi Private Sub InforToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InforToolStripMenuItem.Click AboutBox1.Show() End Sub Private Sub EsciToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EsciToolStripMenuItem.Click Close() ' chiude il form End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click lptdata = 0 writelpt() ' se viene premuto il tasto emergenza disattiva tutte le uscite End Sub Private Sub TutteOnToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TutteOnToolStripMenuItem.Click lptdata = 255 writelpt() ' se viene premuto il tasto emergenza attiva tutte le uscite End Sub Private Sub TutteOffToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TutteOffToolStripMenuItem.Click Button1.PerformClick() 'preme il bottone emergenza tutte off End Sub Public Sub writelpt() 'sub di invio del comando canwritenet = False 'disattiva dialogo di controllo connessione cancontrol = True ' attiva il controllo di ritorno del dato scritto StatusStrip1.BackColor = Color.Yellow ToolStripStatusLabel1.Text = "Invio comando a " 'cambia scritta nella status bar btnout2.Enabled = False 'disattiva i bottoni di comando btnout1.Enabled = False btnout3.Enabled = False btnout4.Enabled = False 20 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” 10: btnout5.Enabled = False btnout6.Enabled = False btnout7.Enabled = False btnout8.Enabled = False USCITAToolStripMenuItem.Enabled = False Button1.Enabled = False datas = "writedata," & lptdata 'crea la stringa da inviare Try 'invia il comando If Client.Connected() Then If NetStr.CanWrite() Then Dim Bytes() As Byte = System.Text.UnicodeEncoding.ASCII.GetBytes(datas) NetStr.Write(Bytes, 0, Bytes.Length) Else GoTo 10 End If End If canwritenet = True 'dopo l'invio riattiva il dialogo di controllo connessione Catch 'nel caso di errore nell' invio si disconnette Received.Stop() timeout.Stop() connprs() End Try End Sub Public Sub impapp() 'reimposta tutti i valori Try Client.Connect(sel, 5688) 'valori di connessione If Client.Connected Then 'verifica se il client è connesso startgroup() ' inizializza la grafica Focus() 'attiva finestra NetStr = Client.GetStream 'preleva dati Received.Start() 'attiva il timer di controllo dati in arrivo data = "okconnected" send() 'invia stringa di verifica connessione timeout.Start() ' attiva i controlli di connessione tmrload.Start() 'disabilita momentaneamente i controlli End If Catch 'in caso di errori MsgBox("Impossibile comunicare con il server " + sel, MsgBoxStyle.Exclamation) 'visualizza una msgbox End Try End Sub Private Sub Received_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Received.Tick ' controlla se in ingresso c'è qualche comando If Client.Connected And canwritenet Then If Client.Available > 0 And NetStr.CanRead Then Dim bytei(Client.ReceiveBufferSize) As Byte NetStr.Read(bytei, 0, Client.ReceiveBufferSize) con = System.Text.ASCIIEncoding.ASCII.GetString(bytei) verifydata() End If End If End Sub Private Sub timeout_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timeout.Tick 'timer di dialogo per controllo della effettiva connessione data = "okconnected" send() If value Then value = False Else Received.Stop() timeout.Stop() connprs() End If End Sub Public Sub verifydata() 'verifica i comandi ricevuti Try 'nel caso sia il server che richiede se è connesso e può comunicare (canwritenet) 21 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” If con.Contains("okserverconnected") And canwritenet Then value = True 'rimette value a true così il timer di connessione 'non fa disconntettere il client Dim state As String() = con.Split(",") 'confronta valori in ingresso precedente con i nuovi If valuein <> state(2) Then valuein = state(2) decodeinpdata() End If 'confronta i dati precedentemente inviati con quelli del server If lptdata <> (state(1)) And cancontrol Then canwritenet = False tmrdata.Start() Else If act Then cancontrol = False tmrbut.Interval = 4000 tmrbut.Start() StatusStrip1.BackColor = Color.YellowGreen ToolStripStatusLabel1.Text = "Connesso con " End If valueout = state(1) lptdata = valueout decodeloaddata() End If ElseIf con.Contains("load") Then 'se contiene stringa avvio carica tutte le 'proprietà Dim group As String() = con.Split(",") data = group(0) grpout1.Text = group(1) grpout2.Text = group(2) grpout3.Text = group(3) grpout4.Text = group(4) grpout5.Text = group(5) grpout6.Text = group(6) grpout7.Text = group(7) grpout8.Text = group(8) gbin1.Text = group(9) gbin2.Text = group(10) gbin3.Text = group(11) gbin4.Text = group(12) gbin5.Text = group(13) gbin6.Text = group(14) gbin7.Text = group(15) gbin8.Text = group(16) valoutact = group(17) valinact = group(18) valindata = group(19) valueout = group(20) valuein = group(21) If valoutact Then grpout.Enabled = True btnout2.Enabled = True btnout1.Enabled = True btnout3.Enabled = True btnout4.Enabled = True btnout5.Enabled = True btnout6.Enabled = True btnout7.Enabled = True btnout8.Enabled = True USCITAToolStripMenuItem.Enabled = True Button1.Enabled = True Else grpout.Enabled = False USCITAToolStripMenuItem.Enabled = False Button1.Enabled = False grpout1.Text = "" grpout2.Text = "" grpout3.Text = "" grpout4.Text = "" grpout5.Text = "" grpout6.Text = "" grpout7.Text = "" grpout8.Text = "" End If If valinact Then grping.Enabled = True 22 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” If valindata = ("0") Then gbin6.Enabled = False gbin6.Text = "" labin6.Text = "-" gbin7.Enabled = False gbin7.Text = "" labin7.Text = "-" gbin8.Enabled = False gbin8.Text = "" labin8.Text = "-" End If Else grping.Enabled = False gbin1.Text = "" labin1.Text = "-" gbin2.Text = "" labin2.Text = "-" gbin3.Text = "" labin3.Text = "-" gbin4.Text = "" labin4.Text = "-" gbin5.Text = "" labin5.Text = "-" gbin6.Text = "" labin6.Text = "-" gbin7.Text = "" labin7.Text = "-" gbin8.Text = "" labin8.Text = "-" End If StatusStrip1.BackColor = Color.YellowGreen ToolStripStatusLabel1.Text = "Connesso con " lptdata = valueout act = True decodeloaddata() decodeinpdata() End If Catch StatusStrip1.BackColor = Color.YellowGreen ToolStripStatusLabel1.Text = "Connesso con " End Try End Sub 11: Public Sub send() 'invia le richieste di verifica connessione If canwritenet Then Try If Client.Connected() Then If NetStr.CanWrite() Then Dim Bytes() As Byte = System.Text.UnicodeEncoding.ASCII.GetBytes(data) NetStr.Write(Bytes, 0, Bytes.Length) Else GoTo 11 End If End If Catch 'in caso di errore si disconnette Received.Stop() timeout.Stop() connprs() End Try Else wait.Start() End If End Sub Private Sub tmrload_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrload.Tick data = "dataload" 'invio iniziale della richiesta delle proprietà send() tmrload.Stop() End Sub Private Sub decodeloaddata() 'decodifica dato in uscita inviato dal server If valoutact And canwritenet Then If valueout And 1 Then 23 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” b = 1 Label2.Text = "ON" Label2.ForeColor = Color.Red Else b = 0 Label2.Text = "OFF" Label2.ForeColor = Color.Black End If If valueout And 2 Then a = 1 Label3.Text = "ON" Label3.ForeColor = Color.Red Else a = 0 Label3.Text = "OFF" Label3.ForeColor = Color.Black End If If valueout And 4 Then c = 1 Label6.Text = "ON" Label6.ForeColor = Color.Red Else c = 0 Label6.Text = "OFF" Label6.ForeColor = Color.Black End If If valueout And 8 Then d = 1 Label8.Text = "ON" Label8.ForeColor = Color.Red Else d = 0 Label8.Text = "OFF" Label8.ForeColor = Color.Black End If If valueout And 16 Then en = 1 Label10.Text = "ON" Label10.ForeColor = Color.Red Else en = 0 Label10.Text = "OFF" Label10.ForeColor = Color.Black End If If valueout And 32 Then f = 1 Label12.Text = "ON" Label12.ForeColor = Color.Red Else f = 0 Label12.Text = "OFF" Label12.ForeColor = Color.Black End If If valueout And 64 Then g = 1 Label14.Text = "ON" Label14.ForeColor = Color.Red Else g = 0 Label14.Text = "OFF" Label14.ForeColor = Color.Black End If If valueout And 128 Then h = 1 Label16.Text = "ON" Label16.ForeColor = Color.Red Else h = 0 Label16.Text = "OFF" Label16.ForeColor = Color.Black End If End If End Sub Public Sub decodeinpdata() 'decodifica dato in ingresso inviato dal server If valinact Then If valindata = ("1") Then If valuein And 1 Then labin1.Text = "ON" 24 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” labin1.ForeColor = Color.Red Else labin1.Text = "OFF" labin1.ForeColor = Color.Black End If If valuein And 2 Then labin2.Text = "ON" labin2.ForeColor = Color.Red Else labin2.Text = "OFF" labin2.ForeColor = Color.Black End If If valuein And 4 Then labin3.Text = "ON" labin3.ForeColor = Color.Red Else labin3.Text = "OFF" labin3.ForeColor = Color.Black End If If valuein And 8 Then labin4.Text = "ON" labin4.ForeColor = Color.Red Else labin4.Text = "OFF" labin4.ForeColor = Color.Black End If If valuein And 16 Then labin5.Text = "ON" labin5.ForeColor = Color.Red Else labin5.Text = "OFF" labin5.ForeColor = Color.Black End If If valuein And 32 Then labin6.Text = "ON" labin6.ForeColor = Color.Red Else labin6.Text = "OFF" labin6.ForeColor = Color.Black End If If valuein And 64 Then labin7.Text = "ON" labin7.ForeColor = Color.Red Else labin7.Text = "OFF" labin7.ForeColor = Color.Black End If If valuein And 128 Then labin8.Text = "ON" labin8.ForeColor = Color.Red Else labin8.Text = "OFF" labin8.ForeColor = Color.Black End If Else If valuein And 8 Then labin1.Text = "ON" labin1.ForeColor = Color.Red Else labin1.Text = "OFF" labin1.ForeColor = Color.Black End If If valuein And 16 Then labin2.Text = "ON" labin2.ForeColor = Color.Red Else labin2.Text = "OFF" labin2.ForeColor = Color.Black End If If valuein And 32 Then labin3.Text = "ON" labin3.ForeColor = Color.Red Else labin3.Text = "OFF" labin3.ForeColor = Color.Black End If If valuein And 64 Then labin4.Text = "ON" 25 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” labin4.ForeColor = Color.Red Else labin4.Text = "OFF" labin4.ForeColor = Color.Black End If If valuein And 128 Then labin5.Text = "ON" labin5.ForeColor = Color.Red Else labin5.Text = "OFF" labin5.ForeColor = Color.Black End If End If End If End Sub Private Sub ModificaListaServerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ModificaListaServerToolStripMenuItem.Click Imposta.Show() End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load consub() End Sub Private Sub CambiaServerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CambiaServerToolStripMenuItem.Click Application.Restart() End Sub Public Sub consub() 'procedure di attivazione box di connessione ListBox1.Items.Clear() Try Dim rimp As New IO.StreamReader("Imprcc.txt") While rimp.EndOfStream = False ListBox1.Items.Add(rimp.ReadLine) End While rimp.Close() Catch MsgBox("Impossibile trovare il file di configurazione, verranno ora richiesti i dati.", MsgBoxStyle.Exclamation) Imposta.Show() End Try End Sub Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button13.Click Close() End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Imposta.Show() End Sub Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click If sel = ("") Or sel = (" ") Then MsgBox("Nessun server selezionato.", MsgBoxStyle.Exclamation) Else impapp() End If End Sub Private Sub ListBox1_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDoubleClick Button12.PerformClick() End Sub Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged sel = ListBox1.SelectedItem 26 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” End Sub Public Sub startgroup() 'notifica la richiesta di proprietà ToolStripStatusLabel1.Text = "Richiesta dati da " ToolStripStatusLabel2.Text = sel conb.Visible = False CambiaServerToolStripMenuItem.Enabled = True grpout.Visible = True grping.Visible = True Button1.Visible = True End Sub Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click Application.Restart() End Sub Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click Close() End Sub Public Sub connprs() ' attiva box di connessione persa ToolStripStatusLabel1.Text = "Persa connessione con " StatusStrip1.ForeColor = Color.Yellow StatusStrip1.BackColor = Color.Red conb.Visible = False grping.Visible = False grpout.Visible = False Button1.Visible = False GroupBox9.Visible = True USCITAToolStripMenuItem.Enabled = False End Sub Private Sub btnout1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnout1.Click b = Not b 'nega il valore in memoria If b = ("1") Then ' se questo è uno attiva l'uscita lptdata = lptdata Or 1 'esegue la mascheratura del byte Else lptdata = lptdata And 254 'esegue la mascheratura del byte End If writelpt() 'va alla subroutine di scrittura su parallela End Sub Private Sub btnout2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnout2.Click a = Not a If a = ("1") Then lptdata = lptdata Or 2 Else lptdata = lptdata And 253 End If writelpt() End Sub Private Sub btnout3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnout3.Click c = Not c If c = ("1") Then lptdata = lptdata Or 4 Else lptdata = lptdata And 251 End If writelpt() End Sub Private Sub btnout4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnout4.Click d = Not d If d = ("1") Then lptdata = lptdata Or 8 Else lptdata = lptdata And 247 End If writelpt() End Sub 27 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Private Sub btnout5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnout5.Click en = Not en If en = ("1") Then lptdata = lptdata Or 16 Else lptdata = lptdata And 239 End If writelpt() End Sub Private Sub btnout6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnout6.Click f = Not f If f = ("1") Then lptdata = lptdata Or 32 Else lptdata = lptdata And 223 End If writelpt() End Sub Private Sub btnout7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnout7.Click g = Not g If g = ("1") Then lptdata = lptdata Or 64 Else lptdata = lptdata And 191 End If writelpt() End Sub Private Sub btnout8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnout8.Click h = Not h If h = ("1") Then lptdata = lptdata Or 128 Else lptdata = lptdata And 127 End If writelpt() 'va alla sub di invio End Sub Private Sub wait_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wait.Tick send() End Sub Private Sub PariOnToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PariOnToolStripMenuItem.Click lptdata = 170 'accende dispositivi pari writelpt() ' va alla sub di invio End Sub Private Sub DispariOnToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DispariOnToolStripMenuItem.Click lptdata = 85 'accende dispositivi dispari writelpt() 'va alla sub di invio End Sub Private Sub Primi4OnToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Primi4OnToolStripMenuItem.Click lptdata = 15 'accende primi 4 dispositivi writelpt() 'va alla sub di invio End Sub Private Sub Ultimi4OnToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ultimi4OnToolStripMenuItem.Click lptdata = 240 'accende ultimi 4 dispositivi writelpt() 'va alla sub di invio End Sub Private Sub tmrdata_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrdata.Tick tmrdata.Stop() writelpt() 28 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” End Sub Private Sub tmrbut_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrbut.Tick tmrbut.Stop() 'riattiva i bottoni dopo il tempo di attesa btnout2.Enabled = True btnout1.Enabled = True btnout3.Enabled = True btnout4.Enabled = True btnout5.Enabled = True btnout6.Enabled = True btnout7.Enabled = True btnout8.Enabled = True USCITAToolStripMenuItem.Enabled = True Button1.Enabled = True End Sub End Class Listato 4 – Interfaccia impostazioni Remotecontrol client (VB.NET) Public Class Imposta Dim sel As String Private Sub Imposta_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'carica i dati salvati all'avvio Try Dim rimp As New IO.StreamReader("imprcc.txt") While rimp.EndOfStream = (False) ListBox1.Items.Add(rimp.ReadLine) End While rimp.Close() Catch End Try End Sub Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click 'salva la nuova lista di server se la lista < 250 If TextBox1.Text = ("") Or TextBox1.Text = (" ") Then MsgBox("Nessun nome server da aggiungere.", MsgBoxStyle.Exclamation) Else If ListBox1.Items.Count > 250 Then MsgBox("Raggiunto il limite massimo di indirizzi memorizzabili!", MsgBoxStyle.Exclamation) Else ListBox1.Items.Add(TextBox1.Text) TextBox1.Text = "" Button1.Enabled = True End If End If End Sub Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 'controlla la selezione If ListBox1.SelectedItem = ("") Then MsgBox("Non hai selezionato nessun valore!", MsgBoxStyle.Exclamation) Else Form1.ToolStripStatusLabel2.Text = ListBox1.SelectedItem Me.Close() Form1.impapp() End If End Sub Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged 'seleziona i dati selezionati nella listbox sel = ListBox1.SelectedItem TextBox1.Text = ListBox1.SelectedItem End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click 'rimuove i dati nella listbox ListBox1.Items.Remove(sel) Button1.Enabled = True End Sub 29 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'salva le modifiche Dim wimp As New IO.StreamWriter("imprcc.txt") Dim index As Byte 1: Try wimp.WriteLine(ListBox1.Items.Item(index)) index = index + 1 GoTo 1 Catch wimp.Close() Button1.Enabled = False End Try Form1.consub() Me.Close() End Sub Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click Me.Close() End Sub End Class 30 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” 2. Descrizione sistema (Parte hardware) Per utilizzare Remotecontrol con una porta parallela o scheda dedicata è necessario creare un circuito che possa controllare i dispositivi e adattarne i segnali. Di seguito verrà descritta solo la parte hardware del progetto che utilizza la porta parallela LPT presente nella maggior parte dei PC. La Parallela LPT La porta parallela LPT chiamata anche porta Centronics permette nel suo nomale uso di interfacciare al PC una stampante. Per tale motivo questa porta non è stata progettata per controllare carichi elettrici, ma con qualche accorgimento si può creare un sistema di controllo di tutto rispetto. La parallela è presente nei PC in 4 versioni: • SPP - Standard Parallel Port (usata dall’Hardware Remotecontrol) È stata la prima versione standard della porta parallela presente fin dai primi PC IBM, è stata progettata solo per l’uso con le stampanti (LPT sta per Line Printer Terminal), è controllata dal software attraverso 3 registri(uno di output dato, uno di input stato e uno di controllo della stampante) a indirizzo fisico consecutivo. Anche se il protocollo è vecchio tutti gli odierni PC possono supportarlo. Di seguito si troverà una descrizione più dettagliata di questa versione. • SPP Modificata - standard IBM PS/2 È l’evoluzione della SPP e permette di effettuare, con opportune modifiche hardware, degli input anche nel registro di output del dato permettendo così l’uso di periferiche come memorie di massa. • EPP - Enhanced Parallel Port Da questa versione la porta parallela offre un bus bidirezionale veloce e un ottimizzazione a livello di gestione software che ne incrementa le prestazioni; la sua velocità va dai 500kbytes ai 2Mbytes al secondo, in entrambe le direzioni, con punte massime fino a 10Mbytes paragonabile quindi al bus ISA presente nei computer obsoleti. Si compone in totale di 8 registri hardware ad indirizzo riallocabile di cui i primi 3 sono come quelli della porta SPP, per garantire retro compatibilità. 31 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” • ECP - Extended Capabilities Port Ricalca e migliora le caratteristiche della EPP, prevede l'impiego del DMA (Direct Memory Accessing, Accesso diretto alla memoria) e dispone di Registro FIFO (First Input First Output) in grado di contenere fino a 16 byte sia in ricezione che in trasmissione, è in grado di trattare i dati con codifiche di compressione RLE (Run Lenght Encoding) prima di spedirli a destinazione, al fine di ottimizzare il rendimento del collegamento. La velocità massima, con l'intervento del DMA su un computer ISA è di 2,4 Mbyte e dispone di 6 Registri multifunzionali: oltre ai 3 classici della SPP ne ha altri 3, 2 dei quali a 16 bit, in grado di collocare i dati (o gli indirizzi) sulle linee d'uscita generando contemporaneamente i segnali di handshaking; alcuni di questi nuovi Registri implementano e si occupano del FIFO. L'obbiettivo della ECP è quello di migliorare la porta parallela per gli ambienti plug and play e Windows, incrementando le prestazioni della sua interfaccia bidirezionale. Le ECP usano la tecnica dell'indirizzamento logico del canale dati, ottimizzando la gestione di periferiche multifunzione (come uno Scanner/stampante). Questo è l’ultimo standard sviluppato per la parallela. Per l’utilizzo coretto del sistema Remotecontrol è necessario utilizzare la versione originale della parallela (SPP), per attivarla nei computer odierni è sufficiente andare nel BIOS della scheda madre e selezionare la versione SPP (vedere il manuale della propria scheda madre). Nel caso in cui il computer non disponga di parallela per utilizzare il circuito Remotecontrol è necessario utilizzare un adattatore USB->PARALLELA come in figura. 32 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Dettaglio versione SPP I tre registri gestibili da sistema che la compongono sono: Numero Indirizzo fisico Esadecimale (LPT1 o 2) 1° 2° 3° Direzione LPT1 378H; LPT2 278H out LPT1 379H; LPT2 279H in LPT1 37AH; LPT2 27AH out Tipologia Porta di Uscita Dati Registro di Stato della Stampante Registro di Controllo della Stampante D’ora in poi per semplificare la scrittura i registri verranno indicati riferendosi alla tabella sopra come 1° registro, 2°registro…etc . Gli indirizzi fisici sono uguali per tutti i PC, LPT1 rappresenta la prima porta parallela del computer (e unica se non ce ne sono altre), mentre LPT2 è la seconda. Va fatto notare che gli indirizzi di output possono anche essere usati via software come input per vederne lo stato attuale a livello diagnostico ed è proprio quello che fa Remotecontrol server per verificare il registro che controlla le uscite di Remotecontrol, il 1° registr o, mantenga il valore dell’ultimo comando di scrittura inviato. Le uscite della parallela sono tutte dotate di flipflop che mantengono il valore memorizzato senza la necessità di impegnare ulteriormente il processore. Inoltre ingressi ed uscite dispongono di buffer Tri-state che permettono in particolari configurazioni di mettere la linea a cui sono collegati in alta impedenza(se disattivate) e di amplificare il livello del segnale in tensione presente ai loro ingressi(se attivate). Tabella della verità di un buffer Tri-state non invertente positivo Ingresso 0 1 X Controllo 1 1 0 Uscita 0 1 Hi-Z C I U Come si può notare dalla tabella il segnale binario in ingesso (I) passa all’uscita (U) amplificato solo se l’ingresso C (controllo) è posto a livello alto, mentre se è posto a livello basso l’uscita (U) è posta ad alta impedenza cioè come se fosse un circuito aperto. 33 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Schema PINOUT della interfaccia parallela del PC Come si può vedere nella figura a fianco la parallela ha 25 piedini di cui: - i piedini dal 18 al 25 sono di massa - i piedini dal 2 al 9 sono dell’output di dato e sono controllati dal 1° registro - i piedini 10,11,12,13,15 sono di input e i loro valori logici possono essere prelevati dal 2° registro. - i piedini 1,14,16,17 sono di output (in Remotecontrol ne viene usato solo uno in output per il circuito startcommand) e sono controllati dal 3° registro. 1° REGISTRO - OUT DATO Questo registro rappresenta il dato in output della parallela, può anche essere usato come input a livello diagnostico per vedere il valore presente in output. Il registro è a 8 BIT e tutti i bit vanno ai rispettivi pin d’uscita. La circuiteria interna nella pagina seguente, rappresentata come era nell’originale schema del PC IBM, è composta da un integrato TTL 74LS374 che è un latch a flipflop D con buffer Tri-state a 8 BIT, infatti, il dato una volta inviato rimane memorizzato fino ad un nuovo comando senza la necessità di rinfrescarlo. Per mandare in output il valore basta inviare il comando out all’ integrato e i flipflop D copieranno il valore presente nel data bus del PC alle rispettive uscite della parallela, successivamente quando il comando di out sarà terminato il valore delle 8 uscite rimarrà invariato fino al successivo comando. 34 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Questo ingrato dispone anche dalla funzionalità Tri-state che però nella versione SPP non viene utilizzata (infatti il pin OC attivo basso che attiva i latch è tenuto a massa). Il secondo integrato TTL è invece un 74LS244 ovvero un buffer Tri-state non invertente ad 8 BIT in grado di copiare il valore presente attualmente in uscita nel data bus del PC attraverso il comando IN. Come già accennato questa funzionalità è utile solo a scopo diagnostico e permette a Remotecontrol server di rilevare i cambiamenti rispetto all’ ultimo comando inviato dal client. 2° REGISTRO - IN STATO Questo registro rappresenta lo stato attuale della stampante e in Remotecontrol viene usato per leggere i 5 input della scheda INPUT. Come si può notare dalla figura a fianco lo stato logico presente nel pin 11 viene negato, per questo nel circuito input di Remotecontrol è stata prevista un ulteriore negazione per quel pin. Altra particolarità è il fatto che nonostante il computer come registro lo veda ad 8 bit i primi 3 pin non sono collegati ai pin della porta parallela, infatti, Remotecontrol server ignora (se è attivata come opzione la parallela per 35 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” input) i primi 3 bit facendo diventare il terzo bit l’ingresso uno, il quarto bit l’ingresso due e così via. Anche se a livello di pin della porta i bit sono scombinati la scheda INPUT ha i collegamenti dei pin di uscita verso il PC scombinati come i bit della porta, in modo che il computer li veda già in ordine. Come si può notare dallo schema interno sopra tutti gli ingrassi hanno delle resistenze di PULL-UP che mantengono gli ingressi della porta a livello alto (per cambiare stato è sufficiente cortocircuitare il pin a massa), questo serve a garantire stabilità di livello logico anche senza nessun dispositivo collegato. Fa uso di ben 3 integrati TTL (transistor transistor logic): - 74LS240 ( 8 bit buffer Tri-state invertente) Ha 4 dei 5 ingressi e si occupa di far passare i dati in ingresso solo quando viene dato il comando di input, l’integrato non ha alcun tipo di memoria per cui il dato inviato nel data bus è quello attualmente presente negli ingressi. L’integrato si occupa anche di negare i valori logici dei segnali presenti al suo ingresso se vengono fatti lasciar passare dal comando IN. Tutti i segnali vengono negati dall’integrato successivo prima di entrare in questo integrato tranne il pin 11 che entra direttamente in questo integrato e viene negato, per questo motivo il computer vede questo bit negato rispetto allo stato logico effettivo del pin. Per questo motivo la scheda INPUT di Remotecontrol prevede già una negazione di questo bit portandolo allo stesso livello logico predefinito degli altri bit. - 74LS14 (6 inverter a trigger) Questo integrato non fa altro che negare i valori logici presenti in ingresso con livelli o “soglie” ben precise andando ad aumentare la stabilità e l’immunità ai disturbi. 36 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” All’ uscita della porta inverter che nega il valore del pin 10 si nota come tale bit possa generare interruzione al processore, anche se questa funzionalità non viene usata in Remotecontrol. Essendo questi segnali negati 2 volte, da questo integrato e da quello sopra descritto, i segnali è come se non fossero negati e il processore li legge allo stato effettivo in cui sono nei pin. - 74LS125 (4 buffer Tri-state non invertenti) L’unico di 4 buffer usato è collegato con il pin 13 della parallela e tale buffer viene aperto sempre con il comando di input. Alla sua uscita è collegato il bit 4 del data bus del PC e il livello logico visto dal PC non è negato. 3° REGISTRO - OUT CONTROLLO Questo registro è di output e serve a inviare segnali di controllo alla stampante. Come si vede nella figura a fianco anche in questo registro non tutti gli 8 bit vanno nei pin di uscita della porta parallela. Infatti, solo i primi 4 sono in uscita nei pin e 3 di questi sono negati. Inoltre il sistema Remotecontrol utilizza solo il primo bit (BIT 0) per attivare il circuito STARTCOMMAND, descritto di seguito, corrispondente al pin 1 denominato nella SPP STROBE. Essendo un bit negato nel circuito STARTCOMMAND viene negato di nuovo eliminando di fatto la negazione. Come si può vedere dal disegno del circuito presente nella pagina successiva Questo registro può essere sia scritto che letto attraverso il comando ai pin IN e OUT. Le 3 linee su 4 (pin 1, 14 e 17) sono TTL di tipo collettore aperto, uscite di altrettanti inverter dell'integrato 74LS06 (contenente 6 inverter) mentre la rimanente (sul pin 16) è l'uscita di uno dei 4 buffer non invertenti Tri-state dell'integrato 74LS125. Le prime 3 hanno il resistore di pull-up, collegato internamente al polo positivo dell'alimentazione. Il collegamento del suo controllo Tri-state al suo ingresso e la presenza del resistore di pull-up in uscita rende "trasparente" la presenza di questa porta dal punto di vista logico (con 1 in ingresso sarebbe in alta impedenza, ma il pull-up assicura l'1 anche in uscita e con 0 in ingresso il livello passa senza problemi anche in uscita). 37 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Da notare che il 3°registro è realizzato con i 4 BI T erogati che vengono anzitutto memorizzati su di esso e dei 2 bit disponibili uno rimane inutilizzato mentre l'altro è usato per controllare l'abilitazione a interrompere la cpu. Si può notare che è possibile anche la lettura di queste 4 le linee d'uscita, in questa versione per soli fini diagnostici. A partire dai pin del connettore (cioè a valle dei rispettivi buffer) esse sono internamente riportate in ingresso sulle linee ancora libere dell'integrato 74LS240, l'ottuplo buffer invertente Tri-state utilizzato come 3° Registro di input. Lo stato dei 4 pin 1, 14, 16 e 17 può dunque essere letto rispettivamente sui bit0, 1, 2 e 3 di questo registro (con logica invertita, data la natura invertente del 74LS240, escluso lo stato del pin 16 invertito 2 volte per mantenere la logica usata in uscita). Poiché, se si fa caso, tutte le negazioni vengono ripetute due volte ciò che viene scritto in output avrà lo stesso valore di ciò che sarà possibile leggere dando un input al registro. N.B. Attualmente questi integrati non sono più presenti nei computer odierni poiché di fatto tutto il circuito è inserito nel chipset della scheda madre pur rispettando la logica di funzionamento. Anche i livelli TTL originari negli odierni computer, soprattutto portatili, non vengono molto rispettati poiché l’uscita alta dei pin invece che essere 5 volt spesso è a 4 o 3,5 volt, proprio al limite delle specifiche. 38 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Ecco una vista d’insieme dei pin citati: USO DELLA PARALLELA CON INOUT32 Per scrivere nella parallela la libreria INOUT32 ha bisogno dell’indirizzo del registro in cui dovrà scrivere in decimale (per esempio il 1° registro è 888 perché 378 HEX = 888 DEC) e il valore da scrivere in decimale (che essendo 8 bit in binario 28 = 256 cioè da 0 a 255 numeri decimali che possono essere scritti). Nella lettura invece è sufficiente l’indirizzo fisico del registro in cui leggere e la libreria restituirà il valore degli 8 bit del registro in decimale con un numero che andrà da 0 (tutti e 8 a livello basso) a 255 (tutti e 8 a livello alto). Ecco da 0 a 15 (con alcuni passi particolari), per motivi d’ingombro, la codifica binario-decimale usata da INOUT32. Valore DEC 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16… 32… 64… 128... 255 Valore BIN (8 bit) 00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001 00001010 00001011 00001100 00001101 00001110 00001111 00010000 00100000 01000000 10000000 11111111 39 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Progettazione del circuito La progettazione dei circuiti che compongono il sistema Remotecontrol è stata eseguita seguendo queste fasi: - Ideazione delle possibili soluzioni circuitali: come prima parte dello sviluppo è stata ideata la scheda output e il circuito startcommand, successivamente la scheda input, la scheda di interfaccia e la scheda di protezione dai cortocircuiti e sovraccarichi. - Realizzazione dello schema su foglio a mano e test del circuito su Breadboard per verificare che tutte le aspettative volute siano state ottenute. - Verificata la fase precedente si è provveduto alla realizzazione dello schema e alla sbrogliatura del master su computer. In questa fase si è utilizzato il programma di CAD elettronico gratuito FidoCAD (http://www.enetsystems.com/~lorenzo/fidocad_win.asp). - La successiva fase consiste nello sviluppo della basetta tramite fotoincisione. Nel dettaglio è stato creato il master ed è stato stampato su carta trasparente da disegno e poi è stato inserito nel bromografo che mi sono auto costruito per creare le basette. Dopo aver 40 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” atteso 1-2 minuti le basette sono state inserite nel liquido di sviluppo e poi successivamente nel cloruro ferrico per corrodere il rame in eccesso e lasciare quello utile. - Dopo la realizzazione del master su basetta si è provveduto alla foratura della basetta e alla saldatura dei componenti. - Successivamente si è provveduto ad un ulteriore test per verificare il corretto funzionamento del circuito finale. - Una volta verificato il corretto funzionamento si è applicato sul fondo della scheda uno spray di protezione dei circuiti stampati per proteggere il rame dall’ossidazione e fornire una lieve patina dielettrica nel fondo della scheda. 41 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Modulo Uscite (scheda OUTPUT) Questa è la prima scheda che compone il sistema Remotecontrol ed è stata sviluppata con queste caratteristiche: - Possibilità di gestire 8 uscite a 12 Volt con almeno 2 Ampere di carico massimo e segnalazione su led dell’ accensione. La scelta è ricaduta sui MOSFET a canale P IRF9540 che come tutti i mosfet hanno bassa resistenza quando sono in stato ON e bassa dispersione di calore rispetto ai transistor tradizionali portando la scheda OUTPUT a pilotare fino a 3 Ampere senza necessità di dissipatori o ventole. La struttura interna del mosfet è visibile a fianco, esso è composto da tre terminale Source, Drain e Gate. Il gate è quello che permette di controllare il flusso di corrente presente tra source e drain (quindi se attivare o no il carico). Rispetto ai classici transistor il mosfet nel gate non ha una corrente costante ma è come se ci fosse un condensatore e quindi il flusso di corrente c’è solo soltanto durante le transazioni di stato. Questo rende superfluo l’uso della resistenza sul gate che è stata messa solo per proteggere il circuito da eventuali malfunzionamenti del mosfet. - Isolamento galvanico tramite fotoaccoppiatori (dispositivi che isolano i 2 circuiti attraverso un led che illumina un fototransistor) per proteggere il computer da danneggiamenti o rotture. Per questa caratteristica sono stati utilizzati dei comuni fotoaccoppiatori 4N25. - Uso di buffer per normalizzare i livelli logici e le richieste di energia dei fotoaccoppiatori, poiché molto spesso le parallele (soprattutto nei portatili) non forniscono esattamente 5 Volt a livello alto come dettato dalle caratteristiche TTL, ma arrivano nei peggiori casi anche a 3,5 Volt. Questo è spesso dovuto alla poca disponibilità di corrente prelevabile dalla porta parallela (< 10 milliampere). - Alimentazioni separate, ovvero 5 Volt tra parallela e fotoaccoppiatori e successivamente tra fotoaccoppiatori e uscite 12 volt. Questo permette tramite il circuito Startcommand (se usato) di disabilitare l’alimentazione delle uscite quando il software Remotecontrol server non è attivo e quindi prevenire accidentali accensioni dei carichi. Inoltre permette di pilotare carichi a 12 volt come elettrovalvole, relè, teleruttori, ventole, lampadine e apparati elettronici. 42 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” - Fornitura dei pin necessari al funzionamento della scheda Startcommand (le 8 uscite dei carichi + 1 pin collegato al pin 1 STROBE della parallela) - L’attivazione o disattivazione delle uscite non deve dipendere dalla massa della scheda ma deve essere controllata dal terminale + permettendo così l’uso di altre masse secondarie (come capita spesso in dispositivi con più connettori). Per capire meglio questa particolarità è necessario vedere le configurazioni circuitali. Se si fosse usato un comune mosfet a canale N come si vede in figura a fianco l’attivazione o disattivazione del carico esterno dipenderebbe dalla massa del carico esterno e se questo carico disponesse di altri connettori collegati a massa l’effetto del mosfet sarebbe vano portando il carico ad essere sempre attivo. L’utilizzo della configurazione (visibile a fianco) con mosfet canale P permette di porre il controllo di attivazione direttamente a Vcc, in questo modo è possibile avere nel carico anche altre masse senza nessun problema. L’uso della configurazione con mosfet richiede una modifica della logica di funzionamento. Mentre prima con la configurazione a mosfet N per far sentire la differenza di potenziale al carico era necessario attivare il mosfet portando a Vcc l’ingresso di attivazione, ora il funzionamento è esattamente il contrario: portando a Vcc l’ingresso di attivazione il mosfet non sarà in conduzione e pertanto il carico non sentirà la differenza di potenziale, mentre portando l’ingresso di attivazione a massa il mosfet andrà in conduzione e il carico sentirà la differenza di potenziale. Nella pagina successiva è visibile lo schema d’insieme del circuito. Innanzitutto si può vedere che in ingresso arrivano 2 tensioni: una a 5 volt che alimenta i il buffer e i diodi Led dei fotoaccoppiatori e una tensione a 12 volt proveniente dal circuito startcommand che permette di alimentare tutte le uscite. Tra gli ingressi dalla parallela si notano il pin strobe e gli 8 pin di attivazione delle 8 uscite. Il pin strobe viene collegato direttamente al pin che va al 43 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” 44 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” circuito startcommand con una resistenza di pull down che mantiene il livello logico basso se il cavo parallelo non è collegato. Anche negli 8 pin provenienti dalla parallela sono collegati con resistenze di pull down (rete resistiva RN1) che mantengono il livello basso stabile anche se il cavo parallelo viene lasciato scollegato a circuito attivo. Subito dopo si nota l’integrato 74HC541 (schema interno a fianco) che è un ottuplo buffer Tri-state (la funzione Tri-state non viene utilizzata poiché i pin 1 e 19 sono a massa) che permette di normalizzare i livelli logici in uscita dalla parallela e di pilotare i fotoaccoppiatori senza sovraccaricare la parallela. All’uscita dell’integrato è visibile il connettore ad 8 pin che porta i bit d’uscita della parallela al circuito startcommand e la rete resistiva da 330 ohm che fornisce la giusta corrente ai led dei fotoaccoppiatori, questo valore resistivo è stato calcolato nel seguente modo. Dal datasheet del fotoaccoppiatore 4N25 si hanno i seguenti dati utili al calcolo: - Massima corrente led (IFmax)= 60mA - Tensione di soglia led = 1,5V (massimo) Il valore della corrente da far scorrere nel led l’ho fissato a circa 15mA, più che sufficienti per attivare con sicurezza il led del fototransistor senza sovraccaricare il buffer. Fatte queste considerazioni è possibile fare il calcolo del valore della resistenza utilizzando il valore E12 più vicino disponibile come rete resistiva. All’uscita dell’ integrato (secondo il datasheet) a livello alto viene fornita una tensione uguale a quella di alimentazione (5 volt). Quindi: Va lim . − Vled 5 − 1,5 = = 330ohm Iled 0,015 e la potenza minima di tale resistenza (o della rete resistiva) sarà di R x I2 = 330 x 0,0152 = 0,07W = 1/8 watt (valore commerciale più vicino). Questa rete resistiva (RN2) è di tipo dual in line, ovvero è come se fossero 8 resistenze affiancate (con potenza minima di 1/8 watt) che ovviamente si possono sostituire alla rete resistiva utilizzata. Dall’altra parte del fotoaccoppiatore è presente il fototransistor che, se illuminato dal led, cortocircuita a massa la resistenza proveniente da RN3. Questa rete resistiva è necessaria realizzarla a mano prendendo 8 resistenze da 33Kohm (non critici) e piegando ad “L” solo una parte dei terminali; infine rispettando le distanze dei buchi sulla basetta vanno saldati insieme tutti i 45 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” terminali ad “L” e l’ultimo terminale libero va saldato nel terminale connesso a +12 volt. Il risultato finale dovrebbe essere questo: Questa rete resistiva, insieme ai fototransistor dei fotoaccoppiatori premette di far avere ai mosfet nel pin GATE (attraverso le resistenze R2÷R9 che servono solo come protezioni in caso di malfunzionamento dei mosfet) i due livelli di tensione, 0 e 12 volt, che ne permettono il controllo. I mosfet ricevono in ingresso dal pin SOURCE la tensione a 12 volt che provvede ad alimentare i mosfet che a loro volta alimentano, attraverso il pin DRAIN, i rispettivi carichi. Quando al pin GATE vi sarà una tensione di 12 volt il mosfet di tipo P sarà interdetto (o stato OFF) e la tensione in uscita sul pin DRAIN sarà di 0 volt, quindi il carico ad esso collegato sarà spento. Quando invece al pin GATE vi sarà una tensione di 0 volt il mosfet di tipo P sarà in saturazione (o stato ON) e la tensione in uscita sul pin DRAIN sarà di 12 volt (tralasciando le pochissime perdite del mosfet), quindi il carico ad esso collegato sarà attivo (tutte le tensioni riferite a massa). All’ uscita di ogni mosfet è presente un circuito composto da un Led rosso con resistenza da 820 ohm e da un diodo 1N4007 in ANTIPARALLELO. Come si può intuire il led con resistenza serve a segnalare a livello hardware lo stato logico delle uscite (se sono attive o spente), mentre il diodo in antiparallelo (ovvero polarizzato inversamente rispetto all’alimentazione) serve a proteggere il mosfet dai rilasci di elevate tensioni durante i distacchi dell’ alimentazione dei carichi induttivi quali elettrovalvole, relè, elettromagneti etc. Praticamente un induttore al distacco della sua alimentazione provoca delle tensioni elevate (ai sui capi) di polarità inversa rispetto all’ alimentazione che potrebbero, a lungo termine, andare a danneggiare il mosfet. Il diodo essendo montato al contrario normalmente non conduce e non fa da cortocircuito, mentre le tensioni inverse provocate dal distacco dell’induttanza vedono il diodo come cortocircuito e non vanno a scaricarsi nel mosfet. 46 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Dissipazione di calore dei mosfet di uscita Il sistema output Remotecontrol è stato progettato per pilotare carichi abbastanza elevati senza l’uso di alcun dissipatore, ovviamente è possibile mettere un dissipatore per poter controllare correnti fino a 16A continuate. Considerando la condizione prevista, ovvero senza dissipatori, possiamo calcolare la corrente massima che è possibile far controllare dai mosfet. Considerando che la resistenza termica giunzione-ambiente del mosfet IRF9540 è di 62°C/W si può calcolare la potenza per non far superare al mosfet la temperatura operativa di 160°C. Tjm = Rj * P max Tjm 160 P max = = = 2,5W Rj 62 P = R*I2 I= P max = R 2,5 = 3,53 A 0,2 Dove: Tjm = temperatura giunzione mosfet massima Rj = resistenza termica giunzione-ambiente Pmax = potenza massima supportata I = corrente massima controllabile R = resistenza interna del mosfet IRF9540 (0,2 ohm) Come si può notare la corrente massima controllabile è di 3,5 Ampere a cui però va aggiunta una soglia di sicurezza di – 0,2 Ampere per non correre rischi di surriscaldamenti, quindi la corrente massima controllabile sarà di 3,3 Ampere. Ovviamente mettendo un dissipatore è possibile aumentare questa corrente massima controllabile fino a 16 ampere. La corrente massima ricavata sarà utile successivamente nella progettazione della scheda contro sovraccarichi e cortocircuiti. 47 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Di seguito è possibile vedere il master del circuito stampato e alcune foto della realizzazione di questa scheda. 48 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Modulo Ingressi (scheda INPUT) Il modulo uscite (o scheda input) permette di portare in ingresso al computer 5 entrate digitali con valori di tensione di 0 volt per il livello logico 0 e 12 volt per il livello logico 1. Le caratteristiche principali sono: - 5 ingressi digitali; - Ingressi ad alta impedenza con transistor di amplificazione; - Possibilità di isolamento degli ingressi visti dal computer quando il circuito startcommand non è attivato; - Isolamento galvanico tramite fotoaccoppiatori tra il modulo ingressi e il PC. _____________________________________________________________ IL TRANSISTOR Per la rivelazione del livello logico in ingresso in questa scheda viene usato il transistor. Questo particolare componente a semiconduttore viene anche definito amplificatore di corrente per la sua peculiarità di controllare correnti grandi con correnti molto piccole attraverso un parametro definito hFE. La figura a fianco chiarisce meglio il funzionamento. Come si può notare il transistor utilizzato è un transistor N PN (ovvero creato con 2 parti di silicio drogato di tipo N e 1 parte tra le 2 parti drogata di tipo P), unico tipo utilizzato in questa scheda del sistema Remotecontrol. Questa configurazione del transistor dispone di un ingresso ed un uscita entrambe riferite a massa ed transistor dispone di 3 terminali: Collettore ( C ), Base ( B ) ed Emettitore ( E ). In condizioni normali tramite la tensione S.in e la resistenza Rb si fa fluire una corrente nella base del transistor ed il transistor farà passare una corrente attraverso la resistenza Rc (Ic) una corrente pari ad hFE x la corrente che passa in Rb(Ib). Nell’ uso con Remotecontrol è necessario che il transistor non lavori in zona attiva (come precedentemente descritto) ma in condizione di saturazione ed interdizione. La condizione di saturazione sarà presente quando il transistor farà passare tutta la corrente che Rc è in grado di far passare(a livello di formula Ic << hFE x Ib). L’altra condizione detta interdizione sarà quando Ib = 0 (dovuto ad una tensione in S.in assente o < 0), in questo caso la resistenza imposta dal transistor sarà altissima rispetto ad Rc e nessuna corrente significativa scorrerà attraverso quest’ultima. 49 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Se si mette un voltmetro con il puntale + tra la resistenza Rc e il collettore del transistor ed il puntale – a massa si potrà vedere che quando il transistor si trova in interdizione (0 volt in ingresso) il voltmetro misurerà la tensione Vcc poiché non essendoci nessuna corrente la tensione non cadrà sulla resistenza Rc ma solo sul transistor. Mentre in saturazione (+V in ingresso) la tensione misurata sarà di 0,3 volt poiché il transistor farà scorrere tutta la corrente sulla resistenza e la tensione cadrà per la maggior parte su quest’ultima. Come si può notare il livello logico viene invertito. _____________________________________________________________ Schema elettrico Tornando al progetto della scheda input di Remotecontrol, che usa all’ingresso il transistor NPN BC547, si può notare come la configurazione del transistor sia particolare. In ingesso di ogni segnale troviamo due resistenze (per esempio R2 e R8 rispettivamente di 4,7 Kohm e 10 Kohm): la prima permette di regolare la corrente che affluisce dentro alla base del transistor, mentre la seconda serve a diminuire il più possibile i disturbi che potrebbero mandare senza segnale in conduzione il transistor e di fatto fa da strada per le piccole tensioni che potrebbero essere indotte da circuiti esterni e portare in conduzione il transistor. 50 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Collegato al collettore di questo transistor troviamo una rete resistiva RN1 da 330 ohm (costruito nel modo descritto nella sezione della scheda output) con vari led collegati. Quando il transistor è interdetto la tensione sul collettore sarà di Vcc - Vled e il led non si accenderà poiché nessuna corrente scorre in esso, mentre quando il transistor sarà in saturazione la corrente scorrerà nel led e quest’ultimo si attiverà segnalando la presenza del livello alto in ingresso e la tensione sul collettore sarà di circa 0,3V. Sul collettore dei transistor si avrà quindi un valore logico negato rispetto all’ingresso del transistor ed ogni collettore del transistor è collegato ai pin dell’integrato 74HC541 (già descritto nella parte della scheda output) che fa da ottuplo buffer Tri-state e permette di portare il livello logico in uscita ai fotoaccoppiatori adattando le impedenze e andando anche a disabilitare le uscite quando startcommand è disattivato (si notano i pin 7, 8, 9, 10 a massa poiché non utilizzati). Si nota inoltre la presenza di un sesto transistor usato per negare il valore in ingresso dal circuito Startcommand poiché il buffer 74HC541 ha l’attivazione dell’ output con i pin 19 e 1 a massa, mentre la scheda startcommand attiva gli ingressi mettendo una tensione di 5 volt nell’ ingresso di questo transistor, inoltre si nota la presenza della resistenza R1 che fa da pull-up garantendo la stabilità del livello alto (ovvero buffer disattivati). Successivamente al buffer troviamo la rete resistiva RN2 che permette di regolare la corrente che scorre attraverso i diodi dei fotoaccoppiatori (come già descritto nella parte della scheda output). All’ uscita dei fototransistor dei fotoaccoppiatori si trova un altra rete resistiva (RN3) 8+1 da 4,7kohm che assicura il livello di tensione quando i fototransistor sono in interdizione (nella parallela ci dovrebbero essere già delle resistenze di pull-up interne anche se non è sempre vero). All’ ingresso della tensione della rete resistiva RN3 troviamo il diodo D1 1N4148 che permette, anche a circuito spento, di non far tornare indietro correnti provocate dalle resistenze di pull-up presenti all’interno della parallela che potrebbero attivare qualche dispositivo inutilmente nel sistema Remotecontrol. Si nota inoltre la diversa configurazione del led del primo fototransistor. Questo non fa altro che negare nuovamente il livello presente in ingresso poiché quando il valore di tensione sul pin dell’ integrato sarà zero il led si accenderà. Diversamente tutti gli altri led mantengono il valore logico intatto. La posizione delle varie uscite è stata messa in modo che il valore possa essere prelevato in ordine nel registro della parallela attraverso il software e che a circuito startcommand attivato il registro presenti esattamente il valore binario in ingresso (nonostante le negazioni sui pin della parallela), per cui via software non viene eseguita alcuna negazione. 51 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Se l’integrato, per via della scheda startcommand non attiva, si ritrova in alta impedenza gli effetti dei fotoaccoppiatori vengono annullati e di fatto per il computer è come se la scheda fosse scollegata fisicamente. La scheda input necessita di un'unica alimentazione a 5 volt stabilizzata. DIMENSIONAMENTO Il livello di tensione alto in ingresso (se si vuole utilizzare una tensione diversa da 12 volt) della scheda input va deciso per poter dimensionare le resistenze d’ingresso dei transistor (R2, R3, R4, R5, R6 e R7), questo dimensionamento va effettuato analizzando la maglia di ingresso ed uscita del transistor. Innanzitutto va considerato che anche se i pin d’ingresso dei buffer dell’integrato sono collegati ai collettori dei transistor essi non portano alcun effetto sul circuito avendo gli ingressi con un impedenza molto elevata. Fatte queste considerazioni il circuito può essere riassunto come appare in figura a fianco. La resistenza che ci interessa dimensionare la resistenza R3 (o Rb) che dovrà far fluire una corrente (Ib) per mandare in saturazione il transistor. Innanzitutto a 0 volt in ingresso il transistor sarà interdetto e il led spento poiché Vce = Vcc – Vled e nessuna corrente Ic sarà presente. Per quanto riguarda la saturazione si può trovare il valore di Ib necessario analizzando la maglia d’uscita. (tutti i calcoli sono per lavorare in saturazione) Essendo in saturazione (hFE(min) BC547 = 110 e Icmax = 100mA) Vcc − Vled − Vcesat 5 − 1,8 − 0,3 = = 8,7 mA Rn1 330 8,7 * 10 −3 Ic * 2 = 158uA Ibsat = * 2 = 110 hFE Ic = Ora la resistenza calcolata nella maglia d’ingresso dovrà fornire almeno questa corrente per mandare in saturazione il transistor. Esempio con tensione a livello alto in ingresso = 12 Volt Rb = Vinh − Vbesat 12 − 0.8 = = 71Kohm Ibsat 158 * 10 −6 Anche se la resistenza risultante è di 71Kohm nel progetto è stata utilizzata una resistenza inferiore di 4,7Kohm in grado di mandare ugualmente il transistor in saturazione anche a tensione inferiori (come a 5 Volt). Ricalcolando il valore di Rb è possibile utilizzare la tensione di livello alto a piacimento, mentre il livello basso è sempre a 0 volt. Di seguito è possibile vedere il master del circuito stampato e alcune foto della realizzazione di questa scheda. 52 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” 53 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Modulo Startcommand (scheda Startcommand) Questa scheda ha il compito di attivare il controllo delle uscite della parallela da parte del computer e permette a quest’ultimo di ricevere in ingresso i segnali dalla scheda input. L’uso di questo circuito è reso necessario dal fatto che la parallela non è stata progettata come porta di gestione di ingressi e uscite ma bensì inizialmente come porta per stampanti e successivamente come bus di comunicazione. Questo provoca alcuni problemi nell’ uso della porta in questo progetto: - Possibilità di attivazioni non volute delle uscite durante l’avvio o l’arresto del computer. Questo è dovuto ai test effettuati dal BIOS sulla porta per rilevarla e per cercare di comunicare con la periferica. - Alcuni segnali mandati in ingresso dalla scheda input, durante il processo di avvio, potrebbero far credere al computer che sia presente una periferica. Per questi motivi è necessario isolare, quando il software Remotecontrol server non è in esecuzione, sia gli ingressi e che le uscite le uscite. La scheda Startcommand esegue proprio questa operazione con l’ausilio di una chiave (ovviamente elettronica e virtuale) per poter attivare o disattivare l’attivazione delle schede input e output. Questa chiave non è altro che un treno di impulsi prelevato dal pin strobe della parallela e generato durante l’avvio del software di Remotecontrol server. Inoltre per far validare questo treno di impulsi è necessario che ognuno degli 8 bit di uscita dalla parallela, durante il treno di impulsi, sia a livello logico 0. In questo modo è possibile limitare al massimo i problemi di attivazione accidentale delle uscite durante l’avvio del PC poiché se anche uno solo dei bit di uscita della parallela è a livello 1 (come accade durante l’avvio) il treno di impulsi viene completamente ignorato. Di conseguenza il software Remotecontrol server porterà tutte le uscite della parallela a livello 0 e poi invierà il treno di impulsi. L’attivazione della linea a 12 volt per la scheda output avviene attraverso un MOSFET P IRF9540 che rispetto al circuito Startcommand è opto isolato tramite fotoaccoppiatore. Per attivare il circuito tramite il treno di impulsi è stato necessario utilizzare un integrato CD4017 (contatore decimale) e un integrato CD4013 (2 flip-flop configurabili come Set Reset(SR) o Delay(D) ). Il primo conta il numero di impulsi che possono corrispondere al set o al reset del primo flip-flop SR presente nel CD4013 (in questo integrato i due flip-flop possono essere configurati come flip-flop SR o flip-flop D indipendentemente l’uno dall’ altro). All’uscita di questo flip-flop configurato come SR è presente un pin per attivare la scheda input e un fotoaccoppiatore controllato da transistor per abilitare il MOSFET P che attiva i 12 volt di alimentazione della scheda output. 54 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” SCHEMA ELETTRICO In basso a destra è possibile vedere la porta OR creata con i diodi che permette di mantenere resettato il contatore decimale CD4017 (con il pin 15) se almeno uno dei bit in uscita dalla scheda output è a livello 1. Di fianco a questa porta, e collegata ad essa come un altro ingresso della porta OR, è possibile vedere un condensatore con una resistenza e un diodo in uscita: questa configurazione permette di attivare il reset dell’ integrato per un breve 55 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” periodo di tempo quando viene collegata l’alimentazione della scheda, poiché il condensatore quando è in carica fa da cortocircuito e quindi sulla resistenza R6 ci sarà una tensione che se maggiore di 0,7 volt supererà il diodo e porterà al reset l’integrato CD4017. Quando il condensatore sarà carico diventerà come un circuito aperto e quindi nessuna tensione insisterà sulla resistenza e quindi il livello in uscita dal diodo sarà 0, rilasciando il reset del CD4017. A fianco è possibile vedere la piedinatura dell’integrato CD4017 e CD4013. Nel pin 14 (clock) dell’integrato CD4017 [ collegato il transistor TR1 che si occupa di negare il valore in logica negativa CD4017 proveniente dal pin strobe della parallela attraverso la scheda output. Il pin 13 (clock enable) è collegato a massa per attivare il segnale di provenente dal pin strobe della parallela. Gli unici pin di uscita utilizzati in questo contatore decimale sono i pin 11 e 9 corrispondenti al conto decimale di 9 e 8. Il pin con il conteggio fino all’ 8 (pin 9) è collegato con un diodo al pin reset cioè il pin 4 del primo flipflop in modalità Set-Reset (l’unico usato) e a condividere questo pin vi è anche un la configurazione circuitale con diodo, resistenza e condensatore, già visto in precedenza, che permette di resettare il flip-flop quando viene attaccata l’alimentazione per prevenire attivazioni accidentali. L’uscita 9 (pin 11) del CD4017 è CD4013 collegata all’ingresso SET del flipflop Set –Reset. Il flip-flop set reset funziona secondo questa tabella della verità: SET RESET Q1 Q1 negato 1 0 1 0 0 1 0 1 0 0 Valore precedente 1 1 Non previsto Considerando che l’uscita del flip-flop Q1 è quella che attiva la scheda startcommand si può dedurne facilmente il funzionamento: 56 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” quando al contatore arriverà un treno di impulsi pari a 9 (partendo da 0 e arrivando a 8) attivazioni/disattivazioni, senza alcun bit attivo nella scheda output, il contatore provocherà il reset del flip-flop SR, mentre se al contatore arriverà un treno di impulsi pari a 10 (partendo da 0 e arrivando a 9) attivazioni/disattivazioni, senza alcun bit attivo nella scheda output, il contatore provocherà il set del flip-flop SR e quindi l’attivazione di Q1. Ovviamente le 2 condizioni possono avvenire non necessariamente in ordine e possono anche essere confermate, cioè ripetute più volte senza provocare attivazioni/disattivazioni del circuito startcommand non volute. Con questa soluzione e possibile attivare o disattivare gli ingressi e le uscite solamente attraverso il “codice” della chiave. Gli ingressi dedicati alla modalità Delay del primo flip-flop (Clock pin 3 e Data pin 5) sono sati messi a massa per consentire il corretto funzionamento della modalità SR del flip-flop, mentre il secondo flip-flop, non essendo usato, ha tutti i pin d’ingresso a massa (pin 8,9,10,11). L’uscita del flip-flop SR usato è collegata ad un pin di uscita che andrà collegato direttamente all’ ingresso predisposto sulla scheda input per consentire l’attivazione degli ingressi ed è anche collegato al fotoaccoppiatore IC3, mediante il transistor TR2, che si occupa di attivare il MOSFET P che controlla la tensione di 12 volt che andrà ad alimentare le uscite della scheda output. Le resistenze Rb, R9 ( rispettivamente di 22Kohm e 330 ohm) sono state dimensionate per far andare in saturazione il transistor con le stesse modalità presentate nel capitolo della scheda input considerando come corrente led fotoaccoppiatore 10mA e tensione di soglia led 1,5V. La seconda parte del circuito è quella che gestisce l’attivazione delle uscite della scheda output. Sarebbe stato possibile controllare l’attivazione della scheda output tramite la disattivazione del buffer Tri-state presente nella scheda output scheda risparmiando l’uso del MOSFET e di questa parte del circuito, però questo avrebbe portato alla impossibilità di rilevare i bit di uscita attivi nella scheda output da parte della scheda Startcommand andando a vanificare proprio il vantaggio che si ha usando questa scheda. Il mosfet di tipo P è stato collegato con le stesse modalità presentate con i mosfet della scheda output e l’attivazione avviene quando viene cortocircuitata a massa dal fototransistor che è comandato dal led del fotoaccoppiatore. Quando il circuito startcommand è disattivato la tensione Vcc di 12V in ingresso mantiene il mosfet interdetto attraverso R1 ed R2. Il led LD1 con l’opportuna resistenza R10 segnala l’attivazione della scheda e che la tensione di 12V in uscita verso la scheda output è presente. Il mosfet dovrà supportare tutta la corrente che tutte le uscite della scheda output andranno ad assorbire e se questo mosfet non basterà è possibile aggiungerne un secondo in parallelo, per questo motivo è necessario utilizzare un dissipatore che dovrà avere una resistenza termica minore di 57 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” quella calcolata con la seguente formula. (in questo caso ho dimensionato il dissipatore considerando un assorbimento massimo di 8 ampere poiché raramente si andranno ad assorbire tutti i 24 ampere che la scheda output è in grado di assorbire considerando tutte le sue uscite attive ad assorbimento massimo) - Innanzitutto va calcolata la potenza dissipata dal mosfet: Pd = R int* I 2 = 0,2 * 8 2 = 12,5W Dove: Pd = potenza dissipata Rint = resistenza interna mosfet (0,12 ohm) I = corrente massima che passa nel Mosfet (8A) - Ora con la formula seguente possiamo calcolare la resistenza termica massima che il dissipatore dovrà avere: Rth(d − a ) = Tj − Tamb 175 − 40 − Rth( jc) − Rth(cd ) = − 1 − 0,8 = 8,74°C / W Pd 12,8 Dove: Rth(d-a) = resistenza termica massima che dovrà avere il dissipatore Tj = temperatura massima giunzione MOSFET (175°C) Tamb = temperatura ambiente ( per sicurezza 40°C) Pd = potenza dissipata MOSFET ( calcolata 12,8W) Rth(jc) = resistenza termica giunzione contenitore MOSFET (1°C/W) Rth(cd) = resistenza termica contenitore dissipatore (contatto dissipatore diretto con contenitore mosfet TO-220 e quindi di 0,8°C/W secondo tabelle standard) Quindi il dissipatore che andrà collegato al contenitore TO-220 del Mosfet dovrà avere una resistenza termica minore di 8,74°C /W. Di seguito vengono mostrate alcune foto della scheda realizzata e il master del circuito stampato. 58 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” 59 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Modulo interfaccia (scheda interfaccia) Questa scheda permette di collegare la scheda input e la scheda output nella stessa porta parallela, anche se le schede possono essere usate separatamente su due parallele, in questo modo è possibile usare una sola parallela e rendere modulare il sistema. Inoltre la scheda si occupa di gestire tutte le tensioni che alimentano le schede di Remotecontrol proteggendole anche dalle inversioni di polarità. Per alimentare tutto il sistema Remotecontrol è necessario un alimentatore in grado di fornire una tensione di 12 Volt stabilizzati e con un assorbimento massimo superiore all’ assorbimento dei carichi collegati alla scheda output. Nella mia soluzione definitiva ho collegato il sistema Remotecontrol direttamente all’alimentatore switching del PC desktop che lo ospita. SCHEMA ELETTRICO Innanzitutto la scheda è composta essenzialmente da due circuiti: il primo si occupa semplicemente di collegare attraverso le piste i vari connettori delle schede con la parallela principale utilizzata, mentre il secondo è il circuito che gestisce le due tensioni (5V e 12V) utilizzate dalle varie schede del sistema Remotecontrol. All’inizio del secondo circuito si può notare la presenza di un fusibile: questo dispositivo permette di interrompere l’alimentazione in caso di sovraccarichi (ovviamente il valore di corrente massima del fusibile dovrà coincidere con la massima corrente che si desidera prelevare con gli output: cioè in questo caso 8A) e permette anche di proteggere le varie schede di Remotecontrol dalle inversioni di polarità. Quest’ultima possibilità e resa possibile grazie al diodo D1 che normalmente non conduce perché polarizzato inversamente, mentre se l’alimentazione è collegata in maniera sbagliata questo diodo diventerà praticamente un cortocircuito che farà fondere la lamella metallica del fusibile e staccherà fisicamente il circuito dall’alimentazione. Questo tipo 60 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” di intervento, rispetto al classico diodo collegato in linea, permette di non dissipare alcuna potenza durante il funzionamento e di non far cadere alcuna tensione. Successivamente la tensione di 12V viene ulteriormente filtrata (dovrebbe già farlo l’alimentatore) dai due condensatori e va ad attivare il led LD1 con opportuna resistenza di caduta (R1) che segnala la presenza della tensione. Ora la tensione a 12V è già disponibile per l’ingresso della scheda startcommand a cui poi andrà collegata la linea a 12V della scheda output. Il successivo regolatore 7805 permette di stabilizzare la tensione a 12V in ingresso in una tensione di 5V necessaria ad alimentare la parte di gestione della parallela del sistema startcommand. Si nota la presenza del diodo D2 che permette, al distacco dell’alimentazione, di evitare correnti inverse nel regolatore dall’uscita verso l’ingresso per via della scarica dei vari condensatori delle varie schede che altrimenti creerebbero danni all’integrato regolatore 7805. I condensatori C3 e C4 permettono all’integrato di evitare auto oscillazioni che ne comprometterebbero il corretto funzionamento (come consigliato dalla casa costruttrice) . A questo punto anche i 5V necessari alla scheda input, alla scheda output e alla scheda startcommand sono disponibili in uscita. Occorre valutare la possibilità di mettere o meno un dissipatore all’integrato valutando la potenza che dissiperà quest’ultimo. Innanzitutto vanno valutati i consumi dei dispositivi a 5V di startcommand: il grosso dei consumi è dovuto ai vari led e fotoaccoppiatori che consumano ognuno circa 10mA. Considerando tutto il sistema attivo si hanno che i fotoaccoppiatori sono 8 dalla scheda output, 5 dalla scheda input con 5 led e 1 dalla scheda startcommand (i led sulla scheda startcommand e sulla scheda interfaccia sono alimentati a 12V), quindi in totale ben 19 dispositivi con consumi non trascurabili ed ognuno dei quali di circa 10mA, quindi considerando anche tutti i carichi minori e una soglia di sicurezza si ha un totale di 200mA. La potenza dissipata dall’integrato sarà quindi di: Pd = Vc * I = 7 * 0,2 = 1,4W Dove: Pd = potenza dissipata dall’integrato Vc = tensione che dovrà fa cadere l’integrato (Vin- Vout = 12 – 5 = 7 Volt) I = corrente massima che scorrerà nel regolatore (200 mA = 0,2 A) Ora considerando i gradi per watt del complesso giunzione ambiente forniti dal datasheet (ovvero senza dissipatore sul contenitore) si può valutare la necessità o meno di usare un dissipatore. 61 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Per l’operazione è necessario conoscere la massima temperatura operativa del regolatore (125°C) e la resistenza termica del regolatore senza dissipatore (65°C/W) che sono entrambi valori forn iti dal datasheet del regolatore. Se il prodotto tra resistenza termica senza dissipatore e potenza dissipata andrà a superare la temperatura massima operativa sarà necessario l’uso del dissipatore, altrimenti l’integrato potrebbe andare in protezione termica. Tm = Rth( ja ) * Pd = 65 * 1,4 = 91°C Dove: Tm = temperatura massima raggiunta Rth(ja) = resistenza termica senza dissipatore (dal datasheet 65°C/W) Pd = potenza dissipata del regolatore (calcolata prima) Come si può notare la temperatura massima raggiunta (91°C) è inferiore alla temperatura massima operativa di 125°C e quindi non è necessario l’uso di alcun dissipatore. Di seguito sono presenti le immagini del master e la realizzazione della scheda interfaccia. 62 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” scheda input Parallela PC scheda output 63 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Circuito protezione sovraccarichi Questa scheda permette di proteggere i mosfet di uscita nella scheda output dai sovraccarichi e dai cortocircuiti. Il circuito è opzionale e non è indispensabile, ma è consigliabile usarlo nel caso in cui si abbiano a che fare con carichi variabili o con dispositivi che potrebbero andare in certe condizioni ad assorbire troppa corrente (es. motori). Il circuito andrà replicato per ogni uscita da proteggere, nel prototipo di Remotecontrol da me realizzato ho creato solo un esemplare di questo circuito e l’ho istallato nell’uscita numero 8 dalla scheda output. Il circuito non necessita di alcuna alimentazione ausiliaria poiché prende l’alimentazione direttamente dall’uscita del mosfet e dispone di due led: uno rosso che notifica lo stato di distacco per sovraccarico o cortocircuito e uno verde che avvisa del corretto assorbimento del carico. SCHEMA ELETTRICO Analizzando l’ingresso del circuito si nota la presenza di R0 che permette la scarica veloce di C1 quando il circuito viene staccato dall’ alimentazione. Il condensatore C1 ha la funzione di stabilizzatore delle tensioni rimediando a picchi di assorbimento che potrebbero provocare l’accidentale intervento della protezione. 64 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Di fianco sono presenti C2 e R2 che, come spiegato nella sezione dedicata alla scheda startcommand, crea un impulso di attivazione appena viene alimentato il circuito. Questo impulso attiva il transistor TR1 che a sua volta attiva il relè K1. Il led LD2 si attiva e il diodo D3 mantiene attivato il transistor (una sorta di auto ritenuta). La resistenza R5 fa da resistenza di Shunt che permette di misurare la corrente elettrica che gli scorre attraverso. La misura viene effettuata misurando la tensione ai capi della tensione (proporzionale alla corrente secondo la legge di ohm) che se raggiungerà e supererà la tensione di soglia del Led dentro il fotoaccoppiatore FA1 porterà il transistor TR1 in interdizione (base cortocircuitata a massa) grazie al fototransistor presente nel fotoaccoppiatore. In questo modo il relè si disattiverà e il carico verrà scollegato attivando il led rosso LD2. I diodi D2 e D4 permettono di usare induttori (anche il relè utilizzato) senza che essi danneggino i vari circuiti di comando e controllo (come già spiegato nella sezione della scheda output). Per adattare questo circuito alle caratteristiche di startcommand è necessario calcolare il valore di R5 che dovrà avere ai sui capi una tensione di almeno 1,55V (tensione di soglia del Led nel fotoaccoppiatore) quando in essa scorrerà la corrente massima di 3,3 A (calcolata nella sezione della scheda output), in questo modo il circuito interverrà al distacco proprio nel momento necessario. Il valore di R2 è stato calcolato con lo stesso modo descritto nel dimensionamento delle resistenze dei transistor della scheda input, considerando però che l’induttanza del relè non ha una tensione precisa ma ha una corrente che permette all’induttanza di spostare il contatto e di mantenere trattenuto il contatto elettrico tra i terminali del relè normalmente aperti. Per trovarla è stata misurata la resistenza ai capi della bobina del relè (con la legge di ohm I = V / R). La R4 permette di limitare la corrente sul led del fotoaccoppiatore per prevenirne danneggiamenti e non va sfalsare la misura in modo significativo. Per il calcolo di R5 con una corrente di scatto del circuito a 3,3A è necessario seguire questa procedura: Calcolare la R shunt o R5 (legge di ohm) R5 = Vled 1,55 = = 0,469OHM Im ax 3,3 Dove: Vled = tensione di soglia del fotoaccoppiatore (led interno) Imax = corrente a cui si vuole che questo circuito disattivi il carico collegato Calcolare la potenza: Pd = VR5 * Im ax = 1,55 * 3,3 = 5,115W Dove: Pd = potenza dissipata dalla resistenza 65 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Vr5 = caduta di tensione della resistenza R5 che è uguale a Vled Imax = corrente a cui si vuole che questo circuito disattivi il carico collegato Per creare questa resistenza di shunt è necessario usare più resistenze di piccolo valore (+/-=0,1 Ohm ciascuna) per limitare le tolleranze e la potenza dissipata da ciascuna resistenza (ognuna dissiperà una parte della potenza calcolata precedentemente). Nel mio circuito ho utilizzato 3 resistenze da 0,1 Ohm e 5W di potenza. È stata usata la configurazione con il fotoaccoppiatore per mantenere la stessa caratteristica che ha la scheda output: ovvero quella di poter utilizzare carichi con più masse. Infatti in questo circuito la corrente è misurata tra i terminali positivi (attraverso R5 e indipendentemente dalla massa) e non tra una massa fittizia e una massa reale come avrebbe imposto l’uso di un transistor. La bontà di questa scheda è stata testata confrontandola con la velocità di risposta di un fusibile da 0,5A (mettendo fusibile e scheda in serie ad un alimentatore) : in tutti i test al verificarsi di un cortocircuito provocato la scheda è sempre intervenuta prima del fusibile. Di seguito è possibile vedere il master e alcune foto della scheda. 66 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Parte hardware completa Tutte le schede sopra descritte sono state montate su una tavola di plastica forata per impianti elettrici. Successivamente è stato perfezionato il software e per questa operazione il sistema è stato provato provvisoriamente insieme ad un PC portatile, come visibile in figura. 67 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Dopo questa fase tutto è stato montato dentro un case di PC alto (tipo BIG TOWER) con dentro il PC server. Di seguito sono visibili le immagini del sistema hardware di Remotecontrol completo sulla tavola di plastica. Scheda interfaccia Scheda output Scheda input Protezione corto circuiti Scheda startcommand 68 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” 69 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” 3. Possibili applicazioni del progetto Il sistema Remotecontrol può essere utilizzato in vari ambiti, in questa sezione ne verranno descritti alcuni. CONTROLLO USCITE ON/OFF CON LUCI O DISPOSITIVI A 12V Questa configurazione permette di controllare fino a 8 luci a 12V con un assorbimento massima di 3 Ampere. Un esempio di lampade con queste caratteristiche sono le nuove lampade a led che garantiscono un alta efficienza e bassi consumi, a parità di potenza luminosa, rispetto alle lampade ad incandescenza o fosforescenti. A posto delle luci possono essere usati anche altri dispositivi con le stesse caratteristiche. CONTROLLO USCITE ON/OFF CON LUCI O DISPOSITIVI A 230V Questa configurazione, a differenza della precedente, permette di controllare luci funzionanti con la rete elettrica a 230V (o altra tensione) usando un secondo circuito. Per permettere questo vene collegato in ogni uscita della scheda output un relè con bobina a 12V DC. La bobina va a controllare il contatto dell’interruttore interno al relè che a sua volta chiude il circuito delle luci a tensione di rete. Questo permette di controllare lampade fosforescenti o ad incandescenza e la massima corrente prelevabile da quest’ultime è data dalle caratteristiche del relè. A posto delle luci possono essere usati anche altri dispositivi con le stesse caratteristiche. 70 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” CONTROLLO ON/OFF CONTATTI IN INGRESSO A 12V Questo circuito sfrutta la scheda input per controllare lo stato aperto/chiuso di contatti normalmente aperti o normalmente chiusi a 12V. Può essere utile per il controllo della chiusura di porte o finestre (applicando alle stesse degli interruttori) oppure per il controllo della presenza di tensione continua tra due fili. CONTROLLO ON/OFF CONTATTI IN INGRESSO A 230V Questo circuito svolge la stessa funzione del circuito precedente, con l’unica differenza che può gestire tensioni superiori a 12V attraverso l’uso di relè. Nell’esempio a fianco la tensione che controlla i contatti è a 230V corrente alternata. Quando il contatto viene chiuso il relè con bobina a 230V va a chiudere il contatto di un secondo circuito a 12V che a sua volta attiva l’ingresso della scheda input. Questa soluzione è utile se la distanza tra contatto e circuito è elevata. GESTIONE IMPIANTO DI RISCALDAMENTO Questa applicazione del progetto Remotecontrol permette di controllare un impianto di riscaldamento con più settori attivabili tramite elettrovalvole monostabili a 12V DC. La scheda output si occupa di gestire le elettrovalvole e il contatto di attivazione della caldaia attivabili da remoto, mentre la scheda input informa l’utente dello stato del termostato 71 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” ambiente ed eventualmente del blocco per avarie della caldaia (segnalato tramite chiusura di un contatto). È possibile far collaborare un secondo software, con Remotecontrol server, programmato ad hoc per poter gestire in automatico le attivazioni della caldaia e delle elettrovalvole attraverso il termostato nei modi che più soddisfano le necessità. Questa modalità necessita che in Remotecontrol sia attiva l’impostazione “mantieni dato” nel campo “se viene modificato dato in output” (per informazioni vedere il capitolo riguardante Remotecontrol server). Termostato ambiente Gestione Riscaldamento Remotecontrol Server PC client Remotecontrol Rete LAN 72 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” 4. Sperimentazione con PC DIO 96 Il software Remotecontrol server client è stato testato, oltre che con l’hardware di Remotecontrol precedentemente descritto, anche con una scheda di automazione industriale della National Istruments chiamata PC DIO 96. Questa scheda permette il controllo di ben 96 input o output (a seconda di come sia configurata). La scheda divide questi 96 I/O in 12 moduli da 8 I/O, ed ogni singolo modulo può essere configurato come input o output. Remotecontrol server, con questa scheda, è in grado di controllare un modulo configurato come ingresso ed un modulo configurato come uscita, entrambi ad 8 bit (8 input e 8 output). I moduli rimanenti possono essere utilizzati anche da altri software. La scheda non dispone di controlli di potenza ma solo di ingressi o di uscite a 5V, per questo motivo è necessario prevedere esternamente dei circuiti di potenza e di protezione del PC. La PC DIO 96 posseduta, essendo molto obsoleta, è interfacciata con il PC attraverso uno slot ISA. Le schede sono tutt’ora vendute dalla National Istruments e dispongono sia di interfaccia PCI, sia di bus USB. Di seguito sono presenti alcune foto della configurazione del sistema PC con la scheda sopracitata. 73 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” Interno sistema PC Moduli di potenza e di protezione esterni 74 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” 5. Evoluzioni future Si potrebbero prevedere in futuro queste caratteristiche nel sistema Remotecontrol: - Possibilità di controllo del sistema attraverso palmari Pocket PC con sistema operativo Windows Mobile, che condivide le stesse basi di .NET Framework utilizzate dalla parte software di Remotecontrol. In questo modo si potrebbe controllare il sistema ovunque ci si trovi (con disponibilità di connessione internet). Questa caratteristica richiede la ricompilazione di Remotecontrol Client per il funzionamento con il sistema operativo Windows Mobile (sempre con Visual Basic). - Gestione di più porte parallele (o moduli della PC DIO 96) in contemporanea per aumentare il numero di I/O e possibilità di configurare a piacimento il numero di ingressi e di uscite. - Possibilità nel software Remotecontrol client e server di inserire una password di sicurezza per non fare gestire Remotecontrol da estranei e di criptare, per motivi di sicurezza, la comunicazione via rete di Remotecontrol. - Creazione di un software simile a Remotecontrol client che però venga controllato da altri software facendo da ponte tra software utilizzatore e interfaccia hardware remota. - Rendere il software Remotecontrol utilizzabile anche su altri sistemi operativi. - Creazione di un hardware Remotecontrol con interfaccia Usb per poter utilizzare il sistema anche nei PC recenti che non dispongono di interfaccia parallela. 75 MARCO MASSARI SISTEMA CONTROLLO REMOTO “REMOTECONTROL” 6. Bibliografia e ringraziamenti Per la descrizione delle circuiterie interne della parallela (con le immagini dei circuiti) si è preso spunto dal sito www.giobe2000.it creato dall’ ing. Giorgio Ober. Alcune immagini della porta parallela sono state prese dall’enciclopedia online Wikipedia nel sito www.it.wikipedia.org. Si ringrazia l’azienda Isoclima srl e il sig. Imerio Fiorentini per aver gentilmente fornito due schede della National Istruments PC DIO 96 complete di manuali e software di esempio. Si ringrazia Antonio Giuliana (www.visual-basic.it) per la creazione della libreria INOUT32. Si ringrazia la Microsoft Corporation per la fornitura a titolo gratuito della versione Express di Visual Studio (con incluso Visual Basic) dedicata a studenti. _____________________________________________________________ Documento terminato nel mese di Marzo 2009 da Marco Massari. 76