1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Алгоритм отслеживания коробок

Обсуждение вопросов, не относящихся ни к одному из других подразделов

Модератор: kirillio

Ответить

Автор темы
BPM_404
здесь недавно
здесь недавно
Сообщения: 16
Зарегистрирован: 19 мар 2021, 15:05
Имя: Дмитрий
Страна: Россия
город/регион: moskow
Благодарил (а): 3 раза

Алгоритм отслеживания коробок

Сообщение BPM_404 »

Добрый день
Человек я здесь новый, как и в написании сложных алгоритмов
Задача следующая:
Есть конвейер, по которому движутся коробки, так же имеется 5 толкателей, которые перенаправляют коробки на 5 направлений, исходя из полученных данных машины, которая эти коробки обрабатывает. Как можно организовать отслеживание коробок с помощью датчиков, что бы не произошло путаницы и каждая коробка ушла в правильном направлении (заданное машиной).

Sergy6661
read only
read only
Сообщения: 577
Зарегистрирован: 19 фев 2019, 22:38
Имя: Сергей
Страна: Россия
город/регион: Краснодар
Благодарил (а): 17 раз
Поблагодарили: 73 раза

Алгоритм отслеживания коробок

Сообщение Sergy6661 »

Очень просто:
Вариант 1: машина с помощью какого-то умного датчика распознает тип коробки и формирует "путь следования", отслеживает его с помощью других датчиков и дает команду соответствующему исполнительному механизму.
Вариант 2: датчики "определения типа коробки" стоят перед каждым исполнительным механизмом и увидев коробку определяет моя-не моя и дает команду на исп. механизм.

Автор темы
BPM_404
здесь недавно
здесь недавно
Сообщения: 16
Зарегистрирован: 19 мар 2021, 15:05
Имя: Дмитрий
Страна: Россия
город/регион: moskow
Благодарил (а): 3 раза

Алгоритм отслеживания коробок

Сообщение BPM_404 »

Машина, которая определяет тип коробки передает данные на opc сервер, мы эти данные считываем и задаем направление, на которое нужно направить коробку (например 1.2.3.4 или 5).
Я придерживаюсь 1 варианта, но вопрос в том как будет выглядеть алгоритм? если 3 коробки едут рядом и первую нужно направить например на 4 окно, вторую на 2, а третью на 5 например.

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3559
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 253 раза

Алгоритм отслеживания коробок

Сообщение Михайло »

Надо научиться работать с массивами. Если в ПЛК с этим туго, то придется что-то придумывать.
А так создать массив размером, соответствующим количеству коробок. Каждый элемент - это текущее положение коробки (0 - на входе, 1 - у первого толкателя, 2 - у второго толкателя и т.д.).
Тут еще один подводный камень: количество коробок в каждый момент времени разное. Новая коробка добавляет элемент снизу массива, ушедшая коробка - убирает элемент в начале массива. То есть массив переменного размера (=динамический массив). Массив стандартной структуры - очередь.
Многие ПЛК динамические массивы не поддерживают. Поэтому придется делать обычный массив из фиксированного числа коробок, в котором будут храниться id коробок, и сдвигать все элементы на один шаг к началу массива.

Какой хоть контроллер или вообще, что за система?

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 320
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 6 раз
Поблагодарили: 113 раз

Алгоритм отслеживания коробок

Сообщение SMax »

BPM_404 писал(а): 19 мар 2021, 15:19 Как можно организовать отслеживание коробок с помощью датчиков
Датчики, я так понимаю, простые: есть коробка, неважно какая, на толкателе или нет, а толкатели расположены на конвейере в ряд, в последовательности 1, 2, 3, 4 и 5.
BPM_404 писал(а): 19 мар 2021, 16:13 если 3 коробки едут рядом и первую нужно направить например на 4 окно, вторую на 2, а третью на 5
Т.е. датчики 1, 2 и 3 толкателей должны проигнорировать по одному импульсу, а по импульсу на датчике 4, толкатель 4 должен сработать, затем датчик 1 игнорирует второй импульс, а по импульсу на датчике 2, толкатель 2 срабатывает и т.д., если так, то вот:
[+] Пример кода на SCL (Simatic STEP 7)

Код: Выделить всё

FUNCTION_BLOCK FB1

VAR_INPUT
  BoxNo : INT;	// Тип коробки от 1 до 5 (сигнал от считывателя)
  BoxInit : BOOL // Коробка определена (сигнал от считывателя для записи в массив)
  Ain : BOOL;	// Датчик 1 (коробка на толкателе 1)
  Bin : BOOL;	// Датчик 2 (коробка на толкателе 2)
  Cin : BOOL;	// Датчик 3 (коробка на толкателе 3)
  Din : BOOL;	// Датчик 4 (коробка на толкателе 4)
  Ein : BOOL;	// Датчик 5 (коробка на толкателе 5)
END_VAR

VAR_OUTPUT
  Aout : BOOL;	// Выход на толкатель 1
  Bout : BOOL;	// Выход на толкатель 2
  Cout : BOOL;	// Выход на толкатель 3
  Dout : BOOL;	// Выход на толкатель 4
  Eout : BOOL;	// Выход на толкатель 5
END_VAR

VAR
  A : ARRAY[0..255] OF BOOL;
  B : ARRAY[0..255] OF BOOL;
  C : ARRAY[0..255] OF BOOL;
  D : ARRAY[0..255] OF BOOL;
  E : ARRAY[0..255] OF BOOL;
  TPA : "TP";
  TPB : "TP";  
  TPC : "TP";  
  TPD : "TP";  
  TPE : "TP";  
  ia, ib, ic, id, ie : INT;
  ka, kb, kc, kd, ke : INT;
  ta, tb, tc, td, te : BOOL;
  BIMem, AMem, BMem, CMem, DMem, EMem : BOOL;
END_VAR


IF BoxInit AND NOT BIMem THEN
    IF BoxNo = 1 THEN
        A[ia] := TRUE;
        ia := ia + 1;
    ELSIF BoxNo = 2 THEN
        B[ib] := TRUE;
        A[ia] := FALSE;
        ia := ia + 1; ib := ib + 1;
    ELSIF BoxNo = 3 THEN
        C[ic] := TRUE;
        A[ia] := FALSE; B[ib] := FALSE;
        ia := ia + 1; ib := ib + 1; ic := ic + 1;
    ELSIF BoxNo = 4 THEN
        D[id] := TRUE;
        A[ia] := FALSE; B[ib] := FALSE; C[ic] := FALSE;
        ia := ia + 1; ib := ib + 1; ic := ic + 1; id := id + 1;
    ELSIF BoxNo = 5 THEN
        E[ie] := TRUE;
        A[ia] := FALSE; B[ib] := FALSE; C[ic] := FALSE; D[id] := FALSE;
        ia := ia + 1; ib := ib + 1; ic := ic + 1; id := id + 1; ie := ie + 1;
    END_IF;
END_IF;
BIMem := BoxInit;


IF Ain AND NOT AMem THEN
    ta := A[0];
    FOR ka := 0 TO ia DO
        A[ka] := A[ka + 1];
    END_FOR;
    ia := ia - 1;
END_IF;
AMem := Ain;
TPA(IN := ta, PT := T#3S);
Aout := TPA.Q;

IF Bin AND NOT BMem THEN
    tb := B[0];
    FOR kb := 0 TO ib DO
        B[kb] := B[kb + 1];
    END_FOR;
    ib := ib - 1;
END_IF;
BMem := Bin;
TPB(IN := tb, PT := T#3S);
Bout := TPB.Q;

IF Cin AND NOT CMem THEN
    tc := C[0];
    FOR kc := 0 TO ic DO
        C[kc] := C[kc + 1];
    END_FOR;
    ic := ic - 1;
END_IF;
CMem := Cin;
TPC(IN := tc, PT := T#3S);
Cout := TPC.Q;

IF Din AND NOT DMem THEN
    td := D[0];
    FOR kd := 0 TO id DO
        D[kd] := D[kd + 1];
    END_FOR;
    id := id - 1;
END_IF;
DMem := Din;
TPD(IN := td, PT := T#3S);
Dout := TPD.Q;

IF Ein AND NOT EMem THEN
    te := E[0];
    FOR ke := 0 TO ie DO
        E[ke] := E[ke + 1];
    END_FOR;
    ie := ie - 1;
END_IF;
EMem := Ein;
TPE(IN := te, PT := T#3S);
Eout := TPE.Q;

END_FUNCTION_BLOCK
В этом алгоритме нет сброса (инициализации начального состояния)
Михайло писал(а): 20 мар 2021, 09:46 Тут еще один подводный камень:
Там еще много камней: при ложном срабатывании датчика, значения в массивах сдвинутся и все последующие коробки относительно своих направлений тоже. Т.е. не 1 ложное срабатывание = 1 ложная коробка, а 1 ложное срабатывание = почти все ложные коробки, "почти" - потому что а вдруг какие-то совпадут.

Разделение по направлениям все-же лучше делать непосредственно после считывателя, считал 1 - направил в 1, считал 3 - направил в 3, без промежуточных конвейеров и необходимости запоминания последовательности коробок, распознавание которой может легко нарушиться из-за пропусков или ложных срабатываний датчиков.

Автор темы
BPM_404
здесь недавно
здесь недавно
Сообщения: 16
Зарегистрирован: 19 мар 2021, 15:05
Имя: Дмитрий
Страна: Россия
город/регион: moskow
Благодарил (а): 3 раза

Алгоритм отслеживания коробок

Сообщение BPM_404 »

Михайло писал(а): 20 мар 2021, 09:46
Какой хоть контроллер или вообще, что за система?
s7-1200

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3559
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 253 раза

Алгоритм отслеживания коробок

Сообщение Михайло »

BPM_404 писал(а): 21 мар 2021, 17:25 s7-1200
Используйте язык SCL, он отлично подходит для данной задачи.

Andreywys
освоился
освоился
Сообщения: 286
Зарегистрирован: 15 сен 2016, 18:47
Имя: Андрей
Страна: Россия
город/регион: Вологда
Благодарил (а): 18 раз
Поблагодарили: 73 раза

Алгоритм отслеживания коробок

Сообщение Andreywys »

Тут, наверное, не так важен язык, как алгоритм. Почитайте что такое FIFO и FILO.
Ответить

Вернуться в «Общие вопросы»