Слияние кода из проекта для ПЛК с этим проектом
This commit is contained in:
parent
5f2bbc4d21
commit
71851c7bc8
@ -11,8 +11,8 @@
|
|||||||
struct robot_regs robot1;
|
struct robot_regs robot1;
|
||||||
struct robot_regs robot2;
|
struct robot_regs robot2;
|
||||||
|
|
||||||
char schedulerSoftwareTimer = 0;
|
char _scheduler_software_timer = 0;
|
||||||
char schedulerOneRobotMode = 1;
|
char _scheduler_one_robot_mode = 1;
|
||||||
|
|
||||||
// кнопка загрузки в зоне 0, означает что барабан надо изъять из этой загрузки (а перед этим создать)
|
// кнопка загрузки в зоне 0, означает что барабан надо изъять из этой загрузки (а перед этим создать)
|
||||||
char button_load = 0;
|
char button_load = 0;
|
||||||
@ -194,7 +194,7 @@ int main() {
|
|||||||
current_tic = 0;
|
current_tic = 0;
|
||||||
const char* message = nullptr;
|
const char* message = nullptr;
|
||||||
while (true) {
|
while (true) {
|
||||||
schedulerSoftwareTimer = 1;
|
_scheduler_software_timer = 1;
|
||||||
robot_main();
|
robot_main();
|
||||||
scheduler_main();
|
scheduler_main();
|
||||||
send_str("\033c");
|
send_str("\033c");
|
||||||
|
@ -7,11 +7,8 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern struct robot_regs robot1;
|
extern char _scheduler_software_timer;
|
||||||
extern struct robot_regs robot2;
|
extern char _scheduler_one_robot_mode;
|
||||||
|
|
||||||
extern char schedulerSoftwareTimer;
|
|
||||||
extern char schedulerOneRobotMode;
|
|
||||||
|
|
||||||
extern short etching_zone, galvanizing_zone;
|
extern short etching_zone, galvanizing_zone;
|
||||||
|
|
||||||
|
16
scheduler.c
16
scheduler.c
@ -15,7 +15,7 @@ char zone_is_busy(short zone) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static short get_robot_barrel(char robot_id) {
|
short get_robot_barrel(char robot_id) {
|
||||||
for (short i = 0; i < BARRELS_COUNT; i++) {
|
for (short i = 0; i < BARRELS_COUNT; i++) {
|
||||||
if (barrels[i].flags.robot == robot_id) {
|
if (barrels[i].flags.robot == robot_id) {
|
||||||
return i;
|
return i;
|
||||||
@ -43,7 +43,7 @@ short can_move(struct barrel* bar) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EMULATOR
|
#ifdef EMULATOR
|
||||||
if (!schedulerOneRobotMode) {
|
if (!_scheduler_one_robot_mode) {
|
||||||
printf("WARMING: нет проверки того, что для перемещения барабана не мешает второй робот\n");
|
printf("WARMING: нет проверки того, что для перемещения барабана не мешает второй робот\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -163,7 +163,7 @@ short can_move(struct barrel* bar) {
|
|||||||
|
|
||||||
case ZONE_UNLOAD:
|
case ZONE_UNLOAD:
|
||||||
// последняя промывка, нужно разрешение на выгрузку
|
// последняя промывка, нужно разрешение на выгрузку
|
||||||
if (schedulerOneRobotMode && button_unload) {
|
if (_scheduler_one_robot_mode && button_unload) {
|
||||||
// нужно промывку загрузку 0
|
// нужно промывку загрузку 0
|
||||||
if (!zone_is_busy(ZONE_LOAD_1)) {
|
if (!zone_is_busy(ZONE_LOAD_1)) {
|
||||||
return ZONE_LOAD_1;
|
return ZONE_LOAD_1;
|
||||||
@ -271,7 +271,7 @@ struct barrel makeBarrel(short flags, short zone, short timer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static short scheduler_find_task(struct scheduler_task* tasks, const short curr_pos) {
|
short scheduler_find_task(struct scheduler_task* tasks, const short curr_pos) {
|
||||||
// TODO добавить поддержку ночного режима и режима двух роботов
|
// TODO добавить поддержку ночного режима и режима двух роботов
|
||||||
// для начала надо найти максимальный приоритет у операций
|
// для начала надо найти максимальный приоритет у операций
|
||||||
short max_priority = -1;
|
short max_priority = -1;
|
||||||
@ -601,7 +601,7 @@ void schedule_robot_1() {
|
|||||||
// TODO добавить вставку lock-point'ов на задачах на несколько роботов
|
// TODO добавить вставку lock-point'ов на задачах на несколько роботов
|
||||||
|
|
||||||
// найти подходящую задачу
|
// найти подходящую задачу
|
||||||
if (schedulerOneRobotMode) {
|
if (_scheduler_one_robot_mode) {
|
||||||
short target_task = scheduler_find_task(tasks, robot1.dx.current_zone);
|
short target_task = scheduler_find_task(tasks, robot1.dx.current_zone);
|
||||||
|
|
||||||
if (target_task >= 0) {
|
if (target_task >= 0) {
|
||||||
@ -612,7 +612,9 @@ void schedule_robot_1() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
#ifdef EMULATOR
|
||||||
printf("WARMING: support only one robot mode\n");
|
printf("WARMING: support only one robot mode\n");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -682,8 +684,8 @@ void scheduler_main() {
|
|||||||
button_load = create_barrel_in_load();
|
button_load = create_barrel_in_load();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (schedulerSoftwareTimer) {
|
if (_scheduler_software_timer) {
|
||||||
schedulerSoftwareTimer = 0;
|
_scheduler_software_timer = 0;
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
if (barrels[i].software_timer > -9999) {
|
if (barrels[i].software_timer > -9999) {
|
||||||
barrels[i].software_timer--;
|
barrels[i].software_timer--;
|
||||||
|
4
utils.h
4
utils.h
@ -134,8 +134,12 @@ extern "C" {
|
|||||||
|
|
||||||
#ifdef EMULATOR
|
#ifdef EMULATOR
|
||||||
extern struct barrel barrels[BARRELS_COUNT];
|
extern struct barrel barrels[BARRELS_COUNT];
|
||||||
|
extern struct robot_regs robot1;
|
||||||
|
extern struct robot_regs robot2;
|
||||||
#else
|
#else
|
||||||
#define barrels ((struct barrel*)&barrels_array)
|
#define barrels ((struct barrel*)&barrels_array)
|
||||||
|
#define robot1 (*((struct robot_regs*)&robot1_reg_dx))
|
||||||
|
#define robot2 (*((struct robot_regs*)&robot2_reg_dz))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// почему-то компилер говорит что размер структуру сраный
|
// почему-то компилер говорит что размер структуру сраный
|
||||||
|
Reference in New Issue
Block a user