Сообщение от
Ильяс94
А как склеить во float например? У меня конечные данные не совпадают с фактическими показаниями устрйоства.
Здесь выкладывал в последнем сообщении пример чтения МВ110-8А, с Функц. блоком склейки двух WORD в REAL. По аналогии склеиваются и байты https://owen.ru/forum/showthread.php?t=35094#10
Можно склеить прямо в программе из буфера. Это есть в примерах, ссылки давал в начале. Пример первых двух REAL. 1 Чтение МВА8.jpg
Пример для МВ110-8А, данные перемешаны, поэтому пропуски.
Код:
d: ARRAY [0..23] OF REAL; (*считанное значение*)
ptr_D:POINTER TO BYTE;
END_VAR
__________________________________________________
(* Вставить, в след. шаге CASE где склеиваете INT (WORD) *)
ptr_D:=ADR(d)+8; ptr_D^:=buffer[11]; ptr_D:=ptr_D+1; ptr_D^:=buffer[10]; ptr_D:=ptr_D+1; ptr_D^:=buffer[9]; ptr_D:=ptr_D+1; ptr_D^:=buffer[8];
ptr_D:=ptr_D+9; ptr_D^:=buffer[23]; ptr_D:=ptr_D+1; ptr_D^:=buffer[22]; ptr_D:=ptr_D+1; ptr_D^:=buffer[21]; ptr_D:=ptr_D+1; ptr_D^:=buffer[20];
Для вашего МВ110-8АС, данные REAL подряд (читать с первого адреса REAL) будет так,
первые 2 REAL, для правильного отображения данные из буфера присваиваем в обратном порядке:
Код:
d: ARRAY [0..7] OF REAL; (*считанное значение*)
ptr_D:POINTER TO BYTE;
END_VAR
__________________________________________________
(* Вставить, в след. шаге CASE где склеиваете INT (WORD) *)
ptr_D:=ADR(d); ptr_D^:=buffer[3]; ptr_D:=ptr_D+1; ptr_D^:=buffer[2]; ptr_D:=ptr_D+1; ptr_D^:=buffer[1]; ptr_D:=ptr_D+1; ptr_D^:=buffer[0];
ptr_D:=ptr_D+1; ptr_D^:=buffer[9]; ptr_D:=ptr_D+1; ptr_D^:=buffer[8]; ptr_D:=ptr_D+1; ptr_D^:=buffer[7]; ptr_D:=ptr_D+1; ptr_D^:=buffer[6];