Цитата Сообщение от r0mashkin0 Посмотреть сообщение
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() не описано.
Зато во встроенной справке макросов такое поведение функций Read(), Write() и пр. описано.
Захват-1.png
Т.к. функции на Си имеют возвращаемые значения. то костылем Ваше решение называть нельзя, наоборот этот правильное написание программы.
Жаль конечно, что в руководство пользователя возвращаемые значения для таких функций (не только Read()) не попали