1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ecbm-modbus

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 12 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 17:29 1a84fef

Modbus

Введение

Modbus — это протокол последовательной связи, который используется для обмена данными между электронными устройствами. Он широко применяется в промышленности для автоматизации процессов и управления оборудованием.

Ссылка на подробную информацию о протоколе Modbus: https://baike.baidu.com/item/Modbus%E9%80%9A%E8%AE%AF%E5%8D%8F%E8%AE%AE/5972462?fromtitle=ModBus&fromid=305501&fr=aladdin

В таблице ниже представлены коды функций Modbus.

Код функции Описание
1 Чтение одного регистра хранения
2 Запись одного регистра хранения
3 Чтение нескольких регистров хранения
4 Запись нескольких регистров хранения
5 Чтение регистра ввода/вывода
6 Запись регистра ввода/вывода
10 Чтение входных регистров
16 Диагностика

Пример использования Modbus

  1. Пример программы. Программа, которая реализует обмен данными по протоколу Modbus, может выглядеть следующим образом:
#include "ecbm_core.h"   // Заголовочный файл с общими функциями
#include "modbus.h"     // Заголовочный файл с функциями Modbus
void main(){         // Функция main
  system_init();      // Инициализация системы
  while(1){
    // Основной цикл программы
  }
}

Программа инициализирует систему и входит в бесконечный цикл. В этом цикле могут выполняться различные операции, связанные с обменом данными по Modbus. Например, программа может получать данные от устройства, подключённого к шине Modbus, и обрабатывать их. Или же программа может отправлять команды устройству и получать от него ответные данные. 2. Заголовочные файлы. В программе используются два заголовочных файла: ecbm_core.h и modbus.h. Файл ecbm_core.h содержит общие функции, которые используются в программе. Файл modbus.h содержит функции Modbus, которые позволяют программе обмениваться данными с устройствами по этому протоколу. 3. Функция system_init(). Эта функция выполняет инициализацию системы. Она может включать в себя такие действия, как настройка портов ввода-вывода, установка скорости передачи данных и т. д. 4. Основной цикл программы. В основном цикле программы выполняются операции, связанные с Modbus. Это может быть получение данных от устройства или отправка команд устройству.

Другие примеры использования Modbus в коде

  1. Пример программы, которая использует функцию Modbus для чтения данных из регистра хранения:
#include "ecbm_core.h"   // Заголовочный файл с общими функциями
#include "modbus.h"     // Заголовочный файл с функциями Modbus
void main() {         // Функция main
  system_init();      // Инициализация системы
  int reg_addr = 0x01; // Адрес регистра хранения
  int data = ecbm_modbus_rtu_read_reg(reg_addr); // Чтение данных из регистра
  printf("Данные из регистра %d: %d\n", reg_addr, data);
}

Эта программа считывает данные из первого регистра хранения (адрес 0x01) и выводит их на экран.

  1. Пример программы, которая использует функцию Modbus для записи данных в регистр хранения:
#include "ecbm_core.h"   // Заголовочный файл с общими функциями
#include "modbus.h"     // Заголовочный файл с функциями Modbus
void main() {         // Функция main
  system_init();      // Инициализация системы
  int reg_addr = 0x02; // Адрес регистра хранения
  int data = 0xFF;    // Данные для записи в регистр
  ecbm_modbus_rtu_write_reg(reg_addr, data); // Запись данных в регистр
}

Эта программа записывает значение 0xFF в второй регистр хранения (адрес 0x02).

  1. Пример программы, которая использует таймер для периодического выполнения операций Modbus:
#include "ecbm_core.h"   // Заголовочный файл с общими функциями
#include "modbus.h"     // Заголовочный файл с функциями Modbus
#include "timer.h"      // Заголовочный файл с таймером
void main() {         // Функция main
  system_init();      // Инициализация системы
  timer_init();       // Инициализация таймера
  timer_start(0);     // Запуск таймера с периодом 0 мс
  while (1) {
    ecbm_modbus_rtu_run(); // Выполнение операций Modbus
  }
}
void tim0_fun(void) TIMER0_IT_NUM { // Обработчик прерывания таймера
  ECBM_MODBUS_RTU_TIMEOUT_RUN();
}

Эта программа периодически выполняет операции Modbus с помощью таймера. Таймер настроен на период 0 миллисекунд, поэтому операции Modbus будут выполняться непрерывно.

Это лишь некоторые примеры использования протокола Modbus в программном обеспечении. На практике Modbus может использоваться для решения самых разнообразных задач, связанных с обменом данными между устройствами. ### Таблица

Адрес Функция Диапазон адресов Modbus Диапазон значений CRC
1~247 01 1~2000 FFFF

Пример запроса данных по адресу 0x0001:

01 01 00 00 00 01 FD CA

Таблица

Адрес Функция Диапазон адресов Modbus Диапазон значений CRC
1~247 02 1~2000 FFFF

Пример запроса данных по адресам 0x0002:

01 02 00 00 00 03 38 0B

Таблица

Адрес Функция Количество регистров Диапазон адресов Modbus Диапазон значений CRC
1~247 03 1~125 1~125 FFFF

Пример запроса данных по адресам 0x0A00, 0x0C00:

01 03 00 0A 00 03 25 C9

Таблица

Адрес Функция Количество регистров Диапазон адресов Modbus Диапазон значений CRC
1~247 04 1~125 1~125 FFFF

Пример запроса данных по адресу 0x0000:

01 04 00 00 00 01 31 CA

Таблица

Адрес Функция Тип данных Диапазон адресов Modbus Диапазон значений CRC
1~247 05 8-битное целое число без знака 0x0000~0xFF00 FFFF

Пример запроса данных по адресу 0xA000:

01 05 00 0A FF 00 AC 38

Таблица

Адрес Функция Тип данных Диапазон адресов Modbus Диапазон значений CRC
1~247 06 16-битное целое число со знаком 0x0000~0xFFFF FFFF

Пример запроса данных по адресу 0x1234:

01 06 00 01 12 34 D5 7D

Таблица

Адрес Функция Тип данных 1 Тип данных 2 Тип данных 3 Диапазон адресов Modbus Диапазон значений CRC
1~247 10 8-битное целое число без знака 8-битное целое число без знака * 2 16-битное целое число со знаком 1~78 FFFF

Пример запроса данных по адресам 0x0A00, 0x0D00:

01 10 00 0A 00 04 08 11 11 22 22 33 33 44 44 5D 5E

Описание функций ecbm_modbus_rtu_bit_buf и ecbm_modbus_rtu_reg_buf

ecbm_modbus_rtu_bit_buf используется для работы с битовыми регистрами Modbus.

ecbm_modbus_rtu_reg_buf используется для чтения и записи регистровых данных Modbus.

Оба буфера используются для взаимодействия с Modbus RTU (Remote Terminal Unit) протоколом.

Пример использования функций

В примере кода на языке C показаны функции ecbm_modbus_cmd_write_bit и ecbm_modbus_cmd_read_bit, которые используются для управления светодиодами и включения/выключения DC/DC преобразователя.

Функция ecbm_modbus_cmd_write_bit принимает адрес и данные и управляет светодиодом в зависимости от адреса. Если адрес равен 101, то светодиод включается или выключается в зависимости от значения данных. Если адрес равен нулю, то значение данных присваивается переменной dc_dc_en, которая отвечает за включение/выключение DC/DC преобразователя.

Функция ecm_modbus_cmd_read_bit считывает данные из Modbus и присваивает их переменной *dat. Если адрес равен 101, то данные представляют собой состояние светодиода. Если адрес равен нулю, то данные присваиваются переменной dc_dc_en.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/ecbm-modbus.git
git@api.gitlife.ru:oschina-mirror/ecbm-modbus.git
oschina-mirror
ecbm-modbus
ecbm-modbus
master