Mensajes recientes

Páginas: 1 2 [3] 4 5 ... 10
21
STX8091 / Re:Código para lectura/escritura de datos con RS485
« Último mensaje por Soporte septiembre 04, 2018, 18:28:40 pm »
Buenas tardes Joaquin.

El archivo que nos pasás, no es el proyecto completo con el código.

Para compartir el proyecto con todos los archivos, en StxLadder debes ir a menú "Archivo > Crear backup del proyecto (zip)" y eso te va a generar un archivo .ZIP.

Luego subís ese .ZIP acá, así lo podemos abrir y ver el código al cuál haces referencia en el mensaje.

Saludos!
22
STX8091 / Código para lectura/escritura de datos con RS485
« Último mensaje por joaquinl septiembre 04, 2018, 11:57:08 am »
Hola, escribo para pedirle asesoramiento sobre un código que estoy desarrollando . El objetivo es la lectura/escritura de diferentes registros de un sensor, a partir del ingreso del valor del mismo en el teclado del VirtualHMI. La duda está presente en el main y en como interactúan los valores obtenidos a través del teclado con los comandos MbRtuClSendReadHoldingReg y MbRtuClSendWriteReg. Además, los valores recibidos se acumulan en un vector RxData, el cual me gustaría que no tenga que restringirlo a un número preestablecido de muestras (por ejemplo 4 como en mi código), sino que el mismo dependa de la cantidad de interacciones que realizo con el sensor. Adjunto el código que tengo, y quedo a la espera de recomendaciones sobre el mismo.
Desde ya muchas gracias, saludos
23
STX8081 / Re:Problema con las últimas versiones (packed string)
« Último mensaje por PabloGa agosto 13, 2018, 12:56:55 pm »
Clarísimo. Muchas gracias !
24
STX8081 / Re:Problema con las últimas versiones (packed string)
« Último mensaje por Soporte agosto 13, 2018, 11:03:03 am »
Buenos días Pablo.

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

No, ya que cuando usas SmtpInitSimple() se utiliza el server SMTP de Slicetex, y la protección anti-spam no es configurable en el server.

Las últimas versiones de firmware, permiten actualizar hora/fecha desde internet, es importante tener la hora/fecha correcta del sistema al momento de enviar emails, para que no sean sospechosos de "spam", fíjate en el siguiente post:

http://foro.slicetex.com/index.php?topic=321.0

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


No, porque lo que se modifica es la codificación de un string, que en vez de tomar un caracter cada 4 bytes, se utiliza un caracter por byte. Esto solo influye en los string que se almacenan en un array como "packed".

Saludos!
25
STX8081 / Re:Problema con las últimas versiones (packed string)
« Último mensaje por PabloGa 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.

26
STX8081 / Re:Problema con las últimas versiones (packed string)
« Último mensaje por Soporte agosto 12, 2018, 18:27:12 pm »
Impecable. Ya lo tengo andando.

Perfecto Pablo!

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").

Probá con mayúsculas: PACKED

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.

A veces me llega un mail de reporte de "spam" con los mails que envías desde la placa, se me hace, por lo que veo, que se debe ser por poner en el "Subject" la fecha/hora sin ningún texto.

En el asunto podrías colocar algo como: "Notificacion - DDMMAAAA-HHMM"

Sí es que necesitas poner le fecha/hora en el asunto.

Para que parezca más normal.

Este es la copia del reporte:

Código: (Mail) [Seleccionar]
This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

  pXXXXX@gmail.com
    host outbound.mailspamprotection.com [108.163.220.50]
    SMTP error from remote mail server after end of data:
    550 High probability of spam

---------- Forwarded message ----------
From: PLC <plc.XXXXX@slicetex.com>
To: <pXXXXX@gmail.com>
Cc:
Bcc:
Date: Sat, 11 Aug 2018 21:21:29 -0000
Subject: 11/08/2018 - 21:21:22
RECONEXION ENERGIA
FASES=R S T
TANQUE PA=005  PB=000
ALARMA=DESARM-OFF
M.CALD=SMART  CONF=1
T.Ext=14.7C   T.Int=20.1C

--

PLC
pXXXX@gmail.com


Supongo que mientras te lo considere como spam, no lo debes estar recibiendo.

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").

Nada que afecte el funcionamiento, debería mejorar la conectividad para aplicaciones con protocolo TCP, como ModBus TCP, webserver, mails, etc.

Saludos!
27
STX8081 / Re:Problema con las últimas versiones (packed string)
« Último mensaje por PabloGa 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.
28
STX8081 / Re:Problema con las últimas versiones (packed string)
« Último mensaje por Soporte agosto 10, 2018, 19:05:45 pm »
Hola Pablo.

Leyendo, encontré otra forma de manejar "packed string" de forma más natural en Pawn.

Asi como para indexar un string "unpacked" se utiliza "[ ]", para un "packed" string se puede utilizar corchetes "{ }".

Ejemplo:

Código: (Pawn) [Seleccionar]
new PackedString[] = !"Hola"

if(string{0} == 'H')
{
   // Primer caracter es letra "H" del Packed String.
}

new UnpackedString[] = "Hola"

if(string[0] == 'H')
{
   // Primer caracter es letra "H" del Unpacked String.
}

También es posible definir espacio para un string packed en cantidad de caracteres:

Código: (Pawn) [Seleccionar]
new PackedString[100 char]
El código anterior, definirá en memoria un array equivalente para 100 caracters, es decir 100/4=25 enteros de 32 bits.

Entonces la función nLcdPrintMultLines() la podes dejar como estaba antes, pero remplazando los [ ] por { } al indexar un Packed String.

Te adjunto el proyecto en .ZIP.

Código: (Pawn) [Seleccionar]
nLcdPrintMultLines(x, y, const String[])
{
   new Buffer[100 char] // Definir un string para 100 caracteres
   new i=0, j=0
   new Stop = FALSE
   
   // Parsear cadena.
   while(Stop == FALSE)
   {
      // Copiar una línea de String[] en Buffer[].
      while(String{i} != '\n' && String{i} != '\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)
         
         // Agregar Delay para asegurar fin de transmisión.
         DelayMS(150)
      }
     
      // Fin de caracteres en String[] ?.
      if(String{i} == '\0')
      {
         // Si, parar Loop.
         Stop = TRUE
      }
      else
      {
         // No, ajustar variables para próxima línea.
         i++
         j = 0
      }
   }
}

Creo que esta forma te deja el código mejor si utilizás la opción de compilación "Packed string".

Saludos!
29
STX8091 / Re:Código para el registro de variables en tabla (DataLogger)
« Último mensaje por Soporte agosto 09, 2018, 10:59:00 am »
Buenos días Silvana.

Lo que no logro es que me llegue la notificación por mail de que se lleno la memoria del PLC.
A los mails los ingrese en Mail.p y también he modificado el tiempo en que me llega la notificación por mail en Timeout.p para probar que pasaba al cabo de una hora pero no logro que me llegue el mail. Tambien inserté los mails en la web pero tampoco. Que estoy haciendo mal?

Primero, verificar que las notificaciones estén activadas con "Si".



También debes colocar direcciones validas de email en todos los campos. El remitente puede ser cualquier dirección donde quieras que los receptores respondan.

Segundo no esta de más decir que el PLC debe estar conectado a un router o red con acceso a internet, para que puedan salir los mails.

Tercero, verificar que dentro de la configuración de StxLadder, en menú "PLC > Configurar PLC > Red" tengas especificado la dirección correcta del Router/Gateway IP.
Es la dirección dentro de tu red del router, al que accedes para configurar internet.



Cuarto, verificar que los mails no estén llegando a tu carpeta/bandeja de "Correo no deseado" o "Spam" en tu buzón de mail.
En ese caso, si llegan, los marcas como "no spam".

En archivo Debug.inc, a la constante DEBUG_CODE podes ponerle el valor 10, y recompilar. Eso hace que el programa empiece con la memoria "casi llena", y a los 5 registros se llene. Podes de esa forma simular una notificación de memoria llena y realizar la prueba.

Otras consulta: sólo puedo ver los datos si estoy conectada con el puerto ethernet, se puede lograr sin estar conectada por cable?

¿Te referís a hacerlo por Wi-Fi?

Si el PLC está conectado por cable ethernet a una red o router en la que tengas Wi-Fi, luego podes acceder al PLC con Wi-Fi desde el navegador.

Para la página web no hay problemas.

Para la parte de lectura de memoria EEPROM con el programa de Visual C#, al utilizar protocolo UDP, es conveniente hacerlo dentro de la misma red o con Wi-Fi de buena señal, ya que dicho protocolo no tiene los mismos controles de errores que el protocolo TCP que usa el web server.

Saludos!
30
STX8091 / Re:Código para el registro de variables en tabla (DataLogger)
« Último mensaje por ms_zamora agosto 08, 2018, 22:59:08 pm »
Estimado Boris,

Estuve probando los códigos y funcionan perfectamente. He podido modificar parámetros de muestreo y algunos parámetros en la pagina web y los he verificado. Lo que no logro es que me llegue la notificación por mail de que se lleno la memoria del PLC.
A los mails los ingrese en Mail.p y también he modificado el tiempo en que me llega la notificación por mail en Timeout.p para probar que pasaba al cabo de una hora pero no logro que me llegue el mail. Tambien inserté los mails en la web pero tampoco. Que estoy haciendo mal?

Otras consulta: sólo puedo ver los datos si estoy conectada con el puerto ethernet, se puede lograr sin estar conectada por cable?

Muchas gracias.-
Páginas: 1 2 [3] 4 5 ... 10