Obsidean_VM/04-SIDEL/09 - SAE452 - Diet as Regul.../FB2120 - MasseliTCP/Versiones.md

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
```