УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

ModBUS и нестандартные параметры


Автор Сообщение
Сообщение создано: 23. 01. 2013 [11:37]
Rafkat
Rafkat Medvedev
Создатель темы
Зарегистрирован(а) с: 23.01.2013
Сообщения: 2
Доброго времени суток, Уважаемые!!!

Мы начинающие пользователи. Приобрели устройство с необычным формированием регистров ModBUSа. А именно, значение, например температуры, формируется 2 байтами (старший байт - целое, младший байт - дробное значение параметра) по формуле:

Бстарш. = (int)Значение;
Бмладш. = (Значение - (int)Значение) * 100;

При получении регистра необходимо сформировать значение параметра из двух байт регистра:

Значение = Бстарш. + Бмладш. * 100;

Как лучше реализовать обработку полученного параметра и реализовать структуру параметров?

Заранее благодарю за быстрый ответ.
Сообщение создано: 23. 01. 2013 [12:45]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"Rafkat" wrote:

Как лучше реализовать обработку полученного параметра и реализовать структуру параметров?

В шаблоне параметра, подключенного к параметру DAQ.ModBus логического типа: http://wiki.oscada.org/Doc/ModBus#h592-17 .

Learn, learn and learn better than work, work and work.
Сообщение создано: 23. 01. 2013 [13:34]
Rafkat
Rafkat Medvedev
Создатель темы
Зарегистрирован(а) с: 23.01.2013
Сообщения: 2
Так и делаю. Получаю регистр, например R:0:r, и теперь нужно завести 2 параметра (по 1 байту) и присвоить им значения старшего и младшего байтов регистра. Вот где их заводить и как получить мне, например младший байт?
Сообщение создано: 23. 01. 2013 [16:16]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"Rafkat" wrote:

Так и делаю. Получаю регистр, например R:0:r, и теперь нужно завести 2 параметра (по 1 байту) и присвоить им значения старшего и младшего байтов регистра. Вот где их заводить и как получить мне, например младший байт?

Изучаем стандартные логические операции и операцию сдвига: http://wiki.oscada.org/Doc/JavaLikeCalc#h101-5

Learn, learn and learn better than work, work and work.
Сообщение создано: 24. 01. 2013 [13:06]
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
"Rafkat" wrote:
значение, например температуры, формируется 2 байтами (старший байт - целое, младший байт - дробное значение параметра) по формуле:
Бстарш. = (int)Значение;
Бмладш. = (Значение - (int)Значение) * 100;
При получении регистра необходимо сформировать значение параметра из двух байт регистра:
Значение = Бстарш. + Бмладш. * 100;

Неправильно извлекли Значение из уравнения. Бмладш - дробное значение параметра. Вот что получается:
Значение = Бстарш. + Бмладш. / 100;

Тогда нужно сделать следующее (R0 - считанный в ModBus регистр):
Бстарш. = R0 >> 8;
Бмладш. = 255 & R0;
Значение = Бстарш. + Бмладш. / 100;

Короче:
Z = (R0 >> 8) + (255 & R0) / 100;

PS Не обязательно вычисления производить в модуле ModBus. Можно через связь транслировать считанный регистр в блочный вычислитель и уже в программе блока выполнить преобразование. Программа блока задаётся в библиотеке ява.

[Сообщение редактировалось 2 раз(а), в последний раз 24.01.2013 в 22:25.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.



9553