То есть получается, если в 3х или 4х указать тип инт, то он считывает один регистр, а если float, то два регистра насколько я понял. Правильно понял?
То есть если я хочу обратить через 4хbit, к 100 регистру 1 биту, запрос такой 4xbit10001
Последний раз редактировалось kondor3000; 24.06.2022 в 13:35.
int = word - 1 sign bit, для 16 бит. На знак можно не обращать внимание.
uint = word.
ЗЫ. Для масок - не обязательно word. Просто int и uint - зависят от платформы (4, 8, 16, 32 или 64 бит), а word - всегда 16 бит. Но маски int AND/OR int - работают вне зависимости от платформы.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик
1. Не bit (1 bit) а byte (8 bit).
2. Стандартно Modbus читает word (регистр, 2 byte). Стандартный float занимает 2 word (регистра, 4 byte). Есть float повышенной точности. Применяется достаточно часто, читайте.
3. 0х4 функция - это input registers. Конечно, можно переопределить, но обычно это упакованное значение группы битовых входных сигналов. Для внутренних переменных - используют 0х3 функцию (holding registers - внутренняя память).
4. Нумерация осуществляется по битам в битовых функциях, по регистрам в регистровых.
5. Считать float удобнее функцией 0x10. Она возвращает несколько регистров подряд (столько, сколько запросили). Т.е. можно запросить сразу несколько переменных и получить их быстрее, избежав накладных расходов на заголовки команд
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик