Исправление команды коррекции, режима одного робота и фикс несуществующих переменных в ПЛК

This commit is contained in:
2023-01-28 23:49:53 +03:00
parent bcb42cce82
commit d90b31cc7a
3 changed files with 37 additions and 24 deletions

View File

@@ -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 {