Повідомлення створено: 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 век - век повсеместной автоматизации. Главное - во благо всем людям.
|