Зарегистрирован: May 25, 2010 Сообщения: 13 Рейтинг: +0/-0
Добавлено: Ср 21 Июл, 2010 4:30:35 Заголовок сообщения: Переполнение с остановкой программы
Для измерения температуры используем Pt100, подключенные к 1769-IR6.
Масштабирование производим в блоке SCP с параметрами (-32768,32767)->(-200,850) - по документации.
Калибровку выполняем с помощью магазина сопротивлений и таблицы для использ. датчиков Pt100. Все работает и правильно пересчитывает в температуру, пока не достигаем сопротивления прибл. 220 Ом (прибл. 300 Цельсия). Выскакивает флаг переполнения и загорается FAULT в среде программирования. Вынуждены были в конце каждого цикла сбрасывать флаг переполнения, тогда остановки не происходит. Непонятна причина переполнения, т.к. при указанном сопротивлении до границ диапазона далеко. Характерно, что при отсоединении магазина (обрыв, бесконечное сопротивление) переполнения не возникает.
Подскажите, плз, если кто сталкивался с этим.
Так больше ничего и нет (с аналогами). Значение FLOAT с выхода SCP множится на 100 (для сохранения десятичных цифр) и сохраняется в виде INT для чтения по модбас.
Как можно локализовать ошибку?
Так больше ничего и нет (с аналогами). Значение FLOAT с выхода SCP множится на 100 (для сохранения десятичных цифр) и сохраняется в виде INT для чтения по модбас.
Как можно локализовать ошибку?
Смотри выход SCP во Float, потом INT умноженный на 100.
При твоей верхней темепературе (850) надо умножать на 10, иначе твой максимум будет 327.67 град.
Лучше поручить масштабирование в градусы модулю, он умеет.
Поведение при обрыве тоже настраивается.
Я уже давно не занимался контроллерами Allen Bradley, однако позволю себе выказать идею. Я думаю, что переполнение происходит при попытке преобразовать REAL значение в INT.
Цитата:
Все работает и правильно пересчитывает в температуру, пока не достигаем сопротивления прибл. 220 Ом (прибл. 300 Цельсия).
Цитата:
Значение FLOAT с выхода SCP множится на 100 (для сохранения десятичных цифр) и сохраняется в виде INT для чтения по модбас.
Итак, допустим, Вы измерили температуру, и она равна 330 град. С. Затем Вы умножили ее на 100 и получили 33000. Далее пытаетесь преобразовать ее в INT. Насколько я помню, тип INT в контроллерах Allen Bradley - это знаковое 16-разрядное целое, а значит его диапазон равен -32768..32768. Вы же пытаетесь записать в эту переменную значение 33000, что вызывает переполнение.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
Smart Solutions VDT GmbH | Friedrich-List-Allee 38, D-41844 Wegberg-Wildenrath, Germany Tel.: +49 2432 933 57 83 | e-Mail: office@vdt-solutions.de Все товарные знаки и торговые марки являются собственностью их владельцев.
При использовании материалов сайта ссылка на данный сайт обязательна. Открытие страницы: 0.132 секунды