Здравствуйте. Кто нибудь может подсказать как работает функция ocl.swap_data библиотеки модбас в кодесис3?
Я имею ввиду внутренюю логику работы. Как осуществляется внутри функции работа с указателями и перестановка байт..
Здравствуйте. Кто нибудь может подсказать как работает функция ocl.swap_data библиотеки модбас в кодесис3?
Я имею ввиду внутренюю логику работы. Как осуществляется внутри функции работа с указателями и перестановка байт..
Код:FUNCTION SWAP_BYTE : WORD (* Функция SWAP_BYTE меняет порядок байт переменной IN. *) VAR_INPUT IN : WORD; END_VAR SWAP_BYTE := ROL(in,8);Вот и вся магия!Код:FUNCTION SWAP_BYTE2 : DWORD (* Функция SWAP_BYTE2 меняет порядок байт переменной IN на обратный. *) VAR_INPUT IN : DWORD; END_VAR Swap_Byte2 := (ROR(in,8) AND 16#FF00FF00) OR (ROL(in,8) AND 16#00FF00FF);
Последний раз редактировалось SlavikP; 02.09.2026 в 05:55.
Работа не волк, а work.
Магии нет. Но учитывая вопрос и его контекст (модбас)
1. Не переменной, а в любом месте памяти.
Нужно учесть возможности камня или учесть возможную некратность адреса в самой функции или предусмотреть борьбу с этим в рамках области применения функции.
2.Кусок этой памяти - произвольного размера. По контексту - кратен 2 (но я б и на это не закладывался)
Из исходноно вопроса следует что нужна общая универсальная функция и показать как она работает.
Собсно там дюжина-другая строк.
Как по мне, передавать 3 штуки буль-флажков (описание осл.сус_свап) для задачи - повод выкинуть ее в топку. 99% задач контекста можно решить 1 флажком (целое число). Из 1% оставшегося, 99% можно решить тем же флажком если подумать.
Вообщем написать самому с 0 такую функции быстрее чем написание этого ответа. А учитывая наличие всяких алис и тп - быстрее чем задавать сам вопрос