RS485, Разные форматы в регистрах

Инженерное программное обеспечение
Ответить
obok
Любитель
Сообщения: 53
Зарегистрирован: 10 апр 2018, 20:16

RS485, Разные форматы в регистрах

Сообщение obok »

Помогите пожалуйста.
Имеется сеть RS485, контроллер S7-1200 (мастер), и подчиненные ему модули - Овен
Для данных обмена используется перемеренная Array[1..15] of UInt
Но закралась проблема... Есть один блок в сети для которого для считывая значения нужно использовать переменную типа Real
См. рис.1 адрес регистра - 4,5.

Тип переменной в процессе выполнения программы я так понимаю менять нельзя?
Если я правильно понимаю решение нужно считать два раза переменной UInt в 4 а затем в 5 регистре, а затем как-то эти значения объединить верно?
Подскажите как это сделать?
У вас нет необходимых прав для просмотра вложений в этом сообщении.

obok
Любитель
Сообщения: 53
Зарегистрирован: 10 апр 2018, 20:16

Re: RS485, Разные форматы в регистрах

Сообщение obok »

Возможно надо записать как-то так
Real32.(что-то тут):=Uint[4]
Real32.(что-то тут):=Uint[5]

Только что-там я не пойму...

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: RS485, Разные форматы в регистрах

Сообщение Михайло »

Real32.w0:=Uint[4]
Real32.w1:=Uint[5]

или наоборот

Real32.w0:=Uint[5]
Real32.w1:=Uint[4]

Но потом нужно будет уточнить, какому стандарту удовлетворяет Float32 в Овне, в S7-1200 у REAL стандарт IEEE754.

obok
Любитель
Сообщения: 53
Зарегистрирован: 10 апр 2018, 20:16

Re: RS485, Разные форматы в регистрах

Сообщение obok »

Михайло писал(а):Real32.w0:=Uint[4]
Real32.w1:=Uint[5]

или наоборот

Real32.w0:=Uint[5]
Real32.w1:=Uint[4]

Но потом нужно будет уточнить, какому стандарту удовлетворяет Float32 в Овне, в S7-1200 у REAL стандарт IEEE754.
Огромное спасибо!!!
В итоге пришлось сделать так так:
#DWord.%W1 := "RS485_DATA_buffer".TEMP_Data[4];
#DWord.%W0 := "RS485_DATA_buffer".TEMP_Data[5];
"(Adr 28) МВ110-224.2А".Real32 := DWORD_TO_REAL(#DWord);

С переменной Real32 выдает ошибку если подставить ".%W0", пришлось использовать промежуточную переменную, почему - непонятно((

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: RS485, Разные форматы в регистрах

Сообщение Михайло »

Причина банальна, но может быть не понятна начинающим программистам: существует множество типов данных, которые занимают 32 бита. Везде 32 бита, но по-разному интерпретируются. Real32 и Int32 подразумевают целостное рассмотрение данных - в виде числа. А DWord позволяет, наоборот, разбивать двойное слово на слова, на байты и даже отдельные биты. DWord - это такой тип данных - не число, а набор битов.

Ответить