En el PLC de Siemens, por ejemplo: un valor de presión, cuando se cierra un interruptor, ¿cómo se puede recordar la presión en ese momento?
Si tienes una pantalla táctil o un ordenador industrial, este problema es muy sencillo.
Está bien si no tienes uno, simplemente es problemático. Para configurar la hora del PLC y leer la hora del PLC, de hecho, estas cosas se usan de un lado a otro. Debe crear dos bloques FC fijos con parámetros (interfaces).
Es difícil de describir. Pero ese formato no es difícil, lo olvidé. Como siempre lo olvido, a menudo escribo algunas funciones FC de uso común (con parámetros) después de comprenderlas, y luego uso enteros separados, años, meses, días, horas, minutos, segundos, etc., como parámetros.
Olvídalo, echemos un vistazo al programa antes de responderte.
El formato de DATE_AND_TIME es de 8 Bytes. Lo agregué a la variable temporal: LB0----7. MB0----7 también está bien, el bloque DB está bien. Su definición es así, o cómo obtener el año, mes, día y otros datos.
1 año: L LB 0
BTI
L 2000
I
T #CurYear p>
El byte más alto (Siemens es así, alto y bajo son de izquierda a derecha, pero la dirección comienza desde bajo) LB0 es un código BCD, convertido a un número entero, más 2000. Es el año actual.
Febrero: L LB 1 ///////mes
BTI
T #CurMouth
3º: L LB 2 ////////Día
BTI
T #CurDay
4 semanas: L LB 7
L B #16 #F
AW
BTI
L 1
-I
T #CurWeek
Un descanso aquí, cambié dos subrutinas, una es para leer y escribir cuatro enteros de año, mes, día y la otra es para leer y escribir cuatro enteros de hora, minuto, segundo y milisegundo. Si se escribe, hay bits de activación y las cuatro variables enteras de entrada. Ahora abre el programa que dice la hora:
5 en punto: L LB 3 ///////hora
BTI
T #CurHour p>
6 puntos: L LB 4 ///////puntos
BTI
T #CurMinute
7 segundos: L LB 5 ////////Segundos
BTI
T #CurSecond
No se necesitan milisegundos. Ya no puedo entenderlo, por supuesto que puedes copiarlo. Aquí te diré cómo obtener la hora, que es el formato de la variable.
El significado de cada byte de esos 8 bytes está disponible. Los dos últimos LB6 y LB7 expresan el día de la semana y milisegundos. Pero LB7 parece utilizar los primeros cuatro dígitos y los últimos cuatro dígitos para las dos semanas y milisegundos respectivamente. Les traigo el programa:
8 milisegundos: L LB 6
BTI
L 10
*I
T #H_MS
L LB 7
L W#16#F0
AW
L 10
/I
L #H_MS
I
T #CurMS
El Cur*** anterior, Cur significa actual. Año, Mes, Minuto, Segundo, MS, no lo explicaré.
La instrucción T es equivalente a MOVE. Puedes convertir MOVE en una instrucción para echar un vistazo.
Aunque está escrito mediante instrucciones, cuando lo llamo, solo necesito escribir los parámetros (interfaz) en un cuadrado, que es un diagrama en forma de T. Este programa generalmente no se mueve después de escribirlo.
Para tu pregunta, las variables temporales se pueden definir como FECHA Y HORA, 8 BYTE. Dijiste que no puedes teletransportarte, la teletransportación es muy simple. Por ejemplo, si lo pones en LB0----7, puedes transferirlo así:
L LD0
T MD0
L LD4
T MD4
Esto no lo transmitirá por completo. MB0----7 no es su variable.
Por supuesto, no es necesario realizar dicha transferencia, se pueden utilizar variables temporales. También puedes hacer restas.
¿Aún tienes dificultades?
De hecho, si lo piensas más, no hay nada que no se pueda solucionar.
Se acabó. Para decir más, los procedimientos ya no existen.