Аватар для PierL
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382

Работа с Modbus RTU

09.04.2015, 11:18. Показов 32310. Ответов 169
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть некий модуль ввода/вывода, со своим адресом, дискретный и аналоговый сигнал поддерживает. RS-485 интерфейс, протокол MODBUS.

По СОМ порту передает данные на ПК.
Нужно написать приложеньеце, которое будет подключать с СОМ порту определенному, находить по адресу модуль, соединяться с ним и считывать с него и посылать на него данные.

Хочу понять с чего мне начать. Немного владею Delphi и хочу в ней написать простую программку. Подключение к модулю, считывать и посылать на него сигнал.

Горит.

Добавлено через 3 часа 2 минуты
Кто нибудь, подскажите алгоритм хотя бы, пожалуйста?!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.04.2015, 11:18
Ответы с готовыми решениями:

Работа с контроллером производительности нории КПН-4М по Modbus RTU over RS-485
Здравствуйте товарищи. Попалось под руку, это чудо российской мысли, и понадобилось снять с него данные на ЭВМ. Вроде подключил, но...

Получить измеренное значение датчика давления (АИР-20/М2-МВ) по Modbus RTU
По работе понадобилось написать модуль для опроса показаний датчика давления АИР-20/М2-МВ. Читал руководство к датчику, читал интернет...

ТРМ-138-ModBus RTU. Не могу считать показания с термопары на втором канале
Здравствуйте уважаемые форумчане! Возникла проблема с чтением значения температуры на втором канале прибора ТРМ-138 (тип термопары ТХК(L))....

169
52 / 52 / 7
Регистрация: 23.08.2013
Сообщений: 123
09.04.2015, 15:35
В сети есть документация на протокол MODBUS. Если что, у меня есть описание на английском, могу поделиться.
Ваша программа будет выступать мастером, устройство слейвом.
Вам скорее всего потребуется реализовать только функции 4 для чтения и 16 для записи.
В документации дан алгоритм формирования пакетов.
Согласно этому алгоритму формируете пакет.
Далее его нужно послать в COM-порт и потом принять ответ. Для этого в сети есть компоненты для работы с COM-портом. После того как пакет принят по алгоритму, описанному в документации, делаете разбор.
Чтобы устройство с RS-485 подключить к компьютеру нужен конвертер аппаратный RS-485/RS-232.
Собственно всё

Добавлено через 6 минут
Ещё ... чтобы работать с устройством, нужно конечно знать карту modbus-адресов его регистров.
2
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
 Аватар для magirus
28049 / 15785 / 983
Регистрация: 15.09.2009
Сообщений: 67,752
Записей в блоге: 78
09.04.2015, 16:12
Цитата Сообщение от aknyazev Посмотреть сообщение
В сети есть
на форуме есть, что далеко ходить.
вот здесь, https://www.cyberforum.ru/asutp/ в закрепленных темах.
1
 Аватар для PierL
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
10.04.2015, 07:57  [ТС]
В мануалах на приборы все регистры расписаны, там все ясно.
Данные считываю с 4х00000, а посылаю на 0х00000.
В ОРС уже посылал и принимал, через скаду управление проходит на ура.
0
52 / 52 / 7
Регистрация: 23.08.2013
Сообщений: 123
10.04.2015, 10:11
Вот пример простой программки modbus-мастера (RTU, TCP) с исходниками:
ModbusTests.zip
Проверял под Delphi 2009 и 7.
Правда там всё самописное, и работа с COM и с MODBUS, работа с TCP идёт через synapce.
Работа с COM идёт в синхронном режиме, поэтому в идеале всю работу с устройством желательно перенести во второй поток (пример однопоточный).
3
52 / 52 / 7
Регистрация: 23.08.2013
Сообщений: 123
10.04.2015, 10:15
И ещё ... в примере используется адресация как самом протоколе, т.е. то что указывается в окне будет и в модбас-посылках.
2
52 / 52 / 7
Регистрация: 23.08.2013
Сообщений: 123
10.04.2015, 10:35
1
52 / 52 / 7
Регистрация: 23.08.2013
Сообщений: 123
10.04.2015, 10:36
Никаких дополнительных компонент устанавливать не требуется.
1
 Аватар для PierL
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
13.04.2015, 08:18  [ТС]
Протестил программу на дискретном модуле в/в с адресом 12. Что-то считалось, но записать на DO_0-DO_7 так и не получилось. Ставил все 8 Аутпутов в "единицу", загружал тестовую программку и так не увидел по данным регистрам все 8 единиц подряд.
А с аналогового модуля так и не получилось ничего даже считать (адрес 11).
Посмотрите пожалуйста таблицу соответствия адресов на дискретный модуль. Все делал по ней, по этой таблице.
Вопрос.
Как в этой программку задать номера регистров?
01: Read coils (0x)
02: Read discrete inputs (1x)
03: Read holding registers (4x)
04: Read input registers (3x)

P.S. Имеется ОРС сервер фирмы инсат, на нем тестил, все получалось - это для утверждения, то что все правильно. Может это программка не доделана?
Миниатюры
Работа с Modbus RTU   Работа с Modbus RTU   Работа с Modbus RTU  

Работа с Modbus RTU   Работа с Modbus RTU   Работа с Modbus RTU  

0
52 / 52 / 7
Регистрация: 23.08.2013
Сообщений: 123
13.04.2015, 08:51
Программа предназначена для тестирования. С удобством и функциональностью я в ней не заморачивался
При чтении регистров (2-х байтных) в запросном модбасном пакете передаётся: начальный адрес регистров и кол-во регистров.
Этим полям пакета соответствуют поля в программе (один к одному): "Адрес регистров" (в окне в десятичном виде) и "Кол-во регистров". То что будет считано отобразится в таблице, т.е. в таблице будут значения 2-х байтовых регистров. Чтобы преобразовать значения регистров в требуемый вид там добавлены специальны кнопки.
0
 Аватар для PierL
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
13.04.2015, 09:01  [ТС]
Цитата Сообщение от aknyazev Посмотреть сообщение
Программа предназначена для тестирования. С удобством и функциональностью я в ней не заморачивался
При чтении регистров (2-х байтных) в запросном модбасном пакете передаётся: начальный адрес регистров и кол-во регистров.
Этим полям пакета соответствуют поля в программе (один к одному): "Адрес регистров" (в окне в десятичном виде) и "Кол-во регистров". То что будет считано отобразится в таблице, т.е. в таблице будут значения 2-х байтовых регистров. Чтобы преобразовать значения регистров в требуемый вид там добавлены специальны кнопки.
Можно, пример элементарный, что-то я ничего не понял
0
52 / 52 / 7
Регистрация: 23.08.2013
Сообщений: 123
13.04.2015, 09:01
Программа доделана и опробывалась с "железом". Тоже всё нормально. Просто программа сделана именно по протоколу один к одному. Т.е. я её не делал, чтобы с ней было удобно работать с разным железом, она сделано чтобы было удобно работать именно с протоколом Например в программе используется адресация как в протоколе, т.е. регистровая. В железе может быть например байтовая адресация. Читать и писать регистры можно разными функциями (терминология протокола). В программе функции для чтения и записи задаются.
0
 Аватар для PierL
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
13.04.2015, 09:03  [ТС]
Цитата Сообщение от aknyazev Посмотреть сообщение
В программе функции для чтения и записи задаются.
Ладно, буду кывырятся. если что, обращусь, а пока вообще полный ноль...
0
52 / 52 / 7
Регистрация: 23.08.2013
Сообщений: 123
13.04.2015, 09:16
Например, у нужно считать 4 байта (float) с адреса 0x32 . Если адресация регистровая, то в программе нужно задать адрес 50 (=0x32) и кол-во регистров 2. Если адресация байтовая, то в программе нужно задать адрес 25 (=0x19) и кол-во регистров так же 2.

Добавлено через 8 минут
Закончу пример... После того как регистры считали жмём кнопку "Взять и регистров" там где написано float. После этого в поле ввода мы получим наше значение.
0
 Аватар для PierL
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
13.04.2015, 16:06  [ТС]
Цитата Сообщение от aknyazev Посмотреть сообщение
Например, у нужно считать 4 байта (float) с адреса 0x32 . Если адресация регистровая, то в программе нужно задать адрес 50 (=0x32) и кол-во регистров 2. Если адресация байтовая, то в программе нужно задать адрес 25 (=0x19) и кол-во регистров так же 2.

Добавлено через 8 минут
Закончу пример... После того как регистры считали жмём кнопку "Взять и регистров" там где написано float. После этого в поле ввода мы получим наше значение.
Я снова ничего не понял.

Загрузил MOD_RSsim через эту прогу эмулирую сигнал. Получается программа считывает с Holding Registers, а как считывать с Coil или Input я так и не понял. Надо что-то в программе менять?

Добавлено через 26 минут
объясни пожалуйста, как устанавливать delphimodbus для Delphi7. где можно мануал на нее почитать?
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
13.04.2015, 16:31
Получается программа считывает
получается, что вы кинулись работать с регистрами без понимания основ протокола и принципа формирования запросов и состава пакета. Темы со статьями даны вам для этого понимания.

Кидаться в компонентное программирование тоже рановато. Да и первая же ссылка в моем посту дает монитор-запросчик Modbus RTU без компонентов.

объясни пожалуйста, как устанавливать delphimodbus для Delphi7. где можно мануал на нее почитать?
если речь о D7, то как обычно через открытие dpk файла и компиляцией пакета с прописыванием путей, либо созданием пакета и регистрацией через ModbusReg.pas.

Но вот незадача:
1- в теме Modbus library over TCP/IP for C#/Delphi/Lazarus/PHP/Python уже приложен полный архив с примерами, инструкцией по установке. Делаем вывод, что вы не читали то, что скачали.
2- в текущей теме вам нужен Modbus RTU по Serial интерфейсу, в той теме для Modbus TCP. Вы не видите между ними разницы?
0
52 / 52 / 7
Регистрация: 23.08.2013
Сообщений: 123
14.04.2015, 06:43
Цитата Сообщение от PierL Посмотреть сообщение
Получается программа считывает с Holding Registers, а как считывать с Coil или Input я так и не понял. Надо что-то в программе менять?
Registers, Coil, Input - читаются разными функциями. Чтение Coil эта тестовая программа не поддерживает, хотя в коде реализация соответствующей функции имеется. Registers или Input выбираются функцией.
Вам на самом деле желательно более глубоко ознакомиться с протоколом, чтобы что-то пониматься, без этого никак, благо описания имеются...
0
 Аватар для PierL
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
14.04.2015, 08:10  [ТС]
Цитата Сообщение от raxp Посмотреть сообщение
инструкцией по установке. Делаем вывод, что вы не читали то, что скачали.
2- в текущей теме вам нужен Modbus RTU по Serial интерфейсу, в той теме для Modbus TCP. Вы не видите между ними разницы?
Скачал delphimodbus-1.6.0 - > в папке demos, если имеете ввиду там файлы, по объяснению установки, не читаются. А на странице отдельными файлами тоже нет.

Разницу между Modbus RTU и Modbus TCP вижу ту, что в RTU нужно проводить проверку на наличие ошибок, а TCP протокол сам делает это.

Добавлено через 2 минуты
Цитата Сообщение от aknyazev Посмотреть сообщение
Registers, Coil, Input - читаются разными функциями. Чтение Coil эта тестовая программа не поддерживает, хотя в коде реализация соответствующей функции имеется. Registers или Input выбираются функцией.
Вам на самом деле желательно более глубоко ознакомиться с протоколом, чтобы что-то пониматься, без этого никак, благо описания имеются...
На самом деле почитал, теория сложная. Еще не раз буду перечитывать, чтобы отложилось.
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
14.04.2015, 13:06
там файлы, по объяснению установки, не читаются
прекрасно читаются, только что проверил. Не находите, 100 с лишним закачек и никто об этом не написал?

вижу ту
вы собираетесь работать с прибором по LAN-сети?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.04.2015, 13:06
Помогаю со студенческими работами здесь

Modbus TCP. Работа с регистратором РМТ-59
Всем добрый вечер, ребят опять надеюсь на вашу помощь, такая проблема : кто может поделится исходником Modbus TCP на Builder 6, либо...

Работа с Thermal Inkjet Printer G-Series по Modbus TCP
Помогите пожалуйста передо мной стоит срочная задача научиться работать с производственным принтером подключенным через Ethernet. C COM...

ADAM-4017+. 8-канальный модуль аналогового ввода с поддержкой протокола Modbus (подключение и работа)
Здравствуйте, столкнулся с необходимостью подключения оборудования через АЦП (сам я только начинаю изучать электротехнику, первая...

Работа по Modbus RTU с ПЛК Intellisys из своих приложений
Подскажите, плиз. Есть контроллер Intellisys с протоколом modbus rtu и девайс с modicon modbus protocol pi-mbus-300 rev.e . В описании на...

Работа с модулем ICP DAS I-8831 по Modbus RTU
Доброго времени суток, господа. Прошу Вас подкинуть и указать путь к заголовочным файлам на "C", описывающим протокол передачи...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru