PDA

Просмотр полной версии : Real c ИП320



zendo057
06.10.2015, 11:16
Создам тему,ибо никто не помог.Панель мастер задаю значение 750,в атрибутах регистра число регистров 2, в ПЛК отражается 1.050974е-042.Возможно ли преобразовать в 750.Ставил галку в окне
расш word в параметрах проекта,не помогает.Можно сделать в конфигураторе вместо Real Dword наверное все получится,но мне нужны и дробные значения.

petera
06.10.2015, 12:36
Создам тему,ибо никто не помог.Панель мастер задаю значение 750,в атрибутах регистра число регистров 2, в ПЛК отражается 1.050974е-042.Возможно ли преобразовать в 750.Ставил галку в окне
расш word в параметрах проекта,не помогает.Можно сделать в конфигураторе вместо Real Dword наверное все получится,но мне нужны и дробные значения.
Так дробные нужны или REAL?
Потому как дробные можно получать и с фиксированной точкой, а не только с плавающей(REAL/Float).
Зависит от диапазона используемых чисел.
Если использовать Word, то можно получать числа с фиксированной точкой в таких диапазонах. Положение точки как бы храним в уме
Для чисел без знака
20285
0-65535 чего нибудь
0-6553,5 чего нибудь -один знак после запятой
0-655,35 чего нибудь -два знака после запятой
0-655,35 чего нибудь -три знака после запятой
Для чисел со знаком
20286
от-32768 до 32767 чего нибудь
от-3276,8 до 3276,7 чего нибудь -один знак после запятой
от-327,68 до 327,67 чего нибудь -два знака после запятой
от-32,768 до 327,67 чего нибудь -три знака после запятой

Если использовать DWord
Для чисел без знака
20287
0- 4 294 967 295 чего нибудь
0-4 294 967 29,5 чего нибудь -один знак после запятой
0-4 294 967 2,95 чего нибудь -два знака после запятой
0-4 294 967,295 чего нибудь -три знака после запятой
Для чисел со знаком
20288
от-2 147 483 648 до 2 147 483 647 чего нибудь
от-2 147 483 64,8 до 2 147 483 64,7 чего нибудь -один знак после запятой
от-2 147 483 6,48 до 2 147 483 6,47 чего нибудь -два знака после запятой
от-2 147 483,648 до 2 147 483,647 чего нибудь -три знака после запятой

С точки зрения ПЛК, обмен с панелью выполняется целыми числами, а чтобы учесть это в программе, например для работы с числами Real(с плавающей точкой) в программе необходимо выполнять преобразования

Вариант для переменных Word (в конфигурации - 2byte module)

Для переменных из программы контроллера в панель я использую такую функцию

FUNCTION PV_to_Panel : WORD
VAR_INPUT
PV_Real: REAL; (*Значение на входе *)
Nz_ai: WORD; (*положение точки*)
END_VAR
VAR
END_VAR

PV_to_Panel:=REAL_TO_WORD(PV_Real*EXPT(10,Nz_ai));

В программе есть фрагмент

Panel_PV_Razr:=PV_to_Panel(PV_Razr, Nz_ai1);
Panel_PV_Par:=PV_to_Panel(PV_Par,Nz_ai2);
Panel_PV_Urov:=PV_to_Panel(PV_Urov,Nz_ai3);
Panel_PV_Topl:=PV_to_Panel(PV_Topl,Nz_ai4);

Для переменных из панели в контроллер я использую такую функцию

FUNCTION Panel_to_Real : REAL
VAR_INPUT
wVal: WORD;
Nz: WORD; (*Число знаков после запятой*)
END_VAR
VAR
END_VAR

Panel_to_Real:=INT_TO_REAL(WORD_TO_INT(wVal))/EXPT(10,Nz);

В программе есть фрагмент

sp_razr:=Panel_to_Real(SET_POINT1, Nz_ai1);
kp_razr:=Panel_to_Real(KP1, 2);
dz_razr:=Panel_to_Real(D_ZONE1, Nz_ai1);
Tn_razr:=Panel_to_Real(TN1, 1);
Tv_razr:=Panel_to_Real(TV1, 1);


Аналогичные функции можно сделать и для для переменных DWord (в конфигурации - 4byte module) всего лишь изменить размерность с Word на DWord в приведенных функциях.

zendo057
06.10.2015, 13:46
Я кажется начинаю понимать.Переделал проект вот так. Т1Т2Т3Т4 отвечают как надо, а U1 регистр4-5 при задании с панели 750 выдает в плк 49152000.Подскажите что не так,где косяк.

petera
06.10.2015, 15:11
Я кажется начинаю понимать.Переделал проект вот так. Т1Т2Т3Т4 отвечают как надо, а U1 регистр4-5 при задании с панели 750 выдает в плк 49152000.Подскажите что не так,где косяк.
Все очень просто получается
750 это (0000 02EE) в шестнадцатеричной системе для DWord
Из-за несогласованном порядке передачи старшего и младшего Word они в слейве ПЛК поменялись местами 49152000 = (02EE 0000) в шестнадцатеричной системе.
Для СП270 здесь помогает "Поменять Word" для ИП320 если выше упомянутая галка в свойствах проекта не работает, то нужно программно переставлять местами первое и второе слово в Dword U1.

ЗЫ. Для начала попробуйте эту галку(Расш. Word) в свойствах проекта снять.

petera
06.10.2015, 15:38
Если упомянутая галка не работает, то предлагаю функцию по перестановке слов в DWord

FUNCTION SWAP_DWORD : DWORD
VAR_INPUT
in: DWORD;
END_VAR
SWAP_DWORD :=SHR(in,16) OR SHL(in,16);
Использовать ее так
U1_swap:=SWAP_DWORD(U1);
20297

zendo057
07.10.2015, 17:31
После перезаписи переменных в формат word все заработало.Сделал вывод что real и dword c ИП320 не работает.Или я не прав?Если не так то
дайте разъяснение по предыдущим постам,пожалуйста.