Mensajes recientes

Páginas: 1 ... 8 9 [10]
91
STX8081 / Re:Problema con las últimas versiones
« Último mensaje por Soporte agosto 04, 2018, 21:05:50 pm »
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.


Hola Pablo.

En las últimas versiones de firmware y StxLadder, se hace una correcta comprobación de memoria RAM utilizada antes de cargar el proyecto al PLC. Por lo tanto, quiere decir que tu código utilizaba más memoria de la permitida.

Esto en general no causa problemas porque es probable que justo no interacciones con otros sectores de RAM utilizado por el sistema operativo, pero si llegara a pasar, se te cuelga el PLC.

La solución en general es bajar la memoria RAM utilizada, que en tu caso, seguramente es por utilizar muchas cadenas/strings, ya que cada carácter consume 4 bytes en Pawn.

Lo que te aconsejo, es cargar la última versión de firmware y StxLadder, y compilar con la opción:

"Packed literal strings" , que se encuentra en "Proyecto > Propiedades > Compilador (pestaña)".



Seguramente, el porcentaje de RAM utilizada se te va reducir bastante, y te va a dar "Compilación correcta".

Sí lo compila (muy probable), tenés seguridad de que el PLC sea más estable respecto a la memoria utilizada RAM en tu proyecto.

La opción "Packed literal strings" hace que se agrupen "4" carácteres de una cadena, en una celda de 32-bits, ya que si esta opción se utiliza un carácter por celda, lo que es un desperdicio de memoria, porque 3 bytes quedan libres sin utilizar.

En general no necesitarias otro tipo de cambio en tu código, a menos que indexes en algún lugar una cadena, caracter por caracter, por ejemplo:

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

if(String[0]='H')
{
    // Letra H
}

Pero si solo operas con cadenas de forma normal, utilizando las funciones, no hay problemas (si debes actualizar firmware).

Sí utilizas la función StrFormat(), el tercer argumento debe ser "true" o "PACKED":

StrFormat(..., ..., true, "...", ...)

StrFormat(..., ..., PACKED, "...", ...)



En el link abajo, paso el POST donde se muestra el por qué de esta nueva característica de StxLadder, ya que en previas versiones había un calculo erróneo sobre la estimación de RAM utilizada por el proyecto y podía sobrepasar los límites admitidos.

http://foro.slicetex.com/index.php?topic=335.msg1805#msg1805

Además te da tips para disminuir uso de memoria RAM y utilizar "packed strings" .

Cualquier duda, avísame.

Saludos!









92
STX8081 / Problema con las últimas versiones (packed string)
« Último mensaje por PabloGa 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.
93
GRACIAS¡¡¡
94
STX8091 / Re:Código para el registro de variables en tabla
« Último mensaje por ms_zamora agosto 01, 2018, 17:45:56 pm »
Si exactamente eso sería, muchas gracias!

Silvana.-
95
buenos días, quisiera que me orienten como podría realizar la automatización: la idea es que el sistema de alimentación principal de una vivienda se a través de alimentación fotovoltaica , y al memento de que el sistema fotovoltaico tenga sus baterías en baja carga conmute a la red de alimentación publica. por otro lado el sistema controle si esta presente la alimentación de la red publica necesaria (220 vol/380 vol ); y conmute nuevamente cuando las baterías recuperen la carga necesaria el equipo que tengo en un  PLC - CUBE  STX8091H03A1-FXD1.-
espero pueda guiarme.

Buenos días.

En este caso debería utilizar dos indicaciones  en su sistema y colocarlas en una entrada digital DIN del PLC.

  • DIN1 = Indicación batería baja: Con esto le dice al PLC que hay batería baja.
  • DIN2 = Indicación de red pública: Con esto le dice al PLC que hay energía eléctrica presente.

Entonces:

DIN1=0, conmuta con salida de PLC a sistema con baterías.

DIN1=1 y DIN2=1, conmuta con salida del PLC a red pública.

DIN1=1 y DIN2=0, desconecta energía eléctrica del sistema antes que baterías se dañen.

Para obtener indicación de red pública, puede utilizar un rele de 220VCA, y alimentarlo desde la red para que conmute e introduzca un "1" o "0" en la entrada DIN.

Para obtener indicación de batería baja, debe consultar con su equipo o sistema para poder leer dicha señal de forma correcta.

Saludos!





96
STX8091 / Re:Código para el registro de variables en tabla
« Último mensaje por Soporte agosto 01, 2018, 13:19:27 pm »
Buenos días.

Gracias por su pronta respuesta. Quisiera registrar cada 10 minutos las variables ambientales, y que ese registro sea el promedio de muestras tomadas durante un minuto (para tener mas certeza del dato registrado en memoria). Por ejemplo adquirir una muestra por segundo y luego de un minuto promediar las muestras (serían 60) y ese dato promediado lo registro en memoria.
Así en una hora tendría 12 muestras guardadas en la memoria. Necesito medir durante todo el día, los días que alcance según las caracteristicas de mi PLC 8091.

Entonces serían 6 muestras por hora, de cada variable analógica. Y cada muestra a almacenar, es un promedio de las últimas 60 muestras tomadas cada 1 segundo.

Bien, realizo un ejemplo, me va a llevar unos días ya que tiene que estar pensado para que luego puedas recuperar los datos almacenados y poder notificar/chequear el momento en que la memoria esta llena.

Te aviso por este medio cuando tenga el ejemplo.

Saludos!
97
buenos días, quisiera que me orienten como podría realizar la automatización: la idea es que el sistema de alimentación principal de una vivienda se a través de alimentación fotovoltaica , y al memento de que el sistema fotovoltaico tenga sus baterías en baja carga conmute a la red de alimentación publica. por otro lado el sistema controle si esta presente la alimentación de la red publica necesaria (220 vol/380 vol ); y conmute nuevamente cuando las baterías recuperen la carga necesaria el equipo que tengo en un  PLC - CUBE  STX8091H03A1-FXD1.-
espero pueda guiarme.
gracias.-
98
STX8091 / Re:Código para el registro de variables en tabla
« Último mensaje por ms_zamora julio 31, 2018, 20:56:29 pm »
Estimado Boris,

Gracias por su pronta respuesta. Quisiera registrar cada 10 minutos las variables ambientales, y que ese registro sea el promedio de muestras tomadas durante un minuto (para tener mas certeza del dato registrado en memoria). Por ejemplo adquirir una muestra por segundo y luego de un minuto promediar las muestras (serían 60) y ese dato promediado lo registro en memoria.
Así en una hora tendría 12 muestras guardadas en la memoria. Necesito medir durante todo el día, los días que alcance según las caracteristicas de mi PLC 8091.

Quedo a la espera y muchas gracias!
99
STX8091 / Re:Código para el registro de variables en tabla
« Último mensaje por Soporte julio 31, 2018, 20:47:09 pm »
Le adjunto mi primer codigo y la tabla tipo que quisiera generar, por supuesto que es muy simple.
Por ahora estoy con la tensión en VIN1 (luego la convertire a T), creo una variable para almacenarla y si la hora del plc es confiable muestro en el virtual HMI la fecha, la hora y el valor en VIN1 y si hay espacio en la memoria escribo un numero arbitrario.
Ahora necesitaría hacer un array por cada variable, poder ordenarlas en una tabla y grabar junto a la fecha y hora en que se registró cada dato.

No está mal el programa, sin embargo, hay otras formas de almacenar hora/fecha en una sola variable de 32-bits, que es utilizando TimeStamp (números de segundos desde 1/1/1970 00:00 hs) , de esta forma se ahorra memoria y es mas fácil registrar fecha/hora.

Lo mismo que para guardar cada dato analógico, se utiliza una variable Float, que tiene 32-bits (4 bytes).

Luego cuando me responda, le escribo un programa inicial mostrándole la diferencia.

Saludos!
100
STX8091 / Re:Código para el registro de variables en tabla
« Último mensaje por Soporte julio 31, 2018, 20:42:44 pm »
Buenas tardes Silvana.

Le escribo para pedirle asesoramiento. Estoy tratando de escribir la primera parte de un código que iré desarrollando por etapas. Voy a medir las variables analogicas T(VIN1), HR(VIN2), Iluminancia(VIN3), Radiación IR(VIN4), Radiación UV(VIN5) y las variables digitales CO2(DIN1) y calidad del aire(DIN2).

Bien, primero que nada hay que estimar la cantidad de memoria EEPROM que utilizará.

Para ello es necesario saber la tasa de muestreo (¿cada cuánto tiempo realiza una muestra?) y la cantidad de tiempo que desea almacenar.

En base a ese dato, podemos estimar o limitar el total de muestra a tomar de cada variable analógica, para repartirlas en memoria EEPROM.

Por ahora solo quiero registrar en memoria las variables medidas con un tiempo de muestreo fijo y ordenarlas en una planilla con fecha y hora, cuando se llegue al tope de memoria activar un evento para enviar datos por mail o simplemente ver en la pantalla de virtual HMI de mi celular la indicación de descargar los datos.
Por ahora necesito crear una tabla y registrar los datos y luego tener acceso a ellos con alguna planilla tipo excel.

Bien es posible que al llegar al tope le avise por mail o también, puede consultar el mismo a tráves de una página web en el dispositivo (recomendado frente a VirtualHMI).

Para descargar toda la memoria EEPROM (si utiliza muchos datos), será necesario realizar un pequeño program en Visual C#, tomando como base el siguiente ejemplo:

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

El cual le permite leer toda la memoria y guardar los datos en un archivo compatible con Excel.

Respondame lo que le pregunte al principio, sobre cada cuanto debe tomar una muestra y el tiempo total, así estimo la memoria necesaria y le hago un ejemplo para comenzar.

Saludos!


Páginas: 1 ... 8 9 [10]