domenica 21 agosto 2011 #

[VB & WP7] Come accendere le luci dell’ufficio con il cellulare

Aspettavo con ansia l’uscita di “Mango” la nuova versione del S.O. per il mio smartphone Windows Phone 7. Moltissime sono le novità introdotte da questa versione, per adesso sempre in beta, ma disponibile per i developer che intendono avvantaggiarsi nello sviluppo di soluzioni che utilizzano le nuove caratteristiche messe a disposizione dal Team di sviluppo. Per quanto mi riguarda l’interesse maggiore l’ho avuto nei confronti dell’introduzione dei Socket. A dire il vero (e questo secondo me è il punto di forza del .NET Framework) non ho dovuto imparare niente di nuovo ma soltanto implementare anche per WP7 le funzionalità che già utilizzavo in altri tipi di applicazioni (Desktop, WPF, Micro Framework e Silverlight). Ovviamente non sempre tutte le funzionalità esposte dalla versione più completa del framework (attualmente la 4.0) le troviamo nella loro completezza anche in framework ridotti e destinati a piattaforme diverse da quella PC, ma generalmente non ci scostiamo mai molto dalla versione di riferimento.

Quello che ho voluto implementare in versione demo è l’utilizzo dei socket per inviare a un PLC domotico dei comandi Modbus RTU standard, che mi permettano di modificare un registro del PLC, il quale comanda un relais di accensione delle varie luci dell’ufficio. Per approfondire i vari standard si rimanda ai seguenti riferimenti:

PLC –>http://it.wikipedia.org/wiki/Programmable_logic_controller

ModBus –> http://it.wikipedia.org/wiki/Modbus  --> http://www.modbus.org/

In parole povere quello che devo fare consiste nel costruire un Array di Byte di dati secondo lo standard ModBus RTU e trasmetterlo al PLC via Socket, indicando qual’è lo status del registro da impostare. Siccome i relais digitali del PLC sono stati impostati come fossero dei semplici pulsanti (premo—> accende—>premo—> spenge—>premo—>accende—>premo—>spenge…) dovrò indicare sempre e comunque al registro del relais digitale di impostare il proprio status su True (equivale a dire premo il pulsante) poichè il PLC è programmato in modo che se un registro digitale alza il proprio bit di accensione, dopo aver eseguito il comando, il PLC automaticamente resetta lo status del relais digitale abbassando il bit, proprio come accade ad un pulsante fisico che ritorna nella posizione di spento. Se il PLC non fosse stato programmato in questo modo, avrei dovuto manualmente inviare un secondo comando ModBus per resettare il bit del relais digitale. Ovviamente il mio impianto domotico prevede alcune periferiche collegate tra di loro come il seguente schema:

 

Presentazione standard1

 

L’utilizzo di questo tipo di Hardware prevede l’invio del comando ModBus utilizzando il protocollo UDP per cui l’utilizzo del socket si limita esclusivamente all’invio dell’Array di Byte generato dalla mia classe di gestione del protocollo ModBus (che non indico in questa sede) attraverso un oggetto Socket:

 

    Private Sub SendPacket(PLCIPAddress As String, Port As Integer)         
           Dim Client As New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)         
           Dim Packet As Byte() = ModBus.GetModBusBuffer(…)         
           If Client IsNot Nothing Then             
                  Dim socketEventArg As New SocketAsyncEventArgs()             
                  Dim Addr As IPAddress = IPAddress.Parse(PLCIPAddress)             
                  socketEventArg.RemoteEndPoint = New IPEndPoint(Addr, Port)             
                  AddHandler socketEventArg.Completed, AddressOf SendComplete             
                  socketEventArg.SetBuffer(Packet, 0, Packet.Length)             
                  Client.SendToAsync(socketEventArg)        
           End If     
    End Sub     
    Private Sub SendComplete(sender As Object, e As SocketAsyncEventArgs)         
           If e.SocketError <> SocketError.Success Then
            ‘Gestione eccezioni di comunicazione         
           End If
     End Sub

Ovviamente il tutto è visto in maniera alquanto semplificata poichè numerose sono le implementazioni che possiamo introdurre, prima tra tutte, ad esempio, la lettura dello status di un registro, ovvero verificare se la luce è accesa o spenta, inserire un dimmer e regolare l’intensità della luce attraverso uno slider, gestire il termoregolatore per alzare o abbassare la temperatura della stanza, ecc.. ecc..

Tutto questo probabilmente sarà oggetto di altri post in merito al building automation per adesso spero di aver reso l’idea di quanto possa essere semplice sviluppare applicazioni apparentemente complesse e quanto elevate sono le opportunità di business create dalle tecnologie Microsoft.

Se volete vedere il programma in azione:

Interagire con le periferiche di Building automation utilizzando il cellulare.

Alberto.

posted @ domenica 21 agosto 2011 3.05 | Feedback (4)

Copyright © Alberto De Luca

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski