|
Несколько лет назад, когда перед нами встала задача измерять температуру с помощью термопар, мы приобрели контроллеры ADAM-4018. И тут же столкнулись со следующей проблемой.
Проблема с ADAM-4018
В техпроцессе, который мы автоматизировали, использовались термопары вольфрам-рений т.н. A-1, A-2, A-3 типов. В списке термопар, поддерживаемых ADAM-4018, этих термопар нет, поэтому пришлось использовать 4018 в режиме измерения напряжения, установив диапазон измерения +- 50 мВ. Алгоритм измерения температуры при этом выглядел так:
1) считываем значение напряжения U;
2) считываем значение температуры холодного спая (ТХС);
3) по таблице термопары преобразовываем TХС в мВ - U[ТХС];
4) вычисляем U' = U[ТХС] + U;
5) по таблице термопары вычисляем температуру T(U').
И все было замечательно, кроме одного момента:
ADAM-4018 не обновляет значение температуры холодного спая в случае, когда модуль настроен на измерение напряжения.
Т.е. в течение всего техпроцесса температура холодного спая, возвращаемая модулем ADAM-4018, имела значение, измеренное модулем при его включении.
Таким образом получается - либо используй термопары из заданного списка (которые поддерживает модуль), либо подключай к одному из входов модуля свой датчик измерения температуры холодного спая.
Однако, нами было найдено обходное решение.
Выяснилось, что при выполнении команды "калибровка смещения температуры холодного спая" ($AA9SNNNN - CJC Offset Calibration) модуль измеряет температуру холодного спая и обновляет ее значение в своей памяти. Тогда мы включили в программу псевдо-калибровку смещения ТХС, а именно: калибровку на величину равную 0 (NNNN=0), что приводило к обновлению значения температуры холодного спая.
Итак, чтобы ADAM-4018 обновил значение температуры холодного спая при работе в режиме измерения напряжения, необходимо выполнить команду CJC Offset Calibration (калибровка смещения ТХС) с параметром 0, и только после этого сосчитать значение ТХС ($AA3 - CJC Status Command)
Когда появились модули ADAM-4019 мы решили мигрировать на них, надеясь, что в 4019-х модулях температура холодного спая обновляется все время, т.к. ADAM-4019 позволяет настраивать каналы индивидуально. Да, в 4019-х модулях вышеуказанной проблемы с ТХС, действительно, нет. Но возникла другая проблема.
Проблема с ADAM-4019
Модуль ADAM-4019 не проверял контрольную сумму в режиме, когда проверка контрольной суммы включена. Я пишу не проверял, т.к. не знаю как обстоят дела в модулях ADAM-4019 поставляемых сегодня, но у нас до сих пор лежат на полке пара модулей ADAM-4019 в которых контрольная сумма в режиме проверки оной на самом деле полностью игнорируется. Точнее, почти полностью. Почти - потому что модуль проверяет, что пакет имеет в конце 2 байта, отводимые под контрольную сумму, вот только значение их может быть каким угодно - в любом случае модуль ADAM-4019 выдаст ответ. Соответственно при использовании на одной линии нескольких модулей ADAM-4019 могут возникнуть следующие нежелательные ситуации: например, на линии два модуля ADAM-4019 с адресами 2 и 3. В случае, искажения одного бита в байте с адресом, - таком, что 2 превратится в 3, - вместо 2-го модуля ответит 3-й и распознать это по ответу будет невозможно, т.к. в ответе адрес отвечающего не указывается, а контрольную сумму никто из модулей не проверяет и, следовательно, не распознает искажение адреса.
В результате мы отказались от использования модулей ADAM-4019 и снова вернулись к ADAM-4018. Когда появились модули ADAM-4019+, мы решили попробовать сменить 4018 модули на 4019+, которые помимо индивидуальной настройки каналов (диапазон напряжения или тип термопары) позволяют определять обрыв термопары. В задаче, которая перед нами была поставлена, использовались термопары типа S. Однако, переход на модуль ADAM-4019+ не состоялся по следующим причинам.
Проблема с ADAM-4019+
Прежде чем говорить о проблеме, сразу скажу, что проблемы с игнорированием контрольной суммы в этих модулях нет. Если проверка контрольной суммы включена, то она, действительно, проверяется.
Теперь о проблеме. При настройке каналов измерения на тип термопары S (R, B) выяснилось, что значения температуры можно получать начиная только с 500 С. В модулях же ADAM-4018 температурные значения для S (R, B)-термопары возвращаются, начиная с 0 С. И это правильно, т.к. большинство градуировочных таблиц термопар начинаются с 0 мВ и позволяют уже с самого начала определять температуру, пусть не с такой точностью, как в рабочем диапазоне, но с точностью, достаточной для диагностики. Например, пользователь уже на ранних стадиях нагрева в системе может определить такие неисправности, как нарушение полярности при подключении термопары, или неисправность нагревателя, а также вообще отслеживать процесс нагрева еще до достижения начального порога того диапазона, что указан в спецификации.
В модулях же ADAM-4019+ (и, возможно, в модулях ADAM-4019 - этот факт нами не проверялся) до тех пор, пока температура термопары не достигнет начальной границы диапазона (например, 500 С для S-термопары), в ответ на запрос значения (команда #AA) возвращается значение "-999999".
Если же использовать модуль ADAM-4019+ в режиме измерения напряжения, то тогда невозможно определять обрыв термопары, т.к. проверка обрыва термопары производится только при настройке канала на конкретный тип термопары.
Единственный обходной вариант - это использовать для каждой термопары по 2 канала модуля ADAM-4019+, один настроенный на измерение напряжения, а второй - на тип термопары. По второму каналу определять обрыв термопары, а по первому выполнять вычисление температуры во всем диапазоне, который предоставляется градуировочной таблицей термопары. Однако, очевидно, что при таком подходе к одному модулю ADAM-4019+ можно будет подключить только 4 термопары. Не говоря о программных издержках подобного решения.
------------------------------------------------------------------------------------------------------------------
Данное сообщение не содержит вопросов, а было размещено с целью информирования.
Возможно, для кого-то оно окажется полезным. Спасибо за внимание.
|