Есть еще команда MOD она может помочь в таких делах
Вид для печати
Есть еще команда MOD она может помочь в таких делах
capzap не совсем понимаю, как он может помочь.
Использую маску по методу исключения, ну или можно инвертировать сигнал.
Например при штатном режиме 3+2 идут комбинации byte
3, 6, 12, 24 - потом должно идти 17 (первое и последнее устройство), потом опять 3 и так далее.
При переходе на режим 4+1 комбинация уже другая 1, 2, 4, 8, 16, 1.
А например вариант 3+3 (основной режим) уже вовсе
(3+3) 7, 14, 28, 56, 49, 35, 7
перешли на (4+2) 15, 30, 60, 57, 51, 39, 15
а на (5+1) 31, 62, 61, 59, 55, 47, 31
Я вот пока закономерности не особо вижу, как можно универсально написать, чтобы это все можно было менять на лету например через переменную ModBUS или еще как, не перепрошивая ПЛК.
Кое какая закономерность есть, только как ее применить, вопрос....когда 3 устр. в резерве, после двух старших битов (когда хвост ползет на начало) по MOD получается 7, 14, 28 (как инверсия 3 запущенных устройств)
когда 2 устр. в резерве то по MOD 3, 6, 12, 24
когда 1 устр. то по MOD 1, 2, 4, 8, 16
capzap спасибо, попробую разобраться в ST и как-то потом применить. Мне правда непонятно, почему MOD 31 ? в смысле непонятно, как расчитать это самое число для MOD
так, для данного примера с MOD 31 разобрался. но тут два устройства, не так сложно. а при 3-х два разных MOD надо будет как-то объединять...
Вот бы еще научиться ST примеры быстро переводить в CFС :), а то пока соображу как и чего ....
Из этого:
сделал вывод - melky не знает как работает SHL
Просто надо внимательно читать HELP (в данном случае :))
Ошибок нет. Все по чесному.Цитата:
Побитный сдвиг операнда in вправо на n бит с дополнением нулями слева...
А просто нужно имитировать работу проца. Например у вас регистр из 5 бит. Имитируем ROL на байте.Цитата:
как заставить биты крутиться не по 8-ми, а по 5-ти без расчета ручками.
b := ROL(b,1);
b.0 := b.5; он же - OF
b.5 := 0; и его нету как бы
Выбираем ПОУ. Правая кнопа. Конвертировать. FBD - кастрированный CFCЦитата:
ST примеры быстро переводить в CFС
Валенок я пытаюсь внимательно читать HELP и по моему мнению ОПЕРАНД это то, что на входе, для SHL в Codesys либо BYTE, либо WORD, либо DWORD.
И если при записи в DWORD значения 32 мы получаем на выходе 1 и идем по кругу
То логично предположить что и указав, что работаем с BYTE и записи на вход 8 тоже должны получить 1 на выходе
В обоих случаях происходит переполнение ОПЕРАНДА (нет такой "буквы" по счету в данном "слове").
Тут одно из двух, либо при работе с байтом и записи на входе 8 должна быть на выходе 1-ца, либо при работе с двойным словом и записи 32 на входе должен быть 0 на выходе.
Просто перевести не проблема, проблема адаптировать код ST к моим условиям, так как пример не имеет обвязки необходимой. В общем более менее разобрался с переводом в CFC
"Выбираем ПОУ. Правая кнопа. Конвертировать. FBD - карованный CFC"
Я бы не предложил фбд, там такой гемор начнется если джампов много
Я этой фразы вообще не понимаю. Изобразите вызов на чём-нибудь. С указанием типовЦитата:
И если при записи в DWORD значения 32 мы получаем на выходе 1 и идем по кругу
PS
Только щас заметил. SHL - нули справа. Но это мелочи