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

Тема: Сдвиг массива (не циклический)

  1. #1

    По умолчанию Сдвиг массива (не циклический)

    Есть массив на 224 бит (хотя не суть важно). Так вот, хотелось бы идейку по поводу изящного поразрядного сдвига влево данного массива. Судьба бита, выходящего за старший разряд, неинтересна. Конечно, можно в лоб for to выполнить и побитно перенести. Но это долго, хотелось бы выиграть время на исполнение. Кому не жалко, поделитесь идеей). Думаю, такой сдвиг будет интересен не только мне.

  2. #2
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,583

    По умолчанию

    Вопрос для чего сдвигать массив бит ? какая в этом сокральная идея ?

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

    делать сдвиг побайтно (по слову) с сохранением и переносом переходящего бита в следующий байт или слово. (ROR, ROL, можно SHR, SHL так как один бит все равно сохранять и переносить. Ну и все равно цикл, только уже для байт (слов)

  3. #3
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    мелкий как всегда чудит, не разобравшись, массив бит в КДС можно сразу представлять как массив байт, ни какие битовые сдвиги не помогут,тем более rol,ror.
    указатели или бибка syslibmem могут сделать задуманное одной строкой, либо отказаться от массива и "поколдовать" со смещениями
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  4. #4

    По умолчанию

    Идея такая. Есть машина, в которой очень навороченная (в плане обилия шестерёнок) трасмиссия. Эта вся груда металла приводит в движениие (синхронно) кучу барабанов. И на входе этой машины контролируется наличие некого продукта, который дальше порционно движется по барабанам. В нужный момент, если есть на входе машины исходный продукт и он подошёл барабанам в то место, где ожидается, включается подача всяких комплектующих, выключается продувка барабанов и т.п. Можно было обойтись счётчиками, но у меня идея такова, чтобы ловить эхосигнал (отклик от продукта на входе) по синхроимпульсу (от датчика на трасмиссии). Т.е. эхо либо есть, либо нет на каждый синхроимпульс. Далее весь массив сдвигается. И каждое последующее устройство, которое контролирует определённый бит в массиве, вкл/выкл.подачу ингридиента в момент обнаружения/отсутствия эхосигнала в контролируемом разряде. Сдвиг массива происходит по сигналу от датчика трагсмиссии, на один шаг при перемещении продукта по барабанам на один шаг.
    Такая вот ситуёвина. Изначально я представил массив как 7 регистров DWORD (т.е. массива как такового не было, была его замена на семь регистров) и их двигал, перенося биты старшего разряда предыдущих регистров в биты младших разрядов последующих регистров. А регистры сдвигал влево при этом. Далее был гемморой по выдёргиванию из этой семёрки регистров по номеру позиции нужного бита. Так-то получилось, но реализация громоздкая. Потому и обратился за помощью к знатокам. Рассмотрю все предложения). К сожалению, сам массив не двинуть. В инете смотрел, как народ на сях двигает массив. Многие тупо предлагают побитно переносить из предыдущего в последующий разряд. В общем тоже не быстрая реализация.
    Последний раз редактировалось Рашид; 27.07.2017 в 08:55.

  5. #5
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    Есть ещё стек fifo
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  6. #6

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Есть ещё стек fifo
    Со стеком разве получится? Там first in - first out говорит за себя. Честно говоря, пока не понял, как это применить можно было бы.

  7. #7
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,583

    По умолчанию

    capzap и? я так понял надо аналог SHL (раз старший разряд переносился в младший следующего а самый последний никому не нужен) но не для 32 бит (DWORD) а для всех 224 бит.

    Есть такая команда в CDS где нибудь ? И полагаю в sislibmem будет все то же самое, что написать самому, нет ?
    Как это сделать без sislibmem, да просто. в цикл загнать все dword а внутри делать SHL над каждым, запоминая старший разряд и в нужное время копировать его в следующий dword.

    Если есть для CDS готовое решение над массивом бит, неплохо было бы его увидеть. Цель топика то в этом как раз.

  8. #8

    По умолчанию

    Цитата Сообщение от Рашид Посмотреть сообщение
    Далее весь массив сдвигается.
    melky верно спрашивает:
    Цитата Сообщение от melky Посмотреть сообщение
    Вопрос для чего сдвигать массив бит ? какая в этом сокральная идея ?
    Сдвигать-то вообще нужно?
    Может оказаться, что достаточно изменить точку остчёта, а все биты путь остаются на своих местах

  9. #9

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    melky верно спрашивает:


    Сдвигать-то вообще нужно?
    Может оказаться, что достаточно изменить точку остчёта, а все биты путь остаются на своих местах
    Сдвиг удобен для меня. Можно было бы кругу писать в массив, а потом, используя счётчик, как указатель текущего шага, извлекать нужные биты. Такое я трже рассматривал, но что-то у меня вышло путного. Зацепился я за идею со сдвигом, вроде всё очевидно, двигай, да читай с одних и тех же позиций (позиции разных контролирующих устройств разные, естественно).

  10. #10
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,583

    По умолчанию

    ну так оно понятно. Есть dword1, dword2 и т.д.
    Есть устройства У1, У2 и т.д.

    dword1.4 - У1; dword2.3 - У2 , если 0 одни действия, если 1 другие действия и так со всеми устройствами.
    Тогда наверное удобно, что-то вроде конвейера для исполнительных механизмов.

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

Похожие темы

  1. СП310-сдвиг окна
    от Ruffian в разделе Панели оператора (HMI)
    Ответов: 4
    Последнее сообщение: 03.06.2016, 16:26
  2. Поразрядовый сдвиг влево
    от vadim_ в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 12.07.2015, 23:17
  3. Сдвиг вправо в ПР (SHR)
    от serg_g в разделе Программируемые реле
    Ответов: 6
    Последнее сообщение: 07.02.2011, 16:22
  4. помогите с определением массива
    от Boris3B в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 16.06.2010, 16:32

Ваши права

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