Seleccione su idioma

Lavadora web 2.0. Interface HMI en Vb.net

Escrito por David Publicado el 3 julio, 2011 at 11:10

Bueno, os dejo el video de la aplicación en vb.net funcionando.

Lavadora web 2.0

He modificado la clase encargada de comunicar con el plc. En este caso llamaremos a las variables por su nombre. Esta el la clase:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
Imports TwinCAT.Ads
Public Class ClassAds
    Private adsClient As TcAdsClient
    Dim Conectado As AdsState
    Enum AdsState
        Desconectado
        ErrorConect
        ConectadoOk
    End Enum
 
#Region "PLC ADS"
    Public Function Conectar() As String
        Try
            adsClient = New TcAdsClient
            adsClient.Connect("192.168.255.2.1.1", 801)
            adsClient.Timeout = 5000
 
            If adsClient.ReadState.AdsState.ToString = "Run" Then
                Conectado = AdsState.ConectadoOk
            Else
                Conectado = AdsState.ErrorConect
            End If
            Return adsClient.ReadState.AdsState.ToString
        Catch err As Exception
            Conectado = AdsState.ErrorConect
            Return "Error"
        End Try
 
    End Function
 
    Public Function ValorIntPorNombre(ByVal Name As String)
 
        Dim dataStream As AdsStream
        Dim Read As AdsBinaryReader
 
        Try
            'Recuperar Numero Var
            Dim Var As Integer
            Var = adsClient.CreateVariableHandle(Name)
 
            dataStream = New AdsStream(2)
            adsClient.Read(Var, dataStream)
            Read = New AdsBinaryReader(dataStream)
            Return Read.ReadInt16
        Catch err As Exception
 
            Conectado = AdsState.ErrorConect
            Return 0
        End Try
    End Function
    Public Function txtPorNombre(ByVal Name As String)
 
        Dim dataStream As AdsStream
        Dim Read As AdsBinaryReader
        Dim txt As String
        Dim length As Integer
 
        Try
            'Recuperar Numero Var
            Dim Var As Integer
            Var = adsClient.CreateVariableHandle(Name)
 
            dataStream = New AdsStream(31)
            length = adsClient.Read(Var, dataStream)
 
 
            Read = New AdsBinaryReader(dataStream)
            'txt = Read.ReadString
            txt = New String(Read.ReadChars(length))
            'txt = txt.Substring(0, txt.IndexOf("\0"))
            Return txt
        Catch err As Exception
 
            Conectado = AdsState.ErrorConect
            Return 0
        End Try
 
    End Function
    Public Sub EscribirBoolPorNombre(ByVal Name As String, ByVal Valor As Boolean)
 
        Dim dataStream As AdsStream
        Dim Escribir As AdsBinaryWriter
 
        Try
            'Recuperar Numero Var
            Dim Var As Integer
            Var = adsClient.CreateVariableHandle(Name)
            dataStream = New AdsStream(1)
            Escribir = New AdsBinaryWriter(dataStream)
            Escribir.Write(Valor)
 
            adsClient.Write(Var, dataStream)
        Catch err As Exception
            Conectado = AdsState.ErrorConect
        End Try
    End Sub
 
    Public Sub Desconectar()
        If Conectado = AdsState.ConectadoOk Then adsClient.Dispose()
        Conectado = AdsState.Desconectado
    End Sub
    Public Function StateAds() As String
        If Conectado = AdsState.ConectadoOk Then
            Return 1
        Else
            Return 0
        End If
    End Function
#End Region
End Class

Para poder leer las variables por su nombre, lo que hacemos es recuperar el Valor que identifica esta variable. Esto lo realizamos con la siguiente función:
Var = adsClient.CreateVariableHandle(Name)
Name es el nombre de la variable. Para las variables globales las llamaremos por .NombreDeLaVariable y para el resto NombrePrograma.NombreVariable.

- Publicidad -

He creado una enumeración para definir los estados de la comunicación. Y una nueva función para recuperar texto del plc. En concreto me interesa la variable MAIN.txtAviso, esta variable nos informa del estado actual de la secuencia.

Este es el código del form principal:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Public Class Form1
    Dim Plc1 As New ClassAds
 
 
 
    Private Sub buConectar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buConectar.Click
        Plc1.Conectar()
        Timer1.Enabled = True
    End Sub
 
    Private Sub buDesconectar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buDesconectar.Click
        If Plc1.StateAds = 1 Then Plc1.Desconectar()
 
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Timer1.Enabled = False
 
        If Plc1.StateAds <> 1 Then
            MessageBox.Show("Error Ads")
            Exit Sub
        End If
 
        laTemp.Text = "Temperatura = " & Plc1.ValorIntPorNombre(".Temperatura") & "ºC"
        laNivelAgua.Text = "Nivel de Agua  = " & Plc1.ValorIntPorNombre(".NivelAgua")
        laEstado.Text = Plc1.txtPorNombre("MAIN.txtAviso")
 
        pbM1.Visible = Plc1.ValorIntPorNombre(".M1")
        pbBombo.Visible = pbM1.Visible
        pbM2.Visible = Plc1.ValorIntPorNombre(".M2")
        pbY1.Visible = Plc1.ValorIntPorNombre(".Y1")
        pbY2.Visible = Plc1.ValorIntPorNombre(".Y2")
 
        pbX1.Visible = Plc1.ValorIntPorNombre(".X1")
        ImgFondo(Plc1.ValorIntPorNombre(".CajonCerrado"))
 
        Timer1.Enabled = True
    End Sub
    Private Sub ImgFondo(ByVal Estado As Integer)
        If Estado Then
            pbFondo.ImageLocation = "../../Resources/LavPreparada.png"
        Else
            pbFondo.ImageLocation = "../../Resources/TodoParado.png"
        End If
    End Sub
 
    Private Sub buMarcha_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buMarcha.Click
        If Plc1.StateAds <> 1 Then Exit Sub
        Plc1.EscribirBoolPorNombre(".InicioLavado", True)
    End Sub
 
    Private Sub buCerrarCajon_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buCerrarCajon.Click
        If Plc1.StateAds <> 1 Then Exit Sub
        Plc1.EscribirBoolPorNombre(".CajonCerrado", True)
        Plc1.EscribirBoolPorNombre(".PuertaCerrada", True)
    End Sub
    Private Sub buAbrirCajon_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buAbrirCajon.Click
        If Plc1.StateAds <> 1 Then Exit Sub
        Plc1.EscribirBoolPorNombre(".CajonCerrado", False)
        Plc1.EscribirBoolPorNombre(".PuertaCerrada", False)
    End Sub
    Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
        If Plc1.StateAds = 1 Then Plc1.Desconectar()
    End Sub
End Class

Este codigo no tiene mucha historia. Se trata de establecer la conexión. Mediante un timer, leer el estado de los motores y valvulas, para mostrar o no los pictureBox. La imagen de fondo la cambiamos mediante la funcion ImgFondo, en función del estado, mostrando una u otra imagen. El resto de codigo son los eventos de los Buttons para abrir/cerrar o poner en marcha la lavadora.
Aquí, dejo tanto el programa del plc como la aplicación en vb.net. Recordaros que deberéis cambiar la dirección AMS en ClassAds. Para seguir adelante con nuestro proyecto deberemos poner en marcha el servidor web y crear las funciones (vb.net) para grabar en la base de datos.

Bookmark on DeliciousDigg this postRecommend on Facebookshare via RedditShare with StumblersTweet about itSubscribe to the comments on this post

Authors: David

Ver original.

Eficiencia, descarbonización y transformación tecnológica marcarán la agenda del Congreso Académico 2026

Eficiencia, descarbonización y transformación tecnológica marcarán la agenda del Congreso Académico 2026

Estados Unidos. La eficiencia energética, la descarbonización y la transformación tecnológica serán los temas centrales del Congreso Académico de Refriaméricas 2026, espacio que reunirá a expertos...

Avanza la construcción de la nueva planta de compresores Embraco en India

Avanza la construcción de la nueva planta de compresores Embraco en India

India. La construcción de la nueva fábrica de Nidec Global Appliance (GA) en India, destinada a la producción de compresores Embraco para equipos de refrigeración residencial y comercial, avanza...

LG Electronics y VTS presentan soluciones integrales de climatización para proyectos hospitalarios y comerciales

LG Electronics y VTS presentan soluciones integrales de climatización para proyectos hospitalarios y comerciales

Ecuador. LG Electronics Centroamérica y el Caribe, en alianza con VTS Group, realizó en Ecuador un encuentro especializado en climatización para presentar soluciones integrales dirigidas a proyectos...

Women in HVACR lanza el primer programa de capacitación para mentoras en la industria HVACR

Women in HVACR lanza el primer programa de capacitación para mentoras en la industria HVACR

Estados Unidos. La organización sin fines de lucro Women in HVACR anunció el lanzamiento de Navigator Mentor Training Program, una iniciativa estructurada de mentoría y desarrollo profesional...

En la cadena de frío, el valor se desplaza de los equipos a los servicios especializados

En la cadena de frío, el valor se desplaza de los equipos a los servicios especializados

México. Garantizar la integridad de productos sensibles a la temperatura es uno de los principales retos de la cadena de frío. Para los especialistas, el valor ya no radica solo en la tecnología,...

Johnson Controls es reconocida entre las Empresas Más Influyentes del Mundo en 2026

Johnson Controls es reconocida entre las Empresas Más Influyentes del Mundo en 2026

Estados Unidos. La empresa fue incluida en la lista inaugural de las Empresas Más Influyentes del Mundo 2026 elaborada por la revista TIME en colaboración con Statista y The Upright Project. El...

Jalisco se consolida como centro de innovación para la industria HVACR con AHR Expo México 2026

Jalisco se consolida como centro de innovación para la industria HVACR con AHR Expo México 2026

México. Guadalajara, Jalisco, se prepara para convertirse en el principal punto de encuentro de la innovación en la industria HVACR con la realización de AHR Expo México 2026.

RefriAméricas 2026 enfocará su Congreso Académico en eficiencia, descarbonización y transformación tecnológica en HVAC/R

RefriAméricas 2026 enfocará su Congreso Académico en eficiencia, descarbonización y transformación tecnológica en HVAC/R

Estados Unidos. El Congreso Académico de RefriAméricas 2026 tendrá como eje temático la “Eficiencia, descarbonización y transformación tecnológica en HVAC/R”, una propuesta que busca responder a los...

Jeff Littleton anuncia su retiro como vicepresidente ejecutivo

Jeff Littleton anuncia su retiro como vicepresidente ejecutivo

Estados Unidos. La organización anunció el retiro de Jeff Littleton como vicepresidente ejecutivo de la organización, cargo que dejará a inicios de 2027, tras más de dos décadas liderando la...

AHR Expo México 2025 fue reconocida como el Mejor Evento del Año en EVENTUS 29

AHR Expo México 2025 fue reconocida como el Mejor Evento del Año en EVENTUS 29

México. Durante la gala EVENTUS 29, realizada en el marco del 35 aniversario de Cintermex, la edición 2025 de AHR Expo México 2025 recibió el reconocimiento como el “Mejor Evento del Año”, una...

Suscribase Gratis
Recuérdeme
SUSCRÍBASE AL INFO-BOLETIN
¿REQUIERE UNA COTIZACIÓN?
ENTREVISTAS DESTACADAS
PATROCINADORES










ULTIMO BOLETIN
Ultimo Info-Boletin