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

Тема: Какая-то байда с передачей float из OPC

  1. #1

    По умолчанию Какая-то байда с передачей float из OPC

    Использую ПЛК100 под Кодесис 2. Для связи с MasterSCADA использую её родной MasterOPC (build 3.1.3). Связь по Модбас. Столкнулся с проблемой. При передаче больших/малых значений float-тегов скада и OPC отображают неправильные значения. Например, в Кодесис, в конфиге ПЛК ставлю очень малое значение (1e-15 к примеру), затем смотрю в OPC сервер - он показывает просто 0, и скада аналогично. Судя по всему, в скаде постоянна дискретность значений float-переменных, и всё, независимо от общего количества значащих цифр! И такое чувство, что скада и ОРС не понимают экспоненциальный формат float-переменных. В другой ситуации, при больших значениях - вообще показывают какой-то мусор.

    Вот скрин, сравните три значения, выделенные красным - значение в Кодесис (правильное), в OPC-сервере и в скаде.

    1.png

    P. S. С адресами, выравниванием и перестановкой байт всё в порядке, и не очень большие значения везде отображаются правильно. Но с экспоненциальным форматом - беда какая-то. Как это вылечить?
    Последний раз редактировалось Boris_K; 06.02.2015 в 16:48.

  2. #2

    По умолчанию

    Проблема проявилась. Мы ее изучим.
    Спасибо.

  3. #3

    По умолчанию

    capzap, это просто другой тег (тип word в Кодесис), и с ним всё в порядке. А uint32 с сервера только потому, что у сервера нет возможности выдавать в uint16. Это просто конвертация в избыточный формат.
    Последний раз редактировалось Boris_K; 06.02.2015 в 19:01.

  4. #4

    По умолчанию

    Ошибка устранена. Исправление будет доступно в следующей стабильной версии.
    Также нужно иметь ввиду что при типе Float на столь больших числах возникает погрешность - добавляются лишние значения (условно говоря - ввели 9 триллионов, в контроллере будет отображаться 9 триллионов и 4 тысячи).
    Спасибо.

  5. #5

    По умолчанию

    ЗЫ Вы пишите о конвертации в избыточный формат, а хоть представляете границы диапазона 16-ти разрядных чисел?
    Помню наизусть, а в чём вопрос-то? Это был просто пример, и что вы прицепились к этому uint16? В адресации он идёт после тега с Float, поэтому никак не влияет на него. Вопрос был про Float.
    Последний раз редактировалось Boris_K; 09.02.2015 в 10:08.

  6. #6

    По умолчанию

    Нет, если форматы не совпадают, то просто происходит конвертация, так в документации к MasterOPC сказано. Да и в любом случае, те два регистра с float в данном примере никак ведь не конвертируются.

  7. #7

    По умолчанию

    SCADAMaster,

    Судя по всему, ошибка с восприятием float присутствует и в самой скаде, и в модбас-сервере MasterOPC. Да и сдаётся мне, что это не ошибка, а просто разработчики изначально "закладывались" на хранение фиксированного количества нулей после точки, а все меньшие значения понимать как просто ноль. Мол, для реальных величин не нужны такие мизерные или огромные значения. Но это неправильно! Первый же пример (который мне и нужен) - давление в высоковакуумной камере - может меняться от 100000 Па (атмосфера) до 1e-6 Па - то есть в 100 миллиардов раз. А есть и гораздо более "глубокие" величины.

    И вообще, в любой системе программирования диапазон стандартного четырёхбайтового float - от 1e-38 до 1e+38 (по показателю степени, коэффициенты не помню), и со знаком +/- разумеется. И любое число из этого диапазона будет храниться с точностью 7 значащих цифр. Так правильно, так везде. А количество цифр после точки - это уже вопрос вкуса отображения. Иногда нужно отображать фиксированное количество цифр после точки. Но не всегда. Далеко не всегда!

    То есть если я напишу 0.0000000000123, то это 1.23e-11, а не ноль! На то оно и float - число с плавающей точкой! Исправляйте срочно!
    Последний раз редактировалось Boris_K; 09.02.2015 в 15:58.

  8. #8

    По умолчанию

    Цитата Сообщение от Boris_K Посмотреть сообщение
    Судя по всему, ошибка с восприятием float присутствует и в самой скаде, и в модбас-сервере MasterOPC.
    Почему вы так решили? Несколько наших клиентов используют экспонециональную шкалу (измерение радиации и вакуумные системы).
    Создаете шкалу у Система - Шкалы - Аналоговые, в поле формат прописываете вместо f букву e - exponential. Эту шкалу и назначайте нужным переменным.
    Спасибо.

  9. #9

    По умолчанию

    Почему вы так решили? Несколько наших клиентов используют экспонециональную шкалу (измерение радиации и вакуумные системы).
    Создаете шкалу у Система - Шкалы - Аналоговые, в поле формат прописываете вместо f букву e - exponential. Эту шкалу и назначайте нужным переменным.
    Дык сам ОРС-сервер тупо меняет на 0 всё, что меньше 0.00001. И скада тут уже не поможет, ей с нижнего уровня приходит тупо ноль! Пробовал и через шкалы, с использованием повторителя сигналов: при больших значениях глюки начинаются с +13 степени, а должно всё верно отображаться до 1е+38.
    Последний раз редактировалось Boris_K; 09.02.2015 в 16:35.

  10. #10

    По умолчанию

    Мы вам написали что это проблема в ОРС сервере.
    Причем здесь SCADA?
    Спасибо.

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

Похожие темы

  1. Переход от float (Nullable) к просто float
    от ASo в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 12.11.2014, 14:21
  2. БУСТ2 то работает, то нет?
    от Андрей007 в разделе Эксплуатация
    Ответов: 8
    Последнее сообщение: 26.02.2014, 19:25
  3. ПЧВ3 то ли ОВЕН то ли DANNFOS
    от val123 в разделе Сервисное обслуживание приборов ОВЕН
    Ответов: 1
    Последнее сообщение: 15.11.2013, 13:27
  4. ПЛК 160 то сохраняет программу то нет
    от S.A.D. в разделе Эксплуатация
    Ответов: 36
    Последнее сообщение: 20.06.2013, 13:30
  5. Ответов: 4
    Последнее сообщение: 24.09.2012, 08:54

Ваши права

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