Slicetex Electronics - Foro

PLC - DAQ => STX8081 => Mensaje iniciado por: Jose Torres en abril 08, 2015, 11:54:23 am

Título: Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en 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.
Título: Re:Comunicación c#
Publicado por: Soporte en 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
Título: Re:Comunicación c#
Publicado por: Jose Torres en 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.
Título: Re:Comunicación c#
Publicado por: Soporte en 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 ?).
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en 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.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Soporte en 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  (http://www.slicetex.com/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.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en 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.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Soporte en abril 08, 2015, 18:04:42 pm
Para subir una imagen:


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.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en 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.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Soporte en 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.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 08, 2015, 20:16:11 pm
Muchas gracias.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en 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);

        }
    }
}
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 09, 2015, 11:34:52 am
A ver si ahora se puede subir la carpeta.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Soporte en abril 09, 2015, 11:48:27 am
Perfecto Jose, lo analizo y te comento luego. Saludos.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Soporte en 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
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 09, 2015, 15:18:39 pm
Gracias, lo pruebo y te digo.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 09, 2015, 20:44:33 pm
Hola Boris, no anduvo. Con la interface normal en c# (con los botones solos) anda bien, pero con el código de reemplazo en el botón1, al apretarlo aparece un cartel de alarma que dice:

"Excepción no controlada del tipo 'System.InvalidCastException' en Prueba1.exe
Información adicional: La conversión especificada no es válida."

No obstante, la parte de la tabla sigue funcionando normal y si apretás el segundo botón no aparece el cartel de alarma.
 
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 10, 2015, 07:29:33 am
A los campos de la tabla "tortas" los definí como Int; tiene que ver?
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Soporte en abril 10, 2015, 12:05:36 pm
Buen día,

Como el mensaje de error indica, tenes un problema de "Cast" es decir de conversión de un tipo de dato a otro.
Definilos como bytes para probar.

También, utiliza Convert.ToByte() para convertir el Value a Byte para probar:

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

   // Asignar al segundo byte de transmision valor en celda en: Fila 0, Columna 1.
   DataBytes[1] = Convert.ToByte(tortasDataGridView.Rows[0].Cells[1].Value);
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 10, 2015, 12:17:15 pm
Genio!!! Anda un violín. Cuando puedas indicame como hago para enviar valores mayores que un byte. Gracias
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Soporte en abril 10, 2015, 15:26:06 pm
Perfecto. Dicime, que lenguaje estas usando para programar el PLC ?.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 10, 2015, 17:41:34 pm
Estoy usando Ladder.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Soporte en abril 10, 2015, 21:46:39 pm
Te adjunto un proyecto en StxLadder  (http://www.slicetex.com/ladder)para el PLC que espera 3 valores tipo Int32.

De acuerdo al valor del Int32 recibido, activa o no un salidas (RELAY1 a RELAY3).
Por ejemplo si  primer Int32 es igual a "2020" activa salida 1.
Para el segundo valor Int32, si es "10123" activa salida 2.
Y finalmente para el tercer valor Int32 recibido es "405060" activa la salida 3.

Recordar que cada valor Int32 recibido contiene 4 bytes, por lo tanto se enviarían 12 bytes en total.

En el PLC el componente UdpRxDataRead en la N001 del diagrama OnUdpRx.sld utiliza la opción PACKED=true para convertir 12 bytes recibidos a 3 valores Int32 en cada elemento del del Array RxData[].

En C#, deberias transformar los valores Int32 a bytes (ya que tienen 4 bytes cada uno) antes de transmitirlos, así:

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 (12 bytes).
   byte[] DataBytes = new byte[12];

   // Onbtener valor en celda en: Fila 0, Columna 0.
   Int32 Val1 = Convert.ToInt32(tortasDataGridView.Rows[0].Cells[0].Value);

   // Copiar Val1 al array de bytes.
   DataBytes[0] = (byte)(Val1 >> 0);
   DataBytes[1] = (byte)(Val1 >> 8);
   DataBytes[2] = (byte)(Val1 >> 16);
   DataBytes[3] = (byte)(Val1 >> 24);

   // Onbtener valor en celda en: Fila 0, Columna 1.
   Int32 Val2 = Convert.ToInt32(tortasDataGridView.Rows[0].Cells[1].Value);

   // Copiar Val2 al array de bytes.
   DataBytes[4] = (byte)(Val2 >> 0);
   DataBytes[5] = (byte)(Val2 >> 8);
   DataBytes[6] = (byte)(Val2 >> 16);
   DataBytes[7] = (byte)(Val2 >> 24);

   // Onbtener valor en celda en: Fila 0, Columna 2.
   Int32 Val3 = Convert.ToInt32(tortasDataGridView.Rows[0].Cells[2].Value);

   // Copiar Val3 al array de bytes.
   DataBytes[8] = (byte)(Val3 >> 0);
   DataBytes[9] = (byte)(Val3 >> 8);
   DataBytes[10] = (byte)(Val3 >> 16);
   DataBytes[11] = (byte)(Val3 >> 24);

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

Esa es la idea, no lo he probado al código, pero lo importante es que lo entiendas.
Avísame cualquier cosa.



Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 11, 2015, 13:26:00 pm
Voy a ver si me sale y te aviso. Estuve practicando para enviarla al plc al clickear sobre una fila del datagrid que equivale a un registro de receta. Si logro hacerlo con números importantes ya va a estar completo. Muchas gracias.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 11, 2015, 20:35:33 pm
Es un caño. Tuve que actualizar el firmware del Plc y luego anduvo de una. Muchas gracias
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 12, 2015, 17:48:04 pm
Habrá algún modo de cambiar un dato o una fila de datos ya guardados desde un datagrid clickeando en alguna parte? Por ejemplo: para una receta tengo 570 grs. de harina y quiero cambiarlos por 400; si lo intento me da un error y se cierra la presentación. Gracias

Este es el error que aparece:

Excepción no controlada del tipo 'System.InvalidOperationException' en Prueba1.exe
Información adicional: Update requiere que UpdateCommand sea válido cuando se pasa la colección DataRow con filas modificadas.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Soporte en abril 12, 2015, 20:28:26 pm
Mmm, no tengo ejemplos de ese tipo. Probablemente debas poner la datagrid en un modo de edición:

https://msdn.microsoft.com/en-US/library/yztkd864(v=vs.80).aspx

http://www.yevol.com/vcsharp/lesson32.htm

Otra opción, es que las pongas en read-only a todas las celdas. Pero uses algunos text-box en el Form editables,
y luego con algún control numeric selecciones a cual fila de la datagrid deben cargarse los valores de los text-box
que edites.

Proba buscar algunos tutoriales en google.com sobre datagridview o ejemplos.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 12, 2015, 20:34:07 pm
Gracias, lo voy a intentar:
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 21, 2015, 22:26:00 pm
Hola Boris, anda todo fenómeno menos una cuestión que no sé resolver. Envío al plc 24 bytes y los desempaco bien, pero cuando quiero mandar 28 (que es lo que necesito), el receptor de datos del plc solo admite hasta 24 y se pone nervioso. De los 7 paquetes de 4 bytes hay dos que podían ser de 2 bytes y con eso ya podría manejarme con los 24 bytes que soporta el quisquilloso receptor de datos.Qué puedo hacer para enviar esa mescolanza de bytes? Te envío el programa de visual.

Código: (C#) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using stx8081;
namespace Recetas1
{
    public partial class Form1 : Form
    {
        Stx8081 PioBoard;
        public Form1()
        {
            InitializeComponent();
            // Inicializar objeto PioBoard.
            PioBoard = new Stx8081("192.168.1.81", 0);

        }

        private void componentesBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.componentesBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.database1DataSet);

        }

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

        }

        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 (24 bytes).
            byte[] DataBytes = new byte[24];

            // Onbtener valor en celda en: Fila 0, Columna 0.
            Int32 Val1 = Convert.ToInt32(componentesDataGridView.Rows[0].Cells[0].Value);

            // Copiar Val1 al array de bytes.
            DataBytes[0] = (byte)(Val1 >> 0);
            DataBytes[1] = (byte)(Val1 >> 8);
            DataBytes[2] = (byte)(Val1 >> 16);
            DataBytes[3] = (byte)(Val1 >> 24);

            // Onbtener valor en celda en: Fila 0, Columna 1.
            Int32 Val2 = Convert.ToInt32(componentesDataGridView.Rows[0].Cells[1].Value);

            // Copiar Val2 al array de bytes.
            DataBytes[4] = (byte)(Val2 >> 0);
            DataBytes[5] = (byte)(Val2 >> 8);
            DataBytes[6] = (byte)(Val2 >> 16);
            DataBytes[7] = (byte)(Val2 >> 24);

            // Onbtener valor en celda en: Fila 0, Columna 2.
            Int32 Val3 = Convert.ToInt32(componentesDataGridView.Rows[0].Cells[2].Value);

            // Copiar Val3 al array de bytes.
            DataBytes[8] = (byte)(Val3 >> 0);
            DataBytes[9] = (byte)(Val3 >> 8);
            DataBytes[10] = (byte)(Val3 >> 16);
            DataBytes[11] = (byte)(Val3 >> 24);

            // Onbtener valor en celda en: Fila 0, Columna 3.
              Int32 Val4 = Convert.ToInt32(componentesDataGridView.Rows[0].Cells[3].Value);

              // Copiar Val4 al array de bytes.
              DataBytes[12] = (byte)(Val4 >> 0);
              DataBytes[13] = (byte)(Val4 >> 8);
              DataBytes[14] = (byte)(Val4 >> 16);
              DataBytes[15] = (byte)(Val4 >> 24);

              // Onbtener valor en celda en: Fila 0, Columna 4.
              Int32 Val5 = Convert.ToInt32(componentesDataGridView.Rows[0].Cells[4].Value);

              // Copiar Val5 al array de bytes.
              DataBytes[16] = (byte)(Val5 >> 0);
              DataBytes[17] = (byte)(Val5 >> 8);
              DataBytes[18] = (byte)(Val5 >> 16);
              DataBytes[19] = (byte)(Val5 >> 24);

              // Onbtener valor en celda en: Fila 0, Columna 5.
              Int32 Val6 = Convert.ToInt32(componentesDataGridView.Rows[0].Cells[5].Value);

              // Copiar Val6 al array de bytes.
              DataBytes[20] = (byte)(Val6 >> 0);
              DataBytes[21] = (byte)(Val6 >> 8);
              DataBytes[22] = (byte)(Val6 >> 16);
              DataBytes[23] = (byte)(Val6 >> 24);

              // Onbtener valor en celda en: Fila 0, Columna 6.
              Int32 Val7 = Convert.ToInt32(componentesDataGridView.Rows[0].Cells[6].Value);

              // Copiar Val3 al array de bytes.
              DataBytes[24] = (byte)(Val7 >> 0);
              DataBytes[25] = (byte)(Val7 >> 8);
              DataBytes[26] = (byte)(Val7 >> 16);
              DataBytes[27] = (byte)(Val7 >> 24);

            MessageBox.Show("Se envía una receta");
            // Enviar los 24 bytes UDP al script con el metodo "Send".
            PioBoard.Cmd.Udp.Send(DataBytes, 24, out OnUdpRxStat);     
       


        }
    }
}

Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Soporte en abril 22, 2015, 18:48:35 pm
Buenas tardes,

En teoría podrías enviar hasta 252 bytes en un solo paquete.

¿ Que sintoma te da de que recibís mal los datos ?.

¿ Estas usando un array lo suficientemente grande en el PLC para copiar los bytes recibidos ?.

Por otro lado, fijate que en C# estas usando un array de 24 bytes:

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


Saludos
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 22, 2015, 19:30:36 pm
Hola Boris, El problema lo tengo al querer compilar el plc. Como vos señalás, en las informaciones del componente UDP RX READ BUF indica que toma hasta 256 elementos y al configurarlo con los 28 bytes, los toma, pero al compilar me sale este error:

El array del puerto "ARRAY" en el componente "U63" no tiene el suficiente tamaño para copiar los "28" elementos requeridos a partir del indice "0". Modifique la cantidad maxima de bytes a copiar desde las propiedades del componente para continuar.

Para poder compilarlo tuve que ir bajando hasta 24 y ahí anduvo.

Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Soporte en abril 22, 2015, 19:36:26 pm
¿ Y de que tamaño es el array que le pasas al componente ?

Adjunta el proyecto StxLadder que estas realizando, comprimilo con zip desde "Archivo > Crear backup del proyecto (zip)" y postealo aca así lo intento compilar y ver.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 23, 2015, 07:02:56 am
Buen día Boris. Me fue imposible entrar el zip por este medio porque es muy pesado. Tampoco lo permite hotmail como adjunto. Te lo compartí entonces por OneDrive en un email enviado a Info.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Soporte en abril 23, 2015, 11:40:55 am
Ahi baje el Zip. Es muy grande porque adentro de la carpeta del proyecto copiaste el SDK (27 MB) y la nota de aplicación AN001 (5MB).
Sino pesaria menos de 30Kb.

Por lo que veo, el array RxData[] era muy pequeño (6 elementos, es decir 6x4=24 bytes), por eso no podías enviar 28 bytes. Incremente el tamaño del
array a 12 elementos para asegurar espacio.

Te adjunto el mismo proyecto modificado.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 23, 2015, 12:18:54 pm
Muchas gracias.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 23, 2015, 12:46:10 pm
Boris, excelente!!! Gracias
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 23, 2015, 20:16:47 pm
Hola Boris, tengo que escalar los valores analógicos de una balanza con salida de 0-10 v y no se me ocurre cómo hacerlo. Gracias
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Soporte en abril 23, 2015, 20:51:55 pm
Hola Jose,

Crea un nuevo tema especifico para escala analógica, con un titulo acorde y seguimos por ese hilo, así es mas fácil ubicar esa pregunta para otros usuarios, ya que este tema según el titulo trata de comunicación.

Gracias y espero el post.
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 27, 2015, 17:53:25 pm
Hola Boris, te envié la consulta de escalar por "Dicusión general" pero no apareció por aquí. También te envié un par de zips con los archivos de Plc y Visual c#. Bueno, pero esta es una consulta de este tema. En el zip que te adjunto está el programa C# donde tengo la dificultad. Si bien este es un foro de PLC me vendría bien otra ayudita. Busqué en el manual de Visual c# y en Internet pero no hallé algo tan específico. Para enviar los valores de las recetas siempre me debo referir al valor de Row programado, por ej Rows [X]. Cells
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Soporte en abril 27, 2015, 19:46:01 pm
Para obtener la fila actual seleccionada, debes ver el CurrentRow.Index:

// Obtener el indice del la fila actual seleccionada.
int Row = dataGridView1.CurrentRow.Index;

// Obtener valor en celda Columna 1, fila seleccionada "Row".
Int32 Val2 = Convert.ToInt32(dataGridView1.Rows[Row].Cells[1].Value);

Por otro lado, podes asociar algun evento click al dataGridView.

Link de ejemplo:
http://www.codeproject.com/Questions/338684/get-value-from-selected-rows-in-datagridview (http://www.codeproject.com/Questions/338684/get-value-from-selected-rows-in-datagridview)

Saludos
Título: Re:Comunicación c# - Siemens Simatic HMI EsRecipeView
Publicado por: Jose Torres en abril 27, 2015, 20:25:53 pm
Espectacular!!! Salió de una. Muchas gracias