Если Вы прочли пост #4666, то можно вместо двух Register input module сразу использовать
А)Либо 32bit input module
Вложение 20831
Однако есть один нюанс, в зависимости от параметра Byte Sequence в UMD мастер будет по разному сортировать младший и старший WORD.
Т.е. для веса 1 кг в Вашем случае полученные значения из весов могут выглядеть либо "803F 7D1D", либо "7D1D 803F".
По этому приведу два варианта кода для перестановки байт для Ваших весов
Код:
PROGRAM PLC_PRG
VAR
SWAP_BYTE_A: DWORD;
SWAP_BYTE_B: DWORD;
ptFl : POINTER TO REAL;
ves: REAL;
ves_2: REAL;
END_VAR
(*В зависимости от параметра Byte Sequence в UMD нужно использовать
или этот вариант*)
SWAP_BYTE_A:=(ROL(ves_tmp,8) AND 16#FF00FF00) OR (ROR(ves_tmp,8) AND 16#00FF00FF);
ptFl:=ADR(SWAP_BYTE_A);
ves:=ptFl^;
(*Или этот вариант*)
SWAP_BYTE_B := (ROR(ves_tmp,8) AND 16#FF00FF00) OR (ROL(ves_tmp,8) AND 16#00FF00FF);
ptFl:=ADR(SWAP_BYTE_B);
ves_2:=ptFl^;
Теперь даже в эмуляции можно поиграться с ранее приведенными цифрами
Вложение 20832 Вложение 20833 Вложение 20834
Б) А можно использовать Real input module
Вложение 20835
Только здесь в конфигураторе не ждите увидеть в Real input module значения 16#
Замечание о параметре Byte Sequence в UMD здесь тоже справедливы, по этому два варианта кода
Код:
PROGRAM PLC_PRG
VAR
ptFl : POINTER TO REAL;
ptDw: POINTER TO DWORD;
ves: REAL;
ves_2: REAL;
SWAP_BYTE_C: DWORD;
END_VAR
ptDw:=ADR(ves_tmp);
(*В зависимости от параметра Byte Sequence в UMD нужно использовать
или этот вариант*)
SWAP_BYTE_C:=(ROL(ptDw^,8) AND 16#FF00FF00) OR (ROR(ptDw^,8) AND 16#00FF00FF);
ptFl:=ADR(SWAP_BYTE_C);
ves:=ptFl^;
(*Или этот вариант*)
SWAP_BYTE_C:=(ROR(ptDw^,8) AND 16#FF00FF00) OR (ROL(ptDw^,8) AND 16#00FF00FF);
ptFl:=ADR(SWAP_BYTE_C);
ves_2:=ptFl^;