38 lines
1.9 KiB
Markdown
38 lines
1.9 KiB
Markdown
***
|
|
|
|
|
|
|
|
### Ver 1.7 a 1.8:
|
|
|
|
```pascal
|
|
Quisiera implementar los siguientes cambios:
|
|
|
|
# Datos:
|
|
|
|
1) Mejora de los datos estaticos, no los in o out o temp, usando struct para poder leer mejor desde la DB. Los struct se pueden dividir por conceptos
|
|
2) Dejar en la parte inferior de la DB las instancias de otras FB o datos internos del script
|
|
3) Crear y gestionar una nueva tabla FIFO con los ultimas 10 lecturas en Brix y otra tabla con el tiempo diAccumCycleMs en cada lectura
|
|
|
|
# Logica:
|
|
|
|
1) Optimización del Buffer
|
|
Cambiar tamaño del buffer de recepción:
|
|
aRxBuffer : ARRAY[0..22] OF BYTE; // De 128 a 23 bytes
|
|
Esto descarta automáticamente tramas antiguas manteniendo solo la más reciente
|
|
|
|
2) iReadingState
|
|
|
|
0: // ACTIVE_READING - Receiving data burst, read intensively
|
|
1: // COMPLETED - Finished reading a valid frame, return to paused
|
|
2: // PAUSED - Not reading, waiting for next frame window
|
|
|
|
Cuando se comienza una secuencia de lectura luego de iState n a 3 el flag xInitPhaseFinish es False y se resetan los calculos de tiempo de ciclo a dafault
|
|
Mientras este flag esta en false iReadingState salta el estado 2 de Paused. Esto permite limpiar el buffer y sincronizar las lecturas con la velocidad de lectura del server
|
|
Duración: (diFrameIntervalMs*2) después de conectar. Timer independiente
|
|
Luego de terminado el timer y se cumplen las condiciones de xDataValid = TRUE y iRxLength = 12 significa que estamos sincronizados y sin buffer. Se hace xInitPhaseFinish := True y el iReadingState = 2 comienza a funcionar.
|
|
|
|
Durante la fase de xInitPhaseFinish = false cada ciclo de iReadingState = 1 ( completed ) fue calculando los tiempos como en el script actual
|
|
|
|
|
|
3) diAccumCycleMs solo se incrementa con el iState = 3. Al hacer reset de los calculos de tiempo en iState = 2 se pone a 0 diAccumCycleMs, esto deberia limitar diAccumCycleMs a iDataTimeoutSec ya que si no hay datos por mas de iDataTimeoutSec se pasa a iState := 4
|
|
``` |