PDA

Просмотр полной версии : плк 150 + тха. детский вопрос.



nna
16.11.2009, 16:59
Доброго времени суток!
Существует несложная задача - вычисление температуры посредством указанного девайса и термопары ТХА(к). При этом прописывается следующий код.


PROGRAM PLC_PRG
VAR
C:ARRAY[0..9] OF REAL;
i: INT;
Temp:REAL;
END_VAR

Temperature:=0;
Temp := T3/10;
IF (Temp >= -5.891) AND (Temp < 0) THEN
C[0] := 0;
C[1] := 2.5173462E1;
C[2] := -1.1662878;
C[3] := -1.0833638;
C[4] := -8.9773540E-1;
C[5] := -3.7342377E-1;
C[6] := -8.6632643E-2;
C[7] := -1.0450598E-2;
C[8] := -5.1920577E-4;
FOR i := 0 TO 8 DO
Temperature := Temperature + C[i] * EXPT(Temp, i);
END_FOR;
END_IF;

IF (Temp >=0) AND (Temp < 20.644) THEN
C[0] := 0;
C[1] := 2.508355E1;
C[2] := 7.860106E-2;
C[3] := -2.503131E-1;
C[4] := 8.315270E-2;
C[5] := -1.228034E-2;
C[6] := 9.804036E-4;
C[7] := -4.413030E-5;
C[8] := 1.057734E-6;
C[9] := -1.052755E-8;
FOR i := 0 TO 9 DO
Temperature := Temperature + C[i] * EXPT(Temp, i);
END_FOR;
END_IF;

L1 := s1 OR s5;
L2 := s2 OR (s5 AND s6);
L3 := s3 OR Pump;
L4 := Valve OR (s4 AND s5 AND s6);

Глобальные переменные

VAR_GLOBAL
s1 AT %IX0.0:BOOL; (* %IX0.0 - привязка к конкретному канала *)
s2 AT %IX0.1:BOOL;
s3 AT %IX0.2:BOOL;
s4 AT %IX0.3:BOOL;
s5 AT %IX0.4:BOOL;
s6 AT %IX0.5:BOOL;
L1 AT %QX1.0:BOOL;
L2 AT %QX1.1:BOOL;
L3 AT %QX1.2:BOOL;
L4 AT %QX1.3:BOOL;
Temperature: REAL := 0;
Pump: BOOL := 0;
Valve: BOOL := 0;
END_VAR


1. Так вот, при этих вычислениях, разумеется цикл работы увеличивается и работа с дискретными входами/выходами замедляется достаточно ощутимо - примерно до 1 с. Так вот вопрос: существуют ли какие-либо методы оптимизации для улучшения быстродействия? В дальнейшем планируется управление процессами посредством данного сочетания устройств.
2. Также интереснует тот факт, почему необходима строка "Temp := T3/10;". Опытным путем проверено, что без нее не работает :) Хотя в конфирурации входа прописан мВ.


П.С. опыта программирования в кодесисе не имею, диска от ПЛК нет (потеряли), а задачу поставленную решать надо!

Филоненко Владислав
16.11.2009, 18:32
Дорогой пользователь ПЛК фирмы ОВЕН.
Специально для Вас в Ваш экземпляр контроллера нами оперативно была добавлена функция вычисления температуры термопары внутри самого прибора автоматически.
Для её активации войдите в вкладку Конфигурация ПЛК (PLC Configuration), выделите модуль Unifed signal sensor на интересующем Вас канале измерения.
Нажмите правую кнопку мыши и в выпавшем меню выберите пункт Replace element->Termocouple sensor.
В настройках появившегося модуля термопар выберите желаемый Вами тип термопары и загрузите программу.

В качестве бонуса нами также были добавлены другие функции, с полным списком которых Вы можете ознакомится в документе Документация\PLC_Configuration_OWEN.pdf на прилагаемом диске или скачать его http://www.owen.ru/documents/catalog/files/PLC_Configuration_OWEN_2.0.zip
Увлекательного чтения.

P.S.
А замедление у Вас произошло по тому, что Вы пытаетесь 1000 раз в секунду вычислить полином 9 или 10 степени. Это довольно сложная задача, и если её действительно надо выполнять, то это следует делать не каждый цикл ПЛК, а только при изменении значений на входе.
P.P.S. Существует другой, более производительный метод расчета полинома, при котором возводить в степень не надо.
P.P.P.S. И Вы забыли компенсацию холодного спая добавить.
P.P.P.P.S. Temp := T3/10; - такое деление необходимо из-за того, что Вы выставили пределы линейного преобразования не соответствующие физ. величине.

nna
17.11.2009, 12:09
спасибо! вот не потеряли бы диск, тогда наверно вопросов бы и не было :) только вот файла такого не существует, со страницы плк также по ссылке ошибка 404

Филоненко Владислав
17.11.2009, 12:20
да, сервак висит.

nna
17.11.2009, 15:38
последовал вашему совету, плк стал работать явно шустрее, но возник такой момент - показания несколько завышены: комнатная температура примерно 32 с (чего явно много), вода в чайнике закипает при 107 с... нормально ли это?

Филоненко Владислав
17.11.2009, 17:22
1. а вы уверены, что правильный тип термопары?
2. компенсация хс включена?

nna
18.11.2009, 17:11
компенсация включена, термопара тха(к) выбран Tp_k, остальные тоже попробовал, они еще больше дурят. если расчитывать влоб по моей программе, то комнатная порядка 25 с, что похоже на правду.

Филоненко Владислав
18.11.2009, 17:56
ну так полиномы то одинаковые...

nna
23.11.2009, 14:05
но если по-заводскому, то оно 32 показывает, а по моему - 25...

Sniper007
23.11.2009, 14:13
оффтоп


P.p.s. существует другой, более производительный метод расчета полинома, при котором возводить в степень не надо.
а что за метод? интерполяция сплайнами?

Филоненко Владислав
23.11.2009, 18:08
нет, просто не надо каждый раз степень считать. просто умножать х на х а на полученный результат умножать коэф.
и повторять цикл.
быстрее считать.
но правильнее не 2 полинома 9 и 10 степени использовать, а несколько больше степени 3-4. но тут надо из сопрягать и пр. особенности.

Sniper007
23.11.2009, 18:23
ясно


но правильнее не 2 полинома 9 и 10 степени использовать, а несколько больше степени 3-4. но тут надо из сопрягать и пр. особенности.
вот это и есть интерполяция сплайнами :)
алгоритм там действительно сложнее чем обычный полиномоидальный, но программные реализации есть.

Филоненко Владислав
23.11.2009, 19:36
вы первую часть моего ответа читали :) ?

Sniper007
23.11.2009, 20:52
тогда не понял.
я думал вы имеете ввиду кусочно-полиномную интерполяцию. а на самом деле что?

Филоненко Владислав
24.11.2009, 11:05
1. в приведенной человеком формуле каждый раз вычисляется степень, что бессмысленно и жрет много ресурсов (можно поменять алгоритм и не вычислять 9 раз степень).
2. если вдобавок к этому еще и снизить степень полинома, то будет вообще хорошо и быстро.