Как известно, к контроллерам S7-1200 можно подключать модули расширения для измерения сигналов сопротивления, но предназначены эти модули, в первую очередь, для сигналов с датчиков температур (термосопротивлений), потому модули так и называются RTD - Resistance Temperature Detectors. Но ведь может быть задача, когда мерить надо вовсе не сигнал от термосопротивлений, может стоять задача измерить сопротивление от 0 до нескольких килоом, например. В настройках данного модуля в TIA Portal можно выставить диапазон измерений для каждого канала:
Как видим, чтобы захватить наибольший диапазон измерения варианта всего два:
- мерить сопротивление от 0 до 600 Ом - значения в этом случае будут в тех же единицах, что и для аналоговых модулей 0..10 В и 0..20 мА, т.е. значение 27500 будет соответствовать 600 Ом. Экспериментально выяснилось, что померить удаётся чуть больше, чем 700 Ом (у меня получилось максимум 714 Ом, после этого показывает 32767 - ошибка датчика).
- мерить сопротивление для датчика Pt1000. Конечно, у самих таких датчиков диапазон изменения сопротивления гораздо уже, чем может понадобится (от 800 до 1800 Ом), но это вовсе не значит, что модуль RTD не способен охватить бОльший диапазон. Экспериментально выяснилось, что можно померить таким образом сопротивление от 60 Ом до примерно 4900 Ом. Значение получается градусах (точнее, в целых числах, где последняя цифра - это знак после запятой, т.е. как бы градусы помноженные на 10), его надо масштабировать в Омы самостоятельно. Если брать по таблице, то значение -500 (т.е. -50 град) должно соответствовать 803.15 Ом, а 1000 (т.е. 100 град) - 1385 Ом. У меня так оно и получилось. Но есть один нюанс: нельзя померить слишком маленькое сопротивление (ниже 60 Ом). Верхняя граница в 4.9 кОм определяется исходя из того, что максимальное значение может быть 10000 (т.е. 1000.0 град).
У меня была задача померить сопротивление от 0 Ом. Как видим, вариант 60..4900 Ом для этого не подходит. Поэтому я вышел из положения следующим образом: я подсоединил датчик одновременно к двум каналам модуля RTD, настроил их: первый на 0..600 Ом, второй - на Pt1000 и написал алгоритм переключения:
R_.isR1_actual := (AI_RTD_R1 <> 32767 AND AI_RTD_R1 <> -32768);
R_.isR2_actual := (AI_RTD_R2 <> 32767 AND AI_RTD_R2 <> -32768);
OBRYV_R := R_.isR1_actual = false AND R_.isR2_actual = false;
R_average := (Read_AI_R1.OUT_value + Read_AI_R2.OUT_value) / 2.0;
useAverageValue := false;
IF(R_.isR1_actual AND R_.isR2_actual) THEN
R_.PV := R_average;
IF(R_average > R_.R_switch - R_.R_delta AND
R_average < R_.R_switch + R_.R_delta)
THEN
useAverageValue := true;
IF(Read_AI_R1.OUT_value < R_average) THEN R_.mode := 0;
ELSE R_.mode := 1; END_IF;
END_IF;
IF(R_.isUseR2 = false AND
((R_.mode = 0 AND Read_AI_R1.OUT_value > R_.R_switch) OR
(R_.mode = 1 AND Read_AI_R2.OUT_value > R_.R_switch)))
THEN
R_.isUseR2 := true;
ELSIF(R_.isUseR2 AND
((R_.mode = 0 AND Read_AI_R2.OUT_value < R_.R_switch) OR
(R_.mode = 1 AND Read_AI_R1.OUT_value < R_.R_switch)))
THEN
R_.isUseR2 := false;
END_IF;
ELSE
IF(R_.isR1_actual) THEN R_.isUseR2 := false;
ELSIF(R_.isR2_actual) THEN R_.isUseR2 := true;
END_IF;
END_IF;
IF(OBRYV_R = false) THEN
IF(useAverageValue = false) THEN
IF(R_.isUseR2 = false) THEN R_.PV := Read_AI_R1.OUT_value;
ELSE R_.PV := Read_AI_R2.OUT_value;
END_IF;
END_IF;
ELSE
R_.PV := 99999.0;
END_IF;
В этом фрагменте кода:
OBRYV_R - это такой бит, который предназначен для проверки аварии обрыва датчика
Read_AI_R1.OUT_value - это такое значение Real в Омах, которое получилось в результате масштабирования сигнала AI_RTD_R1 c первого канала модуля RTD (0 - 0 Ом, 27500 - 600 Ом)
Read_AI_R2.OUT_value - это такое значение Real в Омах, которое получилось в результате масштабирования сигнала AI_RTD_R2 cо второго канала модуля RTD (-500 - 803.15 Ом, 1000 - 1385 Ом)
R_.R_switch - значение сопротивления, при котором будет происходить переключение между каналами (у меня выставлено значение 693 Ом)
R_.R_delta - дельта (плюс/минус) к R_.R_Switch (у меня выставлено значение 1 Ом)
Таким образом, задействовав два канала, можно померить весь диапазон от 0 до 4.9 кОм.
В настройках TIA Portal можно выбрать двух, трёх и четырёхпроводную схему подключения датчика. Я не знаю, зачем эта настройка, но факт в том, что если не подключить все 4 клеммы, то работать нормально ничего не будет. Т. е. даже если выбрана двухпроводная схема и датчик подключен на клеммы I+ и I-, то остальные две клеммы (M+ и M-) всё равно нельзя оставлять неподключенными, т.е. надо ставить перемычки с M+ на I+ и с M- на I-. В общем-то в сименовской инструкции об этом тоже написано.
По ходу проведения экспериментов я заметил, что модуль RTD ведёт себя как-то странно: то показывает ошибку при нормально подключенном датчике, то показывает одно и тоже значение, какое бы сопротивление я не подключал (т.е. как будто бы "зависает", при этом при отключении датчика исправно показывает 32767). Выяснилось, что модуль немного "сходит с ума", если к нему "на горячую" то подключать что-то, то отключать, то провода местами менять и т.д. Делать надо так: обесточили контроллер, подсоединили всё, что нужно, после этого включили, тогда никаких глюков нет.
1. Использовать модуль обычных аналоговых входов и преобразователь сигнала сопротивления в унифицированный сигнал в mA. Следует отметить, что у многих производителей (например, Schneider или Овен) такие устройства изначально заточены на термосопротивления, т.е. для нестандартных диапазонов у них преобразователей нет. Но, всё таки можно что-то найти. Например:
- у ABB есть такой преобразователь TTR200 с входным сигналом до 5 кОм. Сколько стóит не знаю.
- есть российская такая штука: НПСИ-ПМ, которая позволяет измерять до 10 кОм (диапазон выхода в mA настраиваемый). Цена его около 6000 р., делают в Ростове-на-Дону.
- у Овен есть контроллер ПР200 примерно за те же 6000 р., у которого 4 аналоговых входа на борту, которыми можно померить в т.ч. и сопротивление до нескольких кОм и есть аналоговый выход 0..20 мА, т.е. остаётся дело за малым - написать примитивную программку для этого дела.
2. Изменить входное сопротивление через дополнительный резистор, т.е. сместить диапазон, чтобы не от 60 Ом по факту мерить, а от 0. Верхняя граница также, естественно, сместится.
3.Использовать распределённую станцию ET200SP, к которой цеплять модули от контроллера S7-300 ($$$ money, money, must be funny...).
Как видим, чтобы захватить наибольший диапазон измерения варианта всего два:
- мерить сопротивление от 0 до 600 Ом - значения в этом случае будут в тех же единицах, что и для аналоговых модулей 0..10 В и 0..20 мА, т.е. значение 27500 будет соответствовать 600 Ом. Экспериментально выяснилось, что померить удаётся чуть больше, чем 700 Ом (у меня получилось максимум 714 Ом, после этого показывает 32767 - ошибка датчика).
- мерить сопротивление для датчика Pt1000. Конечно, у самих таких датчиков диапазон изменения сопротивления гораздо уже, чем может понадобится (от 800 до 1800 Ом), но это вовсе не значит, что модуль RTD не способен охватить бОльший диапазон. Экспериментально выяснилось, что можно померить таким образом сопротивление от 60 Ом до примерно 4900 Ом. Значение получается градусах (точнее, в целых числах, где последняя цифра - это знак после запятой, т.е. как бы градусы помноженные на 10), его надо масштабировать в Омы самостоятельно. Если брать по таблице, то значение -500 (т.е. -50 град) должно соответствовать 803.15 Ом, а 1000 (т.е. 100 град) - 1385 Ом. У меня так оно и получилось. Но есть один нюанс: нельзя померить слишком маленькое сопротивление (ниже 60 Ом). Верхняя граница в 4.9 кОм определяется исходя из того, что максимальное значение может быть 10000 (т.е. 1000.0 град).
У меня была задача померить сопротивление от 0 Ом. Как видим, вариант 60..4900 Ом для этого не подходит. Поэтому я вышел из положения следующим образом: я подсоединил датчик одновременно к двум каналам модуля RTD, настроил их: первый на 0..600 Ом, второй - на Pt1000 и написал алгоритм переключения:
R_.isR1_actual := (AI_RTD_R1 <> 32767 AND AI_RTD_R1 <> -32768);
R_.isR2_actual := (AI_RTD_R2 <> 32767 AND AI_RTD_R2 <> -32768);
OBRYV_R := R_.isR1_actual = false AND R_.isR2_actual = false;
R_average := (Read_AI_R1.OUT_value + Read_AI_R2.OUT_value) / 2.0;
useAverageValue := false;
IF(R_.isR1_actual AND R_.isR2_actual) THEN
R_.PV := R_average;
IF(R_average > R_.R_switch - R_.R_delta AND
R_average < R_.R_switch + R_.R_delta)
THEN
useAverageValue := true;
IF(Read_AI_R1.OUT_value < R_average) THEN R_.mode := 0;
ELSE R_.mode := 1; END_IF;
END_IF;
IF(R_.isUseR2 = false AND
((R_.mode = 0 AND Read_AI_R1.OUT_value > R_.R_switch) OR
(R_.mode = 1 AND Read_AI_R2.OUT_value > R_.R_switch)))
THEN
R_.isUseR2 := true;
ELSIF(R_.isUseR2 AND
((R_.mode = 0 AND Read_AI_R2.OUT_value < R_.R_switch) OR
(R_.mode = 1 AND Read_AI_R1.OUT_value < R_.R_switch)))
THEN
R_.isUseR2 := false;
END_IF;
ELSE
IF(R_.isR1_actual) THEN R_.isUseR2 := false;
ELSIF(R_.isR2_actual) THEN R_.isUseR2 := true;
END_IF;
END_IF;
IF(OBRYV_R = false) THEN
IF(useAverageValue = false) THEN
IF(R_.isUseR2 = false) THEN R_.PV := Read_AI_R1.OUT_value;
ELSE R_.PV := Read_AI_R2.OUT_value;
END_IF;
END_IF;
ELSE
R_.PV := 99999.0;
END_IF;
В этом фрагменте кода:
OBRYV_R - это такой бит, который предназначен для проверки аварии обрыва датчика
Read_AI_R1.OUT_value - это такое значение Real в Омах, которое получилось в результате масштабирования сигнала AI_RTD_R1 c первого канала модуля RTD (0 - 0 Ом, 27500 - 600 Ом)
Read_AI_R2.OUT_value - это такое значение Real в Омах, которое получилось в результате масштабирования сигнала AI_RTD_R2 cо второго канала модуля RTD (-500 - 803.15 Ом, 1000 - 1385 Ом)
R_.R_switch - значение сопротивления, при котором будет происходить переключение между каналами (у меня выставлено значение 693 Ом)
R_.R_delta - дельта (плюс/минус) к R_.R_Switch (у меня выставлено значение 1 Ом)
Таким образом, задействовав два канала, можно померить весь диапазон от 0 до 4.9 кОм.
Нюансы
В настройках TIA Portal можно выбрать двух, трёх и четырёхпроводную схему подключения датчика. Я не знаю, зачем эта настройка, но факт в том, что если не подключить все 4 клеммы, то работать нормально ничего не будет. Т. е. даже если выбрана двухпроводная схема и датчик подключен на клеммы I+ и I-, то остальные две клеммы (M+ и M-) всё равно нельзя оставлять неподключенными, т.е. надо ставить перемычки с M+ на I+ и с M- на I-. В общем-то в сименовской инструкции об этом тоже написано.
По ходу проведения экспериментов я заметил, что модуль RTD ведёт себя как-то странно: то показывает ошибку при нормально подключенном датчике, то показывает одно и тоже значение, какое бы сопротивление я не подключал (т.е. как будто бы "зависает", при этом при отключении датчика исправно показывает 32767). Выяснилось, что модуль немного "сходит с ума", если к нему "на горячую" то подключать что-то, то отключать, то провода местами менять и т.д. Делать надо так: обесточили контроллер, подсоединили всё, что нужно, после этого включили, тогда никаких глюков нет.
Какие ещё варианты
1. Использовать модуль обычных аналоговых входов и преобразователь сигнала сопротивления в унифицированный сигнал в mA. Следует отметить, что у многих производителей (например, Schneider или Овен) такие устройства изначально заточены на термосопротивления, т.е. для нестандартных диапазонов у них преобразователей нет. Но, всё таки можно что-то найти. Например:
- у ABB есть такой преобразователь TTR200 с входным сигналом до 5 кОм. Сколько стóит не знаю.
- есть российская такая штука: НПСИ-ПМ, которая позволяет измерять до 10 кОм (диапазон выхода в mA настраиваемый). Цена его около 6000 р., делают в Ростове-на-Дону.
- у Овен есть контроллер ПР200 примерно за те же 6000 р., у которого 4 аналоговых входа на борту, которыми можно померить в т.ч. и сопротивление до нескольких кОм и есть аналоговый выход 0..20 мА, т.е. остаётся дело за малым - написать примитивную программку для этого дела.
2. Изменить входное сопротивление через дополнительный резистор, т.е. сместить диапазон, чтобы не от 60 Ом по факту мерить, а от 0. Верхняя граница также, естественно, сместится.
3.Использовать распределённую станцию ET200SP, к которой цеплять модули от контроллера S7-300 ($$$ money, money, must be funny...).
Комментариев нет:
Отправить комментарий