Files
ats0002/heat_exchander_airflow_pressure_drop.c
2026-10-12 19:29:39 +03:00

123 lines
6.0 KiB
C

#include "ats0002/ats0002.h"
#include "ats0002/21_53_89.h"
#include "ats0002/21_53_88.h"
#include "ats0002/21_50_14.h"
static const heat_exchanger_data_t heat_exchanger_data[] = {
{"Honeywell Heat Exchanger CMM 21-50-14", heat_exchanger_21_50_14_data, ARRAY_SIZE(heat_exchanger_21_50_14_data)},
{"Liebherr Reheater CMM 21-53-89", heat_exchanger_21_53_89_data, ARRAY_SIZE(heat_exchanger_21_53_89_data)},
{"Liebherr Condenser CMM 21-53-88", heat_exchanger_21_53_88_data, ARRAY_SIZE(heat_exchanger_21_53_88_data)}};
int main(void)
{
setlocale(LC_NUMERIC, "C");
for (;;)
{
#ifdef _WIN32
system("cls");
#else
system("clear");
#endif
printf("************************************************************\n"
"* *\n"
"* Heat Exchanger Airflow Pressure Drop Calculation Program *\n"
"* *\n"
"* Developed by @rick_professor *\n"
"* Participation by @cabanleo *\n"
"* Property of Aerotech LLC *\n"
"* *\n"
"************************************************************\n"
"\n");
for (uint8_t i = 0; i < ARRAY_SIZE(heat_exchanger_data); ++i)
{
printf("%d. %s\n", i + 1, heat_exchanger_data[i].heat_exchanger_description);
}
printf("\n");
uint16_t heat_exchanger_number = 0;
ASK_CHOICE(heat_exchanger_number, get_heat_exchanger_number, ARRAY_SIZE(heat_exchanger_data));
printf("\n");
const heat_exchanger_data_t *he = &heat_exchanger_data[heat_exchanger_number];
for (uint8_t i = 0; i < he->heat_exchanger_type_data_size; ++i)
{
printf("%d. %s\n", i + 1, he->heat_exchanger_type_data[i].part_number_description);
}
printf("\n");
uint16_t part_number = 0;
ASK_CHOICE(part_number, get_heat_exchanger_part_number, he->heat_exchanger_type_data_size);
printf("\n");
const heat_exchanger_type_data_t *hetd = &he->heat_exchanger_type_data[part_number];
for (uint8_t i = 0; i < hetd->air_passages_data_size; ++i)
{
printf("%d. %s\n", i + 1, hetd->air_passages_data[i].air_passage_description);
}
printf("\n");
uint16_t air_passage_number = 0;
ASK_CHOICE(air_passage_number, get_heat_exchanger_air_passage_number, hetd->air_passages_data_size);
printf("\n");
const air_passage_data_t *apd = &hetd->air_passages_data[air_passage_number];
double airflow = 0.0;
get_airflow(&airflow, apd);
EXIT_CHECK(airflow);
printf("\n");
double airflow_pressure = 0.0;
get_airflow_pressure(&airflow_pressure, apd);
EXIT_CHECK(airflow_pressure);
printf("\n");
double barometric_pressure = 0.0;
double airflow_temperature = 0.0;
if (apd->recalculated_required == true)
{
get_barometric_pressure(&barometric_pressure, apd);
EXIT_CHECK(barometric_pressure);
printf("\n");
get_airflow_temperature(&airflow_temperature, apd);
EXIT_CHECK(airflow_temperature);
printf("\n");
}
double pressure_drop_limit = 0.0;
double corrected_airflow_pressure = 0.0;
get_pressure_drop(&pressure_drop_limit, &airflow, &airflow_pressure, &corrected_airflow_pressure, &barometric_pressure, &airflow_temperature, apd);
const char *unit = apd->airflow_pressure_unit == KPA ? "KPA" : "PSIG";
printf("****************** Test summary *******************\n");
printf("Name: %s\n", he->heat_exchanger_description);
printf("P/N: %s\n", he->heat_exchanger_type_data[part_number].part_number_description);
printf("Side: %s\n", hetd->air_passages_data[air_passage_number].air_passage_description);
printf("Airflow: %0.2f LB/MIN\n", airflow);
printf("Static inlet pressure: %0.2f %s\n", airflow_pressure, unit);
if (apd->recalculated_required == true)
{
printf("Barometric pressure: %0.2f MBAR\n", barometric_pressure);
printf("Airflow temperature: %0.2f C\n", airflow_temperature);
printf("Corrected static inlet pressure: %0.2f %s\n", corrected_airflow_pressure, unit);
}
printf("Max allowed pressure drop: %0.2f %s\n", pressure_drop_limit, unit);
double test_pressure = apd->recalculated_required == true ? corrected_airflow_pressure : airflow_pressure;
printf("Test result: %s\n", test_pressure <= pressure_drop_limit ? "PASSED" : "FAILED");
printf("***************************************************\n");
printf("\n");
/* Offer to save report as PDF */
bool save_pdf = false;
get_yes_no(&save_pdf, "Save report to PDF?");
if (save_pdf)
{
save_report_to_pdf(
he->heat_exchanger_description,
he->heat_exchanger_type_data[part_number].part_number_description,
hetd->air_passages_data[air_passage_number].air_passage_description,
airflow,
airflow_pressure,
unit,
apd->recalculated_required ? &barometric_pressure : NULL,
apd->recalculated_required ? &airflow_temperature : NULL,
apd->recalculated_required ? &corrected_airflow_pressure : NULL,
pressure_drop_limit,
test_pressure <= pressure_drop_limit ? "PASSED" : "FAILED",
apd->recalculated_required);
}
printf("\n");
uint16_t command = 0;
get_user_command(&command);
EXIT_CHECK(command);
}
return 0;
}