Просмотр полной версии : Поведение модуля в исключительных ситуациях
Доброго дня, помогите новичку разобраться в "Поведение модуля в исключительных ситуациях"
Как вытащить этот старший байт из Real.
Если можно с примером в CFC
Заранее спасибо за помощь.
7.3.9.3 Поведение модуля в исключительных ситуациях
При возникновении исключительных ситуаций, в результате измерения соот-
ветствующего канала (старший байт переменной типа REAL) устанавливается спе-
циальное значение соответствующее исключительной ситуации.
Модуль аналогового ввода распознает следующие исключительные ситуации:
− результаты измерения заведомо не верны – 0x F1;
− результаты измерения не готовы – 0x F6;
− сигнал на входе больше возможного – 0x FA;
− сигнал на входе меньше возможного – 0x FB;
− перегрузка в канале измерения тока – 0x FС;
− обрыв датчика в канале измерения напряжения – 0x FD.
У вас вместо real пойдет билиберда по идее, и вот тогда вы смотрите старший байт.
Вроде макросы были от производителя, которые сразу выполняют контроль и в случае неисправности датчика дают на выход значение по умолчанию, которое зададите.
Decode_float смотрите в библиотеках Owen
ПростоМастер
07.03.2017, 11:10
если переменная больше 0хF0 это уже ошибка, дальше простым перебором
можно и модуль сделать, чтобы сразу выводил с нужным описанием
только не пойму зачем именно старший байт вытаскивать??? при ошибке в переменной будет значение 0хFX, и никакой другой "билиберды" ))
если переменная больше 0хF0 это уже ошибка, дальше простым перебором
можно и модуль сделать, чтобы сразу выводил с нужным описанием
только не пойму зачем именно старший байт вытаскивать??? при ошибке в переменной будет значение 0хFX, и никакой другой "билиберды" ))
так то Real выглядит как то так 16#ХХХХХХХХ, где первые два икса после решетки это и есть возможный код ошибки, а 0хF0 это всего лишь байт
ПростоМастер
07.03.2017, 13:28
так то Real выглядит как то так 16#ХХХХХХХХ, где первые два икса после решетки это и есть возможный код ошибки, а 0хF0 это всего лишь байт
так непонятно зачем тащить один байт??? когда ошибка это число заведомо больше стандартного диапазона
или лыжи не той системы не пойму :confused: :cool:
ПростоМастер
07.03.2017, 13:30
я бы всё понял, если бы в машинных кодах работали, ну на крайний случай в асме , напрямую с камнем
ПростоМастер потому что надо не просто сообщить "Алярм!, Алярм!" а еще сказать почему собственно Алярма с датчиком случилась...
так непонятно зачем тащить один байт??? когда ошибка это число заведомо больше стандартного диапазона
или лыжи не той системы не пойму :confused: :cool:
Каково Ваше решение сообщать в одной и той же переменной и реальное значение и ошибку? Выведено за диапазон как раз и для того чтоб программный код правильно интерпретировал приходящее значение, что не так то? Не читали перечень возникающих ошибок?
ПростоМастер
07.03.2017, 15:07
ПростоМастер потому что надо не просто сообщить "Алярм!, Алярм!" а еще сказать почему собственно Алярма с датчиком случилась...
Каково Ваше решение сообщать в одной и той же переменной и реальное значение и ошибку? Выведено за диапазон как раз и для того чтоб программный код правильно интерпретировал приходящее значение, что не так то? Не читали перечень возникающих ошибок?
приехали. ну вы чего парни. заработались???
к примеру диапазон измерений (образно) от 0 до 10
как сообщить в одном числе если данные не верны и саму ошибку??? коды ошибок к примеру 100. 200. 300
оч просто, 9 это сигнал, а к примеру 209 это уже ошибка. в нашем случае это будут отрицательные числа и чего сложного распознать нужный аларм???
переведите если уж очень надо 16х в десятичную. если в hex не знаете почему коды ошибок и флаги в старших байтах стоят
и решение сообщать в одной переменной ошибку с неверными данными или данные без кода ошибки, принято не мной. это логика, причём элементарная
или мы на разных языках об одном и том же?? хз
зачем тянуть старший байт? если по значению переменной можно сразу понять верные данные или там лажа, причём лажа с конкретным указанием ошибки. причём понять это можно не выделяя старший байт.
оч просто, 9 это сигнал, а к примеру 209 это уже ошибка. в нашем случае это будут отрицательные числа
не в нашем, а в конкретно в Вашем придуманном случае, тут пользователи желают с LReal работать частенько
Тянут старший байт только для того чтоб расшифровать код ошибки и реализацию как это делать ни кто не выкладывал. Например я не вижу ни какой заморочки в одном условии проверять старший байт на ошибку и принимать какое то решение и если он не равен ошибке обрабатывать аналоговый сигнал
ПростоМастер
07.03.2017, 16:14
удачи)
спорить бесполезно))
спорить бесполезно))
О чем ? О том что не вкуриваешь в разницу форм хранения и представления ?
Всем конечно спасибо, но кто-то сможет помочь с конкретикой.
Как просто вывести общую ошибку понятно, а как конкретизировать ошибку.
При нормальной работе датчика я получаю нормальные значения, а вот при обрыве датчика получаю хрень вида -1.063382e+037 и как мне эту хрень конкретизировать с "0x FD" и с другими ошибками.
Всем заранее спасибо.
Lexand я же вам написал, используйте FB Decode_float если используете ПЛК Овен, уточните просто, есть ли эта библиотека в поддержке вашего ПЛК.
Всем конечно спасибо, но кто-то сможет помочь с конкретикой.
Как просто вывести общую ошибку понятно, а как конкретизировать ошибку.
При нормальной работе датчика я получаю нормальные значения, а вот при обрыве датчика получаю хрень вида -1.063382e+037 и как мне эту хрень конкретизировать с "0x FD" и с другими ошибками.
Всем заранее спасибо.
Вам же уже говорили - используйте ФБ DECODE_FLOAT из библиотеки "PID_Regulators.lib"
29948
Подаете на вход значение из аналогового входа, на выходе получаете значение и код ошибки
но он лично меня не устраивает
-не работает в эмуляции
-при наличии ошибок измерения на выходе будет заранее предопределенное значение
По этому
Я вместо DECODE_FLOAT использую собственный ФБ аналогичного назначения http://www.owen.ru/forum/showthread.php?t=22397&p=183061&viewfull=1#post183061
Отличия от DECODE_FLOAT
- работает в эмуляции;
- в момент ошибки измерения на выходе имеет последнее правильное значение, а не фиксированное значение. Т.е. "замораживает" последнее достоверное значение
Последнее отличие позволяет игнорировать одиночные ошибки измерения, не "мельтешить" цифрами на HMI и не бросать PID в крайние положения.
Там же приведен код функции для эмуляции ошибок измерения.
можно еще создать указатель на DWORD, затем сместить на 24 бита в право и получите код ошибки
Сергей Лысов
10.03.2017, 10:47
Алексей обратился в поддержку, вопрос решён.
Пример на CFC через ФБ decode_float прикреплён к сообщению.
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot