Limitación de formulario - Web server

  • 3 Respuestas
  • 83 Vistas

EBD

  • Aprendiz
  • **
  • Mensajes: 31
Limitación de formulario - Web server
« : marzo 09, 2020, 15:38:57 pm »
Buenas tardes,
Estoy desarrollando el web server para un PLC que va a estar instalado en un lugar remoto con acceso a internet a traves de 4G. El programa que corre el PLC cuenta con una serie de parámetros (setpoint de temperaturas y presiones) que se deben poder modificar de forma remota a traves del web server. Ya tengo otros proyectos similares andando que utilizan un formulario como se menciona en la AN030 y funcionan sin problemas.

Sin embargo, este proyecto nuevo presenta más parámetros que los anteriores, y llegué a una limitación con el tamaño del formulario que envía los datos al PLC para que éste los cargue al setpoint de la máquina. El formulario debe enviar 33 campos (32 float y 1 int), por lo que el formulario enviado al PLC consta de, al menos:
el nombre del formulario + 33 strings para identificar el nombre del campo + los 33 valores numéricos.

Luego de programar el formulario y envíarlo con valores de prueba, me saltó un error "413 - Longitud de datos supera el límite".

Luego, reduje los nombres de los campos del formulario lo más que pude (el parámetro name del objeto input de HTML es utilizado en el PLC para identificar cada campo dentro del formulario). Aún así, continuaba el error.

Reduciendo los valores de prueba enviados pude llegar al límite de tamaño que me deja envíar en un formulario (utilizando la función WebServerGetQueryLength()) que es de 250, correcto? Este valor no me alcanza para envíar todos los valores del setpoint, ya que me faltan alrededor de 48 caracteres para enviarlo de forma completa.

Quería saber si es posible aumentar esta limitación de 250 caracteres. En caso que no sea posible, tendría que partir el formulario y enviarlo por partes, ¿hay alguna forma sencilla de hacer esto?
Envío a continuación el código del formulario para que vea si me estoy olvidando algo. Como se puede ver, los parámetros name de cada input tienen nombres lo más chico posible para que permita al PLC identificarlos unívocamente.
Muchas gracias,
Marcos.


Código: [Seleccionar]
<form action="/control.shtml" method="post" id="editOP_Form">
    <input type="hidden" name="Form" value="formEditOp"> 

      <h3 class="opCategoryHeader">General:</h3><br>
      <h4>Período de registros: </h4>
      <div class="singleInput"><span class="units">(min)</span><input type="text" name="ZZ" id="str_editOP_regPeriod"></div>
      <br>
      <br>


      <h3 class="opCategoryHeader">Temperaturas:</h3><br>
      <h4>T. Critica: </h4>
      <div class="singleInput"><span class="units">(C)</span><input type="text" name="A" id="str_editOP_critTemp"></div>
      <br>
      <h4>T. Control A: </h4>
      <div class="rangedInput">
        <span class="units">(C)</span>
        <input type="text" name="B" id="str_editOP_tLow_A"><span class="separator">;</span>
        <input type="text" name="C" id="str_editOP_tHigh_A">
      </div>
      <br>
      <h4>T. Control B: </h4>
      <div class="rangedInput">
        <span class="units">(C)</span>
        <input type="text" name="D" id="str_editOP_tLow_B"><span class="separator">;</span>
        <input type="text" name="E" id="str_editOP_tHigh_B">
      </div>
      <br>
      <h4>T. Maxima: </h4>
      <div class="singleInput"><span class="units">(C)</span><input type="text" name="F" id="str_editOP_tMax"></div>
      <br>
      <br>


      <h3 class="opCategoryHeader">Compresor A:</h3><br>
      <h4>P. Alta: </h4>
      <div class="rangedInput">
      <span class="units">(PSI)</span>
      <input type="text" name="G" id="str_editOP_cmpA_pHighMin">
      <span class="separator">:</span>
      <input type="text" name="H" id="str_editOP_cmpA_pHighMax">
      </div>
      <br>
      <h4>P. Baja: </h4>
      <div class="rangedInput">
      <span class="units">(PSI)</span>
      <input type="text" name="I" id="str_editOP_cmpA_pLowMin">
      <span class="separator">:</span>
      <input type="text" name="J" id="str_editOP_cmpA_pLowMax">
      </div>
      <br>
      <h4>P. Dif: </h4>
      <div class="rangedInput">
      <span class="units">(PSI)</span>
      <input type="text" name="K" id="str_editOP_cmpA_pDifMin">
      <span class="separator">:</span>
      <input type="text" name="L" id="str_editOP_cmpA_pDifMax">
      </div>
      <br>
      <br>


      <h3 class="opCategoryHeader">Compresor B:</h3><br>
      <h4>P. Alta: </h4>
      <div class="rangedInput">
      <span class="units">(PSI)</span>
      <input type="text" name="M" id="str_editOP_cmpB_pHighMin">
      <span class="separator">:</span>
      <input type="text" name="N" id="str_editOP_cmpB_pHighMax">
      </div>
      <br>
      <h4>P. Baja: </h4>
      <div class="rangedInput">
      <span class="units">(PSI)</span>
      <input type="text" name="O" id="str_editOP_cmpB_pLowMin">
      <span class="separator">:</span>
      <input type="text" name="P" id="str_editOP_cmpB_pLowMax">
      </div>
      <br>
      <h4>P. Dif: </h4>
      <div class="rangedInput">
        <span class="units">(PSI)</span>
        <input type="text" name="Q" id="str_editOP_cmpB_pDifMin">
        <span class="separator">:</span>
        <input type="text" name="R" id="str_editOP_cmpB_pDifMax">
      </div>
      <br>
      <br>


      <h3 class="opCategoryHeader">Ventiladores:</h3><br>
      <h4>P. Vent. A2: (off/on)</h4>
      <div class="rangedInput">
        <span class="units">(PSI)</span>
        <input type="text" name="S" id="str_editOP_fanA2_OFF">
        <span class="separator">/</span>
        <input type="text" name="T" id="str_editOP_fanA2_ON">
      </div>
      <br>
      <h4>P. Vent. A3: (off/on)</h4>
      <div class="rangedInput">
      <span class="units">(PSI)</span>
      <input type="text" name="U" id="str_editOP_fanA3_OFF">
      <span class="separator">/</span>
      <input type="text" name="V" id="str_editOP_fanA3_ON">
      </div>
      <br>
      <h4>P. Vent. A4: (off/on)</h4>
      <div class="rangedInput">
      <span class="units">(PSI)</span>
      <input type="text" name="W" id="str_editOP_fanA4_OFF">
      <span class="separator">/</span>
      <input type="text" name="X" id="str_editOP_fanA4_ON">
      </div>
      <br>
      <h4>P. Vent. B2: (off/on)</h4>
      <div class="rangedInput">
      <span class="units">(PSI)</span>
      <input type="text" name="Y" id="str_editOP_fanB2_OFF">
      <span class="separator">/</span>
      <input type="text" name="ZA" id="str_editOP_fanB2_ON">
      </div>
      <br>
      <h4>P. Vent. B3: (off/on)</h4>
      <div class="rangedInput">
      <span class="units">(PSI)</span>
      <input type="text" name="ZB" id="str_editOP_fanB3_OFF">
      <span class="separator">/</span>
      <input type="text" name="ZC" id="str_editOP_fanB3_ON">
      </div>
      <br>
      <h4>P. Vent. B4: (off/on)</h4>
      <div class="rangedInput">
      <span class="units">(PSI)</span>
      <input type="text" name="ZD" id="str_editOP_fanB4_OFF">
      <span class="separator">/</span>
      <input type="text" name="ZE" id="str_editOP_fanB4_ON">
      </div>
      <br>
      <h4>T. Habilitacion Vent 1: (A;B)</h4>
      <div class="rangedInput">
      <span class="units">(PSI)</span>
      <input type="text" name="ZF" id="str_editOP_fanA1_ENABLE">
      <span class="separator">;</span>
      <input type="text" name="ZG" id="str_editOP_fanB1_ENABLE">
      </div>
      <br>
      <br>
      <input type="button" name="sendOP" onclick="submit();" value="Enviar al PLC">
      <input type="button" name="defaultOP" value="Valores por defecto" onclick="GetDefaultOpJson()">
      <br>
    </form>

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2132
  • Soporte Técnico
Re:Limitación de formulario - Web server
« Respuesta #1 : marzo 09, 2020, 20:03:03 pm »
Buenas tardes Marcos,

Reduciendo los valores de prueba enviados pude llegar al límite de tamaño que me deja envíar en un formulario (utilizando la función WebServerGetQueryLength()) que es de 250, correcto? Este valor no me alcanza para envíar todos los valores del setpoint, ya que me faltan alrededor de 48 caracteres para enviarlo de forma completa.

Si, 250 bytes es el límite, e influye la memoria RAM del PLC disponible, que es muy acotada, por ello tiene límites para reservar para otras aplicaciones. 

Quería saber si es posible aumentar esta limitación de 250 caracteres. En caso que no sea posible, tendría que partir el formulario y enviarlo por partes, ¿hay alguna forma sencilla de hacer esto?

Es un límite práctico, como los programas crecen y se acerca a los límites de la RAM del PLC, no es viable aumentar de forma significativa sin quitar memoria a otras aplicaciones y a futuras mejoras o expansiones.

Yo lo que te recomendaría es que agrupes los datos por similitud y dividas en dos páginas el formulario, por ejemplo temperaturas y presiones por separado. O una página que lleve a "Setpoint" y muestre "Configuración Paso 1/2", y al final de la misma un link a "Configuración Paso 2/2".

Porque si bien sería posible hacerte un firmware especial, aumentando la capacidad, por un lado sería difícil para que obtengas las actualizaciones y por otro, si aumentas las variables a futuro, caerías en el mismo problema que te quedás corto.

Futuros modelos de PLC ampliarán la memoria disponible.

Quedamos a disposición.

Saludos!

« Última Modificación: marzo 10, 2020, 10:56:55 am por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

EBD

  • Aprendiz
  • **
  • Mensajes: 31
Re:Limitación de formulario - Web server
« Respuesta #2 : marzo 10, 2020, 11:17:55 am »
Entiendo, gracias.
Veré como puedo implementar lo que necesito.

Se me ocurre quizás ver si es posible cambiar el nombre del formulario con jQuery. De esta forma, apretando un botón en el web server podría activar la función que cambia el nombre del formulario y cambiar el texto de los campos para que el usuario ingrese otras variables. Esto evitaría que el usuario tenga que cargar una página nueva, que lleva tiempo ya que la conexión a internet de la maquina no suele ser tan buena. ¿Sabe si es posible?

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2132
  • Soporte Técnico
Re:Limitación de formulario - Web server
« Respuesta #3 : marzo 10, 2020, 13:46:55 pm »
Se me ocurre quizás ver si es posible cambiar el nombre del formulario con jQuery. De esta forma, apretando un botón en el web server podría activar la función que cambia el nombre del formulario y cambiar el texto de los campos para que el usuario ingrese otras variables. Esto evitaría que el usuario tenga que cargar una página nueva, que lleva tiempo ya que la conexión a internet de la maquina no suele ser tan buena. ¿Sabe si es posible?

Buenas tardes. No soy un experto en jQuery, para crear páginas dinámicas es muy efectivo, por ejemplo para actualizar un texto sin recargar toda la página o cambiar ciertas partes del HTML, hasta ahí he visto que es simple. Ahora, cuando es algo más complejo, tipo cambiar el formulario, refrescar la página y hacer una transacción al mismo tiempo, suele tener sus trucos, y lleva bastante prueba y error.

No sabría decirte si es posible por desconocimiento, pero jQuerry tiene mucho potencial y es posible que se pueda. Lo mejor sería ver ejemplos similares en Google y tantear si se justifica, frente a colocar dos página de configuración juntas.

Saludos!
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com