"Согласно договору на техническое обслуживание ЗАО «Сервисная Компания «Тепловизор» в 2006 году выполняла работы по сервисному обслуживанию узлов учета тепловой энергии в домах ГУП ДЕЗ «Рязанский». Работы выполнялись в установленные сроки и с хорошим качеством."
Поле "Response data Length" функции Read FIle Record
Новенький
Один из модулей рабочего сервера, опирается на спецификацию модбаса(http://modbus.org/specs.php), в соответствие с этой спецификацией в модуле присутствует функция Read File Record. В ответе на запрос, составленный по спецификации функции Read File Record, присутствует поле "Response data Length". Согласно таблице этой функции это поле должно принимать значения от 0x07 до 0xF5 включительно. Проблема заключается в том, что при вычислении ограничений самостоятельно было установлено, что в указанных ограничениях этого поля в спецификации не прослеживается логика. По нашим расчетам нижняя граница должна быть равна 0x04(4) байта ( 1 байт на File Response length + 1 байт на Reference Type + 2 байта для данных из одного регистра ). Так же по расчетам верхняя граница должна составлять 0xFA (251) ( 253 байта это максимальная длинна PDU, вычитаем из нее 1 байт на Function code, так же вычитаем 1 байт для Response Data length ). Более того, ограничения поля "Response data Length" и поля "Sub-Req. x, File Resp. length" странным образом пересекаются. По факту, при соблюдении обоих, минимальный размер Response data Length недостижим, как и максимальный размер File Resp. length. Так же, если учитывать такие ограничения, то становится невозможным запросить меньше двух регистров (4-х байт) в одном подзапросе, из чего вытекает что невозможно создать запрос, который будет опрашивать данные из 1 регистра.
Вопрос: Какие ограничения должны быть у поля "Response data Length" функции Read File Record нашего модуля, для корректного общения с устройством теплосчетчик ВИС.Т ?
Re: Поле "Response data Length" функции Read FIle Record
Администратор
В официальной модбас-спецификации достаточно ошибок и неточностей. Мало ли, что накопипастил творец этого документа - руководствуйтесь собственным здравым смыслом и всё будет хорошо. Мне вообще не видится необходимым проверять поля-счётчики ответа на граничные условия. Необходимо и достаточно проверить их на соответствие _запрошенному_ числу регистров (байтов), без чего всё равно не обойтись. С учётом поддержки прибором только одного файлового подзапроса: Response data Length = число запрошенных байтов + 2. Sub-Req. 1, File Resp. length = число запрошенных байтов + 1. А верхнее ограничение по числу байт установлено прибором в 96 байт (размер записи-заголовка архива).
-- Виктор В. Жданов NegaSoft Co. FAE НПО "Тепловизор", Главный инженер-программист
Вы не можете начинать темы. Вы не можете редактировать свои сообщения. Вы не можете создавать опросы. Вы не можете вкладывать файлы в сообщения. Вы не можете отвечать на сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать.
НПО «Тепловизор», Москва, Рязанский проспект, 8а тел/факс: +7(495)730-47-44, +7(495)127-28-44