diff --git a/emulator.h b/emulator.h index e7d3a86..59503a8 100644 --- a/emulator.h +++ b/emulator.h @@ -14,17 +14,8 @@ extern short etching_zone, galvanizing_zone; void scheduler_main(); - // Флаги, которые есть в оригинальной программе на ПЛК, в "C global variables" -// Кнопки с панели -extern char hla_night_mode; -extern char hla_correct_command; - - -// кнопки управления роботом с панели - - // кнопка загрузки в зоне 0, означает что барабан надо изъять из этой загрузки (а перед этим создать) extern char button_load; diff --git a/scheduler.c b/scheduler.c index e455cab..2174cd1 100644 --- a/scheduler.c +++ b/scheduler.c @@ -180,7 +180,7 @@ void scheduler_main() if (robot2_code.PC < 0) { robot2_code.barrel_id = -1; robot2_code.code[0] = ROBOT_CMD_CORRECT_AXIS(ROBOT_AXIS_Z); - robot2_code.code[0] = ROBOT_CMD_CORRECT_AXIS(ROBOT_AXIS_X); + robot2_code.code[1] = ROBOT_CMD_CORRECT_AXIS(ROBOT_AXIS_X); robot2_code.code[2] = ROBOT_CMD_END(); robot2_code.PC = 0; } @@ -188,7 +188,7 @@ void scheduler_main() if (robot1_code.PC < 0) { robot1_code.barrel_id = -1; robot1_code.code[0] = ROBOT_CMD_CORRECT_AXIS(ROBOT_AXIS_Z); - robot1_code.code[0] = ROBOT_CMD_CORRECT_AXIS(ROBOT_AXIS_X); + robot1_code.code[1] = ROBOT_CMD_CORRECT_AXIS(ROBOT_AXIS_X); robot1_code.code[2] = ROBOT_CMD_END(); robot1_code.PC = 0; } @@ -204,25 +204,42 @@ void scheduler_main() char robot_id = 0; if (hla_robot1_en && robot1_code.PC < 0) { robot_id = 1; - } else if (robot2_code.PC < 0 && hla_robot2_en) { + } else if (hla_robot2_en && robot2_code.PC < 0) { robot_id = 2; } if (robot_id != 0) { - for (short i = 0; i < BARRELS_COUNT; i++) { - // для каждой задачи: - tasks[i].start_zone = barrels[i].zone; - // определяем можно ли ее выполнить и что вообще нужно выполнить - tasks[i].dest_zone = can_move(barrels + i, robot_id); - if (tasks[i].dest_zone >= 0) { - tasks[i].priority = get_operation_priority(i); + if ((robot_id == 1 && robot1.dx.current_zone < ZONE_DEGREASING) || + (robot_id == 2 && robot2.dx.current_zone < ZONE_DEGREASING)) { + if (robot_id == 1) { + robot1_code.barrel_id = -1; + robot1_code.code[0] = ROBOT_CMD_DOWN(); + robot1_code.code[1] = ROBOT_CMD_MOVE_TO_ZONE(ZONE_DEGREASING); + robot1_code.code[2] = ROBOT_CMD_END(); + robot1_code.PC = 0; + } else { + robot2_code.barrel_id = -1; + robot2_code.code[0] = ROBOT_CMD_DOWN(); + robot2_code.code[1] = ROBOT_CMD_MOVE_TO_ZONE(ZONE_DEGREASING); + robot2_code.code[2] = ROBOT_CMD_END(); + robot2_code.PC = 0; } - } - - if (robot_id == 1) { - schedule_one_robot(tasks, &robot1, &robot1_code, 1); } else { - schedule_one_robot(tasks, &robot2, &robot2_code, 2); + for (short i = 0; i < BARRELS_COUNT; i++) { + // для каждой задачи: + tasks[i].start_zone = barrels[i].zone; + // определяем можно ли ее выполнить и что вообще нужно выполнить + tasks[i].dest_zone = can_move(barrels + i, robot_id); + if (tasks[i].dest_zone >= 0) { + tasks[i].priority = get_operation_priority(i); + } + } + + if (robot_id == 1) { + schedule_one_robot(tasks, &robot1, &robot1_code, 1); + } else { + schedule_one_robot(tasks, &robot2, &robot2_code, 2); + } } } } else { diff --git a/utils.h b/utils.h index c9a374e..368e971 100644 --- a/utils.h +++ b/utils.h @@ -194,6 +194,10 @@ extern char hla_robot2_en; // пауза для автоматического режима, при паузе идут таймера, но команды не могут быть выданы extern char auto_mode_pause; +// Кнопки с панели +extern char hla_night_mode; +extern char hla_correct_command; + // разрешение на работу планировщика extern char scheduler_en; @@ -234,6 +238,7 @@ extern char scheduler_start_signal; #define auto_mode_pause _c_auto_mode_pause #define hla_night_mode _c_hla_night_mode +#define hla_correct_command _c_hla_correct_command #endif