C'est du PLC, je ne vais pas piger ça dans des tables SQL.
Je monte un fichier Excel pour extraire les données de position 0-100% dans le range du réservoir (semi à déterminer, le plus faible range sera le mieux et le moins long à populer), et je garroche ça dans deux lookout tables en cascade dans ce style-là. Ça vire habituellement au final en bas de 50ms, donc c'est pas trop stressant.
IF ARRAY_DIM_X > 0 AND ARRAY_DIM_Y > 0 THEN
IF INVAL >= ARRAY_Y[ARRAY_DIM_Y] AND ARRAY_Y[ARRAY_DIM_Y] > 0.0 THEN
Y_2 := ARRAY_DIM_Y;
Y_1 := Y_2 -1;
ELSE
FOR I_Y := 1 TO ARRAY_DIM_Y DO
IF ARRAY_Y[I_Y] >= INVAL THEN
IF I_Y = 1 THEN
Y_2 := I_Y + 1;
Y_1 := I_Y;
ELSE
Y_2 := I_Y;
Y_1 := I_Y - 1;
END_IF;
EXIT;
END_IF;
END_FOR;
END_IF;
IF(INVAL > ARRAY_Y[Y_2]) THEN
TEMP_VAL := ARRAY_Y[Y_2];
ELSIF INVAL < ARRAY_Y[Y_1] THEN
TEMP_VAL := ARRAY_Y[Y_1];
ELSE
TEMP_VAL := INVAL;
END_IF;
RATIO := (ARRAY_Y[Y_2] - TEMP_VAL)/(ARRAY_Y[Y_2] - ARRAY_Y[Y_1]);
FOR I:= 1 TO ARRAY_DIM_Y DO
ARRAY_OUT := ARRAY_DATA[I,Y_2] - (ARRAY_DATA[I,Y_2] - ARRAY_DATA[I,Y_1]) * RATIO;
END_FOR;
END_IF;
J'avais un collègue qui avait monté un script Python pour monter les arrays, il n'est plus là, faudrait que j'essaie un jour. Anyway c'est pas la même sorte de PLC, et là je me dis fuck pas certain que je vais pouvoir monter des array à 2 dimensions avec ça.