8
« : agosto 06, 2018, 13:36:39 pm »
Hola Boris buen día,
Muchas gracias por tus explicaciones.
La verdad es que tenía la sensación de que estaba super-holgado de memoria en mi PLC, pero evidentemente no es así (probablemente esté holgado de memoria flash para almacenar el programa en sí, pero jugado con la cantidad de RAM usada para variables).
Voy a tener que revisar bien el código antes de hacer cualquier upgrade de versiones, porque me parece que sí uso strings via subíndice en alguna parte, y me podría dar cualquier resultado. Fijate en las siguientes 2 funciones, que me parece que vos me las pasaste prehechas en algún momento, y las vengo utilizando. No tengo claro qué hacer con esas funciones para que sean compatibles con ese switch de compilación:
// ********************************************************************************
// Funcion : ReemplazarEspacios()
// Descripcion : Al string que viene, se le reemplazan todos los ESPACIOS.
//
// ********************************************************************************
ReemplazarEspacios(const String[])
{
new Buffer[30]
new i=0
// Hacer un lazo que parsea el string
while(TRUE)
{
// Copiar una línea de String[] en Buffer[].
if(String != ' ' && String != '\0')
{
Buffer = String
}
// Viene un ESPACIO en String ?
if (String == ' ')
{
// Si, reemplazar por otro caracter
Buffer = '_'
}
// Fin de caracteres en String ?
if (String == '\0')
{
Buffer = '\0'
return Buffer
}
i = i+1
}
}
// ********************************************************************************
// Funcion : nLcdPrintMultLines()
// Descripcion : Imprime una cadena con múltiples líneas en VirtualHMI.
// Soporta \n, que de otra manera no funciona
// ********************************************************************************
nLcdPrintMultLines(x, y, const String[])
{
new Buffer[160]
new i=0, j=0
new Stop = FALSE
// Parsear cadena.
while(Stop == FALSE)
{
// Copiar una línea de String[] en Buffer[].
while(String != '\n' && String != '\0')
{
Buffer[j++] = String[i++]
}
// Si hay carateres en Buffer[], imprimir.
if (j != 0)
{
// Agregar terminador de fin de cadena.
Buffer[j] = '\0'
// Imprimir en VirtualHMI Buffer[] e incrementar numero de línea.
nLcdPrintf(x, y, LCD_CLRLINE, "%s", Buffer)
}
// Fin de caracteres en String[] ?
if (String == '\0')
{
// Si, parar Loop.
Stop = TRUE
}
else
{
// No, ajustar variables para próxima línea.
j=0
i++
y++
}
}
}
Así como están ya no funcionarían, verdad ?
Gracias!
Pablo.