Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2013, 07:59   #1
Olegvarmy
 
Регистрация: 03.09.2013
Сообщений: 4
По умолчанию Работа с протоколом ModBus (C++)

Здравствуйте!) Проблема такова, есть 3 измерителя-регулятора температуры с интерфейсами RS232, с которых нужно считывать показания на компьютер, и представлять их в графическом виде(типа диаграммы). Они работают по протоколам ModBus (RTU,ASCII). Программу графического интерфейса нужно написать на C++(gcc компилятор). Так как я горе-студент, прошу помочь, подсказать литературу, примерный план действий, как считать информацию с измерителей? Заранее спасибо!
Olegvarmy вне форума Ответить с цитированием
Старый 03.09.2013, 08:42   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Самый лучший выбор для вас это Qt. Скачать здесь: http://qt-project.org/downloads (Qt libraries 4.8.5 for Windows (minGW 4.4, 317 MB) (это как раз gcc компилятор), советую эту версию, так как не смог подружить Qt5 и Qwt (об Qwt далее)).

Не забудьте поставить Qt Creator (скачать на той же странице).

Ещё нужно поставить Qwt. Qwt максимально упрощает, к примеру, отображение в графическом виде (построение динамического графика). Скачать и установить по инструкции: http://qwt.sourceforge.net/qwtinstall.html

С помощью Qt легко создать сервер, который будет опрашивать клиентов (клиенты-это приложения, которые будут считывать данные с COM-портов). Ещё один клиент - это программа оператора, которая будет отображать данные принятые от сервера.

Вот видео, как работать с сокетами и создавать клиентов и сервер. Видео на английском, но можно не слушать, а просто смотреть и повторять:

- C++ Qt 64 - QHttp download files from the web with ease
- C++ Qt 65 - QTcpSocket basics
- C++ Qt 66 - QTCPSocket using signals and slots
- C++ Qt 67 - QTCPServer - a basic TCP server application
- C++ Qt 68 - QTcpServer using multiple threads
- C++ Qt 69 - QTcpServer using QThreadPool
- C++ Qt 70 - Advanced Asynchronous QTcpServer with QThreadPool
- C++ Qt 71 - QUDPSocket

Ещё есть примеры в самой Qt SDK C:\Qt\4.8.5_MinGw\examples\network Нужно смотреть: fortuneclient, fortuneserver

Пишите здесь, если что-то непонятно. Я сейчас сам в эту тематику подался (создание систем клиент-сервер, для сбора, обработки и отображения (в графическом виде) информации для предприятий).

P.S. В Qwt есть папка examples, где можно найти примеры различного рода графиков. Пример легко адаптировать под свои нужды.

Последний раз редактировалось 8Observer8; 03.09.2013 в 09:06.
8Observer8 вне форума Ответить с цитированием
Старый 03.09.2013, 09:40   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...вот когда TC понадобится передавать данные по сети, тогда ему и понадобится работа с сетью, причем лучше сразу заложить ModbusTCP (а если заложить аппаратные конверторы RS-232/Ethernet, то может и не понадобится вовсе ). На данный момент задача сводится с считыванию данных по физическим интерфейсам RS-232 по Modbus RTU/аски.

Цитата:
как считать информацию с измерителей?
очевидно, что по протоколу Modbus. Другой момент, что вы умолчали об этих измерителях. Тогда скачиваете доки на измеритель, там написано по каким регистрам доступны данные и какие функции управления и по каким адресам они доступны. А как вы думали, без этого никуда, каждый производитель модбас подгоняет под себя.

Теория и практика работы с Modbus
Первое что необходимо сделать, ознакомиться со спецификацией - Modicon Modbus Protocol. Reference Guide. PI-MBUS-300 Rev.J http://www.modbustools.com/PI_MBUS_300.pdf

Библиотеки

1- Libmodbus. Библиотека Modbus for Linux, Mac OS X, FreeBSD, QNX and Win32
Цитата:
Библиотека, по лицензии GPL v3, для реализации протокола Modbus RTU по последовательному интерфейсу и TCP/IP. Поддерживает следующие операционные системы: Linux, Mac OS X, FreeBSD, QNX and Windows.

Код:
modbus_t *mb;
  uint16_t tab_reg[32];
 
  mb = modbus_new_tcp("127.0.0.1", 1502);
  modbus_connect(mb);
 
  /* Read 5 registers from the address 0 */
  modbus_read_registers(mb, 0, 5, tab_reg);
 
  modbus_close(mb);
  modbus_free(mb);
Офсайт разработчика: http://www.libmodbus.org.
Документация: http://www.libmodbus.org/documentation.
Пример: использования.
Master-Slave исходники проекта: https://github.com/stephane/libmodbus/tree/master/tests

2- Modbus TCP class C#
http://www.codeproject.com/Tips/16260/Modbus-TCP-class

3- есть либы и классы под Лазарус, Питон и пых-пых, но вам это не нужно судя по разделу.

Литература и дополнительные материалы

Материалы и статьи (краткий список):
http://ru.wikipedia.org/wiki/ModBus
http://www.modbusdriver.com/doc/mbus...hi/modbus.html
http://raxp.radioliga.com/cnt/s.php?p=m1.pdf
http://raxp.radioliga.com/cnt/s.php?p=m2.pdf
http://raxp.radioliga.com/cnt/s.php?p=m3.djvu
http://raxp.radioliga.com/cnt/s.php?p=m4.pdf
http://raxp.radioliga.com/cnt/s.php?p=m5.pdf

На нижнем уровне (по статьям выше) http://www.youtube.com/watch?v=Rkk1tGnz4qY

p.s.: и на будущее - рано или поздно вам придется передавать данные на расстояние, это может быть и Ethernet и сеть опсоса через GSM-терминалы и vdsl-линия, но чаще всего используется промышленная сеть RS-485.

14 заповедей RS-485
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 03.09.2013 в 09:51.
raxp вне форума Ответить с цитированием
Старый 03.09.2013, 11:24   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Вам виднее. Я про Modbus ничего не знаю.

Тогда на Qt - GUI, а за Qwt - графики.

Последний раз редактировалось 8Observer8; 03.09.2013 в 11:28.
8Observer8 вне форума Ответить с цитированием
Старый 03.09.2013, 13:55   #5
Olegvarmy
 
Регистрация: 03.09.2013
Сообщений: 4
По умолчанию

Огромное спасибо за информацию, сейчас буду во всем разбираться.
Преподаватель поставил задачу так: "Я хочу сидя дома, заходить в интернет, и отслеживать работу измерителей(то есть температуру в помещении) в реальном времени". Отсюда вопрос, если я снимаю показания с приборов, затем представляю полученные данные в графическом виде, как сделать так чтобы за всем этим можно было наблюдать через браузер? Вобщем как это все залить в интернет?
Заранее благодарю за помощь
Olegvarmy вне форума Ответить с цитированием
Старый 03.09.2013, 14:00   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

OFFTOP >
TC запостил свою задачу во фрилансе в другом месте как дипломную. Нет смысла помогать, когда кто-то за это денежку получит.

Вам TC стоит почитать руководство и даташиты на указанные вами, наконец-то там, овеновские и термодатовские регуляторы, там все написано, мало того, там и dll-ки готовые предоставляются. На сим вопрос закрыт.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 03.09.2013, 15:33   #7
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Olegvarmy Посмотреть сообщение
Огромное спасибо за информацию, сейчас буду во всем разбираться.
Преподаватель поставил задачу так: "Я хочу сидя дома, заходить в интернет, и отслеживать работу измерителей(то есть температуру в помещении) в реальном времени". Отсюда вопрос, если я снимаю показания с приборов, затем представляю полученные данные в графическом виде, как сделать так чтобы за всем этим можно было наблюдать через браузер? Вобщем как это все залить в интернет?
Заранее благодарю за помощь
Я бы начал подходить к работе так. Для каждого измерителя своя программа (назовём её клиент). Эта программа-клиент считывает данные с измерителя и хранит у себя актуальное значение в каждый момент времени.

На этой же машине запущена другая программа (назовём её сервер). Она опрашивает программы-клиеты и получает от них значения измерителей.

На удалённой машине запущена программа-оператор. Она подключается к серверу, как клиент (через IP и номер порта). Программа-оператор делает запросы серверу. В ответ сервер посылает ответ в виде, к примеру: количество клиентов и их значения. Программа-оператор выводит эти значения в таблицу и на график.

Посмотрите видео, на которые я давал ссылке выше. Там всё это есть.

Лучше закажите свою программу профессионалу. Он сделает, а Вы разбирётесь по работающему коду. Узнаете, как правильно реализовывать такие вещи. Убережёте свой лоб от множества шишек (правда бывают бесценные шишки, которые потом всю жизнь помнишь, как уроки). Профи Вас нужным инструментом обеспечит. Если бы у меня были лишние деньги - я может быть так же на Вашем месте поступил. На хорошем коде можно многому научиться.

Как сделать программу-оператор в браузере я не знаю. Знаю, как строить графики в браузере с помощью jQuery и jpPlot: http://www.jqplot.com/

Последний раз редактировалось 8Observer8; 03.09.2013 в 15:45.
8Observer8 вне форума Ответить с цитированием
Старый 10.02.2014, 16:52   #8
Andrey77
 
Регистрация: 10.02.2014
Сообщений: 5
По умолчанию Есть уже готовое решение

Цитата:
Сообщение от Olegvarmy Посмотреть сообщение
Огромное спасибо за информацию, сейчас буду во всем разбираться.
Преподаватель поставил задачу так: "Я хочу сидя дома, заходить в интернет, и отслеживать работу измерителей(то есть температуру в помещении) в реальном времени". Отсюда вопрос, если я снимаю показания с приборов, затем представляю полученные данные в графическом виде, как сделать так чтобы за всем этим можно было наблюдать через браузер? Вобщем как это все залить в интернет?
Заранее благодарю за помощь
Есть уже готовая программа, решающая эту задачу:
"Программа ТРМ-138" с http://maasoftware.ru/trm138.htm
Можно установить MySQL сервер (http://mysql.ru), протоколировать программой данные с приборов "Овен" или Modbus-приборов в MySQL базу в режиме серверной версии, а на компе препода программой в режиме клиентской версии видеть на табло программы температуру и строить графики, читая данные из MySQL базы.
Если IP адрес сервера "серый" (не доступный извне), то, не рассматривая вариант с мэппигном внешних портов на внутренние порты программы и MySQL сервера, можно в качестве MySQL сервера использовать внешний хостинг (где MySQL сервер доступен из Интернет), на табло, правда, в этом случае информацию в реальном времени не увидишь.
Для отображения данных в браузере придётся написать CGI-программу на хостинге (например, на php), которая из базы читает данные и строит графики. Кое-какие наработки по этому вопросу есть у автора "Программы ТРМ-138".
Но программа платная, хотя для студентов и физ. лиц можно получить скидку.
Andrey77 вне форума Ответить с цитированием
Старый 08.09.2017, 14:38   #9
Andrey199226
 
Регистрация: 08.09.2017
Сообщений: 6
По умолчанию

Как нибудь решили задачу?
Andrey199226 вне форума Ответить с цитированием
Старый 08.09.2017, 14:58   #10
Andrey77
 
Регистрация: 10.02.2014
Сообщений: 5
По умолчанию libmodbus

Я не внимательно читал пост (offtop), но мои рекомендации такие:
Мне под Линукс не нужно было. Но могу дополнить, там есть библиотека libmodbus, её можно использовать для опроса приборов, а передача по сети - по протоколу TCP через интерфейс сокетов, например, с использованием библиотеки ToolsLib:
git clone git://git.maasoftware.ru/ToolsLib ToolsLib
В Linux Debian 8 Jessie поискать необходимые пакеты libmodbus можно так:
# aptitude search libmodbus
p libmodbus-dev - development files for the Modbus protocol
p libmodbus5 - library for the Modbus protocol
А GUI писать на QT.
Кстати, если не хотите в QT'шную программу объединять и подключать непереносимую между платформами библиотеку libmodbus, то можно ещё абстрагироваться так:
1. Написать серверное сетевое консольное приложение, получающее данные с приборов по ModBus через libmodbus и предоставляющее данные по сети клиентам.
2. Программа GUI QT устанавливает соединение с программой 1) и служит только для отображения данных, а в продвинутом варианте - и для конфигурирования и перезапуска процесса протоколирования 1).
Andrey77 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с SMPP протоколом... MatriX_OLeG Общие вопросы C/C++ 1 20.08.2010 20:13
Ассоциировать приложение с протоколом Namolem Общие вопросы .NET 1 12.06.2010 01:53
Работа с протоколом SIP в С++ Mazorrmo Общие вопросы C/C++ 1 21.09.2008 22:21
Работа с протоколом GameSpy Shouldercannon Работа с сетью в Delphi 8 08.03.2008 12:51
Помогите с протоколом HTTP SalasAndriy Свободное общение 2 12.02.2008 01:37