Страница 3 из 4

Re: USB GPIO EXTENDER

Добавлено: 13 дек 2024, 11:39
DenSyo
Erik_U писал(а): 13 дек 2024, 11:26 Вы бы лучше задумались, почему людей, реально работающих с модбасом так и не появилось на форумах микротика за последние 2 года.
На центральном форуме Микротика нас не мало. Но большинство, да, не знает о такой возможности на тиках и, в принципе, не понимает как пользоваться модбасом. Я почему в этот топик и отписался, чтоб Sertik'а заинтересовать, а он дальше запустит, хорошие статьи пишет.
Erik_U писал(а): 13 дек 2024, 11:26 Поэтому использовать вы его сможете только для трансляции запросов с другого устройства, которое понимает эти 7 типов, и может декодировать данные в удобочитаемый из апаратно-хранимого и обратно.
Не нужны все 7 типов, holding регистров хватит для любых задач и создания собственных устройств, как описал ранее.
Erik_U писал(а): 13 дек 2024, 11:26 Ну и как? Увидел его микротик на юсб без драйверов?
RouterOS x86 увидел, но теряет порт после перезагрузки, пока не знаю как победить. MIPS не увидел его, только распространённые модели видит.

Re: USB GPIO EXTENDER

Добавлено: 13 дек 2024, 12:00
Erik_U
DenSyo писал(а): 13 дек 2024, 11:39
Erik_U писал(а): 13 дек 2024, 11:26 Вы бы лучше задумались, почему людей, реально работающих с модбасом так и не появилось на форумах микротика за последние 2 года.
На центральном форуме Микротика нас не мало. Но большинство, да, не знает о такой возможности на тиках и, в принципе, не понимает как пользоваться модбасом. Я почему в этот топик и отписался, чтоб Sertik'а заинтересовать, а он дальше запустит, хорошие статьи пишет.
нашел 215 сообщений. Самое старшее - 2006 года. И среди них категорически мало "историй успеха".
https://forum.mikrotik.com/search.php?k ... 39c1982315

Чтобы Sertik'а заинтересовать, подкиньте ему несколько модбас устройств для тестов. Хотя бы.
DenSyo писал(а): 13 дек 2024, 11:39 Не нужны все 7 типов, holding регистров хватит для любых задач и создания собственных устройств, как описал ранее.
Я, наверное, "везучий".
У меня на первом же контроллере больше десятка регистров длиной 4 байта.

Re: USB GPIO EXTENDER

Добавлено: 13 дек 2024, 12:37
DenSyo
Erik_U писал(а): 13 дек 2024, 12:00 У меня на первом же контроллере больше десятка регистров длиной 4 байта.
Какой тип данных? Проверю тип ошибки, хотя бы, будет ясно, поддерживается функция чтения/записи или нет. Передача данных, думаю, будет по аналогии с известными командами, по одному байту целочисленное через разделитель, шестнадцатеричное слитно.
Erik_U писал(а): 13 дек 2024, 12:00 нашел 215 сообщений. Самое старшее - 2006 года. И среди них категорически мало "историй успеха".
Мы будем первые. Покажем дорогу остальным. Я люблю такое делать.
Erik_U писал(а): 13 дек 2024, 12:00 подкиньте ему несколько модбас устройств для тестов.
У самого, раз-два и обчёлся, но хорошие, есть на кого пальцем ткнуть, чтобы окно зимой открыть)
Изображение
Ардуинку собрать помогу.

В Arduino IDE ставим библиотеку ModbusRTUSlave
https://github.com/CMB27/ModbusRTUSlave

MAX485 подсоединял так, пин контроля D2. Ардуину можно брать любую из списка поддерживаемых библиотекой, TX, RX, 5V и GND на всех подключается одинаково, пин контроля подбирается по разному, старайтесь найти D2, чтоб с тестами не заморачиваться
Изображение


Из примера идущего с библиотекой убрал код для кнопок и диодов, оставил только модбас протокол, с этого можно начинать тестирование самого протокола на Микротике

Код: Выделить всё

#include <ModbusRTUSlave.h>

#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) || defined(ARDUINO_SAM_DUE)
  #define MODBUS_SERIAL Serial
#elif defined(ARDUINO_NANO_ESP32)
  #define MODBUS_SERIAL Serial0
#else
  #define MODBUS_SERIAL Serial1
#endif

#define MODBUS_BAUD 9600
#define MODBUS_CONFIG SERIAL_8N1
#define MODBUS_UNIT_ID 1

#if (defined(ARDUINO_NANO_RP2040_CONNECT) && !defined(ARDUINO_ARCH_MBED)) || defined(ARDUINO_NANO_ESP32)
  const int8_t dePin = D2;
#else
  const int8_t dePin = 2;
#endif

ModbusRTUSlave modbus(MODBUS_SERIAL, dePin);

const uint8_t numCoils = 16;
const uint8_t numDiscreteInputs = 16;
const uint8_t numHoldingRegisters = 32;
const uint8_t numInputRegisters = 32;

bool coils[numCoils];
bool discreteInputs[numDiscreteInputs];
uint16_t holdingRegisters[numHoldingRegisters];
uint16_t inputRegisters[numInputRegisters];

void setup() {
  modbus.configureCoils(coils, numCoils);
  modbus.configureDiscreteInputs(discreteInputs, numDiscreteInputs);
  modbus.configureHoldingRegisters(holdingRegisters, numHoldingRegisters);
  modbus.configureInputRegisters(inputRegisters, numInputRegisters);

  MODBUS_SERIAL.begin(MODBUS_BAUD, MODBUS_CONFIG);
  modbus.begin(MODBUS_UNIT_ID, MODBUS_BAUD, MODBUS_CONFIG);
}

void loop() {
  modbus.poll();
}
Если будете использовать другой пин контроля, поменяйте в коде

Код: Выделить всё

const int8_t dePin = D2;
const int8_t dePin = 2;
на номер используемого пина.

Настраиваем порт на Микротике как в коде: Baud Rate 9600, Data Bits 8, Parity none, Stop Bits 1, Flow Control none

В таком виде на хабе адаптеры с Алиэкспресс работают на MIPS
Изображение

Провод для линии модбас лучше брать потолще витой пары, "сигнальный" поискать, но для тестов сойдёт короткой длины витая.

Re: USB GPIO EXTENDER

Добавлено: 13 дек 2024, 13:46
Erik_U
Сравни.

Это https://intrahouse.ru/ih-smart-home/
ставится на расбери
https://docs.intrahouse.ru/ru/install_ih_deb
добавляется плагин модбас
https://docs.intrahouse.ru/ru/pg053
и получаем
Описание
Плагин реализует функции Modbus master (client) и позволяет подключиться к Modbus slave (server).

На текущий момент поддерживаются следующие возможности:

Поддерживаемые протоколы:
Modbus TCP
Modbus RTU
Modbus RTU over TCP
Modbus ASCII
Возможность запуска множества экземпляров плагина с индивидуальными настройками

Автоматическая/Ручная группировка каналов при опросе
Настройка порядка байт (byte order) как для экземпляра плагина в целом, так и для отдельного канала
Возможность отправлять на сервер только изменения полученных данных с Modbus устройств.
Может использоваться для снижения нагрузки на основной процесс при использовании большого количества экземпляров плагина и высокой частоте опроса
Механизм простого создания каналов для идентичных устройств c разными UnitId
Изменение статуса каналов в зависимости от состояния плагина и доступности конечного устройства
Настройка каналов плагина

Канал имеет следующие параметры:

Адрес устройства на шине (Для TCP не используется, можно оставить равным 1)
Адрес регистра в шестнадцатеричном (0x0001) или десятичном (1) формате
Тип переменной (BOOL, INT8, UINT8, INT16, UINT16, INT32, UINT32, INT64, UINT64, FLOAT, DOUBLE, STRING UTF-8, STRING ASCII)
Функция чтения (FC1 - Read Coils, FC2 - Read Discrete Inputs, FC3 - Read Holding Registers, FC4 - Read Input Registers)
Порядок байт для канала.
Такая необходимость может возникнуть при опросе устройств разных производителей на одной шине.
Извлечь битовое значение. Можно выполнять чтение байтами, а затем извлекать бит, указав смещение.
Например, битовые флаги доступны для чтения как WORD (UINT16). Для каждого битового флага создается канал с одним и тем же адресом, но разными смещениями.
Формула преобразование входного значения (например, value/10).
Группировка при чтении. Необходима для оптимизации количества запросов к Modbus устройствам.
Автоматическая группировка выполняется плагином
Ручная группировка может быть выполнена при настройке каналов
Коэффициент времени опроса. Данный параметр становится доступным только при ручной группировке.
Микротик не нужен. Работает с любым "тплинком"

Re: USB GPIO EXTENDER

Добавлено: 13 дек 2024, 13:50
DenSyo
Erik_U писал(а): 13 дек 2024, 13:46 Микротик не нужен. Работает с любым "тплинком"
Ну как это, Микротик не нужен :ny_tik:

А есть задачи интересные, чтоб на модбас повесить, да без сложностей не обойтись? Обещаю найти решение на Микротике.

Re: USB GPIO EXTENDER

Добавлено: 13 дек 2024, 14:04
Erik_U
DenSyo писал(а): 13 дек 2024, 13:50 Ну как это, Микротик не нужен :ny_tik:

А есть задачи интересные, чтоб на модбас повесить, да без сложностей не обойтись? Обещаю найти решение на Микротике.
Задачи есть всегда.

Но я не могу придумать задачу, для которой достаточно возможностей микротика.

Управление релюшкой не интересно делать в стиле "заменил выключатель на стене необходимостью прилогиниться в микротик и запустить скрипт включения".
Для нормальной автоматизации у микротика недостаточно как дружественности так и возможностей.

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

Тот минимум, на который в микротике еще нужно и море геморроя, в УД решается мимоходом без временных затрат.

Re: USB GPIO EXTENDER

Добавлено: 13 дек 2024, 14:28
Erik_U
Ну, и самое для меня пугающее.
Ты выше писал про подключенный к микротику ICP DAS CON i-7561U.
Так у него цена 16к.
https://icp-das.ru/product/i-7561u?yscl ... i578672241

На контроллер МегаД (ценой 6к) порт RS-485/Modbus RTU добавляется за 135 руб.
https://ab-log.ru/smart-house/ethernet/megad-rs485

Re: USB GPIO EXTENDER

Добавлено: 13 дек 2024, 15:15
DenSyo
Erik_U писал(а): 13 дек 2024, 14:28 Ты выше писал про подключенный к микротику ICP DAS CON i-7561U
А ниже показал китайские сторублёвые, которые гарантированно работают на любом тике. ICP DAS на днях взял себя побаловать, когда интерес к модбасу подогрелся. На Авито он гораздо дешевле встречается.

Я согласен, что делать из Микротика полноценный контроллер не вариант, не его область. Но как вариант коммутации Микротика с периферией - модбас хороший вариант. Как то давно захотелось Ардуину изучить и чтоб интересно было, сделать USB экранчик для роутера решил. Про модбас тогда ничего не знал, написал свой протокол для ком-порта, который напоминает модбас, как позже понял. Но, как позже выяснилось, телнет нельзя использовать в сриптах Микротика и как-то остыл к экрану, на OpenWRT он работает, но стал глубже изучать RouterOS. Решение Sertik мне бы тогда пригодилось, поменял бы протокол на AT подобный. Собственно, я его статью на Хабре и увидел как-то и всё подумывал вернуться к Ардуинке, но одновременно с этим узнал про наличие модбас на Микротике и эта идея стала казаться более перспективной.

Re: USB GPIO EXTENDER

Добавлено: 13 дек 2024, 15:31
Erik_U
Что такое "USB экранчик для роутера" ?

Re: USB GPIO EXTENDER

Добавлено: 13 дек 2024, 15:55
DenSyo
Пыльный весь, долго лежал.
Изображение

Шрифт можно любого размера использовать.
Изображение

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