Исправлена ошибка в определении структур для ПЛК, планировщик теперь умеет удалять барабаны

This commit is contained in:
VladislavOstapov 2022-12-07 12:17:55 +03:00
parent 65ae324803
commit dab59b0614
4 changed files with 60 additions and 41 deletions

View File

@ -42,6 +42,12 @@ short hla_time_reagent = 30;
short hla_time_washing_1 = 3;
short hla_time_washing_2 = 20;
char hla_robot1_en = 1;
char hla_robot2_en = 0;
char _scheduler_en = 1;
static const int ROWS = 10;
static const int COLS = 23 * 5 + 1;
static char buffer[ROWS][COLS];
@ -210,11 +216,11 @@ int main() {
// b.zone = (short) abs(random() % 20);
// }
barrels[5] = makeBarrel(1, 21, 3);
barrels[6] = makeBarrel(1, 5, -6);
barrels[7] = makeBarrel(1, 6, -7);
barrels[8] = makeBarrel(1, 10, -8);
// barrels[5] = makeBarrel(1, 21, 3);
// barrels[6] = makeBarrel(1, 5, -6);
// barrels[7] = makeBarrel(1, 6, -7);
//
// barrels[8] = makeBarrel(1, 10, -8);
current_tic = 0;
const char* message = nullptr;

View File

@ -69,6 +69,10 @@ extern short hla_time_washing_2;
extern short robot1_lock_zone;
extern short robot2_lock_zone;
extern char hla_robot1_en;
extern char hla_robot2_en;
extern char _scheduler_en;
#ifdef __cplusplus
}

View File

@ -602,19 +602,17 @@ void schedule_robot_1() {
}
}
// вернет false если удалось вставить барабан, иначе true
char create_barrel_in_load() {
if (!zone_is_busy(1)) {
for (int i = 0; i < BARRELS_COUNT; i++) {
if (!barrels[i].flags.is_exist) {
barrels[i] = makeBarrel(1, 1, 0);
return 0;
}
char scheduler_remove_barrel_from_zone(short zone) {
for (short i = 0; i < 10; i++) {
if (barrels[i].flags.is_exist && barrels[i].flags.robot == 0 && barrels[i].zone == zone) {
barrels[i].flags.is_exist = 0;
return 1;
}
}
return 1;
return 0;
}
/*
=== ЦИКЛОГРАММА ПЕРЕТАСКИВАНИЯ БАРАБАНА ===
// NOTE первой командой на любую транзакцию должна стоять команда опустить траверсу (в 22 зоне мы никогда не закончим, за нее не беспокоится)
@ -657,32 +655,43 @@ char create_barrel_in_load() {
* установить время ожидания барабана (для промывки 4а)
*/
void scheduler_main() {
// тут должно быть удаление барабана из зоны 1, если он там есть
// if (schedulerLoadButton1) {
// schedulerLoadButton1 = create_barrel_in_load(0);
// }
// тут возможна только вставка барабанов
if (button_load) {
button_load = create_barrel_in_load();
}
if (_scheduler_software_timer) {
_scheduler_software_timer = 0;
for (int i = 0; i < 10; i++) {
if (barrels[i].software_timer > -9999) {
barrels[i].software_timer--;
#ifdef EMULATOR
void scheduler_main()
#endif
{
if (_scheduler_en) {
// тут возможна только вставка барабанов
if (button_load) {
if (!zone_is_busy(1)) {
for (int i = 0; i < BARRELS_COUNT; i++) {
if (!barrels[i].flags.is_exist) {
barrels[i] = makeBarrel(1, 1, 0);
button_load = 0;
}
}
}
}
}
if (robot1_code.PC < 0) {
schedule_robot_1();
}
// пока без второго робота
// if (robot2_cmd.cmd == 0) {
// robot2_cmd.cmd = 2; // пиздуем в зону
// robot2_cmd.args[0] = rand() % 23;
// }
if (button_unload_end) {
button_unload_end = (char)(scheduler_remove_barrel_from_zone(0) != 0);
}
if (button_unload_remove) {
button_unload_remove = (char)(scheduler_remove_barrel_from_zone(22) != 0);
}
if (_scheduler_software_timer) {
_scheduler_software_timer = 0;
for (int i = 0; i < 10; i++) {
if (barrels[i].software_timer > -9999) {
barrels[i].software_timer--;
}
}
}
if (robot1_code.PC < 0) {
schedule_robot_1();
}
}
}

View File

@ -165,8 +165,8 @@ extern struct robot_code robot2_code;
#define barrels ((struct barrel*)&barrels_array)
#define robot1 (*((struct robot_regs*)&robot1_reg_mx))
#define robot2 (*((struct robot_regs*)&robot2_reg_mx))
#define robot1_code (*((struct robot_code*)&_robot1_code_struct))
#define robot2_code (*((struct robot_code*)&_robot2_code_struct))
#define robot1_code (*((struct robot_code*)_robot1_code_struct))
#define robot2_code (*((struct robot_code*)_robot2_code_struct))
#endif
// почему-то компилер говорит что размер структуру сраный