Страница 16 из 27 ПерваяПервая ... 6141516171826 ... ПоследняяПоследняя
Показано с 151 по 160 из 268

Тема: Умный дом на ПЛК110

  1. #151
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,255

    По умолчанию

    добавте java.lang.Float.intBitsToFloat(int bits)

    PS скорее всего более точным будет
    в верху скрипта import java.lang.Float
    а в коде как то так myTemperature = Float::intBitsToFloat(bits)
    Последний раз редактировалось capzap; 26.10.2014 в 20:11.

  2. #152
    Пользователь
    Регистрация
    09.08.2013
    Адрес
    Башкортостан
    Сообщений
    234

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    добавте java.lang.Float.intBitsToFloat(int bits)

    PS скорее всего более точным будет
    в верху скрипта import java.lang.Float
    а в коде как то так myTemperature = Float::intBitsToFloat(bits)
    Код:
    import java.lang.Float
    import org.openhab.core.library.types.*
    import org.openhab.core.persistence.*
    import org.openhab.model.script.actions.*
    
    
    
    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 result = Float::intBitsToFloat(temp)
    _float1.sendCommand(result)
    end
    Все получилось. Значение, которое меняю на слейве верно отображается в интерфейсе.
    Теперь необходимо проделать обратное.
    В интерфейсе полученное значение можно изменить (+/- на шаг = step). В случае изменения значения генерируется событие по которому сработает еще одно правило rule, где нужно сделать обратное преобразование и заполнение двух word.

  3. #153
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,255

    По умолчанию

    var result = Float::floatToIntBits(temp), где temp это флоат, должен получится массив из четырех байт, из этих байт можно получить два инта по принципу var temp = n1 * 256 + n2,

  4. #154

    По умолчанию

    А OpenHAB на каком устройстве работает ?

  5. #155
    Пользователь
    Регистрация
    09.08.2013
    Адрес
    Башкортостан
    Сообщений
    234

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    А OpenHAB на каком устройстве работает ?
    Судя по описанию на любом. От *nix до win*.
    Некоторые на малинке запускают. Я экспериментирую с ubuntu.

  6. #156
    Пользователь
    Регистрация
    09.08.2013
    Адрес
    Башкортостан
    Сообщений
    234

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    var result = Float::floatToIntBits(temp), где temp это флоат, должен получится массив из четырех байт, из этих байт можно получить два инта по принципу var temp = n1 * 256 + n2,
    Вроде и понятно, что нужно сделать. Но какими конкретными методами или функциями....

    var temp = Float::floatToIntBits(_float1)
    var res1 = temp/256
    var res2 = temp-res1
    var1.sendCommand(res1)
    var2.sendCommand(res2)
    Результат:
    00:40:35.041 DEBUG o.o.m.r.i.engine.RuleEngine[:285] - Executing rule 'FloatToInt'
    00:40:35.042 INFO runtime.busevents[:22] - _float1 received command 15.4
    00:40:35.064 ERROR o.o.c.s.ScriptExecutionThread[:50] - Error during the execution of rule 'FloatToInt': Could not invoke method: java.lang.Float.floatToIntBits(float) on instance: null

    Последний раз редактировалось Smith2007; 26.10.2014 в 21:42.

  7. #157
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,255

    По умолчанию

    полученная переменная это массив, это как в КДС array[0..3] of byte, как понимаете делить и умножать это в корне неправильно, я же шаблон показал, здесь должно было быть первый ворд temp[0]*256+temp[1]. И вот какие индексы на каком месте будут,это и определит порядок байт с которым многие мучаются не получая на другом конце связи нужное значение.
    Судя по ошибкам вобщето выходит, что компилятор не знает о такой функции,почему то возвращает null, может аргумент не типа флоат
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  8. #158
    Пользователь
    Регистрация
    09.08.2013
    Адрес
    Башкортостан
    Сообщений
    234

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    полученная переменная это массив, это как в КДС array[0..3] of byte, как понимаете делить и умножать это в корне неправильно, я же шаблон показал, здесь должно было быть первый ворд temp[0]*256+temp[1]. И вот какие индексы на каком месте будут,это и определит порядок байт с которым многие мучаются не получая на другом конце связи нужное значение.
    Судя по ошибкам вобщето выходит, что компилятор не знает о такой функции,почему то возвращает null, может аргумент не типа флоат
    Не внимательно прочитал.
    Нашел в openhab.modbus.java
    /**
    * Converts a byte[4] binary float value to a float primitive.
    *
    * @param bytes the byte[4] containing the float value.
    * @return a float value.
    */
    public static final float registersToFloat(byte[] bytes) {
    return Float.intBitsToFloat((
    ((bytes[0] & 0xff) << 24) |
    ((bytes[1] & 0xff) << 16) |
    ((bytes[2] & 0xff) << 8) |
    (bytes[3] & 0xff)
    ));
    }//registersToFloat

    /**
    * Converts a float value to a byte[4] binary float value.
    *
    * @param f the float to be converted.
    * @return a byte[4] containing the float value.
    */
    public static final byte[] floatToRegisters(float f) {
    return intToRegisters(Float.floatToIntBits(f));
    }//floatToRegisters
    Последний раз редактировалось Smith2007; 27.10.2014 в 06:20.

  9. #159
    Пользователь
    Регистрация
    09.08.2013
    Адрес
    Башкортостан
    Сообщений
    234

    По умолчанию

    Изменил правило. Вероятно нужно определить массив.

    rule "FloatToInt" when Item _float1 received command
    then
    var x_float = (_float1.state as DecimalType).intValue
    var temp = Float::floatToIntBits(x_float)
    var res1 = temp[1]*256+temp[2]
    var res2 = temp[3]*256+temp[4]
    var1.sendCommand(res1)
    var2.sendCommand(res2)
    end
    12:25:15.475 DEBUG o.o.m.r.i.engine.RuleEngine[:285]- Executing rule 'FloatToInt'12:25:15.480 ERROR o.o.c.s.ScriptExecutionThread[:50]- Error during the execution of rule 'FloatToInt': feature was simple feature call but got receiver instead of null. Receiver: Proxy for org.eclipse.xtext.xbase.lib.Functions$Function1: org.eclipse.xtext.xbase.impl.XClosureImplCustom@14 04a56 (explicitSyntax: false)


  10. #160
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,255

    По умолчанию

    ну смотрите Вы x_float объявили как intValue я так понимаю это инт а не флоат и подставлять его в функцию некорректно
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

Страница 16 из 27 ПерваяПервая ... 6141516171826 ... ПоследняяПоследняя

Похожие темы

  1. И вновь "Умный ДОМ"
    от Helixa.net в разделе Подбор Оборудования
    Ответов: 3
    Последнее сообщение: 17.09.2012, 09:18
  2. Умный отопитель
    от AI! в разделе Программируемые реле
    Ответов: 26
    Последнее сообщение: 14.03.2011, 11:12
  3. умный аквариум
    от jammer77 в разделе Подбор Оборудования
    Ответов: 45
    Последнее сообщение: 03.03.2010, 19:38
  4. снова про умный дом и плк
    от dbkrasn в разделе ПЛК1хх
    Ответов: 12
    Последнее сообщение: 11.12.2009, 22:53
  5. умный дом на плк 100
    от Hyper в разделе ПЛК1хх
    Ответов: 22
    Последнее сообщение: 22.10.2008, 22:43

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •