Страница 148 из 157 ПерваяПервая ... 4898138146147148149150 ... ПоследняяПоследняя
Показано с 1,471 по 1,480 из 1695

Тема: OwenCloud. Что это и с чем его едят?

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Ну т.к. изначально шёл разговор про передачу float одним регистром, то я и использовал закомментированную строку в таком виде:

    Код:
    function FLOAT_TO_DINT: udint; //имя функции и тип данных выхода
        VAR_INPUT
          in : REAL;
        END_VAR
    
        if In >= 0 then
           FLOAT_TO_DINT := real_to_udint(In);
        else
            FLOAT_TO_DINT:= 65536 - real_to_udint(-In);   // Для   INT
         // FLOAT_TO_DINT:= 0 - real_to_udint(-In);     // Для   DINT
        end_if
       
    end_function

  2. #2

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Ну т.к. изначально шёл разговор про передачу float одним регистром, то я и использовал закомментированную строку в таком виде:
    А число подаёте из диапазона DINT -33000, для INT не может быть меньше чем -32768
    Последний раз редактировалось kondor3000; 10.07.2024 в 09:46.

  3. #3

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    А число подаёте из диапазона DINT -33000, для INT не может быть меньше чем -32768
    Но float то может быть и меньше - поэтому там и стоит ограничение ПЕРЕД преобразованием, чтобы не получить кашу на выходе

  4. #4

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Но float то может быть и меньше - поэтому там и стоит ограничение ПЕРЕД преобразованием, чтобы не получить кашу на выходе
    Подал -33000 на ваш блок с ограничением, получил +32768, так какой в нём смысл то? 1 Ограничение.jpg
    Как сказал Валенок, можно везде использовать функцию DINT, просто использовать 1 или 2 регистра для передачи. А ограничивать вход всё равно надо для INT.
    Последний раз редактировалось kondor3000; 10.07.2024 в 10:13.

  5. #5

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Подал -33000 на ваш блок с ограничением, получил +32768, так какой в нём смысл то? 1 Ограничение.jpg
    Как сказал Валенок, можно везде использовать функцию DINT, просто использовать 1 или 2 регистра для передачи. А ограничивать вход всё равно надо для INT.
    Попробуйте преобразовать в int значения
    32526
    и
    32768
    и появится смысл

  6. #6

    По умолчанию

    Алексей Фомин О! Большое спасибо!!
    Я тогда буду на биты переходить, так как они у меня будут командами на ПРку, и команда будет подаваться только одна в один интервал времени.
    То есть схема "Чтение регистра - маскирование - запись регистра" мне подходит!

    1exan, kondor3000. Шо-то вы меня с FLOAT_TO_DINT запутали. Почему DINT? Это ж два регистра будет, или нет? А я хотел в один запихать.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  7. #7

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение

    1exan, kondor3000. Шо-то вы меня с FLOAT_TO_DINT запутали. Почему DINT? Это ж два регистра будет, или нет? А я хотел в один запихать.
    По умолчанию будет передаваться 1 регистр, Лоджик сам конвертирует, если вы не укажете 2 регистра. Просто INT не передаст больше чем 32 767 (-32768). И будет правильно работать даже с функцией DINT
    Последний раз редактировалось kondor3000; 10.07.2024 в 10:26.

  8. #8

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    По умолчанию будет передаваться 1 регистр, Лоджик сам конвертирует, если вы не укажете 2 регистра. Просто INT не передаст больше чем 32 767 (-32768). И будет правильно работать даже с функцией DINT
    Ну как правильно - при выходе float из диапазона значений int, сетевая переменная будет иметь значение например 32536, что на мой взгляд, несколько запутывает получателя значения:
    изображение_2024-07-10_143142363.png

  9. #9

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Ну как правильно - при выходе float из диапазона значений int, сетевая переменная будет иметь значение например 32536, что на мой взгляд, несколько запутывает получателя значения:
    изображение_2024-07-10_143142363.png
    Вот так это работает, сетевая переменная INT- это 1 регистр, лоджик сам раскладывает на 2 WORD и передаёт только младший регистр из двух. 1 Работа Лоджика.jpg
    И перестаньте пихать в INT числа больше его пределов 32 767 (-32768).
    Последний раз редактировалось kondor3000; 10.07.2024 в 10:52.

  10. #10

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Вот так это работает, сетевая переменная INT- это 1 регистр, лоджик сам раскладывает на 2 WORD и передаёт только младший регистр из двух. 1 Работа Лоджика.jpg
    И перестаньте пихать в INT числа больше его пределов 32 767 (-32768).
    Я и не собирался:

    Код:
    ...
    IF rIn < -32768 THEN rIn := -32768;
    ELSIF rIn > 32767 THEN rIn := 32767;
    END_IF;
    ...

Страница 148 из 157 ПерваяПервая ... 4898138146147148149150 ... ПоследняяПоследняя

Похожие темы

  1. Сетевой шлюз ПМ210 для доступа к сервису OwenCloud по GPRS
    от Евгений Багаев в разделе ПМ210
    Ответов: 478
    Последнее сообщение: 25.12.2025, 18:35
  2. mod_rssim, и с чем его едят?
    от Vitorgan в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 21.02.2022, 11:22

Ваши права

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