reficul0 : |
27.8.18 07:00 |
Один из модулей рабочего сервера, опирается на спецификацию модбаса(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 нашего модуля, для корректного общения с устройством теплосчетчик ВИС.Т ?
[ Редактировано reficul0 в 27.8.18 08:01 ]
[ Редактировано reficul0 в 27.8.18 08:01 ] | |
|