PUTBIT не совсем соответствует Вашему описанию задачи, либо её не правильно сформулировали, либо не заглядывали во внутрь DC32, потому что в лоджике есть PUTBIT
ЗЫ на катринке то, что я до этого написал в ST
PUTBIT не совсем соответствует Вашему описанию задачи, либо её не правильно сформулировали, либо не заглядывали во внутрь DC32, потому что в лоджике есть PUTBIT
ЗЫ на катринке то, что я до этого написал в ST
capzap возможно, но работает так же как и в Лоджике DC32.
Допустил ошибку при копировании функции, сейчас проверю ваш вариант на ST для сравнения.
Что-то ваш вариант при входном значении 31 выдает 0
15 на входе должно в dword на выходе дать 1 в 15-м бите. число 32768, не выходит каменный цветок у функции почему-то
ага, уже разобрался. Почитал справку по SHL и заменил все на DWORD
Вот сижу, соображаю, как заставить свигаться биты по кругу, но не среди 8-ми битов, а по выбору, например среди 5-ти младших, и чтобы 5-й бит шел на 1-й..... ?
Следующая проблема... Когда размер файла созданного и редактируемого посредством SysLibFile становится 1кб (1024байт), данные в него перестают добавляться. Как можно решить эту проблему?
capzap может у меня хромает логика, но если эту же функцию написать с параметрами BYTE то вроде как должны значения меняться согласно входным переменным.
0 = 1, 1 = 2, 2 = 4, 3 = 8, 4 = 16, 5 = 32, 6 = 64, 7 = 128, 8 = 1
однако 8 = 0 и так до 31, 32 = 1, то есть Codesys где-то кладет на BYTE и продолжает считать все через DWORD. Думаю с WORD будет та же петрушка. Или я где-то что-то не учитываю ?
capzap то, что 8 это 9-й разряд я понимаю, но это относится к word и dword. Суть то в другом, в работе функции битового сдвига SHL по отношению к BYTE а не по отношению к DWORD, что он делает постоянно, независимо от явного указания переменных. Вроде как 8 это уже разряд следующего байта и если параметр задан Byte то функция должна вернуться к началу. Ведь когда параметр DWORD и мы на вход подаем 32-й разряд функция возвращается в начало и на выходе ставит 1. И так по кругу. По отношению же к BYTE и WORD функция на это плюет. ИМХО - не логично.
capzap не путаю. Правильнее было бы в справочной информации по функции указать, что она работает только с DWORD. но это имхо.
Кстати ROL тоже с BYTE косячит, если не ошибаюсь... попробую проверить щас.
ROL так не косячит, 128 потом опять 1 и по кругу.