Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 19

Тема: Работа с переменной в 40 бит

  1. #1
    Пользователь
    Регистрация
    02.12.2015
    Адрес
    Раменское
    Сообщений
    7

    По умолчанию Работа с переменной в 40 бит

    Здравствуйте! Возникла такая трудность: принимаю с таймера значение длительности импульса в микросекундах в виде двоичного кода, т.е. 40 импульсов (0 и 1) с частотой 100 Гц, на быстродействующие входы, дальше мне полученные биты необходимо перевести в десятичное число обработать и сохранить, но я не могу найти переменную больше 32 бит (можно ли как то самому создать 40 битную переменную, ну ли 64 битную и работать с ней)?

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

    По умолчанию

    можно, зависит от процессора, например интел 64-х битный точено сможет....

  3. #3
    Пользователь
    Регистрация
    02.12.2015
    Адрес
    Раменское
    Сообщений
    7

    По умолчанию

    на интеле 64-х битном понятно, а в самом плк 110-60М, там проц. - RISC-процессор на базе ядра ARM-9, 32 разряда

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

    По умолчанию

    Alizka наверное на этом стоит и остановиться, а заодно посмотреть типы переменных в CodeSys.

    По крайней мере обрабатывать в десятичном виде то, что вы хотите в самом ПЛК вряд ли получится, максимум передать на уровень выше двумя или больше переменными.

  5. #5
    Пользователь
    Регистрация
    02.12.2015
    Адрес
    Раменское
    Сообщений
    7

    По умолчанию

    Понятно. Спасибо большое! Я так и думал, просто хотелось убедиться (может что-то упустил).

  6. #6
    Пользователь
    Регистрация
    21.12.2011
    Адрес
    Северодвинск
    Сообщений
    438

    По умолчанию

    А что вы хотите делать с 40-битным значением? Как то обрабатывать или просто выводить на экран?
    В любом случае есть вариант - создавайте дополнительную переменную (возможно, в структуре) и инкрементируйте её по переполнению основного DWORD. При необходимости обработки или индикации накопленного значения смотрите, сколько значащих бит накопилось в дополнительной переменной и сдвигайте на это кол-во в основную DWORD с потерей младших разрядов. Далее преобразуете DWORD в REAL и уже его домножаете на коэффициент. Сдвигали на 4 бита - домножили на 16 и т. п.
    Таким образом вы потеряете точность при индикации и при обработке, но не при накоплении.
    Последний раз редактировалось VaBo; 10.12.2016 в 21:33.

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

    По умолчанию

    VaBo, учитывая что там фигурируют и 0 и 1 то там участвует еще и время, что несколько осложняет процесс

  8. #8
    Пользователь
    Регистрация
    21.12.2011
    Адрес
    Северодвинск
    Сообщений
    438

    По умолчанию

    Ага, невниматально прочитал вопрос, бывает
    Просто часто сталкивался с задачей, когда считают импульсы с водосчетчиков, к примеру, и в конце концов в сумматоре получают "замороженный" float...

    Я плохо знаком с CDS, но разве нельзя создать union из двух dword и задвинуть туда с учетом переноса определенное число бит?
    Если да, то в чем сложность далее обработать эти dword по отдельности с преобразованием во float с потерей точности?
    Все зависит от задачи, если 7 значащих десятичных разрядов мантиссы достаточно, то почему нет?

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

    По умолчанию

    ну, потеря нескольких бит, пока основная программа будет заниматься переносом из счетчика, точнее не пойми изчего. Быстрый вход используется только для ловли единиц, а там могут быть и нули.

    например всего 10 бит 0100000101 (справа младший) - какое число будет в счетчике ? 3, а какое на самом деле ? - 261
    А при 40-ка битах там 17 с лифигом миллиардов или даже больше. ой 549 755 813 888 - это только 1 в старшем разряде....

  10. #10

    По умолчанию

    Цитата Сообщение от Alizka Посмотреть сообщение
    Здравствуйте! Возникла такая трудность: принимаю с таймера значение длительности импульса в микросекундах в виде двоичного кода, т.е. 40 импульсов (0 и 1) с частотой 100 Гц, на быстродействующие входы, дальше мне полученные биты необходимо перевести в десятичное число обработать и сохранить, но я не могу найти переменную больше 32 бит (можно ли как то самому создать 40 битную переменную, ну ли 64 битную и работать с ней)?
    А можно всё-таки "по-нормальному" озвучить задачу?
    Какая конечная цель?
    Что значит "работать с ней"?

    Что значит 100Гц?
    Это значит что приходит 100 бит в секунду?
    Т.е. за первые 0.4сек мы прочитаем 40 бит, а куда потом девать приходящие данные?
    Записывать по кругу на место "более старых"?


    Если что, то для ПЛК110М02 есть инструментарий прямой обработки значений с быстрых входов -- Hardella IDE.
    Считывать нолики и единички из быстрого входа и записывать в биты -- вообще не вопрос.
    Многие задачи "быстрого управления" можно сделать на Hardella "в лоб" и оно не подавится.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Запись OPC переменной
    от ALEXSP в разделе Master SCADA 3
    Ответов: 3
    Последнее сообщение: 04.12.2015, 15:32
  2. вопрос по переменной INT
    от service в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 13.05.2013, 17:10
  3. Событие изменения переменной
    от amurblag в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 29.02.2012, 09:47
  4. Уничтожение переменной
    от Киналь в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 16.01.2012, 12:11
  5. самозапуск переменной
    от smokin в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 17.12.2009, 15:35

Метки этой темы

Ваши права

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