Как стать автором
Обновить

Комментарии 5

Не раз сталкивался с неприятной особенностью «зависания» обмена, когда ни Done, ни Error на выходах не было. Кроме этого, некорректно работает «штатный» таймаут, точнее, минимальное время можно выставить, если не ошибаюсь, минимум 500мс, да и то, сколько не менял, оно фактически так и оставалось по-умолчанию (секунда?). В результате пришлось писать дополнительно свой таймаут со «своим» кодом ошибки.
А при каких условиях происходило зависание?
Да щас точно не вспомню. При неправильной адресации (койлы больше 9999, например, ошибка 8383 вроде), ещё пару раз ловил на рандомном зависании (в основном на 485м, но это и на TCP бывало, видимо драйвер в какой-то части общий). В общем, таймаут нет-нет, да пригождается…
Касаемо «вывернутых» байтов поступил проще: использовал %B(и при необходимости %W, аналоги CAD-CAW ) описание тут
Что касается адресации.

Если в Modbus TCP задать MB_MODE, равным 1фф, где фф — номер функции модбас, то можно адресовать любой адрес в диапазоне от 0 до 65535.

Для RTU это, почему-то, касается только регистров хранения.

Вот чего-чего, а рандомных зависаний я вообще не наблюдал, а Modbus, хоть TCP, хоть RTU, в моих программах крутится очень много где по России. Причем, и «лицензионный» для 300ых, и самопал для них же, и «портальные» версии.
как будет возможность на след. проекте потестить, я обязательно выловлю и напишу.
Регистры хранения — есть holding? Если да, то там и так по умолчанию 65535
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории