PREGUNTA:
¿Cómo se pueden mostrar con el ProTool/Pro variables de tipo
"S5TIME" de un PLC SIMATIC, separado en horas, minutos, segundos y
milisegundos?
RESPUESTA:
La hora del PLC está disponible en el control como una variable
de tipo "S5TIME" (ejemplo: S5T#1H_34M_30S_0MS).
El valor de las variables se lee desde el control y se elabora en
el Protool/Pro. La señalización de este valor de tiempo se hace a
continuación en horas, minutos, segundos y milisegundos.
En el proyecto adjunto se dispone de 4 Scripts, los cuales leen
una variable de tipo "WORD" a través de un parámetro de entrada y
en la cual se tiene el valor "S5TIME". El valor de retorno de las
funciones es una variable, en la que se indica el valor de tiempo
en horas, minutos, segundos y milisegundos.
La utilización de estos Scripts se debe hace de la siguiente
manera:
- Se definen 4 variables (por ejemplo, "HH",
"MM", "SS" y "MS").
- Se asocian estas variables a 4 campos de
salida para señalizar el valor de tiempo en horas, minutos,
segundos o milisegundos.
- Ahora se define una variable de tipo "WORD"
(por ejemplo, "S5T"). Aquí se escribe el valor de tiempo "S5TIME"
del PLC.
- Por último, en las propiedades de las
variables "S5T" se define una función que realiza el cambio de
valor. Desde ésta se llaman a las 4 funciones que convierten cada
valor de tiempo en horas, minutos, segundos o milisegundos.
Funcionamiento del Script:
Primero se comprueba la base de tiempo utilizada en las
variables "S5Time" (ver FAQ con número ID 56243). Según esto se
ajusta un multiplicador. Finalmente, el Script averigua el valor en
formato decimal codificado en binario (BCD). Este valor se
multiplica por el multiplicador anteriormente calculado. El
resultado es el tiempo en milisegundos. Este valor de tiempo es la
base para los cálculos posteriores.
A partir de este valor de tiempo en milisegundos se calcula la
hora, minutos segundos y milisegundos.
Texto fuente del Script para milisegundos:
Dim Base de tiempo, Tiempo total, Buffer, Hora, Minutos,
Segundos
If S5TimeIn < 4096 Then
Base de tiempo =10
Else If S5TimeIn < 8192 Then
Base de tiempo =100
Else If S5TimeIn < 12288 Then
Base de tiempo = 1000
Else
Base de tiempo = 10000
End If
Buffer = S5TimeIn AND 4095
Tiempo total = Fix(buffer/256)*100
Buffer = Buffer AND 255
Tiempo total = Tiempo total + Fix(Buffer/16)*10
Buffer = Buffer AND 15
Tiempo total = Tiempo total + Buffer
Tiempo total = Tiempo total * Base de tiempo
Hora = Fix(Tiempo total / 3600000)
Tiempo total = Tiempo total - Horas * 3600000
Minutos = Fix(Tiempo total / 60000)
Tiempo total = Tiempo total - Minutos * 60000
Segundos = Fix(Tiempo total / 1000)
Tiempo total = Tiempo total - Segundos * 1000
S5Time_ms = Tiempo total
Los 4 Scripts como Download:
El Download contiene los 4 Scripts arriba descritos. Hay que
copiar el fichero " pro___0l.exe" e un directorio aparte de
arrancarlo haciendo doble click sobre él.
pro___0l.exe ( 39 KB )
Importante:
El programa ejemplo se trata de una propuesta respecto a tareas
complejas consultadas al Customer Support. Además advertimos que
según el estado actual de la técnica, no es posible descartar
fallos en los programas software, bajo todas las condiciones de
servicio. Los programas ejemplo han sido creados según el mejor
conocimiento. No se ofrece la garantía por encima de la normalmente
habitual para los productos software de clase C, según se indica en
las “Condiciones generales para la utilización de productos
software para automatización y accionamientos”
Conceptos de búsqueda:
Programación orientada a objetos, cálculo de tiempo,
representación de valores de tiempo
|