208 lines
7.5 KiB
C
208 lines
7.5 KiB
C
#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 time_degreasing; // Время обезжиривания
|
||
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Б
|
||
};
|
||
|
||
|
||
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 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_AXIS 0x9000
|
||
#define ROBOT_CMD_INC_ZONE 0xA000
|
||
|
||
// перемещение с барабаном
|
||
#define ROBOT_WITH_BARREL 0x0800
|
||
|
||
// алиасы перемещений с барабаном
|
||
#define ROBOT_CMD_MOVE_TO_ZONE_WITH_BARREL (ROBOT_CMD_MOVE_TO_ZONE | ROBOT_WITH_BARREL)
|
||
#define ROBOT_CMD_UP_WITH_BARREL (ROBOT_CMD_UP | ROBOT_WITH_BARREL)
|
||
#define ROBOT_CMD_DOWN_WITH_BARREL (ROBOT_CMD_DOWN | ROBOT_WITH_BARREL)
|
||
#define ROBOT_CMD_DOWN_2_WITH_BARREL (ROBOT_CMD_DOWN_2 | ROBOT_WITH_BARREL)
|
||
|
||
|
||
#define ROBOT_AXIS_X 1
|
||
#define ROBOT_CMD_CORRECT_AXIS_X (ROBOT_CMD_CORRECT_AXIS | ROBOT_AXIS_X)
|
||
#define ROBOT_AXIS_Z 2
|
||
#define ROBOT_CMD_CORRECT_AXIS_Z (ROBOT_CMD_CORRECT_AXIS | ROBOT_AXIS_Z)
|
||
|
||
#define ROBOT_ZONE_ETCH 1
|
||
#define ROBOT_CMD_INC_ZONE_ETCH (ROBOT_CMD_INC_ZONE | ROBOT_ZONE_ETCH)
|
||
#define ROBOT_ZONE_GAL 2
|
||
#define ROBOT_CMD_INC_ZONE_GAL (ROBOT_CMD_INC_ZONE | ROBOT_ZONE_GAL)
|
||
|
||
// NOTE первой командой на любую транзакцию должна стоять команда опустить траверсу (в 22 зоне по идее никогда не закончим)
|
||
struct robot_code {
|
||
short barrel_id; // нужен ID барабана, если
|
||
short PC; // когда -1, код не выполняется
|
||
|
||
/*
|
||
* система команд, которая нужна: (квадратные скобки - аргумент это младший байт, фигурные - отдельное слово)
|
||
* 0: конец
|
||
* 1 (опция с барабаном) [зона]: съебаться в зону
|
||
* 2: встать на смещенную позицию
|
||
* 3 (опция с барабаном): поднять траверсу (перед выполнением ожидать если таймер барабана не истек)
|
||
* 4 (опция с барабаном): опустить траверсу
|
||
* 5 (опция с барабаном): опустить траверсу не до конца
|
||
* 6 [сек]: пауза на нужное количество секунд
|
||
* 7 {время}: установить таймер барабану
|
||
* 8 [зона]: установить зону блокировки
|
||
* 9 [X(1) | Y(2)]: скорректировать ось
|
||
* 10 [ETCH(1) |GAL (2)]: сделать инкремент зоны гальваники или обезжиривания
|
||
*
|
||
* формат команды: (команда, старший байт) [младший байт, аргумент команды (если есть)] [слово, аргумент если команда требует]
|
||
*/
|
||
short code[16]; // формат кода: [команды] <команда 0>
|
||
|
||
};
|
||
|
||
|
||
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif //SDP_SCHEDULER_UTILS_H
|