Connexió a SQLServer amb WinCC professional

Com guardar dades des de WinCC Professional a una base de dades SQLServer.

Anem a suposar que tenim instal·lat el WinCC Professional 7.2 i SQLServer 2008 en el mateix ordinador per fer les proves de connexió i per guardar les dades en una taula de la base de dades.

Connexió a SQLServer amb WinCC professional

Creem una base de dades de prova

Per crear una base de dades amb una taula per a realitzar les proves ho farem amb l’eina “SQL Server Management Studio” que ve instal·lada al SQLServer 2008, amb aquest programa crear bases de dades i les seves corresponents taules és una tasca summament senzilla, fins i tot porta un programa molt intuïtiu per crear relacions amb les taules.

El primer pas és obrir el “SQL Server Management Studio” i connectar-nos amb el servidor, en aquest cas el propi ordinador, seguidament crearem una base de dades per a les proves amb una taula i alguns camps on guardarem les dades:

sql-server-management

Amb això ja tenim creada la base de dades, ara anem a connectar a la base de dades des de WinCC i guardarem el valor de temperatura llegit del PLC.

Connectar a la base de dades des de WinCC

Obrim el WinCC explorer i obrim l’editor “VBS-Editor”, anem a la pestanya accions i afegim un nou script on el executarem de manera cíclica cada 1 minut, és a dir registrarem el valor de temperatura casa 1 minut, la connexió la farem mitjançant OLEDB, obrim una connexió ADODB.Connection i inserim mitjançant un insert a la base de dades prova i en la taula registre:

winccexplorer-vbs

winccexplorer-vbs-REGSQLSERVER

La variable del WinCC que correspon a un valor de temperatura del PLC en aquest exemple es diu “AEC”, llegim el valor real de la variable i la inserim en la taula registre, com és un valor real de coma flotant, abans hem de canviar les comes per punts amb un replace sinó donaria error en inserir el la taula

Conclusions

Una manera molt senzilla de realitzar una Connexió a SQLServer amb WinCC professional, a més la instal·lació de WinCC 7.2 ja porta incorporat una instal·lació de SQLServer 2008, el qual ho posa encara més fàcil a l’hora de decidir com registrar dades des del Scada.

Climatització terra radiant mitjançant el PID FB58

Exemple de com controlar la temperatura d’una sala mitjançant el FB58 de Siemens.

Aquest exemple l’he tret del meu propi programa de control de temperatura de casa, després de molts intents va quedar bastant ben ajustat ja que les variacions tèrmiques de temperatura ambient són dècimes de grau.

Circuit de calefacció per terra radiant

La calefacció és per terra radiant i tinc 3 circuits independents, amb una bomba de circulació i 3 vàlvules d’obertura i tancament, evidentment i com qualsevol terra radiant la inèrcia de temperatura és molt important i per tant el regulador de temperatura ha d’estar correctament ajustat .

FB58 TCONT_CP

El FB 58 “TCONT_CP” serveix per regular processos de temperatura amb control continu o en forma d’impuls, en el meu cas i com el resultat ha estat molt satisfactori l’utilitzo en forma d’impuls.

El funcionament es basa en l’algoritme de regulació PID, que està dotat de funcions addicionals per a processos de temperatura. Subministra valors manipulats analògics i senyals manipulades amb modulació d’ample de pols. A cada regulador li correspon un sol actuador, és a dir, amb un sol regulador es podrà o bé escalfar o bé refredar.

El FB TCONT_CP es pot utilitzar tant per a processos de pura calefacció com per a processos de pura refrigeració. En el meu cas utilitzo el terra radiant per la calefacció i la refrigeració, per tant és ideal per a la climatització d’una sala.

Exemple de Climatització terra radiant mitjançant el PID FB58

Perquè el regulador funcioni correctament aquest s’ha de programar dins d’un OB d’interrupció cíclica amb un temps fix de 100ms, segons quin tipus de CPU utilitzem podrem utilitzar el OB35 o el OB 82, la crida a aquest bloc o FB és molt simple i en el meu cas els paràmetres d’entrada i sortida són mínims:

llamada-fb58

Crida al FB58

Podem veure en l’exemple només 3 paràmetres d’entrada:

PV_PER: És el valor real de la temperatura de la sala, en el meu cas una PT100 on la targeta de temperatura em permet llegir centèsimes de grau.
SP_INT: És el valor real de consigna, aquesta dada a diferència de l’PV_PER és de tipus Real.
COM_RST: Reset del controlador, normalment en arrencar l’autòmat.

process-variable-periphery-on

Ajust del regulador

PVPER_ON: El valor real es llegeix a través de la perifèria analògica (PEW xxx) a l’entrada PV_PER.
Per_mode: PT100 / NI100; Climatització, ° C; ° F.

calefaccio-refrigeracio

Mode calefacció o refrigeració

GAIN: Mode calefacció amb un valor de 10, i mode refrigeració amb un valor de -10

Per cada llaç o en el meu cas per cada circuit hauré de repetir aquesta implementació, en aquest exemple només hem vist el control d’una sala, en concret el menjador de la casa.

Sortida del regulador

Un cop parametritzat el regulador, només ens queda utilitzar-lo en el nostre programa de control de calefacció, en el meu cas he utilitzat el valor manipulat que obtinc del regulador, el valor manipulat és un percentatge de 0 a 100% de la demanda real d’energia de calefacció o refrigeració, a partir d’aquesta dada dono marxa a la calefacció en uns percentatges ajustats en dependència de la temperatura exterior de la casa:

El valor manipulat es llegeix directament del DB d’instància amb un valor REAL en LMN.

Per anar a marxa calefacció:

Temperatura Exterior Valor Manipulat per marxa
Con luz solar Mayor de 2 ºC 7,5 %
Con luz solar Menor de 2 ºC 6,5 %
Con poca luz solar Mayor de 4 ºC 5,5 %
Con poca luz solar Menor de 4 ºC 2,5 %
Sin luz solar Mayor de 2 ºC 1,5 %
Sin luz solar Menor de 2 ºC 1 %

Per anar a paro calefacció:

Temperatura Exterior Valor Manipulat per paro
Con luz solar Mayor de 2 ºC 3,5 %
Con luz solar Menor de 2 ºC 3 %
Con poca luz solar Mayor de 4 ºC 3 %
Con poca luz solar Menor de 4 ºC 2 %
Sin luz solar Mayor de 2 ºC 1 %
Sin luz solar Menor de 2 ºC 0,5 %

Conclusions

Per les característiques de casa meva i el meu sistema de calefacció, amb aquests paràmetres puc arribar a ajustar la temperatura amb dècimes de grau amb un sistema que té una gran inèrcia tèrmica.

Connexió a una base de dades SqlServer amb VB.net

Amb aquest post explicaré com realitzar una connexió a una base de dades SqlServer amb VB.net mitjançant OLEDB.

Base de dades SqlServer

Microsoft SQL Server és un sistema per a la gestió de bases de dades produït per Microsoft basat en el model relacional. Microsoft SQL Server constitueix l’alternativa de Microsoft a altres potents sistemes gestors de bases de dades com són Oracle, PostgreSQL o MySQL.

Per poder realitzar una connexió des VB.net, hem de preparar la base de dades amb un usuari i contrasenya i assignar els privilegis necessaris. Des de “SQL Server Management Studio” podem realitzar aquesta tasca d’una manera fàcil i senzilla.

Obrim “SQL Server Management Studio” i una vegada connectat al servidor afegim un nou inici de sessió, utilitzem la “Autenticació de SqlServer”, sobre la base de dades per defecte seleccionem la base de dades que vulguem connectar, també definim els permisos a la base de dades que utilitzarem en la connexió:

sqlserver-nuevo-inicio-sesion

Afegim un nou inici de sessió

permisos-base-datos-sqlserver

Definim els permisos que tindrà el nou usuari sobre la base de dades

Un cop acceptats els canvis ja tindrem llest el nou usuari per realitzar la connexió a la base de dades.

Connexió a una base de dades SqlServer amb VB.net

En primer lloc hem de realitzar les importacions de les classes que necessitem per fer la connexió a una base de dades SqlServer amb VB.net:

Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient

Definim la connexió a la base de dades amb el nom del servidor, la base de dades i el usuari i la contrasenya que hem definit en SQLServer:

myConnectionString = "Provider=sqloledb;" & _
                     "Data Source=localhost;" & _
                     "Initial Catalog=bd-gaSQL;" & _
                     "User Id=UserPrueva;Password=contraseñaPrueva"

Anem a fer una consulta a la base de dades mitjançant un “Select”, la lectura de les dades de la consulta els llegim amb el OleDbDataReader:

        Try
            Dim s As String = ("SELECT * FROM Alumnes")
            connexio = New OleDbConnection(myConnectionString)
            myCommand = New OleDbCommand(s)
            myCommand.Connection = connexio
            connexio.Open()
            Dim myReader As OleDbDataReader = myCommand.ExecuteReader()
            While myReader.Read()
                Dim NOM As String = myReader("NOM")
                Dim COGNOM As String = myReader("COGNOM")
            End While
        Catch exc As Exception
            Throw New GestorExcepcio(exc.Message)
        End Try

Per afegir un nou registre ho podem fer mitjançant “Insert”:

        Try
            Dim sent As String = ("INSERT INTO Alumnes VALUES ('JORDI','NAVES')")
            Dim connexio As New OleDbConnection(myConnectionString)
            myCommand = New OleDbCommand(sent)
            myCommand.Connection = connexio
            connexio.Open()
            myCommand.ExecuteNonQuery()
            connexio.Close()
        Catch exc As Exception
            Throw New GestorExcepcio(exc.Message)
        End Try

I finalment per modificar un registre mitjançant un “update”:

        Try
            Dim s As String = ("UPDATE Alumnes SET nom='JORDI' Where id=1")
            connexio = New OleDbConnection(myConnectionString)
            myCommand = New OleDbCommand(s)
            myCommand.Connection = connexio
            connexio.Open()
            myCommand.ExecuteNonQuery()
            connexio.Close()
        Catch exc As Exception
            Throw New GestorExcepcio(exc.Message)
        End Try

En conclusió, una manera molt senzilla d’establir una comunicació entre SqlServer i Vb.net d’una manera ràpida i eficaç-