-
- Еще вопрос: а как обычно делают, подчиненное устройство отвечает сразу после запроса (фактически, это через 3.5T) или перед ответом вводят какую-то паузу? - Лeoнид Ивaнoвич(31.10.2011 12:59)
- обычно нужна пауза, тем более если это 485, а не 232 koyodza(974 знак., 31.10.2011 13:16)
- Т.е. надо понимать, что у мастера Modbus таймаут приема ответа конфигурируемый, и он обычно больше 3.5T? Лeoнид Ивaнoвич(750 знак., 31.10.2011 13:29)
- таймаут приёма ответа мастером обычно сотни мсек (ну десятки в крайнем случае) koyodza(825 знак., 31.10.2011 13:38 - 13:53)
- Еще раз насчет лидирующих FF: их воспринимать как паузу? Т.е. вместо паузы 3.5t возможна передача 4-х FF, или все-таки пауза должна быть обязательно? - Лeoнид Ивaнoвич(02.11.2011 14:19)
- в конце пакета их воспринимать как данные. Ну а после паузы ждать прихода байта меньше F8 (большие игнорировать), следующие за ним принимать все до наступления паузы. Т.е. заполнять весь межпакетный интервал FF не могут. Байт-стаффинга тут нет, koyodza(157 знак., 02.11.2011 14:22 - 14:27)
- Я тоже так сделал. Смутило про формирование паузы: "This is most easily implemented as a multiple of character times at the baud rate that is being used on the network". Вот и подумал, не передают ли FF вместо паузы для формирования интервала. Лeoнид Ивaнoвич(850 знак., 02.11.2011 15:17)
- конечно связана koyodza(487 знак., 02.11.2011 22:53)
- Вот что вышло: Лeoнид Ивaнoвич(04.11.2011 03:41)
- конечно связана koyodza(487 знак., 02.11.2011 22:53)
- Я тоже так сделал. Смутило про формирование паузы: "This is most easily implemented as a multiple of character times at the baud rate that is being used on the network". Вот и подумал, не передают ли FF вместо паузы для формирования интервала. Лeoнид Ивaнoвич(850 знак., 02.11.2011 15:17)
- в конце пакета их воспринимать как данные. Ну а после паузы ждать прихода байта меньше F8 (большие игнорировать), следующие за ним принимать все до наступления паузы. Т.е. заполнять весь межпакетный интервал FF не могут. Байт-стаффинга тут нет, koyodza(157 знак., 02.11.2011 14:22 - 14:27)
- Спасибо! - Лeoнид Ивaнoвич(31.10.2011 13:49)
- Еще раз насчет лидирующих FF: их воспринимать как паузу? Т.е. вместо паузы 3.5t возможна передача 4-х FF, или все-таки пауза должна быть обязательно? - Лeoнид Ивaнoвич(02.11.2011 14:19)
- таймаут приёма ответа мастером обычно сотни мсек (ну десятки в крайнем случае) koyodza(825 знак., 31.10.2011 13:38 - 13:53)
- Т.е. надо понимать, что у мастера Modbus таймаут приема ответа конфигурируемый, и он обычно больше 3.5T? Лeoнид Ивaнoвич(750 знак., 31.10.2011 13:29)
- обычно нужна пауза, тем более если это 485, а не 232 koyodza(974 знак., 31.10.2011 13:16)
- Так что же делать, если внутри пакета пауза 1.5T? Лeoнид Ивaнoвич(499 знак., 31.10.2011 12:16)
- да, я при меньше 3,5Т продолжаю приём. Если хотите меньше проблем - меняйте логику и делайте всё через регистры, а не пользовательскими функциями - koyodza(31.10.2011 12:20)
- Спасибо! Еще вопрос для общего развития: что я должен был бы делать при паузе 1.5T, если бы чётко соблюдал спецификацию? - Лeoнид Ивaнoвич(31.10.2011 12:26)
- Если больше t1.5 и меньше t3.5 то считать фрейм битым. - diper(31.10.2011 12:35)
- сбросить буфера, считать пакет бытым и даже не пытаться считать его CRC, инкрементировать счётчик битых пакетов - koyodza(31.10.2011 12:34)
- Похоже, что так. Теперь понятно. На диаграмме после паузы 1.5T переходим в другой цикл, где ждем оставшееся до 3.5T время. Если за это время приходит символ - пакет битый (NOK). Если символ не приходит - считаем CRC. Но это уже фактически после Лeoнид Ивaнoвич(12 знак., 31.10.2011 12:40)
- Не совсем так. Нужно пометить пакет битым и все равно дождаться конца фрейма по таймауту t3.5 Но имхо лучше вообще один таймаут заложить и не мучаться, а то бывает что байты бегут неравномерно и проще железке назначить вручную больший таймаут чем diper(25 знак., 31.10.2011 12:38)
- всё верно - koyodza(31.10.2011 13:29)
- Спасибо! Еще вопрос для общего развития: что я должен был бы делать при паузе 1.5T, если бы чётко соблюдал спецификацию? - Лeoнид Ивaнoвич(31.10.2011 12:26)
- да, я при меньше 3,5Т продолжаю приём. Если хотите меньше проблем - меняйте логику и делайте всё через регистры, а не пользовательскими функциями - koyodza(31.10.2011 12:20)
- Еще вопрос: а как обычно делают, подчиненное устройство отвечает сразу после запроса (фактически, это через 3.5T) или перед ответом вводят какую-то паузу? - Лeoнид Ивaнoвич(31.10.2011 12:59)