Показано с 1 по 10 из 10

Тема: Измеритель СП-270

  1. #1

    По умолчанию Измеритель СП-270

    Столкнулся с такой проблемой. В каком формате надо передавать число, чтобы оно отобразилось на измерителе?
    Я хочу отобразить на нем число в диапазоне 23025-138155. Пробовал передавать в формате dword и real. Стрелка в начале передачи(в этот момент передается число в районе 40000-50000) сразу уходит в максимум. Мне кажется, что дело в форме передачи - значения в панель передаются через string output module, в котором записывается сразу пачка регистров. При этом адресу этой команды соответствует массив ARRAY[0..сколько то там]TO REAL. Вот здесь вопрос - если я в программе число в формате DWORD записываю в переменную zapispanel[0], которая является частью массива ARRAY[]TO REAL она автоматом никак в REAL не переводится.? Т.е. понятно, что в REAL формате это число тоже какое-то значение имеет, но положение битов при такой записи не может сконвертироваться?

  2. #2

    По умолчанию

    Формата Real в данном случае не хватит, нужен dword, но не совсем понятно что и куда вы пишете (кто и в каком формате отправляет данные). Можно подробности?

  3. #3

    По умолчанию

    Цитата Сообщение от Godlike_S Посмотреть сообщение
    Формата Real в данном случае не хватит, нужен dword, но не совсем понятно что и куда вы пишете (кто и в каком формате отправляет данные). Можно подробности?
    Не очень понял про real. Там же до 3.4*10 38 степени значения могут быть. dword в этом плане как понимаю даже менее объемен.
    По записи. Есть мастер -ПЛК овен. По сети RS-232 с ним связана панель. Обмен с панелью веду строковыми функциями конфигуратора(так выходит быстрее). Т.е. строкой string input/output module оправшиваю/записываю в панель числа в word и real форматах. В измеритель как и писал выше хочу послать число, которое больше, чем позволяет послать word переменная. Поэтому пытаюсь послать число dword. В объявлении переменных есть массив ARRAY[0..сколько то..не помню]OF REAL. ему присвоен адрес строкового запроса. Соответственно, в один из элементов массива записываю число в формате dword. Далее эта строка передается в панель. Все другие записанные данные читаются правильно, но они имеют формат real. А вот число dword в измеритель похоже не доходит или доходит неверно.
    P.S. Надо в панели, видимо, добавить дисплей и посмотреть, как эти 2 регистра с этим числом выглядят на нем.
    P.S.2 Пока писал - подумал, что надо просто число на 10 поделить и тогда все передастся в формате word.

  4. #4

    По умолчанию

    Цитата Сообщение от Andy86-j Посмотреть сообщение
    Не очень понял про real. Там же до 3.4*10 38 степени значения могут быть. dword в этом плане как понимаю даже менее объемен.
    Про REAL прошу прощения, читал с телефона и понял границы за общее число )))

    Цитата Сообщение от Andy86-j Посмотреть сообщение
    По записи. Есть мастер -ПЛК овен. По сети RS-232 с ним связана панель. Обмен с панелью веду строковыми функциями конфигуратора(так выходит быстрее). Т.е. строкой string input/output module оправшиваю/записываю в панель числа в word и real форматах. В измеритель как и писал выше хочу послать число, которое больше, чем позволяет послать word переменная. Поэтому пытаюсь послать число dword. В объявлении переменных есть массив ARRAY[0..сколько то..не помню]OF REAL. ему присвоен адрес строкового запроса. Соответственно, в один из элементов массива записываю число в формате dword. Далее эта строка передается в панель. Все другие записанные данные читаются правильно, но они имеют формат real. А вот число dword в измеритель похоже не доходит или доходит неверно.
    Ну как бы форматы DWORD и REAL немного разные, если в первом случае в 4-х байтах содержится все число, то в последнем в каких то двух число, а в каких то положение плавающей запятой, причем порядок чередования байт может быть различным (старшим байтом вперед/младшим байтом вперед), различным может быть и порядок чередования регистров. И наверное если мы запишем DWORD в массив а потом будем читать как REAL то получим не то, что хотели...

  5. #5

    По умолчанию

    [QUOTE=Andy86-j;321608] Вот здесь вопрос - если я в программе число в формате DWORD записываю в переменную zapispanel[0], которая является частью массива ARRAY[]TO REAL она автоматом никак в REAL не переводится.? /QUOTE]
    Конечно же нет.

  6. #6
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,823

    По умолчанию

    [QUOTE=Godlike_S;321643]
    Цитата Сообщение от Andy86-j Посмотреть сообщение
    Вот здесь вопрос - если я в программе число в формате DWORD записываю в переменную zapispanel[0], которая является частью массива ARRAY[]TO REAL она автоматом никак в REAL не переводится.? /QUOTE]
    Конечно же нет.
    Как раз таки автоматом и перевелось!
    т.е.
    Захват-1.png

    Здесь переменную DWORD
    CONST1:= 138155;
    пытаемся передать в панель через string output module
    Присвоим элементу массива значение переменной
    zapispanel[0]:= CONST1;

    Если в zapispanel[0] находится не преобразованное, DWORD, значение 138155 == 0х21BAB то логично, что в Stringe должны быть три символа ответствующие байтам 02, 1В, АВ
    Теперь посмотрим, что же в Stringe получилось
    Захват-7.png

    Ак$06H --> <C0><EA><06><48>
    Ай-яй-яй! Там совсем другие символы!
    И что они обозначают? Они - есть отображение байтов числа 138155 в Float формате 138155 == 0x4806EAC0!
    Проверим в калькуляторе http://www.binaryconvert.com/result_...51056049053053
    Захват-2.png
    Единственное отличие - порядок байт обратный, но если ТС говорит что все другие Float переменные из массива отображаются на дисплеях панели нормально, то обратный порядок байт - это нормально

    И в панель число попадет в формате Float
    А как известно для Измерителя в панели нельзя выбрать формат Float
    Потому и не работает
    Последний раз редактировалось petera; 22.12.2019 в 10:22.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

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

    По умолчанию

    В дополнение
    Вариант с преобразованием Float в Dword в панели

    В примере данные из ПЛК приходят в PSW256 как Float
    В измерителе используется регистр PSW1000
    Конвертер Float --> DWord выполнен ГМ
    Захват-9.png Захват-8.png
    Скрытый текст:

    Копи/пасте ГМ из примера в свой проект, настроить адреса в конвертере

    ЗЫ
    В конвертере диапазон значения Float ограничен значениями - от 0 до 10 000 000
    Вложения Вложения
    Последний раз редактировалось petera; 23.12.2019 в 09:44.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  8. #8

    По умолчанию

    [QUOTE=petera;321667]
    Цитата Сообщение от Godlike_S Посмотреть сообщение

    Как раз таки автоматом и перевелось!
    А, я кажется понял в чем прикол. В Кодесис 3.5 приходиться делать некое подобие для передачи и приема Float...

  9. #9
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,823

    По умолчанию

    Вариант с преобразованием в программе ПЛК
    Будем использовать указатель
    Захват-10.png

    Сначала получим адрес в памяти ПЛК где лежит элемент массива
    pt:= ADR(zapispanel[0]);

    И поместим по этому адресу переменную DWORD, как DWord
    pt^:= CONST1;

    В панели ничего преобразовывать не надо, только один этот элемент придет как настоящий DWord, остальные элементы массива останутся Float
    В настройках измерителя выбирать нужный регистр и формат DWord
    Последний раз редактировалось petera; 22.12.2019 в 11:23.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  10. #10

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Вариант с преобразованием в программе ПЛК
    Будем использовать указатель
    Захват-10.png

    Сначала получим адрес в памяти ПЛК где лежит элемент массива
    pt:= ADR(zapispanel[0]);

    И поместим по этому адресу переменную DWORD, как DWord
    pt^:= CONST1;

    В панели ничего преобразовывать не надо, только один этот элемент придет как настоящий DWord, остальные элементы массива останутся Float
    В настройках измерителя выбирать нужный регистр и формат DWord
    Спасибо за разъяснение и варианты решения.

Похожие темы

  1. Измеритель-регистратор с входом 0-10В
    от Serex в разделе Подбор Оборудования
    Ответов: 15
    Последнее сообщение: 30.03.2018, 09:36
  2. Измеритель-регулятор ТРМ10-Щ2.У.ср
    от Светлана Сергеева в разделе Эксплуатация
    Ответов: 7
    Последнее сообщение: 26.08.2016, 13:40
  3. Измеритель для расходомера
    от asdms в разделе Подбор Оборудования
    Ответов: 7
    Последнее сообщение: 26.01.2016, 13:26
  4. 2трм1 как измеритель
    от михаил1 в разделе Эксплуатация
    Ответов: 6
    Последнее сообщение: 23.04.2010, 11:25
  5. Измеритель-регулятор одноканальный
    от androsov в разделе Трёп (Курилка)
    Ответов: 1
    Последнее сообщение: 14.08.2008, 11:37

Ваши права

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