Mostrar Mensajes

Esta sección te permite ver todos los mensajes hechos por este usuario, recuerda que solo puedes ver los mensajes en áreas en donde tu tienes acceso.


Mensajes - Jose Torres

Páginas: [1] 2 3 ... 5
2
Cuál es la razón del uso de uno u otro tipo de transferencias de datos (RTU, TCP, UDP, etc ) desde y hacia el PLC. Siguiendo los ejemplos propuestos en las notas de aplicación utilicé las diferentes opciones y andan bien; sin embargo no me queda claro cuando utilizar una u otra. Gracias

3
Muchas gracias.

4
Hola Boris, lo que me parece algo pesado de mi programa es la activación de los relés. Funciona pero pero tal vez haya un modo mejor de hacer la pesada sin tantos firuletes. Te digo como deberían funcionar: el ciclo comienza  con la señal de "start" y termina con "start" negado por fin de pesaje o señal de pare externa. Debe activarse en forma secuencial la descarga de un árido después de otro, nunca simultaneamente, una vez terminado su pesaje el relé no puede volver a energizarse hasta un nuevo ciclo, el ciclo termina con el fin de pesada del último árido. En caso de detenerse el pesaje por pare externo en cualquier momento del pesaje, al relanzar "start" el pesaje continuará desde su punto de detención. Cualquier aclaración a tus órdenes. Muchas gracias

5
Espectacular!!! Salió de una. Muchas gracias

6
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
  • .Cómo hacer para que el programa tome como valor de Row el de la fila en foco del DataGridView del formulario? Muchas gracias.

7
Hola Boris, el escaleo anduvo fenómeno así como las demás ayudas que me propusiste. Te envío el borrador de las "recetas", tanto en PLC como en visual c#. La inclusión del display es solo para monitorear lo que pasa en el programa. Los valores del peso de los componentes son solo indicativos para evitar el error del 4% en la lectura de la balanza. Cuando termine el programa le voy a poner un 8091 que tiene entradas de 12 bits. Falta el pesaje de cemento y el dosaje de agua pero es repetitivo. Si la pesada parece algo compleja es para evitar que los relés no reboten, vibren ni retornen. En el pesaje real las compuertas de las tolvas de áridos no pueden volver a abrirse una vez que han completado su descarga. Cuando puedas pegale una mirada; en caso de que haya otro modo de encapsular la pesada de cada componente te agradecería la ayuda. Espero, de a poco, irme poniendo menos molesto con menos consultas.Muchas gracias.

8
Muy bien, lo pruebo y te aviso. Muchas gracias

9
Quisiera saber cómo se hace para escalar una entrada analógica. Por ej. leo una entrada de 10 bits de 0-10 v en una escala de 0 a 1023 ¿Cómo hago para transformarlo en una escala de 0 a 800?  Se me ocurre algo pero en Float pero luego no puedo pasarlo a Int32. Gracias.

10
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

11
Boris, excelente!!! Gracias

12
Muchas gracias.

13
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.

14
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.


15
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);     
       


        }
    }
}


Páginas: [1] 2 3 ... 5