capzap читаем внимательно HELP
SHR
res:= SHR(in,n) Побитный сдвиг операнда in вправо на n бит с дополнением нулями слева.
Входные переменные и результат должны быть типа BYTE, WORD или DWORD.
Фактически SHL сдвигает не операнд, а регистр, который ессно 32-х разрядный. Маленькая, но ошибка в документации.
ROL и ROR соответственно честно работают с операндами.
Жаль что Вы не поняли о чем я намекал в предыдущем посте
capzap я понял на что вы намекали, что при 64-х разрядном ПЛК бит сдвигался бы от 0 до 63 позиций за счет разрядности регистра процессора. Ну так в HELP тогда так и надо указывать, что SHL и SHR сдвигают РЕГИСТР а не ОПЕРАНД. Нет ? я опять не прав и не умею читать по русски ?
Операнд in может иметь любой тип, вот он и сдвигается и если смещение вышло за разрядность то результат будет ноль, но так как больше 32 разрядов быть не может, то при смещении на 32 в байте снова появляется единица. Все правильно написано и работает так же
capzap только это не отражено в документации. я об этом. Намотаю на ус, больше все равно ничего не остается.
а при dword выход за разрядность почему не дает 0 ?
палка о двух концах, не находите ?
Дворд и так имеет по максимуму разрядность, вот и перескакивает на единицу. В лоджике как происходит этот процесс?
capzap в Лоджике нельзя жестко задать операндом BYTE, поэтому проверить реакцию не получится. Сами же об этом выше писали.
capzap Dword там ведет себя аналогично, при записи бита выше 31 не выдает 0, а идет по кругу.
Тут другая головная боль, как заставить биты крутиться не по 8-ми, а по 5-ти без расчета ручками. например мне надо сделать ротацию кондюков по времени из 5-ти устройств в режиме 3+2, при одном пороге температуры перейти на 4+1, при втором пороге запустить все 5. Так же при выводе одного опять же перейти на 4+1 с соблюдением порога температуры.
Когда BYTE весь полный (используем 8 устройств) проблем с ROL нет, а вот когда он неполный надо расчитывать на лету, и вот на лету у меня и не получается. Могу только жестко забить нужные значения например для 3+2. Более простого способа чем ROL как-то даже не придумаю... Разве что весь макрос от AI! перенести, но там тоже не все меня устраивает, хотя им проще управлять...
Еще один вопрос вспомнил, который хотел задать. Если я сделал библиотеку (функцию, блок) и всю ее переношу в Retain переменные, она полностью будет сохранять свои значения или надо заботиться именно о переменных, чтобы сохранить данные ?