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

Тема: Получение значений float32

  1. #1

    По умолчанию Получение значений float32

    Доброго времени суток.
    Нет ли для CDS3 какого-либо руководства по конфигурированию устройств по протоколу Modbus. МВ110-4ТД выдает значения веса в формате float32, обычные WORD BYTE считываю нормально, а при добавлении канала с длинной 2 регистра в соотнесении входов появляются два регистра из которых я могу считать два WORDa в две переменные, а как потом собрать их обратно в float32.
    Еще вопрос. В CDS2.3 в модулях Modbus master были выходы STATE (с разрешением по 255), как организовать запись значений в регистры слайв устройств в CDS3 по разрешению. И какой сом-порт указывать при опросе по ТСР/IP

  2. #2

    По умолчанию

    инок , в 3 соседних ветках все эти вопросы уже решались.
    1) Чтобы из 2-х вордов собрать 1 Real надо немного поиграть с перестановкой регистров. Методов и способов много. Я использую такой:

    Пример кода программы:

    Объявляем переменные:

    p1: POINTER TO BYTE;
    p2: POINTER TO BYTE;
    IN_Data: POINTER TO ARRAY[0..1] OF WORD; (*Указатель на массив регистров для Float*)
    Out_data: Real;
    Код программы:
    (*Регистры с типом данных Word необходимо пересобрать в обратной последовательности для получения Float*)
    p1:=ADR(Out_data);
    p2:=ADR(IN_Data^[1]);

    p1^:=p2^;
    p1:=p1+1;
    p2:=p2+1;
    p1^:=p2^;
    p1:=p1+1;
    p2:=ADR(IN_Data^[0]);
    p1^:=p2^;
    p1:=p1+1;
    p2:=p2+1;
    p1^:=p2^;


    2)Руководство по конфигурированию Modbus тоже есть. Версия не совсем финальная, но рабочая:
    http://www.owen.ru/forum/showthread....l=1#post117771
    3) State реализован в виде тригера при добавлении канала. Если выбран тригерный способ, то в окне где происходит привязка переменных появится еще одна переменная, по срабатыванию которой будет писаться канал.
    Последний раз редактировалось Александр Приходько; 08.09.2013 в 01:26.

  3. #3

    По умолчанию

    Александр. Большое спасибо. Инструкция нормальная, понятная.
    Скажите принцип работы триггера Rising Edge такой же как BYTE у STATE? Мне надо по переднему фронту устанавливать в TRUE бит триггера и записывать значение, а после записи сбрасывать бит в FALSE?
    Последний раз редактировалось инок; 08.09.2013 в 15:51.

  4. #4

    По умолчанию

    Я читал все рассуждения по поводу получения float32. Извините какая-то лабуда.
    На скриншоте Канал1 считывает переменную в 16 бит т.е. WORD, он правильно считывает нет необходимости менять последовательность следования байтов как в описанном Вами примере и других подобных примеров много и по-проще.
    Канал3 считывает в два регистра переменную float32, уже получены значения каждого из 2 регистров теперь я должен соотнести 2 переменные типа WORD к какими либо двумя вордовскими переменными и в конечном итоге получить переменную типа Итого:REAL=WordToReal(Канал3.1:WORD)*WordToReal(Ка нал3.2:WORD) или я чего-то не понимаю.
    Зачем мне переставлять 8 бит(POINTER TO BYTE) в 16 битной переменной типа WORD см. Канал1, я бы еще понял если бы Вы начали с POINTER TO WORD; и как бы меняли следование регистров (ведь регистр Modbus 16 бит т.е. WORD, а не BYTE), но и это зачем делать?
    Изображения Изображения

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

    По умолчанию

    почему надо менять байты местами, потому что существует четыре комбинации
    Вложения Вложения

  6. #6

    По умолчанию

    Цитата Сообщение от инок Посмотреть сообщение
    Александр. Большое спасибо. Инструкция нормальная, понятная.
    Скажите принцип работы триггера Rising Edge такой же как BYTE у STATE? Мне надо по переднему фронту устанавливать в TRUE бит триггера и записывать значение, а после записи сбрасывать бит в FALSE?
    Добавляете логическую переменную. В момент ее включения (по переднему фронту) произойдет однократная запись переменной.
    Откройте справку CODESYS там все расписано.

    Цитата Сообщение от инок Посмотреть сообщение
    Я читал все рассуждения по поводу получения float32. Извините какая-то лабуда.
    На скриншоте Канал1 считывает переменную в 16 бит т.е. WORD, он правильно считывает нет необходимости менять последовательность следования байтов как в описанном Вами примере и других подобных примеров много и по-проще.
    Канал3 считывает в два регистра переменную float32, уже получены значения каждого из 2 регистров теперь я должен соотнести 2 переменные типа WORD к какими либо двумя вордовскими переменными и в конечном итоге получить переменную типа Итого:REAL=WordToReal(Канал3.1:WORD)*WordToReal(Ка нал3.2:WORD) или я чего-то не понимаю.
    Зачем мне переставлять 8 бит(POINTER TO BYTE) в 16 битной переменной типа WORD см. Канал1, я бы еще понял если бы Вы начали с POINTER TO WORD; и как бы меняли следование регистров (ведь регистр Modbus 16 бит т.е. WORD, а не BYTE), но и это зачем делать?
    Лабуда не лабуда, дело в том, что формат REAL не описан в протоколе Modbus. Данный протокол не коим образом не описывает формат передачи данных Real/Float. Поэтому каждый производитель софта/оборудования последовательность сбора/разбора real делает по своему.
    То, что вы видите данные, которые нормально приходят в WORD не говорит о том, что эти данные должны быть в такой же последовательности в REAL.
    Попробуйте возьмите два указателя на word и соберите Real, после этого задавайте вопросы.

    Цитата Сообщение от capzap Посмотреть сообщение
    почему надо менять байты местами, потому что существует четыре комбинации
    Собственно в этом видео все видно. 4 разных последовательности - 4 разных алгоритма сбора/разбора.

  7. #7

    По умолчанию

    Извините Александр.
    Вы бы не могли, если Вас это не затруднит описать как собирать во флоат словами, как у Вас построен алгоритм разбора флоат для передачи по Модбас. Понятно что 4 алгоритма разборки, какой применяете ВЫ.

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

    По умолчанию

    http://www.owen.ru/forum/showthread....ll=1#post93612
    Здесь не пробовали посмотреть?

  9. #9

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    http://www.owen.ru/forum/showthread....ll=1#post93612
    Здесь не пробовали посмотреть?
    Сейчас попробую

  10. #10

    По умолчанию

    Вы меня постоянно уводите на CDS2.3 в нем у меня вообщем проблем не было. Там в конфигурировании были модули REAL input, output и я отсылал и принимал REAL когда угодно и куда угодно. В CDS3 разработчики не сделали таких модулей а отдали это на откуп пользователей. Даже в видео там просто выбирается алгоритм сбора в зависимости от алгоритма разбора.

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

Похожие темы

  1. Как читать Float32 по Modbus-RTU
    от servo в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 13.03.2019, 09:30
  2. Получение данных с датчиков
    от qawaq в разделе Помощь Разработчикам
    Ответов: 8
    Последнее сообщение: 13.05.2013, 18:54
  3. Получение сертификата.
    от smk1635 в разделе Трёп (Курилка)
    Ответов: 8
    Последнее сообщение: 13.08.2011, 20:58
  4. ТРМ32+ПЛК110 (FLOAT32)
    от DiMKiN в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 26.05.2011, 15:58
  5. Получение данных от МВА8
    от КИПиА в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 03.03.2008, 14:10

Ваши права

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