Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 20 из 20

Тема: Codesys 3.5, язык ST, динамический массив со сдвигом

  1. #11
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,269

    По умолчанию

    Двигать массив здесь, это как подвесить кисть на верёвочке, и двигать стол с полотном под ней. Рисунок то выйдет))

  2. #12

    По умолчанию

    Цитата Сообщение от Student2023 Посмотреть сообщение
    Здравствуйте.
    Пользователь я начинающий. Уже знаю что такое структура и массив)). А как написать код динамического массива со сдвигом...увы. Прошу о помощи.
    Задача поставлена следующая: по конвейеру перемещаются ложементы, в которых детали. В конце конвейера установлен датчик ложементов, срабатывает при прохождении мимо него ложемента (независимо от того, есть там деталь или нет).
    В начале конвейера установлена камера тех. зрения, которая выявляет бракованные детали, и выдает результат (брак / не брак). Между камерой тех. зрения и датчиком ложемента установлен экстрактор, который удаляет с конвейера бракованные детали, а годные детали собираются в конце конвейера.
    Так вот, после обнаружения бракованной детали-нужно запомнить этот ложемент, и "проехав" по конвейеру 15 ложементов (датчик ложементов отсчитает 15 раз), ложемент с бракованной деталью будет находиться напротив экстрактора (сдувается воздухом), где его нужно удалить. Требуется запоминать бракованные детали (они могут быть в перемешку с годными на участке конвейера в 15 ложементов) и при перемещении их на 15 ложементов, включать экстрактор. Поставлен датчик ложементов, так как скорость конвейера может быть разной (установка экспериментальная), и таймер использовать не рационально.
    Создал структуру и массив, в котором планирую записывать данные для дальнейшей обработки.
    Принимаю передний фронт датчика ложементов и бит(взвожу по переднему фронту) с камеры тех.зрения.
    А дальше "затык".. Пожалуйста, подскажите как правильно выполнить задачу.
    Нафиг массив: ложементы конвейера - биты в ворде, включайте 1 бит по браку, делайте SHL по датчику движения, в конце конвейера (бит 15) смотрите его состояние и управляйте удалятором
    Последний раз редактировалось 1exan; 27.07.2023 в 04:57.

  3. #13
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,269

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    .. ложементы конвейера - биты в ворде...
    Дык автору ещё и iNumber'ы нужны. И их двигать. Зачем-то.

  4. #14

    По умолчанию

    Ну, я бы тоже запилил бы структуру по изделию - ID, серийник и так далее.
    Какая разница, что двигать? Массив или биты? Имхо массив удобнее, так как можно сделать универсальный код, определив границы массива через константы (чтобы без магических чисел).
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  5. #15

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Дык автору ещё и iNumber'ы нужны. И их двигать. Зачем-то.
    Непонятно откуда значение этого номера должно появиться. Ну, допустим, на деталях наклейки с индивидуальными номерами и сканер - тогда массив структур, всё то-же - только сдвигать их руками в цикле. Или вместо сдвига завести в структуре поле "позиция детали на конвейере" и менять её при движении.

  6. #16
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,269

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Непонятно откуда значение этого номера должно появиться..
    Так автор и сам не знает (может и внукам завещать ?):
    Цитата Сообщение от Student2023 Посмотреть сообщение
    На запас. Знал бы 100%, лишнее бы не создавал.
    Цитата Сообщение от 1exan Посмотреть сообщение
    ...массив структур, всё то-же - только сдвигать их руками в цикле...
    Двигаем стол с бумажкой вдоль карандаша

    Цитата Сообщение от 1exan Посмотреть сообщение
    ...Или вместо сдвига завести в структуре поле "позиция детали на конвейере" и менять её при движении.
    зачем !? индекс массива это оно же есть

    Может карандаш двигать ?
    Код:
    var
      стол : array[0..14] of какой-то тип с полями; //15 штук же заявлено
      карандаш : INT;
    ----------
    
    if Принимаю передний фронт датчика ложементов then
      стол[карандаш].брак := с камеры тех.зрения;
      карандаш := (карандаш + 1) mod 15; //и думаем кто же теперь в [карандаш]-то?  ..
      if стол[карандаш].брак then //.. а вот кто
        экстрактор.дунь_воздухом();
      end_if
    end_if
    экстактор(); //отрабатывает свою внутрянку которая дует и все такое

  7. #17

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Может карандаш двигать ?
    ...[/CODE]
    Что-то не доходит. Ладно карандаш двигается, а как происходит обновление элементов в массиве (на конвейере) ?

  8. #18
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,269

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    .. как происходит обновление элементов в массиве (на конвейере) ?
    Ну здрастьте.
    ...Задача поставлена следующая: по конвейеру перемещаются ложементы, в которых детали. В конце конвейера установлен датчик ложементов, срабатывает при прохождении мимо него ложемента (независимо от того, есть там деталь или нет).
    В начале конвейера установлена камера тех. зрения, которая выявляет бракованные детали, и выдает результат (брак / не брак)....
    label:
    В 0-ой из 0...14 пустых коробок упала деталька
    Пометилась (ок/ёк)
    перед собой вы всегда видите хвост..
    Вложение 69243
    и до ..14] там не ок и не ёк а тупо пусто.
    ....карандаш := (карандаш + 1) mod 15;
    А если до этого было 14 то сейчас видите/не видите репейник в [0] который был/небыл 15 раз назад
    Есть репейник => сдуваем
    goto label

  9. #19

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Ну здрастьте.


    label:
    В 0-ой из 0...14 пустых коробок упала деталька
    Пометилась (ок/ёк)
    перед собой вы всегда видите хвост..
    Вложение 69243
    и до ..14] там не ок и не ёк а тупо пусто.
    ....карандаш := (карандаш + 1) mod 15;
    А если до этого было 14 то сейчас видите/не видите репейник в [0] который был/небыл 15 раз назад
    Есть репейник => сдуваем
    goto label
    Попробовал - что-то получилось, но удаление почему-то запаздывает на такт.
    Напомнило историю про велосипед

    На массиве 0...13 (MOD 14) работает нормально.
    Последний раз редактировалось 1exan; 27.07.2023 в 12:43.

  10. #20

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Какое удаление 8( ?
    Ну сдуватель включается на такт позже, как-будто конвейер не 15 мест, а 16

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. Ответов: 2
    Последнее сообщение: 20.04.2023, 08:21
  2. Таймер ТON codesys V3 язык CFC
    от DDF в разделе СПК2хх
    Ответов: 2
    Последнее сообщение: 01.04.2018, 12:19
  3. Ответов: 35
    Последнее сообщение: 09.12.2017, 15:26
  4. Язык LD в CoDeSys и Modbus
    от Roke_Alva в разделе Помощь Разработчикам
    Ответов: 9
    Последнее сообщение: 11.02.2015, 08:31
  5. Динамический массив
    от alek.yum в разделе ПЛК3хх
    Ответов: 12
    Последнее сообщение: 13.08.2014, 20:03

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •