Author |
Message |
Written on: 04. 10. 2011 [11:58]
|
s-s-n
s-s-n
registered since: 16.08.2011
Posts: 83
|
"almaz" wrote:
В ModBUS регистры двухбайтные. Поэтому считывать-записывать байт надо в составе двухбайтного регистра.
Есть регистр в нем 2 байта с разными числами.
Считываю регистр
R:61472:r:sec:время
а как узнать, что в первом а что во втором?
|
Written on: 04. 10. 2011 [12:03]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"s-s-n" wrote:
Есть регистр в нем 2 байта с разными числами.
Считываю регистр
R:61472:r:sec:время
а как узнать, что в первом а что во втором?
Маской и сдвигом, естественно.
Learn, learn and learn better than work, work and work.
|
Written on: 04. 10. 2011 [12:28]
|
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
|
low_byte = 255 & sec;
high_byte = 255 & (sec>>8);
Наверно и так можно high_byte = sec>>8;
Главное довести двухбайтный регистр ModBUS до ява-программы )))
Формирование двухбайтного регистра для записи по ModBUS:
sec = (high_byte<<8) & low_byte;
Для надёжности можно обрезать числа до байта:
sec = ((255 & high_byte)<<8) & (255 & low_byte);
[This article was edited 3 times, at last 04.10.2011 at 12:46.]
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Written on: 04. 10. 2011 [14:17]
|
s-s-n
s-s-n
registered since: 16.08.2011
Posts: 83
|
"almaz" wrote:
low_byte = 255 & sec;
high_byte = 255 & (sec>>8);
Наверно и так можно high_byte = sec>>8;
Главное довести двухбайтный регистр ModBUS до ява-программы )))
Формирование двухбайтного регистра для записи по ModBUS:
sec = (high_byte<<8) & low_byte;
Для надёжности можно обрезать числа до байта:
sec = ((255 & high_byte)<<8) & (255 & low_byte);
Спасибо за пример, буду пробовать.
|
Written on: 21. 10. 2011 [10:03]
|
s-s-n
s-s-n
registered since: 16.08.2011
Posts: 83
|
"almaz" wrote:
low_byte = 255 & sec;
high_byte = 255 & (sec>>8);
Наверно и так можно high_byte = sec>>8;
Главное довести двухбайтный регистр ModBUS до ява-программы )))
Формирование двухбайтного регистра для записи по ModBUS:
sec = (high_byte<<8) & low_byte;
Для надёжности можно обрезать числа до байта:
sec = ((255 & high_byte)<<8) & (255 & low_byte);
Чтение пошло, а для записи по ModBUS исправил на
sec = ((255 & high_byte)<<8) | (255 & low_byte);
Есть функции объекта контроллера (SYS.DAQ["Modul"]["Controller"]):
Можно ли пример, как написать, чтобы узнать адрес транспорта или состояние контроллера ModBUS?
Пробовал и квадратных скобках и в круглых и через точку и с приставками "cntr_" , "mod_" и без них
Ни хочет мне ничего показывать.
|
Written on: 21. 10. 2011 [10:17]
|
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
|
"s-s-n" wrote: sec = ((255 & high_byte)<<8) | (255 & low_byte); Конечно надо ИЛИ. Просто написал не отлаживая на скорую руку."s-s-n" wrote: Можно ли пример, как написать, чтобы узнать адрес транспорта или состояние контроллера ModBUS? http://wiki.oscada.org/Doc/OpisanieProgrammy#h920-10
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Written on: 21. 10. 2011 [10:17]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"s-s-n" wrote:
Есть функции объекта контроллера (SYS.DAQ["Modul"]["Controller"]):
Можно ли пример, как написать, чтобы узнать адрес транспорта или состояние контроллера ModBUS?
Пробовал и квадратных скобках и в круглых и через точку и с приставками "cntr_" , "mod_" и без них
Ни хочет мне ничего показывать.
Форум читаем! http://oscada.org/ru/forum/posts//obnaruzhenie_obryva_svjazi//2
Learn, learn and learn better than work, work and work.
|
Written on: 21. 10. 2011 [11:52]
|
s-s-n
s-s-n
registered since: 16.08.2011
Posts: 83
|
"roman" wrote:
"s-s-n" wrote:
Есть функции объекта контроллера (SYS.DAQ["Modul"]["Controller"]):
Можно ли пример, как написать, чтобы узнать адрес транспорта или состояние контроллера ModBUS?
Пробовал и квадратных скобках и в круглых и через точку и с приставками "cntr_" , "mod_" и без них
Ни хочет мне ничего показывать.
Форум читаем! http://oscada.org/ru/forum/posts//obnaruzhenie_obryva_svjazi//2
Спасибо.
Люди по разному излагают свои мысли и потому трудно задать запрос для поиска по форуму.
Мне казалось что все попробовал, видать не все.
text = SYS.DAQ.ModBus.mymodbas.status(); и все хорошо
|
Written on: 21. 10. 2011 [11:58]
|
s-s-n
s-s-n
registered since: 16.08.2011
Posts: 83
|
Именно там я и нашел, что есть функции объекта контроллера (SYS.DAQ["Modul"]["Controller"]):
Но не смог сразу догадаться о правильном формате написания этих функций.
|
Written on: 02. 12. 2011 [11:49]
|
s-s-n
s-s-n
registered since: 16.08.2011
Posts: 83
|
Добрый день
Возникла проблема при записи данных по модбасу.
Настройки хранятся в одном байте, при записи в первый регистр, во втором 0-й байт обнуляется.
Но если записывать число которое там хранится, то и байт во втором не обнуляется.
Пример
R1 (100, 100)
R2 (100, 50)
если отправлю в первый (50, 100) во втором (0, 50)
если отправлю в первый (100, 100) второй не меняется
Подскажите пожалуйста возможную причину.
|