Зачем вы на всех входах ограничение максимум 100 поставили? Вот и показывает 0 на 100 Омах.
Если сопртивление 110 Ом на 25 градусах, а может 320 Ом быть.
При чём на неиспользуемых 1 и 2 входах максимум 400 стоит.
Если в проекте pt100, то надо использовать ПРМ-3, они поддерживают pt100 и 3-х проводную схему.
У вас еще и Опер таймеры работать не будут.
Последний раз редактировалось kondor3000; Вчера в 21:58.
Я у меня всё нормально показывает:
ПТ100.png
Хотя зачем использовать для булевого сигнала целый регистр я не понимаю, вроде даже не сто, а сто тысяч раз советовали упаковывать в маску, короче, не надо стремится сделать как можно хуже или по принципу "и так сойдёт", для этого даже ничего и думать не надо, просто прислушиваться к советам или здравому смыслу, получится ровно в 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) и отказа модуля ПРМ (если измерение на модуле).
-----
Ошибся я. Конечно же Вы правы - это коррекция сопротивления соединительных проводов и должна вычитаться.
Исправил сразу в этом сообщении.
Последний раз редактировалось FPavel; Сегодня в 16:40.
И в ближайшее время ожидаю вопрос, почему температура измеряется с погрешностью в 10-15 градусов и как это исправить.
FPavel, можно пояснить, почему:
а не минус с учетом 3-х проводной схемы?Код:r := ((Rt плюс Rw) / R0) - 1;