FB126 PNOIDIAG, Diagnòstic PROFINET o PROFIBUS

Un dels problemes que sorgeixen en treballar amb un autòmat S7 300 i amb un bus de comunicacions Profinet o Profibus, és el diagnòstic de la perifèria descentralitzada en temps real, encara que no tinguem una eina concreta per realitzar aquesta tasca, Siemens posa a disposició el FB126 PNOIDIAG, diagnòstic PROFINET o PROFIBUS, amb aquest FB podem realitzar un diagnòstic en temps real de la perifèria descentralitzada.

El FB126 realment llegeix directament sobre les dades de diagnòstic del PLC i anota els errors produïts per una caiguda del Bus de comunicacions.

Exemple del FB126 PNOIDIAG

En primer lloc hem de descarregar el programa FB 126 que ens proporciona Siemens a la següent adreça:

Descarga del FB126 PNOIDIAG, Diagnòstic PROFINET o PROFIBUS

Descomprimim i instal·lem el programa, després obrim l’administrador Simatic i en obrir projecte, en llibreries seleccionem PNIODiag:

abrir-fb126

Obrir projecte de FB126 de Diagnòstic

Depenent de la CPU que utilitzem hem d’utilitzar el FB126 que correspongui, amb blocs de més de 16K o amb blocs de menys de 16K, copiem el FB126 al nostre programa de Step 7

El següent pas seria crear un DB on guardarà l’estat del Bus, aquest DB l’hem de crear manualment segons aquesta estructura:

estructura-db-200

DB200, de diagnòstic dels esclaus del Bus

Podem veure en l’exemple que per cada estació utilitza 2 bytes d’informació, per tant hem de crear tants com estacions tinguem.

Seguidament hem de fer la crida al FB126 en els següents blocs, OB1, OB82, OB83, OB86 i OB100, cal recordar que perquè el diagnòstic funcioni correctament és important realitzar totes les crides:

llamada-fb126

En realitzar la crida, el programa ens demana un db d’instància per al FB126, aquí escollim el DB que vulguem, aquest DB simplement és de treball i d’ús intern del FB.

Un cop carregat els blocs modificats, ja tindrem llest el diagnòstic del bus, PROFINET O PROFIBUS, o fins i tot tots dos alhora.

FB126 PNOIDIAG, Diagnostico PROFINET o PROFIBUS

Uno de los problemas que surgen al trabajar con un autómata S7 300 y con un bus de comunicaciones Profinet o Profibus, es el diagnostico de la periferia descentralizada en tiempo real, aunque no tengamos una herramienta concreta para realizar esta tarea, Siemens pone a disposición el FB126 PNOIDIAG, Diagnostico PROFINET o PROFIBUS, con este FB podemos realizar un diagnostico en tiempo real de la periferia descentralizada.

El FB126 realmente lee directamente sobre los datos de diagnostico del PLC y anota los errores producidos por una caida del Bus de comunicaciones.

Ejemplo del FB126 PNOIDIAG

En primer lugar debemos de descargarnos el programa FB 126 que nos proporciona Siemens en la siguiente dirección:

Descarga de FB126 PNOIDIAG, Diagnostico PROFINET o PROFIBUS

Descomprimimos y instalamos el programa, luego abrimos el administrador Simatic y en abrir proyecto, en librerías seleccionamos PNIODiag:

abrir-fb126

Abrir proyecto de FB126 de Diagnostico

Dependiendo de la CPU que utilizamos debemos de utilizar el FB126 que corresponda, con bloques de mas de 16K o con bloques de menos de 16K, copiamos el FB126 a nuestro programa de Step 7

El siguiente paso seria crear un DB donde se almacenara el estado del Bus, este DB debemos de crearlo manualmente según esta estructura:

estructura-db-200

DB200, de diagnostico de los esclavos del Bus

Podemos ver en el ejemplo que por cada estación utiliza 2 bytes de información, por tanto debemos de crear tantos como estaciones tengamos.

Seguidamente debemos de llamar el FB126 en los siguientes bloques, OB1, OB82, OB83, OB86 y OB100, recordar que para que el diagnostico funcione es importante realizar todas las llamadas:

llamada-fb126

Al realizar la llamada, el programa nos pide un db de instancia para el FB126, aquí escogemos el DB que queramos, este DB simplemente es de trabajo y de uso interno del FB.

Una vez cargado los bloques modificados, ya tendremos listo el diagnostico del bus, PROFINET O PROFIBUS, o incluso ambos a la vez.

Connexió entre client i servidor amb vb.net

En aquest post explicaré com fer una connexió entre client i servidor amb vb.net amb el sistema de comunicació de l’espai de noms System.Runtime.Remoting.Channels, aquest conté les classes que admeten i controlen els canals i els receptors de canals, que s’utilitzen com el mitjà de transport quan un client crida a un mètode en un objecte remot.

Aquest sistema ens serà especialment útil si volem fer aplicacions entre client i servidor que vulguem que el servidor faci les tasques de control i accés a la base de dades, és a dir el client en aquest cas simplement realitza les peticions al programa servidor, i el programa servidor rep les peticions i realitza les gestions corresponents a la base de dades.

Per realitzar una connexió entre client i servidor amb vb.net, hem de crear 3 projectes amb vb.net, El client, el servidor i la DLL que conté tots els objectes i les trucades del programa.

Primer programa, generació de la dll

El primer programa és l’encarregat de generar la dll que s’utilitzà tant en el programa client com en el programa servidor, aquí hem de programar les classes d’identitat, les classes d’accés a la base de dades i especialment les classes de recepció de peticions (el client crida a un mètode en un objecte remot)

Exemple de classe de recepció de peticions:

Public Class loginAction
    Inherits MarshalByRefObject
    Public Function validaUsuari(ByVal nomUsuari As String, ByVal contrasenya As String) As usuari
        Try
            Dim gestorUsuari As GestorUsuari = New GestorUsuari
            Dim usuari As usuari = gestorUsuari.validarUsuari(nomUsuari, contrasenya)
            Dim dataentrada As Date = Date.Today
            Dim horaentrada As TimeSpan = Date.Now.TimeOfDay
            Dim logEntrada As logEntrada = New logEntrada(0, usuari.getIdUsuari, _
            usuari.getNomCognoms, dataentrada, horaentrada)
            Me.altaLogEntrada(logEntrada)
            Return usuari
        Catch EXc As AccioExcepcio
            Throw New AccioExcepcio(EXc.Message)
        End Try
    End Function
End Class

On “loginAction” és la classe en aquest cas encarregada de comprovar la validació d’un usuari i la seva contrasenya, veiem com hem d’heretar de la classe “MarshalByRefObject”, el mètode que utilitzà el programa client per realitzar la validació es diu “validaUsuari” i aquest retorna un objecte “usuari” si la connexió té èxit. Podem realitzar més d’un mètode per classe i altres classes per rebre peticions remotes dins del nostre programa.

Segon programa, programa servidor

El programa servidor i que s’executa a l’ordinador servidor, serà l’encarregat de rebre les trucades dels clients i retornar la informació que el client sol·liciti.

En primer lloc el programa servidor ha d’incorporar una referència a la dll del primer programa que hem creat, per tant en l’apartat de referències triem la dll corresponent.

El programa servidor pot ser un senzill “form” amb algunes particularitats, primerament crearem un arxiu xml amb els serveis que hem creat en el primer programa o dll, aquest fitxer l’anomenarem “Listener.exe.config”

Listener

On el servei “loginAction” és efectivament la classe que havíem creat en el primer programa, podem veure que el port utilitzat per defecte és el 8085.

Després en el programa servidor hem d’importar les referències de l’espai de noms System.Runtime.Remoting.Channels

Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Tcp 

Després dins del programa creem les següent connexió:

    Public Sub activar()
        Try
            Dim aPath As String
            Dim aName As String
            aName = _
              System.Reflection.Assembly.GetExecutingAssembly. _
              GetModules()(0).FullyQualifiedName
            aPath = System.IO.Path.GetDirectoryName(aName)
            RemotingConfiguration.Configure(aPath & "\Listener.exe.config", False)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
 

Aquí podem veure com carreguem la connexió del fitxer “listener.exe.config”, una vegada realitzada la configuració i activada la connexió el servidor queda preparat per a rebre les peticions del client.

Tercer programa, Programa client

El programa client és l’encarregat de realitzar les peticions al servidor, invocant els mètodes remots, igualment que hem fet amb el programa servidor hem d’afegir una referència a la dll creada en el primer programa, per tant en l’apartat de referències triem la dll corresponent.

Aquí també hem de crear un xml amb els serveis o classes que hem creat en el primer programa o dll, aquest fitxer l’anomenarem “Client.exe.config”, destacar aquí que hem d’especificar l’adreça IP del servidor, en aquest exemple és la de localhost perquè client i servidor són al mateix ordinador.

client-listener

Després en el programa client igualment que havíem fet al servidor hem d’importar les referències de l’espai de noms System.Runtime.Remoting.Channels

Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels

Després tenim que obrir la connexió abans de fer la trucada a un objecte remot, per obrir la connexió es fa d’una manera semblant com hem fet al servidor

RemotingConfiguration.Configure(aPath & "\Client.exe.config", False)

Ara si que podem fer la trucada a l’objecte remot des de l’aplicació client, en l’exemple utilitzem el mètode que havíem creat en el primer programa dll


    Private Sub acceptar()
        Dim loginAction As New loginAction
        usuari = loginAction.validaUsuari(UseTextBox.Text, PassTextBox.Text)
    End Sub 

Conclusions

A partir d’aquest exemple es poden crear tots els mètodes remots que vulguem, sempre respectant l’ordre, primer al programa dll, i després al servidor.

És una manera senzilla de separar el client del servidor i que els programes client no hagin de realitzar tasques directament amb la base de dades, d’aquesta manera el tràfic de dades també és menor ja que moltes operacions es poden realitzar en el programa servidor.