Готов механизм транзакций на роботе с пачкой команд

This commit is contained in:
2022-12-03 00:44:56 +03:00
parent 8f19d1b277
commit 2e4a560f74
7 changed files with 401 additions and 422 deletions

64
utils.h
View File

@@ -49,10 +49,9 @@ struct barrel {
short zone;
// программный таймер, тикает сразу у всех барабанов,
short software_timer;
short curr_process; // стадия процесса
// время процессов
short time_defatting; // Время обезжиривания
short time_degreasing; // Время обезжиривания
short time_washing_1a; // Время промывки 1А
short time_washing_1b; // Время промывки 1Б
short time_etching; // Время травления
@@ -66,30 +65,6 @@ struct barrel {
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;
@@ -159,8 +134,6 @@ extern "C" {
extern struct barrel barrels[BARRELS_COUNT];
extern struct robot_cmd robot1_cmd;
extern struct robot_cmd robot2_cmd;
// почему-то компилер говорит что размер структуру сраный
//extern struct robot robot1;
@@ -176,9 +149,28 @@ extern struct robot_cmd robot2_cmd;
#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
#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 {
@@ -188,16 +180,16 @@ struct robot_code {
/*
* система команд, которая нужна: (квадратные скобки - аргумент это младший байт, фигурные - отдельное слово)
* 0: конец
* 1 [зона]: съебаться в зону
* 1 (опция с барабаном) [зона]: съебаться в зону
* 2: встать на смещенную позицию
* 3 [с барабаном]: поднять траверсу (перед выполнением ожидать если таймер барабана не истек)
* 4 [с барабаном]: опустить траверсу
* 5 [с барабаном]: опустить траверсу не до конца
* 3 (опция с барабаном): поднять траверсу (перед выполнением ожидать если таймер барабана не истек)
* 4 (опция с барабаном): опустить траверсу
* 5 (опция с барабаном): опустить траверсу не до конца
* 6 [сек]: пауза на нужное количество секунд
* 7 {время}: установить таймер барабану
* 8 [зона]: установить зону блокировки
* 9: скорректировать ос X
* 10: скорректировать ос Z
* 9 [X(1) | Y(2)]: скорректировать ось
* 10 [ETCH(1) |GAL (2)]: сделать инкремент зоны гальваники или обезжиривания
*
* формат команды: (команда, старший байт) [младший байт, аргумент команды (если есть)] [слово, аргумент если команда требует]
*/