Угу. Получилось вот так, этот перелив нужно изменять с соответствии
с заполнением в текущий момент: // контроль перелива и достаточности резерва времени на закрытие клапана
if ( (delivery.actual_concentration < delivery.req_concentration) // low concentration
|| (delivery.live_req_water_pulses <= delivery.actual_water_pulses + (2 * delivery.post_pulses) ) // no reserve for closing valve )
{ // continue pumping
// расчет мгновенного значения нужного количества импульсов датчика воды (жидкость 2) для налитого объема жидкости 1 (концентрат)
void CalculateLiveWater(void)
{ // required for actual concentrate volume
delivery.live_req_sol_volume = (unsigned long) ( ( (long long) delivery.actual_conc_volume * (long long) 10000000 )/delivery.req_concentration );
delivery.live_req_water_volume = delivery.live_req_sol_volume - delivery.actual_conc_volume;
delivery.live_req_water_pulses = (unsigned long) ( ( (long long)se[nWaterPulsesPer10L] * (long long)(delivery.live_req_water_volume ) )/10000000 );
}