Так и как переменную сделать float если там нет возможности выбора для InputRegister и по умолчанию встаёт только integer? Я пробовал читать из двух регистров создав соответсвенно две переменных Input Registers, но не пойму как тогда их потом собрать в один float, предпологаю что можно конвертировать в byte и смотреть что приходит сравнивать с тем что идёт если опрашивает OPC сервер, но подобное в любом случае будет решением через 5-тую точку.
Я ошибся - Input Registers — 16-битовый знаковый или беззнаковый тип, доступен только для чтения. Он состоит из 1 регистра ...с чего вы взяли что он из двух и сбили меня с толку...LapuLeen писал(а): ↑09.05.2020{, 01:02}Так и как переменную сделать float если там нет возможности выбора для InputRegister и по умолчанию встаёт только integer? Я пробовал читать из двух регистров создав соответсвенно две переменных Input Registers, но не пойму как тогда их потом собрать в один float, предпологаю что можно конвертировать в byte и смотреть что приходит сравнивать с тем что идёт если опрашивает OPC сервер, но подобное в любом случае будет решением через 5-тую точку.
Во первых всех с праздником! В данном приборе он точно состоит из двух регистров потому, что в OWEN OPC сервере есть возможность выбрать тип переменной float для функции чтения 0x04 (тобишь InputRegister) кроме того, запрос к первому регистру выглядит так: 01 04 00 00 00 02 71 CB. То есть в данном случае 02 означает команду прочитать два регистра.
Я вам процитировал из описания модбаса Input Registers — 16-битовый знаковый или беззнаковый тип,, а китайцы как всегда сделают как им удобноLapuLeen писал(а): ↑09.05.2020{, 10:40}Во первых всех с праздником! В данном приборе он точно состоит из двух регистров потому, что в OWEN OPC сервере есть возможность выбрать тип переменной float для функции чтения 0x04 (тобишь InputRegister) кроме того, запрос к первому регистру выглядит так: 01 04 00 00 00 02 71 CB. То есть в данном случае 02 означает команду прочитать два регистра.
Китайцы конечно делают как им удобно, но Input Registers и Holding Registers с точки зрения железа абсолютно одинаковы и занимают 16 бит на регистр, разница в том что Holding Registers можно читать и записывать, для Input Registers доступно только чтение. Не думаю что OWEN разрабатывал свой OPC сервер для каких-то непонятных китайских устройств, скорее всего подобных девайсов ещё много, сама функция то стандартная, просто в FLprog не предусмотрено чтение нескольких регистров для 0х04.
Так это у многих при передачи двух регистров идет своя последовательность байт ,стандарт это не оговаривает .Хорошо что в фл есть возможность менять очередность байт и регистровLapuLeen писал(а): ↑09.05.2020{, 12:04}Китайцы конечно делают как им удобно, но Input Registers и Holding Registers с точки зрения железа абсолютно одинаковы и занимают 16 бит на регистр, разница в том что Holding Registers можно читать и записывать, для Input Registers доступно только чтение. Не думаю что OWEN разрабатывал свой OPC сервер для каких-то непонятных китайских устройств, скорее всего подобных девайсов ещё много, сама функция то стандартная, просто в FLprog не предусмотрено чтение нескольких регистров для 0х04.
Отправлено спустя 32 минуты 8 секунд:
Разобрался с передачей запроса, осталось разобраться с обработкой ответа, подозреваю, что трабла в том, что вторым байтом в ответе идёт 4 а не 3 из-за этого выдаёт ошибку.