// // Created by Владислав Остапов on 27.10.2022. // #ifndef SDP_SHEDULER_EMULATOR_H #define SDP_SHEDULER_EMULATOR_H #include #define BARRELS_COUNT 10 union flags { int16_t raw_word; struct { char is_exist: 1; char is_up: 1; // для панели char robot: 2; // обслуживающий робот int _unused: 11; }; }; struct barrel { union flags flags; short zone; short software_timer; short curr_process; // стадия процесса // время процессов // TODO сделать это как union, чтобы можно было юзать как таблицу short time_defatting; // Время обезжиривания short time_washing_1a; // Время промывки 1А short time_washing_1b; // Время промывки 1Б short time_etching; // Время травления short time_washing_2a; // Время промывки 2А short time_washing_2b; // Время промывки 2Б short time_galvanizing; // Время цинкования short time_washing_3a; // Время промывки 3А short time_washing_3b; // Время промывки 3Б short time_passivation; // Время пассивации short time_washing_4a; // Время промывки 4А short time_washing_4b; // Время промывки 4Б }; enum BarrelProcess { PROCESS_NONE = 0, // сразу после загрузки PROCESS_DEFATTING, // обезжиривание PROCESS_WASHING_1A, // промывка 1А PROCESS_WASHING_1B, // промывка 1Б PROCESS_ETCHING, // травление PROCESS_WASHING_2A, // промывка 2А PROCESS_WASHING_2B, // промывка 2Б PROCESS_GALVANIZING, // цинкование PROCESS_WASHING_3A, // промывка 3А PROCESS_WASHING_3B, // промывка 3Б PROCESS_PASSIVATION, // пассивация PROCESS_WASHING_4B, // промывка 4Б PROCESS_RETURN_1, // возвращение обратно, стадия 1 - перекладываем в свободную промывку (если есть) PROCESS_RETURN_2, // возвращение обратно, стадия 2 - перекладываем в свободную загрузку и удалить барабан }; struct robot_cmd { short cmd; short args[4]; short step; }; union robot_flags_mz { short raw_word; struct { char is_corrected: 1; char is_up: 1; }; }; struct robot { union robot_flags_mz mz; short curr_zone; // пока будет достаточно этого }; #ifdef __cplusplus extern "C" { #endif extern struct barrel barrels[BARRELS_COUNT]; extern struct robot_cmd robot1_cmd; extern struct robot_cmd robot2_cmd; extern struct robot robot1; extern struct robot robot2; extern char schedulerSoftwareTimer; extern char schedulerUnloadButton; extern char schedulerLoadButton1; extern char schedulerLoadButton2; extern char schedulerOneRobotMode; void scheduler_main(); #ifdef __cplusplus } #endif #endif //SDP_SHEDULER_EMULATOR_H