Страница 1 из 5 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 48

Тема: О неподдериваемых типах данных

  1. #1
    Пользователь Аватар для Borserg
    Регистрация
    06.05.2015
    Адрес
    Санкт-Петербург
    Сообщений
    148

    По умолчанию О неподдериваемых типах данных

    Коллеги, доброго дня!

    Известно, что OL в сетевых переменных "понимает" только форматы UINT (беззнаковое целое 16 бит) и FLOAT (с плавающей точкой, 32 бит).
    Очень часто возникает необходимость обработки данных, представленных в формате INT (целое со знаком 16 бит).
    Для этого есть макросы (в том числе в Базе).
    А я столкнулся с необходимостью обработать данные в формате UDINT (беззнаковое целое 32 бит).
    СП3хх такие данные прекрасно распознает - достаточно в свойствах цифрового дисплея задать значение типа DWord, формат Unsigned и разрядность 10 знаков.
    Но мне, перед отправкой в СП3хх, надо обработать данные в ПР200.
    А как это сделать?

    Заранее благодарен за советы.

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

    По умолчанию

    Разделите переменную ОЛ на два регистра и передавайте.

  3. #3
    Пользователь Аватар для Borserg
    Регистрация
    06.05.2015
    Адрес
    Санкт-Петербург
    Сообщений
    148

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Разделите переменную ОЛ на два регистра и передавайте.
    Предположим, я в настройках "мастера" ПР200 создам две целочисленных переменных.
    А как потом из них сделать одну 32 бит?

  4. #4

    По умолчанию

    Например функцией на ST:

    Код HTML:
    FUNCTION PackWordsToDword : DWORD
    VAR_INPUT
    wHighWord:WORD;
    wLowWord:WORD;
    END_VAR
    
    PackWordsToDword := SHL(WORD_TO_DWORD(wHighWord),16) OR WORD_TO_DWORD(wLowWord);

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

    По умолчанию

    При передаче делите, при поступлении собираете в программе.

  6. #6
    Пользователь Аватар для Borserg
    Регистрация
    06.05.2015
    Адрес
    Санкт-Петербург
    Сообщений
    148

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Например функцией на ST:

    Код HTML:
    FUNCTION PackWordsToDword : DWORD
    VAR_INPUT
    wHighWord:WORD;
    wLowWord:WORD;
    END_VAR
    
    PackWordsToDword := SHL(WORD_TO_DWORD(wHighWord),16) OR WORD_TO_DWORD(wLowWord);
    Предполагаю, что это очень красиво, вот только с ST я вообще не знаком...

  7. #7
    Пользователь Аватар для Borserg
    Регистрация
    06.05.2015
    Адрес
    Санкт-Петербург
    Сообщений
    148

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    При передаче делите, при поступлении собираете в программе.
    При передаче куда? При поступлении куда? Делить чем? Собирать чем?
    При всем уважении - вопрос задан конкретно в надежде получить конкретный же ответ.

  8. #8

    По умолчанию

    Цитата Сообщение от Borserg Посмотреть сообщение
    Предполагаю, что это очень красиво, вот только с ST я вообще не знаком...
    Можете использовать аналогичные стандартные ФБД блоки (SHL и OR)

  9. #9
    Пользователь Аватар для Borserg
    Регистрация
    06.05.2015
    Адрес
    Санкт-Петербург
    Сообщений
    148

    По умолчанию

    Может мне надо было задать вопрос немного иначе?

    Имеем в некотором устройстве два регистра, в которых содержится число в формате UDINT.
    Читаем это число по ModBus в переменную Float ПР200. В самом ПР200 никаких манипуляций с этим числом не делаем
    (кроме копирования переменной Master в переменную Slave), а просто даем его прочитать по ModBus в СП3хх,
    где выбираем тип отображения Unsigned DWord.
    Исказятся ли данные при такой передаче?

  10. #10

    По умолчанию

    Цитата Сообщение от Borserg Посмотреть сообщение
    Может мне надо было задать вопрос немного иначе?

    Имеем в некотором устройстве два регистра, в которых содержится число в формате UDINT.
    Читаем это число по ModBus в переменную Float ПР200. В самом ПР200 никаких манипуляций с этим числом не делаем
    (кроме копирования переменной Master в переменную Slave), а просто даем его прочитать по ModBus в СП3хх,
    где выбираем тип отображения Unsigned DWord.
    Исказятся ли данные при такой передаче?
    Не должны (не знаю, будет ли исправлять ПР значение float, если будет неправильный формат). Но надо проверять, что байты-слова не меняются при получении/отправке.
    Если не получится, то можно попробовать читать UDINT(DWORD) в ПР двумя последовательными регистрами, и в слейв копировать также двумя регистрами, ну а читать по адресу первого из регистров, как float
    Последний раз редактировалось 1exan; 03.12.2022 в 17:31.

Страница 1 из 5 123 ... ПоследняяПоследняя

Похожие темы

  1. Ответов: 21
    Последнее сообщение: 01.07.2022, 06:36
  2. Вод данных в СПК
    от alexx12 в разделе СПК1хх
    Ответов: 3
    Последнее сообщение: 17.12.2018, 09:19
  3. Передача данных СПК107 на СМИ-1. Тип данных REAL.
    от ByuT в разделе Панели оператора (HMI)
    Ответов: 1
    Последнее сообщение: 23.01.2016, 23:35
  4. Выгрузка данных 110-60м
    от STARIY в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 12.11.2015, 20:22
  5. Ответов: 19
    Последнее сообщение: 21.03.2013, 08:41

Ваши права

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