Archivo por meses: julio 2014

Compartir datos entre 2 PLC S7 mediante ethernet

Una opción muy interesante cuando trabajamos con varios PLC de Siemens es poder compartir datos mediante la red ethernet del propio PLC, Siemens nos ofrece la posibilidad de crear enlaces de comunicación aprovechando la red y así poder Compartir datos entre 2 PLC S7 mediante ethernet.

En el siguiente ejemplo se utiliza dos PLC S7 315 2DP PN, aunque también se puede realizar con otros PLC de Siemens o Vipa que tengan el puerto de ethernet integrado, o también una tarjeta de ethernet

En primer lugar debemos de crear un enlace en el PLC maestro, este PLC será el encargado de leer y escribir los datos en el PLC cliente, supongamos que tenemos las siguientes direcciones IP

  • IP PLC Maestro: 192.168.10.20
  • IP PLC Esclavo: 192.168.10.120

Configuración del enlace del PLC

Abrimos el programa NetPro y seleccionamos la CPU del PLC maestro:

enlace-netpro-plc

Nuevo enlace con el netpro

Seleccionamos enlace no especificado y tipo de enlace S7:

enlace-no-especificado

Insertar nuevo enlace

En aceptar el enlace se abren las propiedades, aquí debemos de especificar la IP del PLC cliente, en nuestro caso será la 192.168.10.120, definimos el ID del enlace, en este caso el 1, este ID será el que luego utilizaremos en el programa de Step 7, luego hacemos clic en direcciones:

propiedades-del-enlace

Propiedades del enlace

En direcciones definimos el bastidor y slot, normalmente 0 y 2 y en recurso de enlace seleccionamos en local el 10 y en el interlocutor seleccionamos el 3:

detalle-direcciones-enlace-s7

Aceptamos todos los cambios y transferimos la nueva configuración al PLC maestro.
Con esto hecho ya deberíamos tener el enlace entre los 2 PLC realizado, probamos de conectar los 2 PLC en la misma red y al abrir en online desde el Netpro veremos como el enlace esta funcionando correctamente.

Programa de lectura y escritura de datos

En primer lugar debemos de copiar los FB de comunicación en nuestro proyecto de Step 7 y transferirlos al PLC, los FB de comunicaron que utilizaremos son el “PUT” Write Data to a Remote CPU y el “GET” Read Data From a Remote CPU, el FB14 y el FB15 de nuestro ejemplo.

Lectura de datos del PLC cliente

Mediante el FB de lectura “GET” realizamos una lectura secuencial de los datos del cliente, en este caso hemos puesto un clock de 1 décima de segundo, pero se podría aumentar el tiempo de ciclo dependiendo de la cantidad de datos a leer:

lectura-datos-get

En este ejemplo se leen los datos del DB300 a partir de la posición 200 con una cantidad de 150 bytes, y se transfieren al plc del maestro también al DB300 a partir de la posición 200. Se puede ver como el ID del enlace es el 1 que anteriormente hemos definido en la configuración de hardware

Escritura de datos del PLC cliente

Mediante el FB de escritura “PUT” realizamos una escritura secuencial de los datos del cliente, en este caso hemos puesto un clock de 1 décima de segundo, pero se podría aumentar el tiempo de ciclo dependiendo de la cantidad de datos a escribir:

escritura-datos-put

En este ejemplo se escriben los datos del DB300 a partir de la posición 0 con una cantidad de 150 bytes, estos datos se transfieren al PLC cliente también al DB300 a partir de la posición 0. Se puede ver como el ID del enlace es el 1 que anteriormente hemos definido en la configuración de hardware

Conexión a una base de datos SqlServer con VB.net

En este post voy a explicar como realizar una conexión a una base de datos SqlServer con VB.net mediante OleDb.

Base de datos SqlServer

Microsoft SQL Server es un sistema para la gestión de bases de datos producido por Microsoft basado en el modelo relacional.  Microsoft SQL Server constituye la alternativa de Microsoft a otros potentes sistemas gestores de bases de datos como son Oracle, PostgreSQL o MySQL.

Para poder realizar una conexión desde VB.net, debemos de preparar la base de datos con un usuario y contraseña y asignarle los privilegios necesarios. Desde “SQL Server Management Studio” podemos realizar esta tarea de una manera fácil y sencilla.

Abrimos “SQL Server Management Studio”  y una vez conectado al servidor añadimos un nuevo inicio de sesión, utilizamos la “Autenticacion de SqlServer”, en base de datos predeterminada seleccionamos la base de datos que queramos conectarnos, también definimos los permisos a la base de datos que utilizaremos en la conexión:

sqlserver-nuevo-inicio-sesion

Añadimos un nuevo inicio de sesión

permisos-base-datos-sqlserver

Definimos los permisos que tendrá el nuevo usuario sobre la base de datos

Una vez aceptados los cambios ya tendremos listo el nuevo usuario para realizar la conexión a la base de datos.

Conexión a una base de datos SqlServer con VB.net

En primer lugar debemos realizar las importaciones de las clases que necesitamos para realizar la conexión a una base de datos SqlServer con VB.net:

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

Definimos la conexion a la base de datos con el nombre del servidor, la base de datos y el usuari y la contraseña que hemos definido en sqlServer:

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

Vamos a realizar una consulta a la base de datos mediante un “Select”, la lectura de los datos de la consulta los leemos con 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

Para añadir un nuevo registro lo podemos hacer mediante “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

Y finalmente para modificar un registro mediante 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ón, una manera muy sencilla de establecer una comunicación entre SqlServer y Vb.net de una manera rápida y eficaz-

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.