kaban4ik писал(а):
а я не знал этогоПросто читаем стандарт (я то его уже давненько читал, и говорю по памяти)
kaban4ik писал(а):
Тогда почему моя программа читаетИ откуда вы знаете, что за пять лет не было ни одного сбоя.
Скорее всего, вы работаете в режиме мастера. И не на очень большой скорости.
Выплюнули в COM пакет целиком. Гарантированно один пакет.
Вероятность того, что винда не прервет передачу на этой паре сотен байт -- невелика, весь пакет влезет в FIFO порта.
Но - ненулевая. И еще зависит от того, что еще в это время крутится на десктопе.
Далее, относительно долго (100 мсек - это очень долго, в сравнении со скоростями порта) ждем приема.
Все, что принято - это как бы должен быть один пакет ответа слэйва. Один, и только один.
Если при приеме будут недопустимые (дольше 1.5 символов) дыры, то спецификация Modbus-rtu требует забраковать весь пакет.
Вы (на десктопе) этого не сделаете.
Работать как бы и будет. Но это не Modbus-rtu. Сколько бы кто-то не гнул пальцы.
А уж про слэйв-режим на десктопе - и говорить особо не приходится.
А есть еще вопросы помехозащищенности линии. Они не определяются стандартом. Но из-за этого они никуда не пропадают.
Стандарт на Modbus фактически требует физическую реализацию как RS-485.
Это полудуплекс. Значит надо переключаться с приема на передачу, и наоборот.
Когда линия висит типа в 3-м состоянии (все устройства на приеме) - помехозащищенность весьма хилая.
Особенно опасны помехи сразу перед передачей пакета, и сразу после. Один импульс помехи - и весь пакет ушел в брак.
В смысле - должен уйти. Потому-что стандарт нормирует алгоритмы приема/передачи.
Чтобы этого не происходило, необходимо держать "жесткую единицу" в течении хотя бы одного символа (а лучше - 3-х) до, и после пакета.
Этого стандарт не требует, но это жизненно необходимо.
Если, конечно, вас интересует результат. А не возможность покрутить пальцы веером.
Вообще-то, главное, что я хотел сказать - это то, что если ты хочешь сделать дело, то вопросом надо владеть...
Как бы "а я не знал этого" -- совсем не катит.
Стандарт на Modbus не является какой-то секретной информацией.