Если я правильно понял это адрес модуля, допустим %QD6.4.3.0.0 , а где мне взять адреса для WORDов, или я не правильно понимаю работу функции?
Если я правильно понял это адрес модуля, допустим %QD6.4.3.0.0 , а где мне взять адреса для WORDов, или я не правильно понимаю работу функции?
Вот вариант прощеКод:FUNCTION_BLOCK Swap_BYTE VAR_INPUT rIn:REAL; (*входная переменная типа REAL*) END_VAR VAR_OUTPUT rOut:REAL; (*переменная rOut с переставленными местами БАЙТами*) END_VAR VAR pInput : POINTER TO ARRAY[0..3] OF BYTE; (* указатели на массивы *) pOutput : POINTER TO ARRAY[0..3] OF BYTE; END_VAR ___________________________________________ pInput :=ADR(rIn); pOutput := ADR(rOut); (* Обязательно объявить блок в разделе переменных и в теле программы PLC_PRG *) pOutput^[ 0 ] := pInput^[ 3 ]; (* Перестановка байт *) pOutput^[ 1 ] := pInput^[ 2 ]; pOutput^[ 2 ] := pInput^[ 1 ]; (* Перестановка байт *) pOutput^[ 3 ] := pInput^[ 0 ];
А чем проще? Что только 1 вариант перестановки?
Тогда вот 4321
Код:var читаемого значения %MW0 : real; d at %MW0 : dword; w0 at %MW0 : word; w1 at %MW1 : word; end_var ----- читаемого значения := данные с плотномера модулем REAL; d := rol(d, 16); w0 := rol(w0, 8); w1 := rol(w1, 8);
%M* не надо брать. Они просто есть
Последний раз редактировалось Валенок; 12.03.2025 в 12:58.
Все работает, спасибо!