Страница 166 из 1044 ПерваяПервая ... 66116156164165166167168176216266666 ... ПоследняяПоследняя
Показано с 1,651 по 1,660 из 10436

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

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

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    capzap не путаю. Правильнее было бы в справочной информации по функции указать, что она работает только с DWORD. но это имхо.
    Кстати ROL тоже с BYTE косячит, если не ошибаюсь... попробую проверить щас.
    Если бы плк был 64-разрядным, Вы бы и при dword сместив на 32 увидели бы ноль а не единицу

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

    По умолчанию

    capzap читаем внимательно HELP
    SHR
    res:= SHR(in,n) Побитный сдвиг операнда in вправо на n бит с дополнением нулями слева.

    Входные переменные и результат должны быть типа BYTE, WORD или DWORD.

    Фактически SHL сдвигает не операнд, а регистр, который ессно 32-х разрядный. Маленькая, но ошибка в документации.
    ROL и ROR соответственно честно работают с операндами.

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

    По умолчанию

    Жаль что Вы не поняли о чем я намекал в предыдущем посте

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

    По умолчанию

    capzap я понял на что вы намекали, что при 64-х разрядном ПЛК бит сдвигался бы от 0 до 63 позиций за счет разрядности регистра процессора. Ну так в HELP тогда так и надо указывать, что SHL и SHR сдвигают РЕГИСТР а не ОПЕРАНД. Нет ? я опять не прав и не умею читать по русски ?

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

    По умолчанию

    Операнд in может иметь любой тип, вот он и сдвигается и если смещение вышло за разрядность то результат будет ноль, но так как больше 32 разрядов быть не может, то при смещении на 32 в байте снова появляется единица. Все правильно написано и работает так же

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

    По умолчанию

    capzap только это не отражено в документации. я об этом. Намотаю на ус, больше все равно ничего не остается.

    а при dword выход за разрядность почему не дает 0 ?
    палка о двух концах, не находите ?

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

    По умолчанию

    Дворд и так имеет по максимуму разрядность, вот и перескакивает на единицу. В лоджике как происходит этот процесс?

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

    По умолчанию

    capzap в Лоджике нельзя жестко задать операндом BYTE, поэтому проверить реакцию не получится. Сами же об этом выше писали.

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

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    capzap в Лоджике нельзя жестко задать операндом BYTE, поэтому проверить реакцию не получится. Сами же об этом выше писали.
    Я про Дворд

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

    По умолчанию

    capzap Dword там ведет себя аналогично, при записи бита выше 31 не выдает 0, а идет по кругу.

    Тут другая головная боль, как заставить биты крутиться не по 8-ми, а по 5-ти без расчета ручками. например мне надо сделать ротацию кондюков по времени из 5-ти устройств в режиме 3+2, при одном пороге температуры перейти на 4+1, при втором пороге запустить все 5. Так же при выводе одного опять же перейти на 4+1 с соблюдением порога температуры.

    Когда BYTE весь полный (используем 8 устройств) проблем с ROL нет, а вот когда он неполный надо расчитывать на лету, и вот на лету у меня и не получается. Могу только жестко забить нужные значения например для 3+2. Более простого способа чем ROL как-то даже не придумаю... Разве что весь макрос от AI! перенести, но там тоже не все меня устраивает, хотя им проще управлять...

    Еще один вопрос вспомнил, который хотел задать. Если я сделал библиотеку (функцию, блок) и всю ее переношу в Retain переменные, она полностью будет сохранять свои значения или надо заботиться именно о переменных, чтобы сохранить данные ?

Страница 166 из 1044 ПерваяПервая ... 66116156164165166167168176216266666 ... ПоследняяПоследняя

Метки этой темы

Ваши права

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