koyodza (31.10.2011 13:16, просмотров: 538) ответил Лeoнид Ивaнoвич на Еще вопрос: а как обычно делают, подчиненное устройство отвечает сразу после запроса (фактически, это через 3.5T) или перед ответом вводят какую-то паузу?
обычно нужна пауза, тем более если это 485, а не 232 я делаю паузу конфигурируемой, по-умолчанию обычно 5-10 мсек, но на низких скоростях нужно увеличивать.
Ещё обратите внимание на запрет использования адресов выше 247 (от F8 и выше), это сделано (по-моему) для подавления помех и возможности посылки перед пакетом лидирующих FF
Т.е. если приёмный буфер пуст, то байты от F8 и выше игнорируются. Если в буфере лежит хотя бы один байт, то дальше принимаем всё подряд до наступления паузы (больше 3,5Т на низких скоростях и 1,75мсек на высоких), только после этого смотрим, наш пакет или нет (первый байт в буфере совпадает с нашим адресом или 0, т.е. широковещательный), и если пакет наш, то уже потом считаем CRC. Если не сошёлся (или был не наш адрес) то сбрасываем буфер, если всё ок, то разбираем дальше.
Кстати, паузу 3,5Т (1,75мсек) я не выдерживаю очень точно, обычно это делается по системному тику 1мсек, т.е. могу отработать от 2 до 3 мсек вместо 1,75 мсек, просто это время прибавится к задержке перед ответом