Добрый день.
Пытаюсь преобразовать 2 последовательных 16 bit регистра полученных от прибора по modbus rtu в 32bit float число.
Для этого используется скрипт, но проблема что не все данные преобразовываются правильно, может сталкивался кто-то?
//determinare semn
IF Word1.15 THEN sign := 1; ELSE sign := 0; END_IF;
s1 := -1;
a := EXPT(s1, sign);
//Determinare E
E:=0; temp:=0;
IF Word1.7 THEN temp := 1; ELSE temp := 0; END_IF; E := E + (temp * 1);
IF Word1.8 THEN temp := 1; ELSE temp := 0; END_IF; E := E + (temp * 2);
IF Word1.9 THEN temp := 1; ELSE temp := 0; END_IF; E := E + (temp * 4);
IF Word1.10 THEN temp := 1; ELSE temp := 0; END_IF; E := E + (temp * 8);
IF Word1.11 THEN temp := 1; ELSE temp := 0; END_IF; E := E + (temp * 16);
IF Word1.12 THEN temp := 1; ELSE temp := 0; END_IF; E := E + (temp * 32);
IF Word1.13 THEN temp := 1; ELSE temp := 0; END_IF; E := E + (temp * 64);
IF Word1.14 THEN temp := 1; ELSE temp := 0; END_IF; E := E + (temp * 128);
b := EXPT(2, (E-127));
//Determinare sum
sum:=0; temp:=0;
IF Word1.6 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.500000000000000000000);
IF Word1.5 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.250000000000000000000);
IF Word1.4 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.125000000000000000000);
IF Word1.3 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.062500000000000000000);
IF Word1.2 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.031250000000000000000);
IF Word1.1 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.015625000000000000000);
IF Word1.0 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.007812500000000000000);
IF Word2.15 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.003906250000000000000);
IF Word2.15 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.001953725000000000000);
IF Word2.13 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.000976562500000000000);
IF Word2.12 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.000488281250000000000);
IF Word2.11 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.000244140625000000000);
IF Word2.10 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.000122070312500000000);
IF Word2.9 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.000061035156250000000);
IF Word2.8 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.000030517578125000000);
IF Word2.7 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.000015258789062500000);
IF Word2.6 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.000007629394531250000);
IF Word2.5 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.000003814697265625000);
IF Word2.4 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.000001907348632812500);
IF Word2.3 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.000000953674316406250);
IF Word2.2 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.000000476837158203125);
IF Word2.1 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.000000238418579101562);
IF Word2.0 THEN temp := 1; ELSE temp := 0; END_IF; sum := sum + (temp * 0.000000119209289550781);
c := 1 + sum;
Real_val := a*b*c;
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Преобразование данных.
Модератор: Специалисты SE
-
- здесь недавно
- Сообщения: 4
- Зарегистрирован: 07 фев 2019, 15:24
- Имя: Олег
- Страна: Молдова
-
- освоился
- Сообщения: 277
- Зарегистрирован: 14 дек 2015, 12:15
- Имя: Евгений
- Страна: Россия
- город/регион: Краснодар
- Благодарил (а): 5 раз
- Поблагодарили: 73 раза
Преобразование данных.
Для какого ПЛК вы это делаете?
Если в SoMachine, то просто сливаете WORD в DWORD или в массив и перекладываете через указатель в REAL.
Если в SoMachine, то просто сливаете WORD в DWORD или в массив и перекладываете через указатель в REAL.
У вас нет необходимых прав для просмотра вложений в этом сообщении.