USB GPIO EXTENDER

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
DenSyo
Сообщения: 13
Зарегистрирован: 22 сен 2024, 13:24
Контактная информация:

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 не увидел его, только распространённые модели видит.


Erik_U
Сообщения: 2010
Зарегистрирован: 09 июл 2014, 12:33

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 байта.


DenSyo
Сообщения: 13
Зарегистрирован: 22 сен 2024, 13:24
Контактная информация:

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
Изображение

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


Erik_U
Сообщения: 2010
Зарегистрирован: 09 июл 2014, 12:33

Сравни.

Это 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 устройствам.
Автоматическая группировка выполняется плагином
Ручная группировка может быть выполнена при настройке каналов
Коэффициент времени опроса. Данный параметр становится доступным только при ручной группировке.
Микротик не нужен. Работает с любым "тплинком"


DenSyo
Сообщения: 13
Зарегистрирован: 22 сен 2024, 13:24
Контактная информация:

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

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


Erik_U
Сообщения: 2010
Зарегистрирован: 09 июл 2014, 12:33

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

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

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

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

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

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


Erik_U
Сообщения: 2010
Зарегистрирован: 09 июл 2014, 12:33

Ну, и самое для меня пугающее.
Ты выше писал про подключенный к микротику 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


DenSyo
Сообщения: 13
Зарегистрирован: 22 сен 2024, 13:24
Контактная информация:

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

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


Erik_U
Сообщения: 2010
Зарегистрирован: 09 июл 2014, 12:33

Что такое "USB экранчик для роутера" ?


DenSyo
Сообщения: 13
Зарегистрирован: 22 сен 2024, 13:24
Контактная информация:

Пыльный весь, долго лежал.
Изображение

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

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


Ответить