Просмотр полной версии : Опрос РАСХОДОМЕРА - СЧЁТЧИКА ХОЛОДНОЙ И ГОРЯЧЕЙ ВОДЫ ВСЭ М по RS-485
ВикторВиктор
07.09.2026, 13:11
Добрый день ,прошу помочь разобраться с опросом (перестановкой байт ).
Опрашиваю данный счетчик ПЛК 110 , не получается на выходе получить необходимое значение .
Читаю к примеру регистр 8 типа REAL обьем м3 , как по инструкции выполнена перестановка байт .
Я уже и читал как два значения типа WORD и пытался как то перевернуть байты. Подключил библиотеку OSCAT искал там что то подобное,
писал через ИИ код на ST для FB что переворачивать байты в нужном порядке , все безуспешно.
Не пинайте заранее , я только осваиваю логику процесса и библиотеки.
kondor3000
07.09.2026, 14:58
Всё делается для группы, а не по одной переменной. 90267 Галки снимаете или ставите.
Сначала читаете целое 16 битное число, старшим байтом вперёд (по умолчанию) - проверяете, если целое не правильно -переставляете байты.
далее читаете 32 битное Float, старшим регистром вперёд (по умолчанию) - проверяете, если не правильно, переставляете регистры.
Если читаете 64 битное Double ставите галку, двойным старшим словом вперёд, проверяете и меняете если надо.
ВикторВиктор
07.09.2026, 15:14
с opc сервером все понятно, он опрашивает как положено . Проблема в том что на ПЛК такого нет , надо писать FB или функцию которая будет переставлять байты с такой последовательностью , а я не знаю как это сделать.
kondor3000
07.09.2026, 15:19
с opc сервером все понятно, он опрашивает как положено . Проблема в том что на ПЛК такого нет , надо писать FB или функцию которая будет переставлять байты с такой последовательностью , а я не знаю как это сделать.
Зачем вы тогда скрин ОРС сервера выложили?
Надо было скрин или проект в CDS2.3 выкладывать.
Обычно байты идут правильно, переставить регистры можно включив в UMD настройку Native
kondor3000
07.09.2026, 15:26
Пример функции перестановки байт ниже, в примере переставлены регистры и байты, всего 4 варианта, аналогично переставляются отдельно байты или регистры
FUNCTION Swp_BYTE : REAL (*Функция Swp_BYTE с выходом типа REAL*)
VAR_INPUT
rIn:REAL; (*входная переменная типа REAL*)
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(Swp_BYTE);
pOutput^[ 0 ] := pInput^[ 3 ]; (* Перестановка байт *)
pOutput^[ 1 ] := pInput^[ 2 ];
pOutput^[ 2 ] := pInput^[ 1 ]; (* Перестановка байт *)
pOutput^[ 3 ] := pInput^[ 0 ];
ВикторВиктор
07.09.2026, 15:30
Спасибо, попробую, отпишусь . В проекте кодесис кроме мастера и одного UMD больше ничего нету , поэтому и не выкладывал . А скрин для примера как должна быть перестановка байт , так же как и в инструкции .
Увидел , у меня Trace_mode /
ВикторВиктор
07.09.2026, 15:31
Принял ,спасибо !!! вечером попробую
ВикторВиктор
07.09.2026, 22:01
Спасибо большое ! очень помог ! 90269
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot