Страница 162 из 166 ПерваяПервая ... 62112152160161162163164 ... ПоследняяПоследняя
Показано с 1,611 по 1,620 из 1653

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

  1. #1611

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Я всё же буду использовать чуть более сложный вариант, чтобы не получить ненароком подобных результатов:
    Вложение 77170
    Вы же используете функцию не ту , у меня всё правильно 1 Перевод.jpg
    Там выбор, куда переводить в INT или DINT

  2. #1612

    По умолчанию

    Ну т.к. изначально шёл разговор про передачу 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

  3. #1613

    По умолчанию

    С заприсью бит надо пробовать. У меня ж это всё на квартире матери работает, я пока не могу поехать туда, всё сломать, и тестировать.
    1. Вы можете использовать функции 05 и 15 для записи конкретных битов в ПР200. Тогда параметр должен быть типа BOOL. А в поле регистр нужно записать число как выше описал melky

    2. При чтении параметров, используя битовую маску, вы настраиваете параметры как указал 1exan на скриншотах (в таком варианте идет 1 запрос на чтение всего регистра, а потом он раскладывается на нужные биты внутри сервиса). При этом их можно и записывать, но формально будет писаться весь регистр (функция 16). Это работает так: при записи такого параметра сначала идет запрос на чтение (получаем целочисленное число), чтобы выяснить значение битов в этом регистре. Потом сервис исходя из того какие биты вы хотите записать и какие биты должны остаться неизменными получает новое целочисленное число, которое и пишется функцией 16 в ПР200.
    Продукт-менеджер "Облачный сервис OwenCloud"
    e.mail: a.fomin@owen.ru

  4. #1614

    По умолчанию

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

  5. #1615

    По умолчанию

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

  6. #1616

    По умолчанию

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

  7. #1617

    По умолчанию

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

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

  8. #1618

    По умолчанию

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

  9. #1619

    По умолчанию

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

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

  10. #1620
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    12,005

    По умолчанию

    DINT по определению 2 регистра безнаковое целое. Но в понятиях ПР тут может быть все, что угодно потому что понятия short и ushort тут нет в принципе.

Страница 162 из 166 ПерваяПервая ... 62112152160161162163164 ... ПоследняяПоследняя

Похожие темы

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

Ваши права

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