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

Вопрос о ModBus


Author Message
Written on: 13. 12. 2008 [22:14]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
andrey-sw wrote:

roman wrote:

И что эта функция будет делать?

Возможно мы несколько расходимся в терминологии, но я имел ввиду следующее:

При нажатии кнопки в визуализации должен выполнится скрипт например на JavaLike а из которого уже выполняется функция что то типа ShelExec('cmd','params')

Ну да и воротить внешнюю утилиту. Тогда уже проще будет добавить функцию пользовательского API в DAQ.ModBus для выполнения этой операции.
andrey-sw wrote:


roman wrote:

andrey-sw wrote:

ну и функция для управления опросом контролера в модуле ModBus точнее програмное управление состоянием параметра контролера в модуле ModBus (Вкл\Выкл). Соответственно вызывать эти функции нужно будет например по нажатию кнопки из Пользователеского интерфейса

А это тогда зачем?

Если опрос ведется по ModBusTCP то в этом нет необходимости, а вот если используя последовательный порт, то для работы с контроллером из другого приложения (запущенного из функции описанной выше) необходимо предварительно освободить порт, или я не прав?

Ненужно ничего освобождать. Ресурс захватывается и порт твой пока не отпустишь ресурс. Контроллеры DAQ.ModBus таким образом общие порты делят.

Learn, learn and learn better than work, work and work.
Written on: 14. 12. 2008 [17:37]
andrey-sw
Андрей Сычев
Topic creator
registered since: 10.12.2008
Posts: 32
"Ткните пальцем" как добавляются функции пользовательского API? Это гдето описано? в документации не встретил, хотя может и пропустил гдето.
Written on: 15. 12. 2008 [09:33]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
Про API здесь: http://diyaorg.dp.ua/oscadawiki/Doc/API?v=kfa&#h152-1
Про среду програмирования здесь: http://diyaorg.dp.ua/oscadawiki/Doc/SredaProgr
Про библиотеки функций здесь: http://diyaorg.dp.ua/oscadawiki/Using/APIFunctionLibs
Примеры реализации статических библиотек здесь: http://diyaorg.dp.ua/oscadawiki/Doc/FLibSYS и здесь: http://diyaorg.dp.ua/oscadawiki/Doc/FLibMath.

Learn, learn and learn better than work, work and work.
Written on: 15. 12. 2008 [14:43]
andrey-sw
Андрей Сычев
Topic creator
registered since: 10.12.2008
Posts: 32
Спасибо за сылки. Доки изучал те что идут с системой, ошибочно считая что в wiki тоже самое, но здесь все расписано более подробно и есть разделы которых нет в пакете, например по среде программирования.
Written on: 25. 02. 2010 [16:54]
andrelek
Андрей Полевой
registered since: 13.12.2008
Posts: 210
Здравствуйте! Возникла похожая задача, считать архивы из прибора. Как описано здесь http://wiki.oscada.org/Doc/OpisanieProgrammy?v=14os#h920-8, то можно послать любой запрос по желаемому транспорту, а это то что мне нужно, получить строку ответа разобрать ее и засунуть в какуюто свою базу. Архив работает по протоколу modBus и читается по команде 0x41. Для начала пытаюсь послать через транспорт простенький запросик что б протестировать мой канал связи с прибором.

Для этого создал функцию в JavaLikeCalc с тамким текстом ans=SYS.Transport.Sеrial.Flow.messIO("01 03 0b b8 00 02(46 0a)", 1000); ans-тип строка, Flow-это id исходящего транспорта, в скобках контрольная сумма пробовал с ней и без нее, компилятор скрипт мой принимает без ошибок, но если функцию исполнить то в ответ не возвращается ничего хотя время исполнения маленькое порядка 300мксек, если послать запрос из самого транспорта то ответ получаю(время 40мс). И в сообщениях пишется вот что 4|/WaterPrepare/sub_DAQ/mod_JavaLikeCalc/lib_sql/fnc_mod/ | Ошибка получения свойства 'Flow' у типа значения '0'.
Written on: 25. 02. 2010 [17:24]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
Проанализируйте этот рабочий пример:

req = SYS.XMLNode("TCP");
req.setAttr("id","test").setAttr("reqTm",1).setAttr("node",1).setAttr("reqTry",2).setText(Special.FLibSYS.strEnc2Bin("03 00 00 00 05"));
SYS.Transport.Sockets.out_testModBus.messIO(req,"ModBus");
test = Special.FLibSYS.strDec4Bin(req.text());

Learn, learn and learn better than work, work and work.
Written on: 26. 02. 2010 [17:27]
andrelek
Андрей Полевой
registered since: 13.12.2008
Posts: 210
Спасибо огромное Роман!!! Все заработало.
Written on: 11. 01. 2011 [15:44]
yozhik
Алексей Николаев
registered since: 29.11.2010
Posts: 127
Есть прибор, в который надо послать по модбас тисипи команду с функцией 66. При этом формат данной функции полностью совпадает с функцией 16. Каким путем это проще сделать?
Written on: 11. 01. 2011 [17:06]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"yozhik" wrote:

Есть прибор, в который надо послать по модбас тисипи команду с функцией 66. При этом формат данной функции полностью совпадает с функцией 16. Каким путем это проще сделать?

http://wiki.oscada.org/Doc/ModBus?v=ke7#h592-7
http://wiki.oscada.org/Doc/OpisanieProgrammy?v=x3w#h920-10
И читайте форум.

Learn, learn and learn better than work, work and work.
Written on: 13. 01. 2011 [10:33]
yozhik
Алексей Николаев
registered since: 29.11.2010
Posts: 127
Спасибо. В итоге в Java-like based calculator создал функцию с кодом:
req = SYS.XMLNode("TCP");
req.setAttr("id","socketAVSN_E1").setAttr("reqTm",1).setAttr("node",11).setText(Special.FLibSYS.strEnc2Bin("42 1a 3e 00 01 02 00 01"));
SYS.Transport.Sockets.out_socketAVSN_E1.messIO(req,"ModBus");
test = Special.FLibSYS.strDec4Bin(req.text());

Также там же создал контроллер, выполняющий данную функцию.

Однако, при включении контроллера в модуле Java-like based calculator свзяь периодически нарушается, о чем свидетельствует сообщение "Errors of connection N, of respond 0." в контроллере модуля Modbus. При отключении контроллера, который подсовывает 66 функцию, свзяь стабильна. Может быть что проблема где-то в настройках?

[This article was edited 1 times, at last 13.01.2011 at 10:33.]



10974