Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 20

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

  1. #1

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

    Здравствуйте.
    Пользователь я начинающий. Уже знаю что такое структура и массив)). А как написать код динамического массива со сдвигом...увы. Прошу о помощи.
    Задача поставлена следующая: по конвейеру перемещаются ложементы, в которых детали. В конце конвейера установлен датчик ложементов, срабатывает при прохождении мимо него ложемента (независимо от того, есть там деталь или нет).
    В начале конвейера установлена камера тех. зрения, которая выявляет бракованные детали, и выдает результат (брак / не брак). Между камерой тех. зрения и датчиком ложемента установлен экстрактор, который удаляет с конвейера бракованные детали, а годные детали собираются в конце конвейера.
    Так вот, после обнаружения бракованной детали-нужно запомнить этот ложемент, и "проехав" по конвейеру 15 ложементов (датчик ложементов отсчитает 15 раз), ложемент с бракованной деталью будет находиться напротив экстрактора (сдувается воздухом), где его нужно удалить. Требуется запоминать бракованные детали (они могут быть в перемешку с годными на участке конвейера в 15 ложементов) и при перемещении их на 15 ложементов, включать экстрактор. Поставлен датчик ложементов, так как скорость конвейера может быть разной (установка экспериментальная), и таймер использовать не рационально.
    Создал структуру и массив, в котором планирую записывать данные для дальнейшей обработки.
    Принимаю передний фронт датчика ложементов и бит(взвожу по переднему фронту) с камеры тех.зрения.
    А дальше "затык".. Пожалуйста, подскажите как правильно выполнить задачу.
    Изображения Изображения
    • Тип файла: png 1.PNG (6.2 Кб, Просмотров: 49)
    • Тип файла: png 2.PNG (10.7 Кб, Просмотров: 48)

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

    По умолчанию

    А нумбер зачем?

  3. #3

    По умолчанию

    На запас. Знал бы 100%, лишнее бы не создавал.

  4. #4

    По умолчанию

    Мне стало интересно. Подпишусь на тему.

    Мои тезисы:
    1. Написано что надо запоминать позицию брака для удаления его экстрактором.
    Что происходит после удаления брака с запомненной позицией?
    2. Вроде динамические массивы фиг создашь. Можно сделать статический на максимум элементов.
    Почему вообще придуман динамический массив со сдвигом?
    3. ИМХО (тут я могу тупить) тут же алгоритм простой: когда выявлен брак, то подождать 15 импульсов - и пнуть экстрактор.
    Раз расстояние от камеры до экстракторка - 15 импульсов - то получается что максимум что может быть - это 15 раз подряд брака. Значит максимальная длина массива - это 15 элементов.
    И получается, что нужен массив (очередь) FIFO. И работать должно так (ИМХО):
    * С каждым импульсом от датчика сдвигаем массив на один шаг влево (на место первого - второй, на место второго - третий и так далее). После сдвига последний элемент дожен оказаться пустым.
    * Если видим в массиве ссылку на брак - удаляем его экстрактором и обнуляем этот элемент массива
    * Если камера видит брак - то она выставляет флаг брака в последнем элементе массива.

    То есть, образно, насколько я придумал - то массив элементов должен двигаться вместе с конвеером по датчику импульсов.
    И если на массиве "приехал" брак - то его и скидываем экстрактором.

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

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

    По умолчанию

    )) Динамический массив сделать можно. Он тут не нужен.

  6. #6

    По умолчанию

    Попробуйте для начала изучить простой пример работы с двумерным массивом, пример в Codesys 2.3
    Потом замените массив на структуру.
    Вложения Вложения

  7. #7

    По умолчанию

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

  8. #8

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Мне стало интересно. Подпишусь на тему.

    Мои тезисы:
    1. Написано что надо запоминать позицию брака для удаления его экстрактором.
    Что происходит после удаления брака с запомненной позицией?
    2. Вроде динамические массивы фиг создашь. Можно сделать статический на максимум элементов.
    Почему вообще придуман динамический массив со сдвигом?
    3. ИМХО (тут я могу тупить) тут же алгоритм простой: когда выявлен брак, то подождать 15 импульсов - и пнуть экстрактор.
    Раз расстояние от камеры до экстракторка - 15 импульсов - то получается что максимум что может быть - это 15 раз подряд брака. Значит максимальная длина массива - это 15 элементов.
    И получается, что нужен массив (очередь) FIFO. И работать должно так (ИМХО):
    * С каждым импульсом от датчика сдвигаем массив на один шаг влево (на место первого - второй, на место второго - третий и так далее). После сдвига последний элемент дожен оказаться пустым.
    * Если видим в массиве ссылку на брак - удаляем его экстрактором и обнуляем этот элемент массива
    * Если камера видит брак - то она выставляет флаг брака в последнем элементе массива.

    То есть, образно, насколько я придумал - то массив элементов должен двигаться вместе с конвеером по датчику импульсов.
    И если на массиве "приехал" брак - то его и скидываем экстрактором.

    Ну и не забываем про все правила работы с массивами:
    * Границы минимума и максимума делаем через константы, чтобы избежать магических чисел
    * Проверяем границы и условия работы циклов, чтобы не выйти за границы массива
    //================================================== ==========
    1. Написано что надо запоминать позицию брака для удаления его экстрактором.
    Что происходит после удаления брака с запомненной позицией?

    Обнуление.

    2. Вроде динамические массивы фиг создашь. Можно сделать статический на максимум элементов.
    Почему вообще придуман динамический массив со сдвигом?

    Каша в голове от прочитанного в интернете.

    3. ИМХО (тут я могу тупить) тут же алгоритм простой: когда выявлен брак, то подождать 15 импульсов - и пнуть экстрактор.
    Раз расстояние от камеры до экстракторка - 15 импульсов - то получается что максимум что может быть - это 15 раз подряд брака. Значит максимальная длина массива - это 15 элементов.
    И получается, что нужен массив (очередь) FIFO. И работать должно так (ИМХО):

    По алгоритму логика мне понятна, с реализацией туго, особенно когда профильного образования нет).
    За подсказку про массив (очередь ) FIFO - БлагоДарю! Изучу.

  9. #9

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Попробуйте для начала изучить простой пример работы с двумерным массивом, пример в Codesys 2.3
    Потом замените массив на структуру.
    Благодарю за ответ. Изучу.

  10. #10

    По умолчанию

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

Страница 1 из 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

Ваши права

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