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 - PabloGa

Páginas: [1] 2 3 ... 7
1
OK Boris, muchas gracias.
Voy a fraccionar la generación del CSV. Igualmente me parece que los límites son más altos de los que me ponés en tu post.
Para que tengas una referencia, actualmente la línea que genera el string CSV tiene:
- 328 caracteres en el código fuente pawn
- Imprime 20 variables %
- El string CSV generado tiene 85 caracteres

Al intentar agregar un par de variables más, es que se trunca.

Saludos y gracias!
Pablo

2
Hola Boris, como estás,
Una consulta: en la aplicación de mi PLC estoy creando una "pagina web" que en realidad es una simple cadena de texto (valores separados por comas); en definitiva la "página" es simplemente un renglón, una línea de texto. Así lo tuve funcionando hace meses.
Al agregarle ahora más datos al string CSV (se hizo más largo), pareciera que cuando se genera la página mediante WebServerPrintStr(), hubiera alguna limitación en cuanto al número de caracteres que puede tener el renglón; aparentemente serían 90 caracteres. Cuando llega al caracter 90 el string se trunca. Puede ser ?
Esta es la sintaxis utilizada (todo es 1 renglón Pawn):
WebServerPrintStr("%02d/%02d/%02d,%02d:%02d:%d,%s,%d,%d,%d,%s,%d,%s,%02d/%02d,%02d:%02d,%02d/%02d,%02d:%02d,%d.%d,%d.%d,%d.%d,FIN", Dia, Mes, Anio, Hora, Min, Seg, DATO1, DATO2, DATO3, DATO4, DATO5, DATO6, DATO7, DATO8, DATO9, DATO100, DATO11, DATO12, DATO13, DATO14, DATO15, DATO16, DATO17, DATO18, DATO19, DATO20, DATO21)

De paso: la instrucción en lenguaje Pawn que genera ese string es larga (tiene como 480 caracteres)... hay alguna limitación en el compilador para el largo de un renglón de código fuente?  Me surgió esta duda buscando de resolver el problema del punto anterior...

Desde ya muchas gracias.
Saludos!
Pablo

3
Hola Boris, muchas gracias por tu respuesta.

Efectivamente, el problema es solo al usar http.

Este es un extracto del código que uso. La función "ThingSpeakUp" se ejecuta una vez por minuto. Cuando la transacción http finaliza, ejecuta "@OnHttpSendCompleted()". Según mi análisis, lo que ocurre es que @OnHttpSendCompleted() no se estaría ejecutando (deja de ejecutarse porque por alguna razón no se completó la transacción), y por ende ThingSpeakError queda = 255, que es el valor con el que se inicializó al iniciar la funcionalidad.
La forma que yo tengo de "detectar" este problema es -precisamente- detectando que ThingSpeakError se queda clavado en 255.

Buen viaje, y lo seguimos más adelante.
Gracias desde ya,
Pablo

// --------------------------------------------------------------------------------
// Funcion     : ThingSpeakUp
// Descripcion : Sube la información a ThingSpeak
//               SE EJECUTA 1 VEZ POR MINUTO
// --------------------------------------------------------------------------------

ThingSpeakUP()
{
   // Comprobar que no haya otras conexiones http en curso, ni el envío de email en curso
   if(ThingSpeakSending == 0 && EmailSending == 0)
   {
      // Marca que hay un envío en curso
      ThingSpeakSending = 1
         
      // Inicializar cliente Thingspeak
      ThingSpeakInit()
     
      // Limpia las variables con el string que se enviara a ThingSpeak:
      ThingSpeak_String1 = ""
      ThingSpeak_String2 = ""
      ThingSpeak_String3 = ""
      ThingSpeak_String4 = ""
      ThingSpeak_String5 = ""
      ThingSpeak_String6 = ""     
      ThingSpeak_String  = ""

      StrFormat(ThingSpeak_String1, 50, true, "field1=%d.%d&field2=%d&", Dato1,Dato1_d,Dato2)
      StrFormat(ThingSpeak_String2, 50, true, "field3=%d&", Letra1+Letra2+Letra3)
      StrFormat(ThingSpeak_String3, 50, true, "field4=%d.%d&", Dato2,Dato2_d)
      StrFormat(ThingSpeak_String4, 50, true, "field5=%d&field6=%d&", Tiempo_1,Tiempo_2)     
      StrFormat(ThingSpeak_String5, 50, true, "field7=%d.%d&", Dato3,Dato3_d)
      StrFormat(ThingSpeak_String6, 50, true, "field8=%d", Dato4)
     
      // Concatena los 6 segmentos
      StrFormat(ThingSpeak_String, 100, true, "%s%s%s%s%s%s", ThingSpeak_String1,ThingSpeak_String2,ThingSpeak_String3,ThingSpeak_String4,ThingSpeak_String5,ThingSpeak_String6)
       
      // Aquí hace la subida de la info a ThingSpeak
      HttpSendGet("/update?key=%s&%s", THINGSPEAK_APIKEY, ThingSpeak_String)
     
   }
   return 0
}

// --------------------------------------------------------------------------------
// Funcion     : ThingSpeakInit
// Descripcion : Inicializa las funcionalidades para ThingSpeak
// --------------------------------------------------------------------------------

ThingSpeakInit()
{
   ThingSpeakError = 255

   // Inicializar cliente HTTP.
   HttpSendInit("api.thingspeak.com", 80, HTTP_SEND_OPT_DEFAULT, 60)

   // Activar evento OnHttpSendCompleted()
   HttpSendSetCompletedEvent()
   
   return 0
}

// ********************************************************************************
// Funcion     : OnHttpSendCompleted()
// Descripcion : Evento generado al finalizar transaccion HTTP.
// ********************************************************************************

@OnHttpSendCompleted()
{   
   // Aquí si el evento http es por ThingSpeak
   if (ThingSpeakSending == 1)
   {     
      // Actualizar flag de error.
      ThingSpeakError = !HttpSendCheckValidTransaction()
   }
     
   // marca la finalización del comando http y habilita el siguiente
   ThingSpeakSending = 0
   
return 0
}

4
STX8081 / Consulta por problemas de conectividad con internet HTTP
« : marzo 16, 2021, 12:36:38 pm »
Hola Boris buen día,

Estoy tratando de resolver un problema de conectividad en el que llevo meses y no lo puedo resolver.

Tengo 2 tipos de conectividad en uso, en las que tengo problemas: a) Subida de datos a ThingSpeak b) Un servicio de notificación que es llama PushingBox, que es muy util y se invoca por http.

El problema es que de un momento para otro "dejan de andar": los correspondientes http utilizados para ThingSpeak o PushingBox dejan de realizar su función, y retornan códigos de error. Eso es así de un momento para otro, y no se subsana más .... HASTA QUE hago un PLC reset.
El sistema funciona bien por unos 5 días (a veces solo 2), y luego deja de andar la conectividad. Todo lo demás anda perfecto (incluyendo los emails y ModBus).

He actualizado firmware y PLCLadder a lo último, pensando que allí había algunas mejoras sobre la parte de stacks y TCPIP, pero no, el problema persiste.

Ya tengo hecho un pequeño código que todos los días "detecta" la situación y me envía un email para avisarme y resetar el PLC y así todo comienza a funcionar de nuevo. El problema es que resetear el PLC es demasiado "hard", y podría estar apagando dispositivos que están encendidos, y se pierden también los totalizadores y variables que están en RAM.

La solución que estoy buscando es una de dos: a) Encontrar la causa de este problema  o bien b) Como puedo ejecutar comandos para resetear completamente la parte de conectividad a internet (stacks, resolucion de nombres, etc, etc) que sea EQUIVALENTE a un PLC RESET ... pero sin hacer PLC RESET.  Será esto factible?  Si esto se puede hacer, yo puedo detectar diariamente cuándo se da la situación anómala, y "reseteo" lo necesario para que vuelva a funcionar.

Ya he probado a ejecutar   ResolvClearCache()  +  HttpSendClose()  + HttpSendSetCompletedEvent() cuando la situación se da, pero no soluciona el problema. No equivale a resetar el PLC.

Desde ya muchas gracias,
Pablo.

5
STX8081 / Integrar el PLC con Google Home o Alexa
« : mayo 08, 2020, 13:45:44 pm »
Hola Boris, buen día,

Alguna vez pensaste en que se podría hacer una integración entre Google Home y los PLC ? O sea: que desde un dispositivo como Google Home se podría enviar (y recibir) comandos desde el PLC.

Leyendo un poco he visto que en muchos casos hacen esta integración entre Google Home y un Raspberry Pi. También entre Google Home y un ESP8266. Por lo tanto, con las capacidades de un PLC (que tiene http), pensé que sería factible.

Viste algo de esto?
Saludos!
Pablo.

6
Muchas gracias Boris,
Esta semana hago las correcciones y pruebo.
(el upgrade al último firmware ya está hecho, pero me falta el entorno y recompilar).

Saludos !
Pablo.

7
Hola Boris buenas tardes !
Estoy haciendo el upgrade de mi entorno StxLadder, pasando de la version 1.9.9 a la 2.0.2
Al intentar compilar, me tira error en todos los lugares donde está la instrucción StrCat (concatenar 2 strings), como si fuera que no existe más el comando.
Hice el downgrade a 1.9.9 y compila perfecto nuevamente.

De paso: tenés algún listado nuevo de todos los comandos Pawn (actualizado) ?

Muchas gracias desde ya,
Pablo.

8
STX8081 / Re:Problema con las últimas versiones (packed string)
« : agosto 13, 2018, 12:56:55 pm »
Clarísimo. Muchas gracias !

9
STX8081 / Re:Problema con las últimas versiones (packed string)
« : agosto 12, 2018, 20:52:28 pm »
Hola Boris,

Muchas gracias de nuevo por tu excelente soporte.

Me quedan 2 consultas:

- El tema ese de los emails que te llegan "por rebote", cuando los emails enviados por mi sistema son tomados como spam. Es posible que sean enviados a otra dirección que no sea @slicetex.com ?? Es esto configurable?
De todas formas acabo de modificar el SUBJECT de los mails, como vos me indicaste, y espero que con esto ya no te lleguen más emails rebotados, pero la verdad es que este punto me dejó un tanto preocupado.

- La habilitación de los "Packed Strings" que ahora tengo implementada, tiene alguna consecuencia para la identificación de los bytes dentro del buffer de recepción de datos por UDP ? Concretamente yo tengo algo más o menos así:

@OnUdpRx()
{
      // Leer 10 bytes del array y almacenarlos en RxData[].
      UdpRxDataRead(RxData,0,10,false)

      // Y Luego voy extrayendo los datos que hay en cada byte de la trama UDP...
      if (RxData[0] == 122)

     etc.

Me parece que en esto no debería haber ninguna influencia porque son arrays, pero no strings...

Saludos !
Pablo.


10
STX8081 / Re:Problema con las últimas versiones (packed string)
« : agosto 12, 2018, 18:08:07 pm »
Hola Boris,

Impecable. Ya lo tengo andando.

Te cuento lo que hice, siguiendo tus indicaciones:

1) Actualicé firmware y StxLadder.
2) Modifiqué las 2 funciones que usaban direccionamiento a caracteres dentro de un string nLcdPrintMultLines() y ReemplazarEspacios(), cambiando los corchetes por llaves.

Con estos 2 cambios, compila OK, y la memoria consumida baja de 19668 bytes a 11640 (!!).

Pruebo a ejecutar, y todo parece funcionar bien, pero en un sitio donde muestro strings a través de VirtualHMI, no salen bien. Entonces recorro el fuente hasta encontrar todos los lugares donde haya StrFormat(), y cambio "false" por "true" (primero cambié por "packed", pero tiró error al compilar, entonces le puse "true").

Con esto último, aparentemente todo está funcionando bien de nuevo, con software actualizado a lo último.
Si algo no quedó bien, en los próximos días me voy a dar cuenta.

De paso. Debo esperar algún cambio o mejora derivado de las siguientes mejoras del firmware?:
      + Se amplia de 6 a 10 la cantidad de conexiones abiertas
        simultáneas TCP.
      + Se amplia de 12 a 20 la cantidad de puertos disponibles para
        escucha de paquetes TCP.
      + Se amplia de 2 a 4 la cantidad de conexiones abiertas
        simultáneas ModBus TCP (esto se conoce en documentación
        como parámetro "NumberMaxOfTransactions").

Muchas gracias por tu ayuda como siempre !
Saludos,
Pablo.

11
STX8081 / Re:Problema con las últimas versiones
« : agosto 07, 2018, 14:40:20 pm »
Clarísimo ! Muchas gracias por la ayuda !
Ya voy a ver qué camino sigo.
Saludos !
Pablo.

12
STX8081 / Re:Problema con las últimas versiones
« : agosto 06, 2018, 12: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.

13
STX8081 / Problema con las últimas versiones (packed string)
« : agosto 04, 2018, 20:05:27 pm »
Hola Boris que tal?

Hoy me dispuse a hacer una modificación al programa de mi PLC, y -como hago siempre- primero actualizo el StxLadder a la última versión disponible, y lo mismo con el firmware del PLC (el mío es un 8081-D2). Luego de la actualizaciòn tuve problemas; te paso la info:

Lo que tenía antes de actualizar era:
StxLadder 1.8.8
Firmware 227

Luego de actualizar pasé a:
Stxladder 1.9.2
Firmware 229

El problema se manifiesta así: al compilar el programa (ya con el nuevo entorno), me tira el siguiente error:

Error de Memoria: Insuficiente memoria RAM: El proyecto requiere 19668 bytes y el dispositivo tiene disponible 16384 bytes. Disminuya variables globales, variables locales inicializadas, comparta/reutilice variables globales, utilice packed strings, agrupe datos, etc.


Entonces voy a ver en el PLC qué marca, y en el display tiene el siguiente cartel:
PLC Return Code C:200 R:0

Pensé que habría un problema con el firmware, asi que lo volví para atrás a la V227. Pruebo a compilar con F6, y me da el mismo error. Entonces volví para atrás también el entorno StxLadder, y todo volvió a la normalidad (me apareció un cartel diciendo que el programa había sido construído con una versión de StxLadder superior, y que podría haber pérdidad de datos, pero seguí adelante y todo anduvo normal).

Aclaro que al grabar el firmware me aseguré de elegir la versión correcta del archivo, de acuerdo al modelo de PLC que uso: stx8081-d2.sff

En conclusión, no me queda claro si el problema está en el firmware o en el entorno.
Por lo pronto, tengo todo funcionando a la perfección, por lo que no hay ningún apuro en resolver nada.

Saludos y muchas gracias !
Pablo.

14
STX8081 / Re:Duda con recepción de paquetes UDP
« : julio 31, 2018, 08:14:26 am »
OK, gracias por la info.

Entonces como lo vengo haciendo es lo correcto (para recibir 10 bytes de payload estoy poniendo 0B en CMDIN_ARGSIZE0_OFFSET). O sea que no tengo error de protocolo.
La recepción de paquetes UDP la estoy haciendo desde 3 dispositivos ubicados en mi red LAN, via WiFi. De dos de ellos anda 100% perfecto siempre (son módulos ESP8266). Pero desde el tercer dispositivo (mi celular), es errático. Ya voy a investigar pero es como que en algún punto "alguien" está filtrando los paquetes UDP.

Muchas gracias !
Pablo.

15
STX8081 / Re:Duda con respecto a "prevención de cortocircuitos"
« : julio 31, 2018, 08:10:08 am »
Entendido Boris.
Si, supongo que si hay una pista en el PLC, ésta va a cortarse.
Poner los fusibles en serie es la mejor opción, pero no es tan sencillo por el cableado. Igual voy a tratar de hacerlo.
Muchas gracias !
Pablo.

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