EnglishУкраїнськаmRussian
Login/New
Topic with many replies

Вопрос о ModBus


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) второй не меняется

Подскажите пожалуйста возможную причину.



12845