опенхаб вроде на яве написан, надо досконально изучить как формируется Float чтоб понять как его создавать
http://en.wikipedia.org/wiki/Single-...g-point_format
опенхаб вроде на яве написан, надо досконально изучить как формируется Float чтоб понять как его создавать
http://en.wikipedia.org/wiki/Single-...g-point_format
В общих чертах понятно, но не программисту довольно сложно так вот сразу написать рабочий код. Просто вроде стандартная операция преобразования из Single в Float или никто с ОВНА по ModbusTCP температуру не считывает.
я же выкладывал картинку, всё считывается, можно два слова считать, даже 32 бита можно считать а потом преобразовать во флоат
В вики описан сам формат, никто в языках программирования конечно же не делает, есть системные функции, я не дельфиец и какой функцией воспользоваться незнаю
ЗЫ сколько по Вашему на этом видео флоатов http://www.owen.ru/forum/showthread....l=1#post114320
Последний раз редактировалось capzap; 12.11.2013 в 21:39.
Запустил OpenHAB. На ПЛК110 добавил Slave и передаю значение переменной типа float.
OpenHAB (по Modbus tcp) считывает два word.
Преобразую 2 word
Полученное значение редактирую и нужно отправить обратно на ПЛК.rule "_float1" when
Item var1 changed or
Item var2 changed
then
var n2 = (var1.state as DecimalType).intValue
var n1 = (var2.state as DecimalType).intValue
var temp = n1 * 256 * 256 + n2
var sign = -temp.shiftRight(31).bitwiseNot()
var exponent = temp.shiftRight(23).bitwiseAnd(255) - 127
var mantissa = temp.bitwiseAnd(8388607).doubleValue / 8388608 + 1
var result = sign * mantissa * 1.shiftLeft(exponent)
_float1.sendCommand(result)
end
Как сделать обратное преобразование? Из float в 2 word для последующей передачи на ПЛК по modbus?
Если знаешь как преобразовать 2 WORD в FLOAT, то почему не знаешь как сделать обратное преобразование ?
Текст word-> float скопировал с другого примера.
На java никогда не приходилось ничего делать.
Мне и это несколько странным кажется.
Принимая по modbus переменную float в виде 4-х байт почему нельзя разместить ее в памяти как 4 байта и через ссылку обратиться к этой области памяти как к переменной float. Собственно и обратно так же.
Предполагаю, что это особенности java.
На яву не надо гнать, то что Вы привели это совсем не ява, какой то скриптовый код, к тому же не преобразование системными функциями языка, а просто алгоритм представления флоат из массива байт
таким образом описываются правила обработки в openhab.
зы. есть какая либо особенность в реализации запросов по modbus?
Поясню: Выполняю функцию чтения 2-ух регистров. Успешно.
Выполняю функцию чтения и записи значения бита - успешно.
Т.е. когда эти запросы по одному - все норм.
Как только выполняю эти два запроса последовательно (в openhab описываю два binding) выдается ошибка на мастере (openhab).
Последний раз редактировалось Smith2007; 26.10.2014 в 17:41.
в примерах в принципе показано что ява код вставляется, преобразование туда и обратно выполняется двумя функциями Float.floatToIntBits(float value) и Float.intBitsToFloat(int bits), в Вашем приведенном коде var temp как раз получает этот bits чтоб его преобразовать во флоат
А по поводу двух запросов, видимо надо дожидаться ответа на первый чтоб послать второй