Да в том и дело, что в проекте именно PT100. Вот проект в том виде в котором есть сейчас. Может и намудрил, такое первый раз вижу.
Вид для печати
Зачем вы на всех входах ограничение максимум 100 поставили? Вот и показывает 0 на 100 Омах.
Если сопртивление 110 Ом на 25 градусах, а может 320 Ом быть.
При чём на неиспользуемых 1 и 2 входах максимум 400 стоит.
Если в проекте pt100, то надо использовать ПРМ-3, они поддерживают pt100 и 3-х проводную схему.
У вас еще и Опер таймеры работать не будут.
Я у меня всё нормально показывает:
Вложение 89319
Хотя зачем использовать для булевого сигнала целый регистр я не понимаю, вроде даже не сто, а сто тысяч раз советовали упаковывать в маску, короче, не надо стремится сделать как можно хуже или по принципу "и так сойдёт", для этого даже ничего и думать не надо, просто прислушиваться к советам или здравому смыслу, получится ровно в 16 раз лучше, мне так кажется!
Боюсь Вы не внимательно читали мое сообщение. Во первых 100 там стоит по умолчанию, это я вернул
Изначально было 400. Это ни как не влияет на проблему. Проблема появляется только при подключении к физическому входу макроса.
Чуть позже пришлю скриншот онлайны. Так будет понятнее
Mr_Camel, возьмите ГОСТ по термопреобразователям сопротивления и сделайте собственный макрос - вычислите полином 4 степени.
Кроме того, макрос из компонентов при неудачном выборе константы внутри макроса - может зависать при обрыве датчика до перезапуска самой ПР. Это связано с тем, что его выход при отказе датчика фиксирует последнее достоверное значение.
Поэтому сделайте свой макрос и при отказе датчика на выход отправляйте подстановочное значение температуры, а не последнее достоверное.
Я делал такЗамените в двух местах число 1000 на 100:Код:///<Description>Преобразователь сопротивления в температуру (Pt1000)</Description>
///<Author>!!FPA!!</Author>
///<GroupName>Аналоговые преобразования</GroupName>
function_block Pt1000_
var_input
///<Description>Сопротивление термопреобразователя, Ом</Description>
Rt : real;
///<Description>Сопротивление соединительных проводов, Ом</Description>
Rw : real;
///<Description>Значение выхода при отказе термопреобразователя, °C</Description>
Error_Value : real;
///<Description>Внешний сигнал неисправности/недостоверности показаний датчика (отказ модуля ввода)</Description>
Ext_error : bool;
end_var
var_output
///<Description>Температура, °C</Description>
T : real;
///<Description>Признак отказа термопреобразователя</Description>
error : bool;
end_var
var
R0 : real := 1000;
A : real := 3.9083e-3;
B : real := -5.775e-7;
D1 : real := 255.819;
D2 : real := 9.14550;
D3 : real := -2.92363;
D4 : real := 1.79090;
r : real;
end_var
// если сопротивление термопреобразователя без учёта сопротивления проводов
// - больше эквивалента температуры (+850 °C)
// - или меньше эквивалента температуры (-200 °C)
error := (Rt > (3.9048*R0)) or (Rt < (0.1852*R0)) or Ext_error;
if error then
T := Error_Value;
else
r := ((Rt - Rw) / R0) - 1;
if r < 0 then
T := r * (D1 + r * (D2 + r * (D3 + r * D4)));
else
T := (pow(A*A+4*B*r, 0.5) - A) / (2*B);
end_if;
end_if;
end_function_block
Pt1000 -> Pt100
R0 : real := 1000; -> 100
Назначения входов и выходов - в комментариях.
Значение Ext_error берёте как объединение сигналов неисправности канала измерения (AI) и отказа модуля ПРМ (если измерение на модуле).
-----
Ошибся я. Конечно же Вы правы - это коррекция сопротивления соединительных проводов и должна вычитаться.
Исправил сразу в этом сообщении.
И в ближайшее время ожидаю вопрос, почему температура измеряется с погрешностью в 10-15 градусов и как это исправить.
FPavel, можно пояснить, почему:
а не минус с учетом 3-х проводной схемы?Код:r := ((Rt плюс Rw) / R0) - 1;