Comunicación c# - Siemens Simatic HMI EsRecipeView

  • 40 Respuestas
  • 23950 Vistas

Jose Torres

  • Aprendiz
  • **
  • Mensajes: 61
Comunicación c# - Siemens Simatic HMI EsRecipeView
« : abril 08, 2015, 11:54:23 am »
Hola a todos. Estuve utilizando la nota de aplicación AN001 y en el cuadro de herramientas de Microsoft Visual Studio 2010 encontré un control llamado Simatic HMI EsRecipeView 11.0 que ya utilicé con una pantalla KP 300 asociada a un PLC S7 1200, ambos de Siemens, desde el entorno TIA. Quisiera utilizarlo en este entorno de Visual c# pero no sé como asociarlo con los datos ni como setear sus parámetros. Una vez domesticado este control, podría asociarlo al envió de datos al PLC 8081 como indica la nota mencionada. Agradecería esa información.
« Última Modificación: abril 08, 2015, 15:39:11 pm por Soporte »

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Comunicación c#
« Respuesta #1 : abril 08, 2015, 15:02:25 pm »
Buenas tardes,

¿ De donde se baja o donde hay mas información sobre el control Simatic HMI EsRecipeView 11.0 ?
¿ Algún link ?

Es para ver factibilidad.

Saludos
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Jose Torres

  • Aprendiz
  • **
  • Mensajes: 61
Re:Comunicación c#
« Respuesta #2 : abril 08, 2015, 15:29:31 pm »
Es un control que se halla en el cuadro de herramientas del Visual Studio 2010 de Microsoft en C#/Aplicaciones Windows, en el área de controles comunes. Ya estaba puesto ahí como si fuera un botón o una etiqueta.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Comunicación c#
« Respuesta #3 : abril 08, 2015, 15:38:15 pm »
No, eso no es algo standard. Seguramente lo tenes porque instalaste algún otro paquete de software de
Siemens para desarrollo y lo integró automáticamente con VC#2010.

Igual, para que sea compatible con el PLC en cuando a comunicación, debería utilizar algún protocolo de comunicaciones standard, como ModBus o algun formato abierto simple (no se si eso es lo que queres hacer ?).
« Última Modificación: abril 08, 2015, 15:39:55 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Jose Torres

  • Aprendiz
  • **
  • Mensajes: 61
Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
« Respuesta #4 : abril 08, 2015, 16:36:09 pm »
Es un control Activex y es probable que efectivamente el 2010 lo haya chupado de una carpeta de automatismos de Siemens. Le seguí el rastro y llegué al archivo FwRecipeView.ocx. Mi intensión es la de hacer una pantalla en c# para armar unas recetas y mandarlas al 8081 para controlar un horno contínuo de panadería. La ventaja de hacerlo con la pc es que se me ocurre más fácil imprimir un reporte de producción; la desventaja es que el plc no deja de estar atado a la oficina. Por ahora sería con un cable atorrante de Ethernet pero con este auge del Internet de las cosas no pierdo las esperanzas de poder manejarlo de otra forma. Sería interesante que ustedes diseñaran algo con una antenita para manejar el plc desde el celular o la pc de un modo tan sencillo como lo hacen algunos equipos de audio.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
« Respuesta #5 : abril 08, 2015, 16:54:37 pm »
Si podes subí una captura de pantalla de como es el control, para tenerlo en cuenta.

Estamos desarrollando VirtualHMI para Android, todavía esta en un estado beta,
le faltan algunos retoques. Pero serviría para controlar el PLC desde el smartphone o tablet.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Jose Torres

  • Aprendiz
  • **
  • Mensajes: 61
Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
« Respuesta #6 : abril 08, 2015, 17:57:41 pm »
Ojalá lo terminen pronto. Capturé la pantalla pero no sé como subirlo porque lo quise pegar aquí y no hay caso.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
« Respuesta #7 : abril 08, 2015, 18:04:42 pm »
Para subir una imagen:

  • Guardar la imagen en formato JPG o PNG. Por ejemplo, capturar pantalla y abrir PAINT de Windows, pegar y seleccionar guardar como para guardar la imagen.
  • Luego en el mensaje, hacer click en "Seleccionar archivo" y buscar la imagen guardada (ver abajo en las opciones de redacción del mensaje).
  • Una vez seleccionado el archivo, publicar el mensaje normalmente.

La versión VirtualHMI para Android esta avanzada, es funcional pero tiene algunos errores aún.
Te paso adjunto una imagen de la misma vista en el Celular.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Jose Torres

  • Aprendiz
  • **
  • Mensajes: 61
Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
« Respuesta #8 : abril 08, 2015, 18:26:45 pm »
Boris, se lo ve buenísimo, en cuanto lo tengas más o menos, me anoto. Espero que ahora se vea el recetario.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
« Respuesta #9 : abril 08, 2015, 19:56:14 pm »
Si, ahora se ve la imagen perfecto. Parece útil para poder enviar al PLC información de la receta y cargarla.

Dale, ni bien tenga una versión de prueba final para el VirtualHMI-Android, te aviso.
« Última Modificación: abril 08, 2015, 19:58:33 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Jose Torres

  • Aprendiz
  • **
  • Mensajes: 61
Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
« Respuesta #10 : abril 08, 2015, 20:16:11 pm »
Muchas gracias.

Jose Torres

  • Aprendiz
  • **
  • Mensajes: 61
Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
« Respuesta #11 : abril 09, 2015, 09:55:42 am »
Buenos días Boris. Buscando el modo de armar una receta le agregué una tabla al ejemplo de "Prueba1". Pero hasta allí llegué. Cómo puedo tomar los datos de la tabla y enviarlos al PLC?
Adjunté la carpeta donde se halla el programa pero no se pudo por el peso así que te la envío por email. Lo que sigue es una copia del código de "Prueba1" ya modificado por la tabla de datos. Gracias

Código: (C#) [Seleccionar]
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using stx8xxx;

namespace Prueba1
{
    public partial class Form1 : Form
    {
        Stx8xxx PioBoard;

        public Form1()
        {
            InitializeComponent();

            // Inicializar objeto PioBoard.
            PioBoard = new Stx8xxx("192.168.1.81", 0, Stx8xxxId.STX8081);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Variable para retorno de estado del PLC.
            UdpRxCmdStat OnUdpRxStat = UdpRxCmdStat.OK;

            // Crear array de bytes a enviar (dos bytes).
            byte[] DataBytes = new byte[2];

            // Especificar el primer byte el valor "1", para activar RELAY1 / DOUT1.
            DataBytes[0] = (byte)1;

            // Especificar el segundo byte un valor cualquiera.
            DataBytes[1] = (byte)55;

            // Enviar bytes UDP al script con el metodo "Send".
            PioBoard.Cmd.Udp.Send(DataBytes, 2, out OnUdpRxStat);           
        }

        private void button2_Click(object sender, EventArgs e)
        {
            // Variable para retorno de estado del PLC.
            UdpRxCmdStat OnUdpRxStat = UdpRxCmdStat.OK;

            // Crear array de bytes a enviar (dos bytes).
            byte[] DataBytes = new byte[2];

            // Especificar el primer byte el valor "0", para desactivar RELAY1 / DOUT1
            DataBytes[0] = (byte)0;

            // Especificar el segundo byte un valor cualquiera.
            DataBytes[1] = (byte)66;

            // Enviar bytes UDP al script con el metodo "Send".
            PioBoard.Cmd.Udp.Send(DataBytes, 2, out OnUdpRxStat);
        }

        private void tortasBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.tortasBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.panaderíaDataSet1);

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'panaderíaDataSet1.tortas' Puede moverla o quitarla según sea necesario.
            this.tortasTableAdapter.Fill(this.panaderíaDataSet1.tortas);

        }
    }
}
« Última Modificación: abril 09, 2015, 14:39:07 pm por Soporte »

Jose Torres

  • Aprendiz
  • **
  • Mensajes: 61
Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
« Respuesta #12 : abril 09, 2015, 11:34:52 am »
A ver si ahora se puede subir la carpeta.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
« Respuesta #13 : abril 09, 2015, 11:48:27 am »
Perfecto Jose, lo analizo y te comento luego. Saludos.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
« Respuesta #14 : abril 09, 2015, 15:09:14 pm »
De acuerdo a tu código, lo que debes hacer es, que un valor ingresado en una celda de la tabla tortasDataGridView se envíe
al PLC cuando hagas click en un botón, en este caso el botón ACTIVAR.

Entonces, proba enviando simplemente dos valores al principio para probar cuando hagas click en ACTIVAR.

Para ello, dentro de el evento click del botón ACTIVAR podes leer dos celdas contiguas de la tabla, por ejemplo las primeras dos, ubicadas en fila 0: columna 0 y columna 1.

Código: (C#) [Seleccionar]

private void button1_Click(object sender, EventArgs e)
{
   // Variable para retorno de estado del PLC.
   UdpRxCmdStat OnUdpRxStat = UdpRxCmdStat.OK;

   // Crear array de bytes a enviar (dos bytes).
   byte[] DataBytes = new byte[2];

   // Asignar al primer byte de transmision valor en celda en: Fila 0, Columna 0.
   DataBytes[0] = (byte) tortasDataGridView.Rows[0].Cells[0].Value;

   // Asignar al segundo byte de transmision valor en celda en: Fila 0, Columna 1.
   DataBytes[1] = (byte) tortasDataGridView.Rows[0].Cells[1].Value;

   // Enviar bytes UDP al script con el metodo "Send".
   PioBoard.Cmd.Udp.Send(DataBytes, 2, out OnUdpRxStat);           
}

Obviamente en el PLC debes cargar el programa que lea estos dos bytes transmitidos.

Por otro lado, asegúrate que en la celda exista un valor numérico y al menos la fila 0 y columna 0:1 estén cargadas
con valores, de lo contrario te va a dar error.

Saludos
« Última Modificación: abril 09, 2015, 15:12:02 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com