Sistema di controllo remoto “REMOTECONTROL” Di Marco Massari

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