Реакция на ошибки MODBUS
Если ведущее устройство передает ведомому запрос, оно ожидает нормальный ответ (нормальное выполнение запроса). С запросом ведущего устройства может произойти одно из четырех событий:
· Если ведомое устройство приняло запрос без коммуникационных ошибок и может нормально обработать его, оно возвращает нормальный ответ.
· Если ведомое устройство не приняло запрос вследствие коммуникационной ошибки, он не будет возвращать ответ. Ведущее устройство, в конечном счете, должно обнаружить превышение времени ожидания ответа на запрос.
· Если ведомое устройство приняло запрос, но обнаружило коммуникационную ошибку (ошибка четности, LRC, CRC, …), ответ не возвращается. Ведущее устройство в конечном счете должно обнаружить превышение времени ожидания ответа на запрос.
· Если ведомое устройство приняло запрос без коммуникационных ошибок, но не может выполнить его (например, если запрос требует считывания несуществующих внешних входных линий или регистров), ведомое устройство возвращает сообщение об ошибке, информируя клиента о природе ошибки.
Сообщения об ошибке имеют два поля, чей формат отличается от формата нормального ответа:
Поле кода функции: в нормальном ответе ведомое устройство возвращает без изменений код функции, переданный в запросе. Все коды функций имеют старший значащий бит равным 0 (их значения меньше числа 80h). При передаче ответа – сообщения об ошибке ведомое устройство устанавливает в старшем значащем бите кода функции значение 1. Это делает значение кода функции на больше 80h, чем значение в нормальном ответе.
По установленному старшему значащему биту в коде функции ведущее устройство может определить ответ – сообщение об ошибке и проверить код ошибок в поле данных.
Поле данных: в нормальном ответе ведомое устройство может возвращать в области данных данные или статистику (любая информация, которая была затребована в запросе). В ответе—сообщении об ошибке ведомое устройство возвращает в поле данных код ошибки. Он определяет причину, вызвавшую ошибку.
Пример запроса ведущего устройства и ответа – сообщения об ошибке ведомого устройства.
Запрос | Ответ | ||
Имя поля | (hex) | Имя поля | (hex) |
Функция | Функция | ||
Старший байт начального адреса чтения | Код ошибки | ||
Младший байт начального адреса чтения | A1 | ||
Старший байт числа выходных линий | |||
Младший байт числа выходных линий |
В этом примере ведущее устройство адресует запрос к ведомому устройству. Код функции (01) соответствует операции чтения состояния внешних дискретных линий. Он запрашивает состояние выходной линии по адресу 1245 (04A1h). Должна быть считана только одна входная линия.
Если входная линия с таким адресом отсутствует в ведомом устройстве, последнее возвращает сообщение об ошибке с кодом ошибки 02. Этот код указывает на неверный адрес данных для ведомого устройства.
Табл. 4.2. Список кодов ошибок MODBUS
Коды исключения MODBUS | ||
Код | Имя | Описание |
ILLEGAL FUNCTIOТ | Код функции, принятой в запросе, не поддерживается ведомым устройством. Это может произойти потому, что код функции выполним только для некоторых устройств и неприменим к выбранному устройству. Это также может означать, что ведомое устройство находится в состоянии, в котором не может выполнить данный запрос, например – оно не сконфигурировано. | |
ILLEGAL DATA ADDRESS | Адрес данных, принятый в запросе, недоступен в ведомом устройстве. Точнее говоря, неверна комбинация начального адреса и длины данных. Для контроллера, имеющего 100 регистров, запрос со смещением 96 и длиной 4 будет корректным, а запрос со смещением 96 и длиной 5 вызовет генерацию ошибки 02. | |
ILLEGAL DATA VALUE | Значение, содержащееся в поле данных запроса, недопустимо для ведомого устройства. Этот код индицирует ошибку в структуре данных сложного запроса, например – неверную длину данных. Это может не означать, что данные находятся за допустимыми значениями данного регистра, так как протокол MODBUS не имеет данных о каждом конкретном значении регистра. | |
SLAVE DEVICE FAILURE | При попытке выполнить запрос в ведомом устройстве произошла неисправимая ошибка. | |
ACKNOWLEDGE | Специально используется совместно с программированием команд. Ведомое устройство приняло запрос и выполняет его, но для выполнения обработки требуется очень много времени. Этот ответ передается для того, чтобы предотвратить ошибку максимального времени ожидания ответа со стороны ведущего устройства. После этого ведущее устройство может выдать сообщение с командой Pool Program Complete, чтобы определить, завершено ли выполнение запроса. | |
SLAVE DEVICE BUSY | Специально используется совместно с программированием команд. Ведомое устройство выполняет обработку длительной по времени команды. Ведущее устройство должно передать сообщение позже, когда ведомое устройство освободится. | |
MEMORY PARITY ERROR | Специализированный код, используется только совместно с кодами функций 20 и 21, и типом записи 06. Индицирует, что расширенная область файла имеет ошибки при проверке содержимого. Ведомое устройство пытался считать записанный файл, но обнаружил ошибку четности в памяти. Ведущее устройство может повторить запрос, ведомое устройство может потребовать непосредственного обслуживания (ремонта). | |
0A | GATEWAY PATH UNAVAILABLE | Специально используется совместно со шлюзами, индицирует, что шлюз не смог выполнить внутреннюю коммутацию между входным и выходным портами для выполнения запроса. Обычно означает, что шлюз неправильно сконфигурирован или перегружен. |
0B | GATEWAY TARGET DEVICE FAILED TO RESPOND | Специально используется совместно со шлюзами, индицирует, что ответ от устройства-приемника получен не был. Обычно означает, что устройство не подключено к сети. |
Дата добавления: 2016-04-19; просмотров: 5765;