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

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

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();
}
}
}