Compare commits

..

2 Commits

4 changed files with 36 additions and 17 deletions

View File

@ -5,10 +5,11 @@
* нельзя отключить сразу все зоны цинкования или травления * нельзя отключить сразу все зоны цинкования или травления
* коррекцию нужно описать так, чтобы не произошло ничего страшного * коррекцию нужно описать так, чтобы не произошло ничего страшного
* время скапывания нельзя поставить больше 200 секунд (в текущей реализации можно до 8К секунд) * время скапывания нельзя поставить больше 200 секунд (в текущей реализации можно до 8К секунд)
* время каждого процесса не больше чем 32К секунд (можно уменьшить до 8К для упрощения логики) * время каждого процесса не больше чем 8К секунд
* устанавливать режим работы роботов (один робот/второй робот/два робота) можно только в ручном режиме * устанавливать режим работы роботов (первый робот/второй робот/два робота) можно только в ручном режиме
## Известные баги ## Известные баги
* ночных барабанов на линии не может быть больше 8, если барабанов больше то они останутся в цинковании, поэтому следует
* не работают регистры добавления/удаления барабанов с панели * не работают регистры добавления/удаления барабанов с панели

View File

@ -56,6 +56,7 @@ char scheduler_en = 1;
char scheduler_start_signal = 1; char scheduler_start_signal = 1;
char auto_mode_pause = 0; char auto_mode_pause = 0;
char hla_night_mode = 0; char hla_night_mode = 0;
char hla_zinc_again = 0;
short hla_exchange_zone = ZONE_GALVANIZING_2; short hla_exchange_zone = ZONE_GALVANIZING_2;
@ -228,15 +229,15 @@ static void showAll() {
image_init(); image_init();
image_draw_borders(); image_draw_borders();
char tmp[64]; char tmp[64];
sprintf(tmp, "Lock2=%2d Lock1=%2d FNZ=%d", robot2_lock_zone, robot1_lock_zone, get_first_night_zone()); sprintf(tmp, "Lock2=%2d Lock1=%2d FNZ=%2d", robot2_lock_zone, robot1_lock_zone, get_first_night_zone());
image_insert_sprite(0, 2, tmp); image_insert_sprite(0, 2, tmp);
collectBarrelsStatistic(); collectBarrelsStatistic();
sprintf(tmp, "barrels=%2d time=%d max_time=%d", barrels_count, barrels_time, max_time); sprintf(tmp, "barrels=%02d time=%d max_time=%d", barrels_count, barrels_time, max_time);
image_insert_sprite(0, 30, tmp); image_insert_sprite(0, 30, tmp);
sprintf(tmp, "MODE: night=%d pause=%d", hla_night_mode, auto_mode_pause); sprintf(tmp, "MODE: night=%d pause=%d zinc_again=%d", hla_night_mode, auto_mode_pause, hla_zinc_again);
image_insert_sprite(0, 70, tmp); image_insert_sprite(0, 66, tmp);
// рисование бочек // рисование бочек
for (int i = 0; i < BARRELS_COUNT; i++) { for (int i = 0; i < BARRELS_COUNT; i++) {
@ -339,12 +340,14 @@ int main() {
// подсчитаем статистику // подсчитаем статистику
collectBarrelsStatistic(); collectBarrelsStatistic();
// грузим не больше 5 барабанов // грузим не больше 8 барабанов
// if (barrels_count < 5) { // if (barrels_count < 8) {
// button_load = 1; // button_load = 1;
// } // }
// button_unload = 1;
// button_unload_end = 1;
// ======= БЛОК КОДА bittons_logic ======= // ======= БЛОК КОДА buttons_logic =======
// авто сброс кнопок на выгрузке, если там нет барабана // авто сброс кнопок на выгрузке, если там нет барабана
if (!zone_is_busy(ZONE_UNLOAD)) { if (!zone_is_busy(ZONE_UNLOAD)) {
@ -428,10 +431,6 @@ int main() {
if (robot2_code.PC >= 0) if (robot2_code.PC >= 0)
debug_print_robot_code(&robot2_code, 2, sock_fd); debug_print_robot_code(&robot2_code, 2, sock_fd);
#ifdef DEBUG_CORRECTION
#endif
send_str("cmd >> "); send_str("cmd >> ");
std::string in; std::string in;
while (true) { while (true) {
@ -471,8 +470,12 @@ int main() {
} else if (in == "p") { } else if (in == "p") {
auto_mode_pause = !auto_mode_pause; auto_mode_pause = !auto_mode_pause;
message = "Переключен режим паузы"; message = "Переключен режим паузы";
} else if (in == "z") {
hla_zinc_again = !hla_zinc_again;
message = "Переключен флаг повторного цинкования";
} else { } else {
message = "Неизвестная команда. q - выход, u - выгрузка, 1 - загрузка 1, 2 - загрузка 2"; message = "Неизвестная команда. q - выход, u - выгрузка, 1 - загрузка 1, 2 - загрузка 2,\n"
" n - ночной режим, p - пауза, z - повторное цинкование";
} }
} }
current_tic++; current_tic++;

17
utils.c
View File

@ -90,8 +90,17 @@ short _get_dest_zone(struct barrel *bar, char robot_id) {
switch (bar->zone) { switch (bar->zone) {
case ZONE_LOAD_2: case ZONE_LOAD_2:
// загрузка 2, только в нее можно грузить новые барабаны, нужно обезжиривание // загрузка 2, только в нее можно грузить новые барабаны, по умолчанию следующая зона - обезжиривание
// при повторном цинковании это кислота
if (hla_zinc_again) {
if (etching_zone < 0) {
return -1;
} else {
return (short)(ZONE_ETCHING_1 + etching_zone);
}
} else {
return ZONE_DEGREASING; return ZONE_DEGREASING;
}
case ZONE_DEGREASING: case ZONE_DEGREASING:
// обезжиривание, нужна промывка 1А // обезжиривание, нужна промывка 1А
@ -404,7 +413,6 @@ char remove_barrel_from_zone(short zone) {
#ifdef EMULATOR #ifdef EMULATOR
void debug_print_robot_code(const struct robot_code *code, const short robot_id, int fd) { void debug_print_robot_code(const struct robot_code *code, const short robot_id, int fd) {
// dprintf(fd, "INFO: code length is %d\n", cmd_index);
dprintf(fd, "Code for R%d, B%d:\n", robot_id, code->barrel_id); dprintf(fd, "Code for R%d, B%d:\n", robot_id, code->barrel_id);
for (int i = 0; i < 16; i++) { for (int i = 0; i < 16; i++) {
const short cmd_arg = (short)(code->code[i] & (short)(~ROBOT_CMD_MASK)); const short cmd_arg = (short)(code->code[i] & (short)(~ROBOT_CMD_MASK));
@ -500,6 +508,11 @@ void create_operation(struct robot_code *code, short barrel_id, const short star
if (hla_night_mode && barrels[barrel_id].flags.is_empty && dest_zone == get_first_night_zone()) { if (hla_night_mode && barrels[barrel_id].flags.is_empty && dest_zone == get_first_night_zone()) {
barrels[barrel_id].flags.is_night = -1; barrels[barrel_id].flags.is_night = -1;
} }
// сброс флага повторного цинкования во время создания задания
if (start_zone == ZONE_LOAD_2) {
hla_zinc_again = 0;
}
} }
short cmd_index = 0; short cmd_index = 0;

View File

@ -197,6 +197,7 @@ extern char auto_mode_pause;
// Кнопки с панели // Кнопки с панели
extern char hla_night_mode; extern char hla_night_mode;
extern char hla_correct_command; extern char hla_correct_command;
extern char hla_zinc_again;
// разрешение на работу планировщика // разрешение на работу планировщика
extern char scheduler_en; extern char scheduler_en;
@ -241,6 +242,7 @@ extern short scheduler_stage;
#define auto_mode_pause _c_auto_mode_pause #define auto_mode_pause _c_auto_mode_pause
#define hla_night_mode _c_hla_night_mode #define hla_night_mode _c_hla_night_mode
#define hla_zinc_again _c_hla_zinc_again
#define hla_correct_command _c_hla_correct_command #define hla_correct_command _c_hla_correct_command
#define scheduler_stage _c_scheduler_stage #define scheduler_stage _c_scheduler_stage