Compare commits
5 Commits
0c70783f64
...
master
Author | SHA1 | Date | |
---|---|---|---|
26ffa93592 | |||
6d15a75902 | |||
e9abc3d690 | |||
20a97fec11 | |||
cd62b41e0b |
@@ -10,6 +10,6 @@
|
|||||||
|
|
||||||
## Известные баги
|
## Известные баги
|
||||||
|
|
||||||
* ночных барабанов на линии не может быть больше 8, если барабанов больше то они останутся в цинковании, поэтому следует
|
* ночные барабаны в конце складываются в промывки через зону обмена, таким образом можно загрузить на линию все 10 ночных барабанов
|
||||||
* не работают регистры добавления/удаления барабанов с панели
|
* не работают регистры добавления/удаления барабанов с панели
|
||||||
|
|
||||||
|
35
scheduler.c
35
scheduler.c
@@ -121,6 +121,11 @@ void scheduler_main()
|
|||||||
robot1_code.PC = -1;
|
robot1_code.PC = -1;
|
||||||
robot2_code.PC = -1;
|
robot2_code.PC = -1;
|
||||||
|
|
||||||
|
scheduler_start_signal = 0;
|
||||||
|
scheduler_stage = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!scheduler_en) {
|
||||||
for (short i = 0; i < BARRELS_COUNT; i++) {
|
for (short i = 0; i < BARRELS_COUNT; i++) {
|
||||||
// после рестарта планировщика надо всем барабаном убрать робота,
|
// после рестарта планировщика надо всем барабаном убрать робота,
|
||||||
// всех кто сверху удалить
|
// всех кто сверху удалить
|
||||||
@@ -130,8 +135,6 @@ void scheduler_main()
|
|||||||
barrels[i].flags.is_exist = 0;
|
barrels[i].flags.is_exist = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
scheduler_start_signal = 0;
|
|
||||||
scheduler_stage = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// программный таймер, применяется ко всем существующим барабанам во всех режимах
|
// программный таймер, применяется ко всем существующим барабанам во всех режимах
|
||||||
@@ -336,21 +339,29 @@ void scheduler_main()
|
|||||||
|
|
||||||
// сначала выдаем команды первому роботу
|
// сначала выдаем команды первому роботу
|
||||||
if (robot1_code.PC < 0) {
|
if (robot1_code.PC < 0) {
|
||||||
schedule_one_robot(ROBOT_1);
|
if (robot1.dx.current_zone < ZONE_PASSIVATION) {
|
||||||
|
robot2_lock_zone = -1;
|
||||||
|
robot1_lock_zone = ZONE_PASSIVATION;
|
||||||
|
robot1_code.barrel_id = -1;
|
||||||
|
robot1_code.code[0] = ROBOT_CMD_DOWN();
|
||||||
|
robot1_code.code[1] = ROBOT_CMD_MOVE_TO_ZONE(ZONE_PASSIVATION);
|
||||||
|
robot1_code.code[2] = ROBOT_CMD_END();
|
||||||
|
robot1_code.PC = 0;
|
||||||
|
} else {
|
||||||
|
schedule_one_robot(ROBOT_1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// потом второму
|
// потом второму
|
||||||
if (robot2_code.PC < 0) {
|
if (robot2_code.PC < 0) {
|
||||||
if (robot2.dx.current_zone < ZONE_WASHING_1A) {
|
if (robot2.dx.current_zone < ZONE_WASHING_1A || robot2.dx.current_zone > ZONE_ETCHING_2) {
|
||||||
// то же самое что и во второй стадии, только без инкремента стадии
|
// то же самое что и во второй стадии, только без инкремента стадии
|
||||||
if (robot2_code.PC < 0) {
|
robot2_lock_zone = ZONE_ETCHING_2;
|
||||||
robot2_lock_zone = ZONE_ETCHING_2;
|
robot2_code.barrel_id = -1;
|
||||||
robot2_code.barrel_id = -1;
|
robot2_code.code[0] = ROBOT_CMD_DOWN();
|
||||||
robot2_code.code[0] = ROBOT_CMD_DOWN();
|
robot2_code.code[1] = ROBOT_CMD_MOVE_TO_ZONE(ZONE_WASHING_1A);
|
||||||
robot2_code.code[1] = ROBOT_CMD_MOVE_TO_ZONE(ZONE_WASHING_1A);
|
robot2_code.code[2] = ROBOT_CMD_END();
|
||||||
robot2_code.code[2] = ROBOT_CMD_END();
|
robot2_code.PC = 0;
|
||||||
robot2_code.PC = 0;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
schedule_one_robot(ROBOT_2);
|
schedule_one_robot(ROBOT_2);
|
||||||
}
|
}
|
||||||
|
29
utils.c
29
utils.c
@@ -33,6 +33,17 @@ char zone_is_busy(short zone) {
|
|||||||
|
|
||||||
|
|
||||||
short get_first_night_zone() {
|
short get_first_night_zone() {
|
||||||
|
short min_normal_barrel = -1;
|
||||||
|
for (short i = 0; i < BARRELS_COUNT; i++) {
|
||||||
|
// ищем все не ночные, не пустые, и которые внизу барабаны
|
||||||
|
if (barrels[i].flags.is_exist && !barrels[i].flags.is_empty && !barrels[i].flags.is_night && !barrels[i].flags.is_up) {
|
||||||
|
// нужен барабан, у которого нет
|
||||||
|
if (min_normal_barrel < 0 || barrels[i].zone < min_normal_barrel) {
|
||||||
|
min_normal_barrel = barrels[i].zone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// всего зон, куда можно сныкать барабаны (всего 9 мест: загрузка 1 и 8 промывок)
|
// всего зон, куда можно сныкать барабаны (всего 9 мест: загрузка 1 и 8 промывок)
|
||||||
for (short nz = 0; nz < 9; nz++) {
|
for (short nz = 0; nz < 9; nz++) {
|
||||||
char found = 0;
|
char found = 0;
|
||||||
@@ -46,7 +57,11 @@ short get_first_night_zone() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (found == 0) {
|
if (found == 0) {
|
||||||
return NIGHT_ZONES[nz];
|
if (min_normal_barrel < 0 || NIGHT_ZONES[nz] < min_normal_barrel) {
|
||||||
|
return NIGHT_ZONES[nz];
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,14 +202,14 @@ short _get_dest_zone(struct barrel *bar, char robot_id) {
|
|||||||
if (button_unload) {
|
if (button_unload) {
|
||||||
if (hla_night_mode) {
|
if (hla_night_mode) {
|
||||||
short nz = get_first_night_zone();
|
short nz = get_first_night_zone();
|
||||||
if (one_robot_mode) {
|
if (nz < hla_exchange_zone) {
|
||||||
return nz;
|
if (one_robot_mode && nz >= 0) {
|
||||||
} else {
|
|
||||||
if (nz < hla_exchange_zone) {
|
|
||||||
return hla_exchange_zone;
|
|
||||||
} else {
|
|
||||||
return nz;
|
return nz;
|
||||||
|
} else {
|
||||||
|
return hla_exchange_zone;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
return nz;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (one_robot_mode) {
|
if (one_robot_mode) {
|
||||||
|
Reference in New Issue
Block a user