Modbus tcp slave android
This is a Modbus library for Android.
1.Add the library to your project
Copy the jar to the lib directory of your project and add the config to build.gradle.
2.Create and init ModbusReq instance
Init ModbusReq instance through setting the modbus param.
6.Read InputRegisters(Child Thread)
10.Destroy Modbus Instance
if you use RTU Mode with SerialPort,you should do :
-
- Create a class to implement SerialPortWrapper interface.
-
- Create a ModbusMaster instance with createRtuMaster mothod of ModbusFactory class.
Источник
Скачать программы Modbus Monitor Advanced APK
Modbus Master, Modbus Slave, датчик сервера на TCP / IP, Bluetooth, USB Serial Port.
Описание: Hubble Software
Android Modbus Master / Client и ведомый / сервер для телефонов и планшетов. Утилита Modbus Monitor является простой, но имеет множество дополнительных функций, несоответствующие даже по стандартам на базе ПК. Это единственный Modbus App в Android магазине три приложения в одном . (Modbus Master, Modbus сервер, и сервер Датчики в Modbus TCP).
> Modbus Каналы: Bluetooth, Ethernet, Wi-Fi, RS232 / 485 USB Последовательные порты (проверить совместимость ниже)
> Протоколы: Modbus TCP, Enron / Daniels TCP, Modbus RTU через TCP, Modbus UDP, Modbus RTU через UDP, Modbus TCP Ведомый / сервер, Modbus RTU, Modbus ASCII Последовательный
> Датчик сервер: Прочитайте датчики вашего телефона (гироскоп, GPS, * сотовый телефон башню и т.д.) дистанционно с помощью встроенного датчика Modbus сервера
> IoT D2C в Google Таблицы: Использование датчик телефона (или любые Опрошенные данные) и регистрировать значения прямо в вашу частную электронную таблицу Google в облаке . То же лист Google может использоваться для централизованной регистрации значений из различных мобильных устройств в одном лист Google (один файл в облаке).
> Импорт / Экспорт: Экспорт значений как в CSV файл каждую секунду, минут или часов. Данные конфигурации Экспорт по электронной почте.
> Языки: немецкий, испанский, французский, итальянский, японский, польский, русский и китайский
> Функции Modbus: FC1, FC2, FC3, FC4, FC5, FC6, FC15, FC16, запись автоответ
> Позволяет «Simple» (6 цифр ввода) или «Advanced» (полный MODBUS) режимы ввода
> * Простой толчок, чтобы написать функцию, которая позволяет записать предварительно заданное значение при толчке
> * Преобразование Modbus целочисленных значений в текст (шифровка или конвертер состояния)
> Преобразование данных: неподписанный, Подписанный, Hex, Binary, Long, Double, Float, String, BCD формат, Unix Epoch Time, PLC Scaling (биполярный / униполярный Аналоговый АЦП преобразование значения)
> Pro Tuning Опции: Interval, Inter-Packet Delay, Link-Timeout, Фактические Графы RX / TX
> Требование Bluetooth
1. Устройство должно иметь радиомодуль Bluetooth, который поддерживает профиль SPP (RFCOMM Secure или небезопасный)
2. См «ModbusMonitor.com» или по электронной почте help@modbusmonitor.com помощь
3.See ниже требования к аппаратному обеспечению
> USB-последовательный порт Требования, USB OTG Последовательные порты >> RS232 / 422/485
Устройство должно соответствовать всем трем требованиям.
Источник
Modbus tcp slave android
FreeMODBUS это бесплатная реализация популярного протокола MODBUS, специально разработанная для встраиваемых систем. MODBUS это популярный сетевой протокол, широко используемый в производственной индустрии.
Стек коммуникаций MODBUS требует наличия двух слоев протокола:
Modbus Application Protocol (протокол приложения Modbus) — определяет модель данных и функции.
Network — определяет среду обмена данными.
В текущей версии FreeMODBUS (на момент написания статьи это версия FreeMODBUS 1.6) предоставляется реализация Modbus Application Protocol v1.1a, и поддерживаются режимы передачи RTU/ASCII, определенные в спецификации Modbus over serial 1.0. Поскольку версия 0.7 FreeMODBUS также поддерживает MODBUS TCP, определенный в руководстве [2]. Стек FreeMODBUS лицензируется под защитой лицензии BSD (что не относится к демо-приложениям, которые могут лицезироваться отдельно), разрешающей использование в коммерческих целях. В настоящий момент поддерживаются следующие функции MODBUS:
Код | Функция |
0x01 | Read Coils |
0x02 | Read Discrete Inputs |
0x03 | Read Holding Registers |
0x04 | Read Input Register |
0x05 | Write Single Coil |
0x06 | Write Single Register |
0x0F | Write Multiple Coils |
0x10 | Write Multiple Registers |
0x11 | Report Slave ID |
0x17 | Read/Write Multiple Registers |
Библиотека FreeMODBUS основана на самых свежих стандартах, и должна быть с ними полностью совместима. Прием и передача фреймов Modbus RTU/ASCII реализованы на машинах состояний, управляемых callback-функциями из слоя абстракции от аппаратуры (hardware abstraction layer, HAL). Это делает простым портирование стека на другие платформы. Если фрейм завершен, то он передается в слой приложения (Modbus Application Layer), где анализируется его содержимое. В слое приложения доступны хуки, позволяющие добавлять новые функции Modbus.
Протокол MODBUS определяет структуру обмена сообщений между главным и подчиненным устройствами (модель master-slave). Устройство master выдает slave-устройству инструкции, которые позволяют считывать или записывать данные slave-устройства. Slave-устройства отвечает на инструкции, которые ему дает master.
Master может быть контроллером системы, а slave представлять периферийные устройства. Master может либо обмениваться данными с определенным slave, или организовать широковещательное сообщение для всех slave-устройств.
Modbus master передает данные, содержащие адрес опрашиваемого slave (1 байт), код функции, определяющий запрос (1 байт), данные для обмена (n байт), проверочный код CRC16 (2 байта).
В рабочем режиме Modbus slave никакого функционального блока для коммуникации по протоколу Modbus не требуется. Отправка и прием телеграмм Modbus выполняются автоматически.
[Режим последовательной передачи]
Режим передачи определяет содержимое бит в байтах сообщения, которые передаются по сети, и как информация сообщения упаковывается в поток сообщений, и как декодируется. Существует два стандартных режима последовательной передачи:
ASCII mode
RTU mode
Кодирование фреймов для обоих этих режимов показано на рисунке ниже.
Режим ASCII. В этом режиме каждый байт сообщений кодируется двумя символами ASCII (American Standard Code for Information Interchange). Режим ASCII позволяет применять интервалы времени до секунд, что упрощает декодирование как отдельных символов, так и границ сообщений.
Сообщение ASCII начинается с символа двоеточия, и заканчивается на последовательность возврата каретки и перевода строки (CRLF, коды ASCII 0DH и 0AH). В режиме ASCII байт данных или символ несет в себе только 7 полезных бит данных.
В режиме ASCII все устройства сети ждут поступления символа двоеточия, которое обозначает начало сообщения. И это сообщение декодируется только тем устройством, которому оно было адресовано.
Режим RTU. В режиме RTU (Remote Terminal Unit) каждый 8-битный байт сообщения содержит два 4-битных HEX-символа (т. е. байт передается в двоичном виде), и сообщение передается как непрерывный поток байт.
Промежуток времени между сообщениями позволяет отделить сообщения друг от друга. В режиме RTU сообщения начинаются в интервале тишины, который должен быть по длительности как минимум 3.5 символа на заданной скорости передачи данных сети. Во время передачи сообщения интервалы между отдельными байтами не должны превышать длительности 1.5 символа. Если интервал превысил 1.5 символа, то следующий байт будет адресован как новое сообщение.
Утилиты проверки Modbus используются для диагностики обмена данными и проверки данных по определенному адресу. Эти утилиты используются для тестирования slave-устройств Modbus.
[Radzio! Modbus Master Simulator]
Это бесплатная Windows-утилита, может использоваться как альтернатива для Modscan, Modbus Poll, Simplymodbus. Утилита может обмениваться данными с несколькими slave-устройствами. Интерфейс программы очень удобен и надежен. Поддерживаемый протокол – Modbus RTU / Modbus TCP 1.6.
Ссылка для загрузки — Radzio! Modbus Master Simulator site:en.radzio.dxp.pl.
[Modbus Tester компании Schneider electric]
Modbus Tester бесплатен. Это простая Windows-утилита, позволяющая читать из регистра и записывать в регистр slave-устройства Modbus. Поддерживаемые протоколы — Modbus TCP/IP, Modbus RTU, Modbus ASCII, Jbus.
Чтобы соединиться со slave-устройством через TCP/IP, нужно выбрать порт подключения и ввести IP-адрес устройства. Для последовательного подключения к slave-устройству ASCII/MODBUS RTU нужно выбрать COM-порт и ввести параметры передачи данных — скорость (baud rate), использовать или нет контроль четности (parity). Затем нужно ввести адрес устройства, тип данных, адрес нужного регистра. После этого можно читать или записывать значения регистра.
Ссылка для загрузки — What is Modbus Tester and how do I use it? site:se.com.
[QModMaster]
Бесплатная утилита для систем Windows и Linux, поддерживает протоколы Modbus RTU и Modbus TCP. Позволяет легко обмениваться данными со slave-устройствами и мониторить трафик Modbus.
Ссылка для загрузки — QModMaster Download site:sourceforge.net.
[Modpoll Modbus® Polling Tool]
Это бесплатная утилита командной строки — симулятор мастера Modbus, работающая на Windows, Linux, Solaris, QNX 6, Raspberry Pi, BeagleBoard и других основанных на ядре ARM устройствах Linux.
Пример вывода утилиты modpoll:
Справка по командной строке (вывод в ответ на команду modpoll.exe -h):
Ссылка для загрузки — Modpoll Modbus Master Simulator site:modbusdriver.com.
Все описанные утилиты можно скачать по ссылке [6].
[Реализация устройства Modbus TCP]
Здесь рассматривается реализация устройства Modbus TCP на основе FreeRTOS и библиотек LwIP и FreeMODBUS. Подразумевается, что вы уже создали рабочий проект, где можете создавать и запускать задачи FreeRTOS, и стек LwIP сконфигурирован и работает. Осталось добавить функционал устройства ModbusTCP.
Процесс по шагам:
1. Скачайте библиотеку FreeMODBUS [4]. На момент написания статьи это была версия FreeMODBUS 1.6. Распакуйте архив библиотеки в отдельный каталог, находящийся в папке проекта.
2. Создайте задачу FreeRTOS, которая до входа в бесконечный цикл for(;;) запускает функцию eMBTCPInit, и внутри бесконечного цикла делает вызовы eMBPoll (конкретный пример см. во врезке далее).
3. Перекомпилируйте проект. Компилятор ругнется на отсутствие определений для новых функций Modbus, которые Вы только что добавили (eMBTCPInit, eMBPoll). Разрешите в проекте все необходимые зависимости путем добавления нужных модулей FreeMODBUS и настройки в проекте путей поиска необходимых заголовочных файлов.
4. На каком-то этапе добавления модулей в проект компилятор запросит реализацию функций для портирования FreeMODBUS на рабочую среду, где библиотека работает (функции порта FreeMODBUS). Это функции генерации и обработки событий, установки и закрытия соединения TCP, приема и передачи пакетов, отладки и т. п., реализация функций привязана к особенностям целевой системы — к модели микроконтроллера, библиотеке TCP и особенностям RTOS. Функции порта FreeMODBUS перечислены в таблице ниже:
Функция | Описание |
Модуль portevent.c (необходимые функции). | |
xMBPortEventInit | Инициализация подсистемы генерации и обработки событий. |
vMBPortEventClose | Деинициализация подсистемы генерации и обработки событий. |
xMBPortEventPost | Генерация события библиотеки FreeModbus. Появление события разблокирует поток обработки события FreeModbus, и будут выполнены соответствующие действия. |
xMBPortEventGet | Выборка информации о событии. |
Модуль portother.c. Это отладочные функции, и они нужны только в том случае, если разрешена отладка кода библиотеки FreeMODBUS. | |
prvvMBTCPLogFrame | Генерирует краткое описание содержимого фрейма Modbus TCP, и выводит его с помощью функции vMBPortLog. |
vMBPortLog | Функция физического вывода отладочной информации. В зависимости от реализации может выводить текст отладочных сообщений либо на экран LCD, либо в порт UART (пример реализации вывода в порт USART6 микроконтроллера STM32F4xx см. во врезке ниже). |
Модуль porttcp.c (необходимые функции). | |
xMBTCPPortInit | Подготавливает систему обмена пакетами TCP. |
prvvMBPortReleaseClient | Останавливает сессию соединения с сервером Modbus TCP. |
vMBTCPPortClose | Закрытие всех сетевых сокетов TCP. |
vMBTCPPortDisable | Закрывает все существующие сессии Modbus TCP. |
prvxMBTCPPortAccept | Принимает сетевое соединение. |
prvvMBTCPPortError | Обработка фатальной ошибки. |
prvxMBTCPPortReceive | Прием пакета. |
xMBTCPPortGetRequest | Получение запроса Modbus TCP. |
xMBTCPPortSendResponse | Отправка ответа на запрос Modbus TCP. |
Примечание: в качестве сервера Modbus выступает подчиненное опрашиваемое устройство, а в качестве клиента — главное устройство сети, обычно персональный компьютер. Однако в терминологии протокола TCP/IP оба этих устройства в процессе обмена выступают в двух ролях — и как сервер TCP (прослушивающий по умолчанию порт 502), и как клиент TCP.
Проще всего взять функции порта FreeMODBUS готовые, из рабочих примеров. Примеры находятся в каталоге demo, а модули portevent.c, portother.c и porttcp.c в подкаталоге port примера. При необходимости эти модули можно модифицировать, чтобы они учитывали специфику Вашего проекта. Модули для микроконтроллера STM32F4xx см. во врезке ниже.
5. Функциональные возможности устройства Modbus (какие запросы обрабатываются, и каким образом) определяются таблицей xFuncHandlers. Это простая таблица, где каждая строка состоит их двух полей — команда (запрос) Modbus и указатель на функцию его обработки (строка это экземпляр структуры xMBFunctionHandler). Пример таблицы xFuncHandlers:
В этой таблице реализован следующий функционал устройства Modbus: чтение обмоток (запрос 0x01), чтение цифровых входов (запрос 0x02), чтение регистра хранения (запрос 0x03), чтение входного регистра (запрос 0x04), запись обмоток (запрос 0x05), запись нескольких обмоток (запрос 0x0F), запись нескольких регистров хранения (запрос 0x10), запрос идентификатора устройства Modbus (запрос 0x11), обновление нескольких регистров хранения (запрос 0x17).
Для своего устройства Modbus Вам необходимо подготовить аналогичную таблицу и реализовать код обработчиков запросов.
6. Если что-то пошло не так, и необходимо отлаживать поведение стека FreeMODBUS, то в заголовочном файле port.h определите в 1 макрос MB_TCP_DEBUG, и подготовьте необходимую реализацию функции vMBPortLog (пример см. во врезке ниже).
Ниже показаны только куски кода, демонстрирующие основной функционал. Полный готовый проект IAR 8.30 с исходным кодом для STM32F407 можно скачать по ссылке [5].
[main.c]
Поток FreeRTOS, обрабатывающий протокол ModbusTCP:
Примечание: функция umsg позволяет выводить произвольные отладочные сообщения в последовательную консоль USART6.
[port.h]
[portevent.c]
Макросом MODBUS_EVENT_PORT можно выбрать один из вариантов организации обработки событий — на основе очереди или на основе mailbox FreeRTOS. На мой взгляд, они работают почти одинаково, на основе mailbox отклик на события немного быстрее.
Источник