Подготовка к переписыванию планировщика: добавлены переменные на ПЛК, добавлена система команд для роботов

This commit is contained in:
2022-12-02 22:29:36 +03:00
parent aa8d949323
commit 8f19d1b277
8 changed files with 461 additions and 120 deletions

View File

@@ -1,94 +1,14 @@
//
// Created by Владислав Остапов on 27.10.2022.
//
#ifndef SDP_SHEDULER_EMULATOR_H
#define SDP_SHEDULER_EMULATOR_H
#include <stdint.h>
#define BARRELS_COUNT 10
union flags {
int16_t raw_word;
struct {
char is_exist: 1;
char is_up: 1; // для панели
char robot: 2; // обслуживающий робот
int _unused: 11;
};
};
struct barrel {
union flags flags;
short zone;
short software_timer;
short curr_process; // стадия процесса
// время процессов
// TODO сделать это как union, чтобы можно было юзать как таблицу
short time_defatting; // Время обезжиривания
short time_washing_1a; // Время промывки 1А
short time_washing_1b; // Время промывки 1Б
short time_etching; // Время травления
short time_washing_2a; // Время промывки 2А
short time_washing_2b; // Время промывки 2Б
short time_galvanizing; // Время цинкования
short time_washing_3a; // Время промывки 3А
short time_washing_3b; // Время промывки 3Б
short time_passivation; // Время пассивации
short time_washing_4a; // Время промывки 4А
short time_washing_4b; // Время промывки 4Б
};
enum BarrelProcess {
PROCESS_NONE = 0, // сразу после загрузки
PROCESS_DEFATTING, // обезжиривание
PROCESS_WASHING_1A, // промывка 1А
PROCESS_WASHING_1B, // промывка 1Б
PROCESS_ETCHING, // травление
PROCESS_WASHING_2A, // промывка 2А
PROCESS_WASHING_2B, // промывка 2Б
PROCESS_GALVANIZING, // цинкование
PROCESS_WASHING_3A, // промывка 3А
PROCESS_WASHING_3B, // промывка 3Б
PROCESS_PASSIVATION, // пассивация
PROCESS_WASHING_4B, // промывка 4Б
PROCESS_RETURN_1, // возвращение обратно, стадия 1 - перекладываем в свободную промывку (если есть)
PROCESS_RETURN_2, // возвращение обратно, стадия 2 - перекладываем в свободную загрузку и удалить барабан
};
struct robot_cmd {
short cmd;
short args[4];
short step;
};
union robot_flags_mz {
short raw_word;
struct {
char is_corrected: 1;
char is_up: 1;
};
};
struct robot {
union robot_flags_mz mz;
short curr_zone; // пока будет достаточно этого
};
#include "utils.h"
#ifdef __cplusplus
extern "C" {
#endif
extern struct barrel barrels[BARRELS_COUNT];
extern struct robot_cmd robot1_cmd;
extern struct robot_cmd robot2_cmd;
extern struct robot robot1;
extern struct robot robot2;
extern struct robot_regs robot1;
extern struct robot_regs robot2;
extern char schedulerSoftwareTimer;
extern char schedulerUnloadButton;
@@ -98,6 +18,46 @@ extern char schedulerOneRobotMode;
void scheduler_main();
// Флаги, которые есть в оригинальной программе на ПЛК, в "C global variables"
// Кнопки с панели
extern char hla_auto_mode;
extern char hla_night_mode;
extern char hla_pause;
extern char hla_correct_command;
// кнопки управления роботом с панели
// кнопка загрузки в зоне 0, означает что барабан надо изъять из этой загрузки (а перед этим создать)
extern char button_load;
// разрешающий сигнал подавать не буду, он не нужен поскольку планировщик нужен всегда
// кнопка выгрузки, означает что барабан нужно вернуть обратно
extern char button_unload;
// кнопка загрузки в зоне 1, означает что барабан в этой зоне подлежит удалению
extern char button_unload_end;
// кнопка загрузки в зоне 22, означает что барабан в этой зоне подлежит удалению
extern char button_unload_remove;
// Переменные, которые надо добавить в C Global variables
// код для роботов
extern robot_code robot1_code;
extern robot_code robot2_code;
// lock-зоны, нельзя двигаться за них и за робота
extern short robot1_lock_zone;
extern short robot2_lock_zone;
#ifdef __cplusplus
}
#endif