Programa para convertir de Siemens Step 7 a Rockwell

Aprovechando el código AWL de los programas hechos en Step 7 junto a la línea en texto ASCII que lleva incorporado el Logix Designer de Rockwell se puede crear un programa para realizar una traducción directa desde Siemens Step 7 a Rockwell.

Este programa lo he realizado con .NET y aunque no está totalmente perfeccionado, puede llegar a traducir el 65% de un programa hecho en Siemens Step7, del mismo modo no sería muy complicado realizar la opción contraria, es decir de .

El programa traduce de segmento en segmento, es decir no traduce un bloque o FC completo, esto es así porque es muy importante comprobar en todo momento que lo que está traduciendo sea correcto, ya que algunas veces por pequeños fallos la traducción no es correcta al 100%

traduccion-siemens-rockwell

 

Programa para convertir de Siemens Step 7 a Rockwell

El programa es muy simple, vamos a ver un ejemplo, en primer lugar debemos de copiar el código AWL del segmento del programa de Siemens:

El segmento a copiar

red-siemens-step-7

Seleccionamos ver AWL:

red-siemens-step-7-awl

Seleccionamos todo el contenido AWL de la red y hacemos Control C, y lo pegamos con el botón Pegar Traducir Copiar, este botón realiza las 3 tareas, es decir pega el contenido del portapapeles en el programa, realiza la traducción y copia en el portapapeles la traducción a Rockwell, de esta forma solo necesitamos un clic para traducir el segmento:

programa-traduccion-siemens-rockwell

 

Aunque se puede ver en la parte inferior el segmento traducido a ASCII para Rockwell, no hace falta seleccionarlo y copiarlo, por que ya lo tenemos copiado en el portapapeles, ahora simplemente lo pegamos en el editor de Rockwell:

pegar-a-Rockwell

Y comprobamos como realiza la traducción, eso si los simbólicos ya deben estar creados en el programa:

resultado-traduccion-rockwell

 

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.

ArrayList i indexOf, trobem objectes dins d’un array en vb.net

En aquest post explico com trobar objectes dins d’un array o cadena d’objectes en vb.net

Anem a suposar que tenim un grup d’alumnes que els introduïm en un array o un vector, i ens interessa buscar un alumne en concret d’aquesta llista, una manera de fer-ho seria fent un recorregut per tot el vector fins que trobem l’alumne que busquem, una altra molt més fàcil és utilitzar el mètode “indexOf” de la classe ArrayList, on ens tornarà la posició exacta del l’alumne que estem buscant, d’aquesta manera amb ArrayList i indexOf, trobem objectes dins d’un array a vb.net.

Definició de la classe alumne

Anem a definir la classe alumne amb les seves propietats habituals, nom, cognoms, adreça, etc., dins de la classe sobreescriurem el mètode “Equals” i dins d’aquest mètode retornarem true o false si l’objecte propi de la classe és igual al que rebem del mètode, podent realitzar la comparació amb els camps que ens interessen de la classe alumne, de la següent manera:

Public Class alumne
    Inherits persona
    Private IDALUMNE As Integer
    Public Sub New(ByVal sNom As String, ByVal sIDALUMNE As Integer)
        MyBase.New(sNom)
        IDALUMNE = sIDALUMNE
    End Sub
    Public Function getidAlumne() As Integer
        Return IDALUMNE
    End Function
    Overrides Function Equals(ByVal obj2 As Object) As Boolean      '         
        If Not obj2 Is Nothing Then
            If Not obj2 Is System.DBNull.Value Then
                Dim c As alumne = obj2
                If c.getidAlumne = getidAlumne() Then
                    Return True
                End If
            End If
        End If
        Return False
    End Function
End Class

Aquest mètode sobreescrit rep com a paràmetre “obj2” de tipus object, aquest objecte amb tota seguretat de tipus alumne és comparat amb els camps de la nostra classe, aquí es pot veure que es compara amb el idAlumne, però es podria utilitzar els altres camps de l’objecte , nom, cognoms, etc, retorna true si és el mateix objecte o false si no ho és.

Aquesta implementació es pot utilitzar com a rutina habitual en la declaració de totes les classes d’identitat del nostre programa, després es pot utilitzar o no si és necessari.

Exemple de ArrayList i indexOf, trobem objectes dins d’un array en vb.net

Anem a veure com podem trobar un alumne dins d’un ArrayList després d’haver sobreescrit el mètode “Equals“:

Dim a As alumne
Dim array As ArrayList = New ArrayList

a = New alumne("Jordi", 12) 'Vamos creando alumnos
array.Add(a)  'añadimos el alumno en el array
a = New alumne("Anna", 24)
array.Add(a)
a = New alumne("Joan", 32)
array.Add(a)
a = New alumne("Carme", 14)
array.Add(a)
a = New alumne("Josep", 31)
array.Add(a)
a = New alumne("Marc", 20)
array.Add(a)
a = New alumne("Mireia", 22)
array.Add(a)

Dim posicio As Integer
posicio = array.IndexOf(New alumne("", 31)) 'Busco el alumno con identificador 31 y me devuelve la posicion 4
posicio = array.IndexOf(New alumne("", 12)) 'Busco el alumno con identificador 12 y me devuelve la posicion 0

En l’exemple hem declarat 7 alumnes i els hem afegit en un array, després busquem en cas de fallida amb el mètode “indexOf“, l’alumne amb identificador 31 i ens retorna la posició 4.

Conclusions

Una manera molt fàcil i ràpida de trobar objectes dins d’un array és sobreescriure el mètode “Equals” dins de la classe, d’aquesta manera trobar objectes coincidents dins d’un array amb gran quantitat de dades es converteix en una tasca molt senzilla.