Просмотр полной версии : Swap_data
Здравствуйте. Кто нибудь может подсказать как работает функция ocl.swap_data библиотеки модбас в кодесис3?
Я имею ввиду внутренюю логику работы. Как осуществляется внутри функции работа с указателями и перестановка байт..
kondor3000
31.08.2026, 20:16
Здравствуйте. Кто нибудь может подсказать как работает функция ocl.swap_data библиотеки модбас в кодесис3?
Я имею ввиду внутренюю логику работы. Как осуществляется внутри функции работа с указателями и перестановка байт..
Вам обязательно ocl.swap_data или просто как работает функция подобного типа с указателями?
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);
Вот и вся магия!
Магии нет. Но учитывая вопрос и его контекст (модбас)
1. Не переменной, а в любом месте памяти.
Нужно учесть возможности камня или учесть возможную некратность адреса в самой функции или предусмотреть борьбу с этим в рамках области применения функции.
2.Кусок этой памяти - произвольного размера. По контексту - кратен 2 (но я б и на это не закладывался)
Из исходноно вопроса следует что нужна общая универсальная функция и показать как она работает.
Собсно там дюжина-другая строк.
Как по мне, передавать 3 штуки буль-флажков (описание осл.сус_свап) для задачи - повод выкинуть ее в топку. 99% задач контекста можно решить 1 флажком (целое число). Из 1% оставшегося, 99% можно решить тем же флажком если подумать.
Вообщем написать самому с 0 такую функции быстрее чем написание этого ответа. А учитывая наличие всяких алис и тп - быстрее чем задавать сам вопрос
Вообщем написать самому с 0 такую функции быстрее чем написание этого ответа. А учитывая наличие всяких алис и тп - быстрее чем задавать сам вопрос
Именно! На что и намек. Парсим булевы флажки и выбираем ветки обработки. Далее некий цикл "берем из входного потока, обрабатываем, кладем в выходной поток".
Сама логика обработчика не сложная.
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot