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