Etiquetas de Memoria

Saludos, su ayuda por favor estoy utilizando etiquetas OPC las cuales están leyendo las horas trabajadas de un motor, pero necesito un contador al llegar a un tiempo determinado de horas trabajadas pueda resetar estas horas a cero
image

sin cambiar el valor de la etiqueta, espero me sepa explicar

You probably don’t want to reset the counter. Instead, log the counter’s value in your database when the reset button is used. Your hours value is the current OPC value minus the database value.

entiendo registro el valor en la base pero al momento de reiniar el valor a cero no quiero que los datos de la etiqueta OPC se me reinicien en cambio quiero que las horas continuen su curso

You actually do not reset anything to zero. The database holds the value from “last reset” while the OPC value continues to count without reset. OPC value is never reset and can be displayed along with “hours since reset” which is just the OPC value minus the database value. Nothing is ever set to zero with this setup.

sabes, necesito que el contador de horas inicie desde cero EJEMPLO: si en mi etiqueta OPC tengo un valor de 5.800 horas transcurridas necesito que en un “Numeric Label” empiece desde uno y llegado a un numero determinado (“3000”) pueda volver a cero(0) con un BOTON
image
Example

  1. OPC value = 5804.1 hours
  2. Horas trancurridas = expression binding → OPC - Database value (database tag)
  3. Press Reseteo
  4. Database value updates to 5804.1
  5. Horas trancurridas = OPC - Database value → 5804.1 - 5804.1 = 0 horas
  6. Machine runs for 10 hours = OPC - Database value → 5814.1 - 5804.1 = 10 horas
  7. Repeat

DISCULPA no entiendo tu proceso me ayudarias con un ejemplo, por favor :pray:

I assume you have a database connected that you can alter? That is one way, another, simpler way is to use a memory tag.

  1. Create a memory tag named something like machineResetHours

  2. Create an expression tag that subtracts the two values and name it machineHours or whatever you want. The expression should look something like coalesce({[.]OpcValue} - {[.]machineResetHours},0) (coalesce returns 0 if the subtraction is null)

  3. Bind your popup labels to the tags

  4. In your button script do something like this with your actual tag paths

tags = system.tag.readBlocking( ["[default]OpcValue"])
hours = tags[0].value
system.tag.writeBlocking(["[default]machineResetHours"],hours)

lo que entiendo es que machineResetHours seria mi variable en cero y debería restar con mi etiqueta OPC en mi caso llamada TM01

Yes, machineResetHours holds the value of TM01 at time of pressing the reset button using this script

tags = system.tag.readBlocking( ["[default]PathTo/TM01"])
hours = tags[0].value
system.tag.writeBlocking(["[default]machineResetHours"],hours)

Uploading: image.png…
se me presenta este error asi que decido dejar en system.tag.read(...)


luego sucede este error en la linea 2 en la cual dejo asi el valor tags.value

pero no llegue a nada ya que en la linea 3 me sucede lo mismo que en la linea 1 asi que realizo lo mismo y el boton no se ejecuta QUE SUCEDIO

Are you on v7.9? I assumed v8.1.

For v7.9

tag = system.tag.read( "[default]PathTo/TM01")
system.tag.write("[default]machineResetHours",tag.value)

una vez mas lo HICISTE gracias por tu valiosa ayuda :+1: :+1:

1 Like