Первая тестируемая на ПЛК версия
This commit is contained in:
35
scheduler.c
35
scheduler.c
@@ -122,6 +122,14 @@ void scheduler_main()
|
||||
}
|
||||
}
|
||||
|
||||
// автоматический инкремент зон травления и цинкования
|
||||
if (etching_zone < 0) {
|
||||
increment_zone(ROBOT_ZONE_ETCH);
|
||||
}
|
||||
if (galvanizing_zone < 0) {
|
||||
increment_zone(ROBOT_ZONE_GAL);
|
||||
}
|
||||
|
||||
// кнопки на линии
|
||||
|
||||
// кнопка загрузки барабана
|
||||
@@ -222,21 +230,28 @@ void scheduler_main()
|
||||
// для каждого робота нужно получить свой список задач
|
||||
// и надо еще сделать так, чтобы роботы не столкнулись
|
||||
|
||||
// суть этого предела в том, чтобы робот всегда был свободен ЗА зоной gal8,
|
||||
// но при этом если зоной обмена выбрана промывка 3а, то за ней тоже, получается max(ZONE_G8, exchange_zone)
|
||||
const short robot1_border = ZONE_GALVANIZING_8 > hla_exchange_zone ? ZONE_GALVANIZING_8 : hla_exchange_zone;
|
||||
|
||||
// суть этого предела в том, чтобы робот всегда держал свободной зону gal1,
|
||||
// но при этом если зоной обмена выбрана промывка 2б, то за ней тоже, получается min(ZONE_G1, exchange_zone)
|
||||
const short robot2_border = ZONE_GALVANIZING_1 < hla_exchange_zone ? ZONE_GALVANIZING_1 : hla_exchange_zone;
|
||||
|
||||
// логика для того, чтобы роботы не столкнулись в начале
|
||||
if (robot1.dx.current_zone < ZONE_GALVANIZING_1) {
|
||||
// начальная позиция робота 1 - промывка 3Б
|
||||
if (robot1.dx.current_zone < robot1_border) {
|
||||
robot2_lock_zone = -1;
|
||||
robot1_lock_zone = ZONE_WASHING_3B;
|
||||
robot1_lock_zone = robot1_border;
|
||||
if (robot1_code.PC < 0) {
|
||||
robot1_code.barrel_id = -1;
|
||||
robot1_code.code[0] = ROBOT_CMD_DOWN();
|
||||
robot1_code.code[1] = ROBOT_CMD_MOVE_TO_ZONE(ZONE_WASHING_3B);
|
||||
robot1_code.code[1] = ROBOT_CMD_MOVE_TO_ZONE(robot1_border + 2);
|
||||
robot1_code.code[2] = ROBOT_CMD_END();
|
||||
robot1_code.PC = 0;
|
||||
}
|
||||
} else if (robot2.dx.current_zone < ZONE_DEGREASING) {
|
||||
// начальная позиция робота 1 - обезжир
|
||||
robot2_lock_zone = ZONE_WASHING_2A;
|
||||
robot2_lock_zone = ZONE_DEGREASING;
|
||||
if (robot2_code.PC < 0) {
|
||||
robot2_code.barrel_id = -1;
|
||||
robot2_code.code[0] = ROBOT_CMD_DOWN();
|
||||
@@ -244,6 +259,16 @@ void scheduler_main()
|
||||
robot2_code.code[2] = ROBOT_CMD_END();
|
||||
robot2_code.PC = 0;
|
||||
}
|
||||
} else if (robot2.dx.current_zone > robot2_border) {
|
||||
// это уже граница робота 2
|
||||
robot2_lock_zone = robot2_border - 2;
|
||||
if (robot2_code.PC < 0) {
|
||||
robot2_code.barrel_id = -1;
|
||||
robot2_code.code[0] = ROBOT_CMD_DOWN();
|
||||
robot2_code.code[1] = ROBOT_CMD_MOVE_TO_ZONE(robot2_border - 2);
|
||||
robot2_code.code[2] = ROBOT_CMD_END();
|
||||
robot2_code.PC = 0;
|
||||
}
|
||||
} else {
|
||||
// отдельно просчитаем все для первого робота
|
||||
if (robot1_code.PC < 0) {
|
||||
|
||||
Reference in New Issue
Block a user