Подготовка к переписыванию планировщика: добавлены переменные на ПЛК, добавлена система команд для роботов
This commit is contained in:
215
utils.h
Normal file
215
utils.h
Normal file
@@ -0,0 +1,215 @@
|
||||
#ifndef SDP_SCHEDULER_UTILS_H
|
||||
#define SDP_SCHEDULER_UTILS_H
|
||||
|
||||
|
||||
// Все зоны линии
|
||||
enum Zones {
|
||||
ZONE_LOAD_1 = 0, // загрузка 0, используется как точка появления барабанов
|
||||
ZONE_LOAD_2, // загрузка 1, используется как конечная точка барабанов
|
||||
ZONE_DEGREASING, // обезжиривание
|
||||
ZONE_WASHING_1A, // промывка 1А
|
||||
ZONE_WASHING_1B, // промывка 1Б
|
||||
ZONE_ETCHING_1, // травление 1
|
||||
ZONE_ETCHING_2, // травление 2
|
||||
ZONE_WASHING_2A, // промывка 2А
|
||||
ZONE_WASHING_2B, // промывка 2Б
|
||||
ZONE_GALVANIZING_1, // цинкование 1
|
||||
ZONE_GALVANIZING_2, // цинкование 2
|
||||
ZONE_GALVANIZING_3, // цинкование 3
|
||||
ZONE_GALVANIZING_4, // цинкование 4
|
||||
ZONE_GALVANIZING_5, // цинкование 5
|
||||
ZONE_GALVANIZING_6, // цинкование 6
|
||||
ZONE_GALVANIZING_7, // цинкование 7
|
||||
ZONE_GALVANIZING_8, // цинкование 8
|
||||
ZONE_WASHING_3A, // промывка 3А
|
||||
ZONE_WASHING_3B, // промывка 3Б
|
||||
ZONE_PASSIVATION, // пассивация
|
||||
ZONE_WASHING_4A, // промывка 4A
|
||||
ZONE_WASHING_4B, // промывка 4Б
|
||||
ZONE_UNLOAD, // зона выгрузки
|
||||
};
|
||||
|
||||
|
||||
#define BARRELS_COUNT 10
|
||||
|
||||
union barrel_flags {
|
||||
short raw_word;
|
||||
struct {
|
||||
char is_exist: 1;
|
||||
char is_up: 1; // для панели
|
||||
char robot: 2; // обслуживающий робот
|
||||
char is_night: 1; // ночной барабан, имеет такой статус если он в промывке в ночном режиме или в промывке,
|
||||
// но пока не дождался очереди на выход из ночного режима
|
||||
char is_empty: 1; // пустой барабан, нужен для работы операции возврата
|
||||
};
|
||||
};
|
||||
|
||||
struct barrel {
|
||||
union barrel_flags flags;
|
||||
short zone;
|
||||
// программный таймер, тикает сразу у всех барабанов,
|
||||
short software_timer;
|
||||
short curr_process; // стадия процесса
|
||||
|
||||
// время процессов
|
||||
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Б
|
||||
};
|
||||
|
||||
// deprecated: do not use!
|
||||
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[2];
|
||||
short step;
|
||||
};
|
||||
|
||||
|
||||
union robot_regs_mx {
|
||||
short raw_word;
|
||||
struct {
|
||||
char correct_status: 1;
|
||||
char last_cmd_executed: 1;
|
||||
char correct_sensor: 1;
|
||||
char move_to_zone: 1;
|
||||
char move_to_offset: 1;
|
||||
char move_to_precise: 1;
|
||||
char do_correct: 1;
|
||||
char do_parking: 1;
|
||||
char hla_left: 1;
|
||||
char hla_right: 1;
|
||||
char auto_mode: 1;
|
||||
char error: 1;
|
||||
};
|
||||
};
|
||||
|
||||
union robot_regs_dx {
|
||||
short raw_data[6];
|
||||
struct {
|
||||
short current_zone;
|
||||
short target_zone;
|
||||
short left_max;
|
||||
short right_max;
|
||||
short output_current;
|
||||
short output_freq;
|
||||
};
|
||||
};
|
||||
|
||||
union robot_regs_mz {
|
||||
short raw_word;
|
||||
struct {
|
||||
char correct_status: 1;
|
||||
char last_cmd_executed: 1;
|
||||
char is_up: 1;
|
||||
char move_up: 1;
|
||||
char move_down: 1;
|
||||
char do_correct: 1;
|
||||
char hla_up: 1;
|
||||
char hla_down: 1;
|
||||
char auto_mode: 1;
|
||||
char error: 1;
|
||||
};
|
||||
};
|
||||
|
||||
union robot_regs_dz {
|
||||
short raw_data[3];
|
||||
struct {
|
||||
short current_zone;
|
||||
short output_current;
|
||||
short output_freq;
|
||||
};
|
||||
};
|
||||
|
||||
struct robot_regs {
|
||||
union robot_regs_mx mx;
|
||||
union robot_regs_dx dx;
|
||||
union robot_regs_mz mz;
|
||||
union robot_regs_dz dz;
|
||||
};
|
||||
|
||||
#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;
|
||||
|
||||
#define ROBOT_CMD_MASK 0xF000
|
||||
#define ROBOT_CMD_END 0x0000
|
||||
#define ROBOT_CMD_MOVE_TO_ZONE 0x1000
|
||||
#define ROBOT_CMD_MOVE_OFF 0x2000
|
||||
#define ROBOT_CMD_UP 0x3000
|
||||
#define ROBOT_CMD_DOWN 0x4000
|
||||
#define ROBOT_CMD_DOWN_2 0x5000
|
||||
#define ROBOT_CMD_WAIT 0x6000
|
||||
#define ROBOT_CMD_TMR_SET 0x7000
|
||||
#define ROBOT_CMD_SET_LOCK_ZONE 0x8000
|
||||
#define ROBOT_CMD_CORRECT_X 0x9000
|
||||
#define ROBOT_CMD_CORRECT_Z 0xA000
|
||||
|
||||
|
||||
// NOTE первой командой на любую транзакцию должна стоять команда опустить траверсу (в 22 зоне по идее никогда не закончим)
|
||||
struct robot_code {
|
||||
short barrel_id; // нужен ID барабана, если
|
||||
short PC; // когда -1, код не выполняется
|
||||
|
||||
/*
|
||||
* система команд, которая нужна: (квадратные скобки - аргумент это младший байт, фигурные - отдельное слово)
|
||||
* 0: конец
|
||||
* 1 [зона]: съебаться в зону
|
||||
* 2: встать на смещенную позицию
|
||||
* 3 [с барабаном]: поднять траверсу (перед выполнением ожидать если таймер барабана не истек)
|
||||
* 4 [с барабаном]: опустить траверсу
|
||||
* 5 [с барабаном]: опустить траверсу не до конца
|
||||
* 6 [сек]: пауза на нужное количество секунд
|
||||
* 7 {время}: установить таймер барабану
|
||||
* 8 [зона]: установить зону блокировки
|
||||
* 9: скорректировать ос X
|
||||
* 10: скорректировать ос Z
|
||||
*
|
||||
* формат команды: (команда, старший байт) [младший байт, аргумент команды (если есть)] [слово, аргумент если команда требует]
|
||||
*/
|
||||
short code[16]; // формат кода: [команды] <команда 0>
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //SDP_SCHEDULER_UTILS_H
|
||||
Reference in New Issue
Block a user