3. Написал макрос чтения регистра со слайв устройства:
Код:
WORD vlb;
Read(PLC, 11, MODBUS_RTU_REG_4X, 0, 0, TYPE_WORD, &vlb)
PSW[300]=vlb;
Регистр под номером 0 читается, все хорошо. Но стоить отключить линию RS-485 от вторичного устройства в регистре PSW[300] появляется значение "2". Я понимаю что это значение код какой то ошибки (или мусор), мне не понятно почему регистру PSW[300] присваивается код ошибки, если чтение со слейв устройства не произошло? Разве не логично тогда регистру PSW[300] никаких данных не присваивать? Код ошибки можно и по другому проверить, вот пример "костыля", который проверяет код возврата функции Read(), и только после проверки присваивает значение регистру PSW[300]:
Код:
WORD vlb;
if(Read(PLC, 11, MODBUS_RTU_REG_4X, 0, 0, TYPE_WORD, &vlb))
{
PSW[300]=vlb;
};
В документации такое поведение функции Read() не описано.