PDA

Просмотр полной версии : Тип float32 в конфигураторе МСД-200



ks21
31.05.2018, 14:47
Модуль МСД-200 архивирует переменную float из ПЛК-160. ПЛК - мастер, МСД - слэйв. Переменная в контролере принимает значения в первой колонке. В конфигураторе МСД-200, на вкладке "результат измерения", эти значения почему-то преобразуются в значения во второй колонке. В csv-файл МСД-200 пишет то, что в третьей колонке. А как сделать чтобы значения в контроллере и csv-файле были одинаковыми?
50.0 - 50.0 - 50.0
50.1 - 50.000389 - 50.0
50.2 - 50.000782 - 50.0
50.3 - 50.250195 - 50.3
50.4 - 50.250587 - 50.3
50.5 - 50.5 - 50.5
50.6 - 50.500389 - 50.5

Пантелеев Дмитрий
31.05.2018, 15:30
Разница между ПЛК и МСД объясняется передачей данных типа Float. Для точной передачи данных используйте Int со сдвигом точки.
Разница между МСД и картой МСД из-за округления.

ks21
31.05.2018, 15:47
Ага. Попробую сделать так. Спасибо за ответ. Хотя, честно говоря, понимания не появилось.) Я посмотрел, как в контроллере записано число float - в четырёх байтах. Открыл первый попавшийся онлайн-сервис по переводу двоичных чисел во float32 по IEEE-754. Вставил свои значения и получил правильное число, как в контроллере. Непонятно, что МСД-200 округляет и зачем...

Пантелеев Дмитрий
31.05.2018, 16:11
Может быть Эти данные не синхронизированы? С какой периодичностью Вы передаете данные?

ks21
31.05.2018, 19:21
Не понимаю вопрос "Может быть Эти данные не синхронизированы?"... С чем они не синхронизированы? Данные передаются 1 раз в минуту, на скорости 9600. Ошибок в передачах конфигуратор показывает 0%. Целая часть числа всегда правильная, дробная - как видно из моего примера - иногда правильная (50.0, 50.5), в других случаях неправильная. Разница между МСД и картой теперь стала понятна, благодаря Вашему разъяснению. То есть, как возникает третий столбец в примере - ясно. Не ясно, как появляется второй столбец. Если передать 4 байта, как они есть в контроллере, разве МСД-200 не должен их интерпретировать точно так же, согласно IEEE-754? Поясните, что Вы имеете ввиду, говоря о несинхронизации данных.

Пантелеев Дмитрий
01.06.2018, 08:05
Период записи в МСД у Вас 1 минута, предположение о не синхронизации снимается:)
Можно ли получить проект на ПЛК и конфигурацию МСД?

ks21
01.06.2018, 10:46
Весь проект выкладывать желания не было. Поэтому сделал новый, тестовый. В ПЛК 10 переменных REAL. Значения от 50.0 до 50.9. ПЛК - мастер, МСД-200 - слэйв. К моему удивлению, запись в csv-файл стала правильной. Вернулся к исходному проекту - нашёл ошибку в нумерации элементов буфера передачи в МСД-200. Так что - извините за беспокойство и спасибо за участие и ответы. Попробовал и как Вы посоветовали - передача Int, затем смещение запятой в конфигураторе. И в этом способе в файл csv записываются правильные значения. Единственное, что осталось не разъяснённым это значения на на вкладке "результат измерения". Конфигуратор МСД-200 на этой вкладке зачем-то изменяет переменные вот так (первая колонка - данные в ПЛК, вторая - в конфигураторе МСД-200):
50 - 50
50.1 - 50.100002
50.2 - 50.200001
50.3 - 50.299999
50.4 - 50.400002
50.5 - 50.5
50.6 - 50.600002
50.7 - 50.700001
50.8 - 50.799999
50.9 - 50.900002
Ну, как бы, понятно, что это связано с представлением вещественных чисел. Но, ведь, я не такие значения передавал, пусть даже изменились какие-то незначащие разряды... Какому-то преобразованию числа явно подверглись... Зачем? Это слегка напрягает. Да ещё заказчику объяснять надо, что, к примеру, 50.8 и 50.799999 - одно и тоже...
Ещё раз - спасибо за помощь.

Пантелеев Дмитрий
01.06.2018, 11:44
Как раз вот эти доли - и есть проблемы в передачи Float. Ведь в протоколе Modbus нет передачи такого типа данных. Именно поэтому лучше использовать INT - во-первых быстрее (т.к. передается меньше данных), во-вторых точнее.

ks21
01.06.2018, 14:52
Последний пример передачи - как раз и есть передача INT со сдвигом запятой в в конфигураторе МСД-200. Передаётся INT, а значения на на вкладке "результат измерения" всё равно с малыми долями в довесок.

Пантелеев Дмитрий
04.06.2018, 09:03
Все же Вышлите Ваш проект мне на почту d.panteleev@owen.ru