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

Тема: Сдвиг переменной влево и чтение ее 7-го разряда

  1. #1

    По умолчанию Сдвиг переменной влево и чтение ее 7-го разряда

    Вопрос.jpg
    Добрый день,
    подскажите, как написать программу, аналогичной на картинке.
    Суть программы сдвиг влево переменной по фронту 1-го входа и запись в младший разряд значения со 2-го входа.
    Результат значения с 7-го разряда передается на выход.

  2. #2

    По умолчанию

    Вариант:
    Owen.jpg

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

    По умолчанию

    M: udint;
    --
    rtrig(CLK := 1-го входа);
    if rtrig.Q then
    M := shl(M,1);
    M.0 := 2-го входа;
    end_if
    выход := M.7;


    или


    rtrig(CLK := 1-го входа);
    M := sel(rtrig.Q, M, M + M + bool_to_udint(2-го входа));
    выход := M.7;

  4. #4
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    9,084

    По умолчанию

    А если в первый бит писать(по фронту импульса на 1-ом входе), а с 8-ого читать, так не потянет, мой вариант:

    Сдвиговый регистр_8.png

    Короче, сто раз сдвиговые регистры обсуждали, эта песня хороша, начинай сначала!

    Сдвиговый регистр_8.owle

    Могу добавить сдвиговый регистр с предустановкой, в одной из тем обсуждали:

    Сдвиговый регистр_7.owle

    Сдвиговый регистр_7.png

    Подойдёт для бегущих огней и т. п., в смысле, набираете комбинацию огней и нажимаете на включение сдвига, она сдвигается!
    Комбинация набирается нажатием по одной кнопке.
    Последний раз редактировалось Сергей0308; 26.04.2025 в 20:13.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  5. #5

    По умолчанию

    Вопрос1.jpg
    Спасибо, большое,
    только мне так не пойдет. Здесь алгоритм записи в младший разряд привязан к фронту входа I1.
    А мне нужно как в той программе как я показал, чтобы после фронта входа I1 и сдвига,
    пока I1 положителен, можно было бы записать в младший разряд значение по фронту от входа I2.

  6. #6
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    9,084

    По умолчанию

    Цитата Сообщение от Юрий_М Посмотреть сообщение
    Вопрос1.jpg
    Спасибо, большое,
    только мне так не пойдет. Здесь алгоритм записи в младший разряд привязан к фронту входа I1.
    А мне нужно как в той программе как я показал, чтобы после фронта входа I1 и сдвига,
    пока I1 положителен, можно было бы записать в младший разряд значение по фронту от входа I2.
    Надо так надо, я Вам Т.З. не писал, не знаю как Вам надо, я к тому, что если результатом является значение на выходе, то разницы в работе не будет!
    Может у вас переменная ещё где(как) используется, Вы об этом не написали, поэтому я догадками стараюсь не руководствоваться, а что написано в моём варианте разницы работы(значения на выходе) не будет!

    Короче, если важен не результат, а сам процесс, вот мой вариант:

    Сдвиговый регистр_9.png

    Сдвиговый регистр_9.owle

    Много лет назад в одной из тем делали задержку на 2048 тактов, от туда взял, у вас гораздо проще, задержка всего на 7 тактов, в смысле, состояние на втором входе будет появляться на выходе спустя 7 тактов(импульсов) на первом входе по фронту импульса!

    Хотелось бы добавить, посмотрел вашу картинку, в смысле, диаграмму состояний, тоже считаю что это наиболее удобный и понятный способ описания работы алгоритма, проблема в том, что она не соответствует вашему первоначальному описанию, я понимаю, что всё в мире меняется ничего нет постоянного, наверно я тоже в чём то виноват, в смысле не поспеваю за вашей динамикой, короче, определяйтесь с алгоритмом, как должно работать как изначально Вы описали или как на диаграммах!

    Вот соответствующий диаграммам мой вариант:

    Сдвиговый регистр_10.owle

    Сдвиговый регистр_10.png

    Разумеется, бывает куча всяких тонкостей(нюансов) работы алгоритма, но пока Вы их не сообщили, в смысле, пока остановимся на этом!
    Последний раз редактировалось Сергей0308; 27.04.2025 в 00:51.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  7. #7
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    1,703

    По умолчанию

    Ну, если по картинке, то, вроде, так

    Безымянный.png

    А можно не морщить лоб и просто перевести код на картинке из LD в ST

    Код:
    function_block Shift_L //имя функционального блока.
    
        var_input //объявление входных переменных
           In1, In2 : bool; //входная переменная с типом данных bool
        end_var
    
        var_output //объявление выходных переменных
           Q : bool;
        end_var
    
        var //объявление локальных переменных
           RTrig : SYS.RTRIG; 
           Val: udint;
        end_var
    
        RTrig(I:= In1);
        if RTrig.Q then val := shl(Val,1); end_if
        if In1 and In2 then Val.0 := true; end_if
        Q := Val.7;
        
    end_function_block
    Последний раз редактировалось Dimensy; 26.04.2025 в 23:52.

  8. #8

    По умолчанию

    [
    Вот соответствующий диаграммам мой вариант:

    Сдвиговый регистр_10.owle

    Сдвиговый регистр_10.png

    Спасибо большое!
    это то, что мне нужно!

  9. #9

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение

    А можно не морщить лоб и просто перевести код на картинке из LD в ST

    Код:
    function_block Shift_L //имя функционального блока.
    
        var_input //объявление входных переменных
           In1, In2 : bool; //входная переменная с типом данных bool
        end_var
    
        var_output //объявление выходных переменных
           Q : bool;
        end_var
    
        var //объявление локальных переменных
           RTrig : SYS.RTRIG; 
           Val: udint;
        end_var
    
        RTrig(I:= In1);
        if RTrig.Q then val := shl(Val,1); end_if
        if In1 and In2 then Val.0 := true; end_if
        Q := Val.7;
        
    end_function_block
    И это то что мне надо!
    Спасибо всем большое!
    Удачи Вам и хороших предстоящих майских праздников!

  10. #10
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    1,703

    По умолчанию

    Цитата Сообщение от Юрий_М Посмотреть сообщение
    [
    Вот соответствующий диаграммам мой вариант:

    Сдвиговый регистр_10.owle

    Сдвиговый регистр_10.png

    Спасибо большое!
    это то, что мне нужно!
    А я не уверен. Здесь порядок исполнения не соответствует приведенной программе на LD. Попробуйте активировать сначала второй вход, а потом первый.
    Хотя, если линию задержки в другом месте поставить, то получится

    Безымянный.png

    Да и диаграмме не соответствует, там вы указали, что запись происходит по фронту второго входа. Т.е., так
    Безымянный.png
    Последний раз редактировалось Dimensy; 27.04.2025 в 10:20.

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

Похожие темы

  1. Чтение/запись переменной по таймеру
    от Lenin в разделе Помощь Разработчикам
    Ответов: 3
    Последнее сообщение: 18.09.2020, 15:57
  2. Чтение переменной var_out даёт всегда 0!
    от Daedal в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 05.03.2018, 14:45
  3. Запись и чтение значения переменной
    от kastor163 в разделе СПК2xx (архив)
    Ответов: 5
    Последнее сообщение: 15.06.2017, 12:20
  4. Поразрядовый сдвиг влево
    от vadim_ в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 12.07.2015, 23:17
  5. Чтение переменной с ТРМ101 по Modbus...
    от servo в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 22.08.2011, 09:10

Ваши права

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