From f04fb49a160c0693b0794208c5a11e34b07813b4 Mon Sep 17 00:00:00 2001 From: VladislavOstapov Date: Mon, 5 Dec 2022 11:51:31 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BB=D0=B8=D1=8F=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=D0=B0=20=D0=B8=D0=B7=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=9F=D0=9B?= =?UTF-8?q?=D0=9A=20=D1=81=20=D1=8D=D1=82=D0=B8=D0=BC=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 1 + emulator.cpp | 16 ++++++++----- emulator.h | 3 --- scheduler.c | 6 ++--- utils.h | 63 +++++++++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 76 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9d64fbb..71befb1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,3 +7,4 @@ set(CMAKE_CXX_STANDARD 17) add_executable(sdp_sheduler scheduler.c emulator.cpp emulator.h robot.cpp robot.h utils.c utils.h) add_executable(remote_listener remote_listener.cpp) +add_definitions(-DEMULATOR=1) diff --git a/emulator.cpp b/emulator.cpp index 81cf22e..86fae14 100644 --- a/emulator.cpp +++ b/emulator.cpp @@ -12,11 +12,15 @@ struct robot_regs robot1; struct robot_regs robot2; char schedulerSoftwareTimer = 0; -char schedulerUnloadButton = 0; -char schedulerLoadButton1 = 0; -char schedulerLoadButton2 = 0; char schedulerOneRobotMode = 1; +// кнопка загрузки в зоне 0, означает что барабан надо изъять из этой загрузки (а перед этим создать) +char button_load = 0; +char button_unload = 0; +char button_unload_end = 0; +char button_unload_remove = 0; + + static const int ROWS = 10; static const int COLS = 23 * 5 + 1; static char buffer[ROWS][COLS]; @@ -227,13 +231,13 @@ int main() { message = "Continue..."; } else { if (in == "u") { - schedulerUnloadButton = 1; + button_unload = 1; message = "Нажата кнопка выгрузки"; } else if (in == "1") { - schedulerLoadButton1 = 1; + button_unload_end = 1; message = "Нажата кнопка загрузки 1"; } else if (in == "2") { - schedulerLoadButton2 = 1; + button_load = 1; message = "Нажата кнопка загрузки 2"; } else { message = "Неизвестная команда. q - выход, u - выгрузка, 1 - загрузка 1, 2 - загрузка 2"; diff --git a/emulator.h b/emulator.h index 33dcfbe..422dfab 100644 --- a/emulator.h +++ b/emulator.h @@ -11,9 +11,6 @@ extern struct robot_regs robot1; extern struct robot_regs robot2; extern char schedulerSoftwareTimer; -extern char schedulerUnloadButton; -extern char schedulerLoadButton1; -extern char schedulerLoadButton2; extern char schedulerOneRobotMode; extern short etching_zone, galvanizing_zone; diff --git a/scheduler.c b/scheduler.c index c3c4a48..32c672d 100644 --- a/scheduler.c +++ b/scheduler.c @@ -159,7 +159,7 @@ short can_move(struct barrel* bar) { case ZONE_UNLOAD: // последняя промывка, нужно разрешение на выгрузку - if (schedulerOneRobotMode && schedulerUnloadButton) { + if (schedulerOneRobotMode && button_unload) { // нужно промывку загрузку 0 if (!zone_is_busy(ZONE_LOAD_1)) { return ZONE_LOAD_1; @@ -668,8 +668,8 @@ void scheduler_main() { // } // тут возможна только вставка барабанов - if (schedulerLoadButton2) { - schedulerLoadButton2 = create_barrel_in_load(); + if (button_load) { + button_load = create_barrel_in_load(); } if (schedulerSoftwareTimer) { diff --git a/utils.h b/utils.h index 5924738..d39c65e 100644 --- a/utils.h +++ b/utils.h @@ -132,8 +132,11 @@ struct robot_regs { extern "C" { #endif +#ifdef EMULATOR extern struct barrel barrels[BARRELS_COUNT]; - +#else +#define barrels ((struct barrel*)&barrels_array) +#endif // почему-то компилер говорит что размер структуру сраный //extern struct robot robot1; @@ -214,7 +217,65 @@ struct robot_code { }; +/* ======================== IO DEFS ======================== */ +#define ROBOT1_X 1 +#define ROBOT1_Z 2 + +#define ROBOT2_X 3 +#define ROBOT2_Z 4 + +#define VFD_REG_D0_ADDR 4096 +#define VFD_REG_M0_ADDR 2048 + +/* ======================== ROBOT DEFS ======================== */ + + + + +#define MB_CMD_WRITE_FLAG 5 +#define MB_CMD_WRITE_REG 6 + +#define VFD_REG_D0_ADDR 4096 +#define VFD_REG_M0_ADDR 2048 + +// смещение регистров M относительно M0 +#define ROBOT_Z_CORRECT_STATUS_OFFSET 0 +#define ROBOT_Z_CMD_EXECUTED_OFFSET 1 +#define ROBOT_Z_CMD_UP_OFFSET 3 +#define ROBOT_Z_CMD_DOWN_OFFSET 4 +#define ROBOT_Z_CMD_CORRECT_OFFSET 5 + +#define ROBOT_X_CORRECT_STATUS_OFFSET 0 +#define ROBOT_X_CMD_EXECUTED_OFFSET 1 +#define ROBOT_X_CORRECT_SENSOR_OFFSET 2 +#define ROBOT_X_CMD_MOVE_TO_ZONE_OFFSET 3 +#define ROBOT_X_CMD_MOVE_TO_OFF_POS_OFFSET 4 // встать в смещенную позицию +#define ROBOT_X_CMD_MOVE_TO_COR_POS_OFFSET 5 // встать в точную позицию +#define ROBOT_X_CMD_CORRECT_OFFSET 6 +#define ROBOT_X_CMD_CMD_PARKING_OFFSET 7 + + +// смещение регистров D относительно D0 +#define ROBOT_X_TARGET_ZONE_OFFSET 2 + +// адреса регистров в частотнике +#define ROBOT_Z_CORRECT_STATUS_ADDR VFD_REG_M0_ADDR +#define ROBOT_Z_CMD_EXECUTED_ADDR (VFD_REG_M0_ADDR + 1) +#define ROBOT_Z_CMD_UP_ADDR (VFD_REG_M0_ADDR + 3) +#define ROBOT_Z_CMD_DOWN_ADDR (VFD_REG_M0_ADDR + 4) +#define ROBOT_Z_CMD_CORRECT_ADDR (VFD_REG_M0_ADDR + 5) + +#define ROBOT_X_CORRECT_STATUS_ADDR VFD_REG_M0_ADDR +#define ROBOT_X_CMD_EXECUTED_ADDR (VFD_REG_M0_ADDR + ROBOT_X_CMD_EXECUTED_OFFSET) +#define ROBOT_X_CORRECT_SENSOR_ADDR (VFD_REG_M0_ADDR + ROBOT_X_CORRECT_SENSOR_OFFSET) +#define ROBOT_X_CMD_MOVE_TO_ZONE_ADDR (VFD_REG_M0_ADDR + ROBOT_X_CMD_MOVE_TO_ZONE_OFFSET) +#define ROBOT_X_CMD_MOVE_TO_OFF_ADDR (VFD_REG_M0_ADDR + ROBOT_X_CMD_MOVE_TO_OFF_POS_OFFSET) +#define ROBOT_X_CMD_MOVE_TO_COR_ADDR (VFD_REG_M0_ADDR + ROBOT_X_CMD_MOVE_TO_COR_POS_OFFSET) +#define ROBOT_X_CMD_CORRECT_ADDR (VFD_REG_M0_ADDR + ROBOT_X_CMD_CORRECT_OFFSET) +#define ROBOT_X_CMD_CMD_PARKING_ADDR (VFD_REG_M0_ADDR + ROBOT_X_CMD_CMD_PARKING_OFFSET) + +#define ROBOT_X_TARGET_ZONE_ADDR (VFD_REG_D0_ADDR + ROBOT_X_TARGET_ZONE_OFFSET) #ifdef __cplusplus }