01 – Прийнятий код функції не може бути опрацьований.
02 – Адреса даних, вказана у запиті, недоступна даному Slave.
03 – Значення, що міститься в полі даних запиту, є неприпустимою для Slave.
04 – Мала місце невідновлювана помилка, поки Slave намагався сформувати пакет-відповідь.
05 – Slave прийняв запит і опрацьовує його, але це вимагає багато часу. Ця відповідь оберігає Master від генерації помилки тайм-ауту.
06 – Slave зайнятий опрацюванням іншої команди. Master повинен повторити повідомлення пізніше, коли Slave звільниться.
07 – Slave не може виконати програмну функцію, прийняту в запиті. Цей код повертається для невдалого програмного запиту, який використовує функції з номерами 13 або 14. Master повинен запросити діагностичну інформацію або інформацію про помилки від Slave.
08 – Slave намагається читати розширену пам'ять, але виявив помилку паритету. Master може повторити запит, але звичайно в таких випадках потрібно проводити діагностику обладнання та ремонт.
Обчислення контрольної суми CRC16. Контрольна сума CRC16 обчислюють з використанням всіх байтів пакету даних DATA за таким алгоритмом:
1. Присвоїти змінній CRC, яка є типу __int16 (шістнадцяти бітне число) значення 0xFFFF.
2. Виконати з першим байтом DATA0 пакету даних таку операцію: CRC = CRC XOR DATA0 (додавання за модулем 2).
3. Зсунути CRC на один біт вправо.
4. Якщо вихідний біт (той що вийшов за межі числа CRC) дорівнює 1, виконати таку операцію: CRC = CRC XOR 0xA001. Якщо вихідний біт дорівнює 0, нічого не робити.
5. Виконати 8 разів пункти 3, 4 (з усіма бітами молодшого байту числа CRC, до якого було додано за модулем 2 байт DATA0).
6. Виконати з усіма наступними байтами (DATA1, DATA2 і т.д.) пакету даних пункти 2, 3, 4, 5
Отримане значення контрольної суми CRC16 додається в кінці пакету даних у такому порядку: спочатку молодший, а потім старший байти (на відміну від інших даних, що містяться в пакеті, який сформовано за протоколом Modbus – спочатку старший, а потім молодший байти).