This is topic Переменная, содержащая код ошибки ModBus in forum Редактор проекта TRACE MODE 6 / at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/32/t/000511.html

Posted by Dmitry G. (Участник № / Member № 5438) on :
 
Здравствуйте!

Переменная, содержащая код ошибки ModBus, @e_MODBUS сама не сбрасывается после того, как причина ошибки исчезает.
1) В документации сказано: "Как правило, посылка положительного значения в переменную типа OUTPUT обнуляет значение аналогичной переменной-счетчика типа INPUT." Протестировал - не обнуляет, а в переменную записывается переданное положительное значение. И то - не всегда. Как, все-таки, сбросить код ошибки?
2) Что означает код ошибки 13? В документации ошибка с этим кодом никак не прокомментирована.

[ 01.11.2011, 12:18: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1. "Как правило, ... переменной-счетчика ..."
В данном случае диагностическая переменная - не "переменная-счетчик". Обнуление происходит только при подаче "0". Однако, обнуление происходит, только если ошибочная ситуация устранена. В данном случае, видимо, код ошибки постоянно восстанавливается в процессе обмена.

2. Код ошибки "13" - ERR_RT_CODE (по нашей документации) означает, что получено сообщение об ошибке в кадре ответа от устройства. Для Modbus это может означать, например, ошибка адреса переменной или ошибка в функции обращения к указанной переменной.
Соответствующему каналу обмена при этом выставляется признак аппаратной недостоверности.
Для уточнения кода ошибки, возвращаемой устройством, надо прочитать возвращаемый кадр (например, с помощью перехватчика COM-порта или с помощью отладочных функций Trace Mode 6).
Во втором случае можно поставить этому каналу обмена флажок "Отладка" и задать в файле конфигурирования запуска МРВ ключ DEBUG=2200. Тогда в протоколе профайлера будут сообщения об ошибках обмена с ответными кадрами. Расшифровка кадра ответа - в соответствии с описанием протокола Modbus (протокол открыт в интернете).
 
Posted by Dmitry G. (Участник № / Member № 5438) on :
 
1. Специально проверил - при подаче "0" обнуление не происходит. Значение диагностической переменной меняется только при подаче положительного числа. Код ошибки постоянно не восстанавливается, т.к. ошибку я создаю сам однократно в тестовых целях.

2. Хотелось бы, чтобы "ваша" документация попала и в "нашу" тоже.

3. Сегодня встретился с очередными неизвестными кодами ошибок @e_MODBUS - 777 и 778. Каков их смысл?

4. Если по ModBus через разные порты опрашивается несколько устройств, как определить, к какому из них относится код ошибки в переменной @e_MODBUS?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1. Как любой другой канал OUT, канал, связанный с диагностической переменной @e_MODBUS_OUT, отрабатывает свою функцию только при изменении своего значения или при взведении в 1 атрибута EXEC (39). Если Вы уверены, что ошибка формируется только однократно и значение канала @e_MODBUS_OUT равно 0, пошлите 1 в его атрибут EXEC (39).

2. Текст ERR_RT_CODE и означает - "от устройства получен код ошибки".

3 и 4. Если Вы работаете в релизе 6.07.7, возвращаемый код ошибки состоит из двух байтов. 0-й байт содержит собственно код ошибки, а 1-й байт - логический номер COM-порта (0 для COM1, 1 для COM2 и т.д.).
Т.о., 777 и 778 соотвутствуют кодам 9 и 10 по COM4.
Номер устройства таким образом определить нельзя.
Следует анализировать недостоверности каналов обмена.

Приносим извинения за неполноту описания.
 
Posted by Dmitry G. (Участник № / Member № 5438) on :
 
Спасибо!
 
Posted by Dmitry G. (Участник № / Member № 5438) on :
 
Уточните, пожалуйста, что имеется в виду под "каналом OUT, связанным с диагностической переменной @e_MODBUS_OUT"? Правильно ли я понимаю, что необходимо создать канал OUT любого типа и связать его с переменной @e_MODBUS_OUT?
Я поступил таким образом, и для сброса переменной делаю следующее:
записываю 0 в переменную @e_MODBUS_OUT и подаю 1 в атрибут EXEC связанного с ней канала. Однако это не приводит к обнулению диагностической переменной.
Опишите, пожалуйста, пошагово процедуру сброса переменной @e_MODBUS
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
М.б., "записываю 0 атрибут ВХОД и подаю 1 в атрибут EXEC канала OUT, связанного с переменной @e_MODBUS_OUT"?
Так сбрасывать методически правильно, если только код ошибки не восстанавливается из-за постоянного обмена с ошибкой.

Если не работает, присылайте Ваш проект на адрес техподдержки.
 
Posted by Dmitry G. (Участник № / Member № 5438) on :
 
Выслал проект на адрес hotline@adastra.ru
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Ответ дан по электронной почте.

Для сброса значения нужно было использовать любой числовой канал типа Out. Канал Call не является числовым каналом.
 
Posted by Dmitry G. (Участник № / Member № 5438) on :
 
Спасибо, все заработало.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2