Word to float

Вопросы по программе Lectus Modbus OPC/DDE server
Pavel_17

Word to float

Сообщение Pavel_17 »

Здравствуйте, скажите, есть такая проблема, с частотника 312 получаем данные типа Word, необходимо перевести в число с плавающей запятой.
admin
Администратор
Сообщения: 578
Зарегистрирован: 05 сен 2010, 00:51

Re: Word to float

Сообщение admin »

В устройстве данные лежат в каком формате (Word или Float) ?
Размер Float 4 байта или 8 байт ?
Pavel_17

Re: Word to float

Сообщение Pavel_17 »

В устройстве Word, необходимо получить float 4 байта.
admin
Администратор
Сообщения: 578
Зарегистрирован: 05 сен 2010, 00:51

Re: Word to float

Сообщение admin »

Это настраивается в SCADA системе.
SCADA при подключении указывает к какому типу преобразовать значение.
Сервер выполняет это преобразование, если возможно.
Pavel_17

Word to float

Сообщение Pavel_17 »

Мы выбрали Simple Scada, а она с урезанным функционалом, не получится такое сделать. А в самом Lectus преобразование можно сделать? Спасибо
admin
Администратор
Сообщения: 578
Зарегистрирован: 05 сен 2010, 00:51

Re: Word to float

Сообщение admin »

Можно с использованием составной переменной.
В скрипте которой произвести простое присвоение значения Modbus переменной.
TEC-3
Сообщения: 5
Зарегистрирован: 26 дек 2016, 10:39

Re: Word to float

Сообщение TEC-3 »

Скажите пожалуйста каким образом сделать это присвоение? у меня есть два числа 17421 и 49152, каждый из них word 2 байта, их нужно собрать что бы получить float 4 байта, на выходе должно получиться 567. Как это сделать в составной переменной скажите пожалуйста, я давно не могу решить эту проблему! Заранее благодарен!
admin
Администратор
Сообщения: 578
Зарегистрирован: 05 сен 2010, 00:51

Re: Word to float

Сообщение admin »

1) Не нужно использовать составную переменную
2) Используйте типизированную Modbus переменную типа Single Float.
Пробуйте разный порядок байт (4 варианта). Задается в дополнительных свойствах узла.
Скорее всего нужно установить старшим байтом вперед и установить старшим регистром вперед.
TEC-3
Сообщения: 5
Зарегистрирован: 26 дек 2016, 10:39

Re: Word to float

Сообщение TEC-3 »

Понимаете, LECTUS каждую созданную переменную связывает только с одной переменной. В моем случае, нужно брать две переменные т.е. два слова word и объединять во float. Значит нужно создать две переменной в лектусе, каждая из них принимает по одному word`у, и создать третью переменную составную, которая будет брать значения из двух переменных и совмещать их во float.
TEC-3
Сообщения: 5
Зарегистрирован: 26 дек 2016, 10:39

Re: Word to float

Сообщение TEC-3 »

Первая переменная Item1 принимает значение 17421, вторая переменная Item2 принимает значение 49152, нужно создать третью составную переменную Item3 которая берет значения Item1 и Item2 и объединяет во float 4 байта. На делфи я написал так работает. Но лектус не понимает такой синтаксис, ему надо написать через разрядные сдвиги >> <<.
var
a,b:Word; //Исходные данные, 2 ячейки по 2 байта
c:Single; //Результирующая ячейка, действительное число 4 байта
d:^Cardinal; //Указатель на целочисленную 4х байтовую переменную
begin
a:=64; //Для примера
b:=16440;

d:=@c; // Присваиваем целочисленной 4х байтовой переменной тот же адрес что и действительной

d^:=MakeLong(a,b); // Объединяем 2 слова в одно 4х байтовое

Caption:=FloatToStr(c); // Получаем результат 2.875015259
end
Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей