Серия «Контроллер интернет вещей AntexGate»

31

HTTP <AntexGate> Modbus конвертор Linux

HTTP <AntexGate> Modbus конвертор Linux

В мире промышленной автоматизации интерфейсы HMI устарели, выглядят пугающе и бытует мнение, что чем дороже программно-аппаратный комплекс, тем лучше он будет работать. Молодёжь, которая умеет рисовать красивые "WEB-морды" в этот бизнес не суется, всех пугает так называемые Machine to machine протоколы и интерфейсы, индустрия обросла опытными мужиками, которые понимают как выглядит два байта данных в одном регистре Modbus.

Итак статья для тех, кто столкнулся с задачей преобразовать Modbus RTU TCP в протокол HTTP, который уже можно вытянуть на любую красочную "web-морду", либо другой сервис.

Представим, что вы пришли на производство, в котором уже стоят промышленные приборы - датчики температуры, станки, принимающие\передающие данные по протоколу Modbus RTU TCP, а Вам нужно закинуть некоторые данные в систему мониторинга. Действительно подавляющее большинство систем мониторинга не смогут опросить устройства по Modbus без специального программно-аппаратного шлюза.

Предлагаем бесплатное программное обеспечение Node-Red и контроллер AntexGate и получаем мощный программно-аппаратный комплекс для преобразования различных протоколов. В предыдущей статье мы уже рассмотрели конвертацию ModbusTCP2ModbusRTU.

Первое, что необходимо – это установить программный продукт Node-Red, это делается одним скриптом:

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/...)

Сделать Node-Red после установки сервисом:

sudo systemctl enable nodered.service

Перезагружаем "железяку":

sudo reboot

Теперь попадаем в среду нашего программного конвертора Node-Red через web браузер по ссылке ip шлюза:1880

В настройках справа устанавливаем плагин node-red-contrib-modbus.

Установка node-red-contrib-modbus

Установка node-red-contrib-modbus

Установка node-red-contrib-modbus

Установка node-red-contrib-modbus

После того, как плагин установлен приступаем к настройке, делается это так же просто из web интерфейса. Нажимаем кнопку меню, импорт, примеры, Modbus-HTTP, импорт.

Импортируем пример Modbus-HTTP

Импортируем пример Modbus-HTTP

Импортируем пример Modbus-HTTP

Импортируем пример Modbus-HTTP

Итак, настройка почти закончилась, нам остается настроить наши модули опроса и записи на нужные параметры Modbus соединения.

Настройка Modbus RTU

Настройка Modbus RTU

Настройка Modbus RTU узел чтения 4 регистров, начина с 512

Настройка Modbus RTU узел чтения 4 регистров, начина с 512

Итак мы настраиваем все 4 узла. В моем случае это опрос Modbus RTU устройства с параметрами аппаратного порта /dev/ttyRS485-1 115200 - 8 - 1 - N. Еще 2 узла отвечают за автоматическое чтение из предустановленных регистров, поэтому я сразу настроил чтение массива 4х регистров начиная с 512, функцией (3) Read Holding Register. Кстати не забудьте собственно подключить конечное устройство к RS485 шине.

Теперь в блоке комментариев вы можете встретить rest API для взаимодействия, ниже с ними познакомимся.

## Read

### Flex Read

http://ip:1880/modbus/flex/read?value=0&unitid=1&fc=3&address=0&quantity=1 http://ip:1880/modbus/flex/read?value=0&unitid=1&fc=4&address=0&quantity=1 http://ip:1880/modbus/flex/read?value=0&unitid=1&fc=3&address=0&quantity=5 http://ip:1880/modbus/flex/read?value=0&unitid=1&fc=4&address=0&quantity=5 ### Read http://ip:1880/modbus/read ## Write ### Test HTTP without Modbus http://ip:1880/modbus/flex/write/test?value=[1,2,3,4,5]&unitid=1&fc=16&address=0&quantity=5 ### Flex Write

http://ip:1880/modbus/flex/write?value=10&unitid=1&fc=6&address=0&quantity=1 http://ip:1880/modbus/flex/write?value=[1,2,3,4,5]&unitid=1&fc=16&address=0&quantity=5 ###

Write

http://ip:1880/modbus/write

Мне были интересны пару запросов, которые прекрасно сработали.

Сначала тестируем функцию записи - пишем значение 123 в Modbus RTU устройство с адресом 16 функцией 6 в регистр 512 ну и длина записи 1 значение. Можно писать и сразу массивы функцией 16 например [1,2,3,4,5] тогда и длина записи соответственно 5.

HTTP запрос записи

HTTP запрос записи

Теперь проверим, записалось ли наше значение в нужное адресное пространство и прочитаем состояние 5-ти регистров начиная с 512 функцией 3.

HTTP запрос чтения

HTTP запрос чтения

Как видим значение записалось. Теперь мы можем внедрить наши данные в любое web приложение.

ВНИМАНИЕ: в таким виде без авторизации ни в коем случае не пускаем в интернет и обязательно создаем как минимум связку логин + пароль.

Контроллер AntexGate в связке с Node-Red или другим софтом является отличным универсальным решением для обработки, пересылки и хранения данных. Прошу прощения за рекламу, однако выше представленный проект Вы можете реализовать на любом "железе" и любой ОС.

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

"Железо" можно получить на тесты, пишите на почту: info@antexcloud.ru (на три месяца для ЮР лиц и ИП)

Показать полностью 9
40

Open source Modbus TCP — RTU конвертор

Добрый день коллеги, поговорим о прозрачном конверторе Modbus TCP в Modbus RTU.

Казалось бы, что выбор ограничен несколькими проприетарными продуктами которые не всегда удовлетворяют нашим потребностям.

Мы предложим свободно программируемый контроллер AntexGate с помощью которого можно получить конвертер Modbus tcp – Modbus rtu – can – profitnet – bacnet – mqtt – http – opc UA – другой протокол.

Итак, рассмотрим первую связку Modbus TCP – Modbus RTU, нам понадобится сам контроллер AntexGate либо другой компьютер с linux/windows на борту и периферией RS485.

Первое, что необходимо – это установить программный продукт Node-Red, это делается одним скриптом в командной строке:

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/...)

Далее после установки делаем Node-red сервисом:

sudo systemctl enable nodered.service

Перезагружаем железяку:

sudo reboot

Теперь попадаем в среду нашего программного конвертора Node-red через web браузер по ссылке ip шлюза:1880

Далее настроим скрипт, который конвертирует посылку Modbus TCP в RTU, посылает в RS485/232 порт, ждет ответ и тут же преобразует ответ обратно в Modbus TCP.

Заходим в "меню" > "импорт"

Проект конвертора Modbus TCP <> RTU (прошу прощения в пикабу нет спойлера)

[ { "id": "22ff3060.54da6", "type": "function", "z": "de082ac2.4b8bf8", "name": "Convert TCP to RTU", "func": "var MBAPHeader = [5];\nvar crc = 0xFFFF;\n\nMBAPHeader[0]= msg.payload[0];\nMBAPHeader[1]= msg.payload[1];\nMBAPHeader[2]= msg.payload[2];\nMBAPHeader[3]= msg.payload[3];\nMBAPHeader[4]= msg.payload[4];\nflow.set('MBAP_HEADER', MBAPHeader);\n\nvar ReqLen = msg.payload[5];\nvar MBLen = (msg.payload.length)-ReqLen;\nvar MBReq = [MBLen];\n\nfor (let x=0; x < MBLen;x++){\n MBReq[x] = msg.payload[x+ReqLen];\n}\n\nfor (var req = 0; req < ReqLen; req++) {\n crc ^= MBReq[req]; // XOR byte into least sig. byte of crc\n \n for (var i = 8; i !== 0; i--) { // Loop over each bit\n if ((crc & 0x0001) !== 0) { // If the LSB is set\n crc >>= 1; // Shift right and XOR 0xA001\n crc ^= 0xA001;\n } else { // Else LSB is not set\n crc >>= 1; // Just shift right\n }\n }\n}\n\nvar MyCRC = crc.toString(16);\nMBReq[MBLen+1] = parseInt(MyCRC.substring(0,2),16);\nMBReq[MBLen] = parseInt(MyCRC.substring(2,4),16);\n\nvar buf = new Buffer(MBReq);\nmsg.payload = buf;\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 300, "y": 100, "wires": [ [ "7e62bbbc.bd8ea4" ] ], "outputLabels": [ "XO" ] }, { "id": "7e62bbbc.bd8ea4", "type": "serial request", "z": "de082ac2.4b8bf8", "name": "", "serial": "27dabad398437b7e", "x": 490, "y": 100, "wires": [ [ "db79ee80.1d792", "9e53f02d0a4e04fb" ] ] }, { "id": "db79ee80.1d792", "type": "function", "z": "de082ac2.4b8bf8", "name": "Convert RTU to TCP", "func": "if (msg.payload.length > 0) {\n var resLen = msg.payload.length - 2;\n var respond = [];\n respond[0] = flow.get('MBAP_HEADER')[0];\n respond[1] = flow.get('MBAP_HEADER')[1];\n respond[2] = flow.get('MBAP_HEADER')[2];\n respond[3] = flow.get('MBAP_HEADER')[3];\n respond[4] = flow.get('MBAP_HEADER')[4];\n respond[5] = resLen;\n\n for (let req = 6; req < resLen+6; req++) {\n respond[req]= msg.payload[req-6];\n }\n msg.payload = new Buffer(respond);\n return msg;\n} else {\n return null;\n}\n", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 640, "y": 60, "wires": [ [ "2622a1e893f52bed", "140a62f5366490d9" ] ] }, { "id": "55423964225fa869", "type": "comment", "z": "de082ac2.4b8bf8", "name": "Convert Modbus TCP to Modbus RTU", "info": "", "x": 170, "y": 40, "wires": [] }, { "id": "cbd6e86861af643d", "type": "tcp in", "z": "de082ac2.4b8bf8", "name": "Modbus TCP - IN", "server": "server", "host": "", "port": "5002", "datamode": "stream", "datatype": "buffer", "newline": "", "topic": "", "trim": false, "base64": false, "tls": "", "x": 100, "y": 100, "wires": [ [ "22ff3060.54da6", "48471bdeae3a1d30" ] ] }, { "id": "2622a1e893f52bed", "type": "tcp out", "z": "de082ac2.4b8bf8", "name": "Modbus TCP - OUT", "host": "127.0.0.1", "port": "502", "beserver": "reply", "base64": false, "end": false, "x": 850, "y": 100, "wires": [] }, { "id": "9e53f02d0a4e04fb", "type": "debug", "z": "de082ac2.4b8bf8", "name": "debug 17", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 640, "y": 220, "wires": [] }, { "id": "140a62f5366490d9", "type": "debug", "z": "de082ac2.4b8bf8", "name": "debug 18", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 820, "y": 200, "wires": [] }, { "id": "48471bdeae3a1d30", "type": "debug", "z": "de082ac2.4b8bf8", "name": "debug 19", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 260, "y": 200, "wires": [] }, { "id": "27dabad398437b7e", "type": "serial-port", "serialport": "/dev/ttyUSB0", "serialbaud": "115200", "databits": "8", "parity": "none", "stopbits": "1", "waitfor": "", "dtr": "none", "rts": "none", "cts": "none", "dsr": "none", "newline": "5", "bin": "bin", "out": "time", "addchar": "", "responsetimeout": "1000" } ]

Копируем скрипт, нажимаем "Импорт"

Копируем скрипт, нажимаем "Импорт"

Настраиваем порт для просушки в узле Modbus TCP IN, рекомендуем не использовать стандартный 502, а использовать нестандартный порт более 1024, для них не нужны дополнительные разрешения в Linux.

Настраиваем последовательный порт RS485/232 на скорость конечного железа, поддерживающего протокол Modbus RTU.

Жмем "Развернуть" и наш конвертер готов!

Настраиваем Ваш инструмент верхнего уровня, например Modbus TCP OPC сервер стандартно: ip_адре_ шлюза:5002:id_RTU_устройства.

Все работает стабильно, чтение и запись! Посылки как видим между запросом и ответом 100-200мс, что равно пингу. Удаленный шлюз AntexGate работает на встроенном LTE модеме.

Бонусом, для тех, у кого софт верхнего уровня поддерживает функцию Modbus RTU поверх TCP включаем это правило.

В Node-Red упрощаем поток и исключаем функции RTU TCP обработки, и наш проект в Node-Red становится без единой строчки кода.

Контроллер AntexGate в связке с Node-red является отличным универсальным решением для обработки, пересылки и хранения данных. Прошу прощения за рекламу, однако выше представленный проект Вы можете реализовать на любом железе и любой ОС.

Присоединяйтесь к нашему сообществу в Telegram

Железо можно получить на тесты, пишите на почту: info@antexcloud.ru (на три месяца для ЮР лиц и ИП)

Показать полностью 8
78

OEM компьютер AntexGate

OEM компьютер AntexGate

Наконец новый промышленный компьютер на базе процессора broadcom, который полностью совместим с софтом для raspberry можно взять на тест бесплатно. Производство РФ.

Чат - техническая поддержка, и инструкция.

Запрос образца на тест в свободной форме.

Особенности устройства:

  • Интерфейс Etnernet 100Mb — 1шт;

  • Интерфейс Etnernet 1Gb — 1шт;

  • Интерфейс CAN-BUS – 1шт;

  • Интерфейс RS485 ISOLATED– 2шт;

  • Интерфейс RS232 – 1шт;

  • Интерфейс 1Wire – 1шт;

  • Интерфейс USB – 2шт;

  • Дискретные входы оптопара- 4шт;

  • Релейные выходы – 2шт;

  • Выход оптопара – 1шт;

  • Разъем HDMI;

  • Разъем для подключения GSM-антенны;

  • Разъем для подключения WiFi-антенны;

  • Разъем m.2 – 1шт Для диска NVMe SSD

  • Разъем mPCIe – 1шт (Lora; WiFi; 3G/LTE; NB-IOT; Zigbee; Z-Wave):

    Рабочая температура: -25°C… +80°C.

    Потребляемая мощность Питание: клеммы DC 12-48В; Passive Poe AC/DC 12-48В; Мощность: 1.56-5.8 Вт в зависимости от конфигурации.

    Системные характеристики

    Процессор: BCM2711 на базе Raspberry Pi CM4; ЦПУ: 4-ядерный Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz Flash: 8/16/32GB eMMC. RAM: 1/2/4/8GB

    Поддерживаемые протоколы

  • ModBus;

  • Dmx 512,

  • MQTT,

  • Profinet;

  • LoRaWAN;

  • CAN;

  • OPC UA

  • и другое.

    Поддерживаемых платформы и ПО

  • NodeRed;

  • OpenHab;

  • CoDeSys;

  • MasterSCADA 4D;

  • Home Assistant;

  • iRidiumMobile;

  • Z-Wave.me

  • Совместимый софт с raspberry pi4

    Поддерживаемые веб-сервисы

  • ApacheHTTP;

  • NGINX.

    Операционная система

  • Linux,

  • Ubuntu,

  • Debian,

  • Astra Linux,

  • OpenWrt

Показать полностью 1
52

Система мониторинга температуры в теплицах (Telegram, 1С, Yandex Алиса, Excel или голосовое оповещение)

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

Мы протестировали относительно не дорогой комплект, установили по 3шт промышленных датчика (modbus rtu) температуры +влажность в каждую 100метровую теплицу, которых было 9шт, собрали все данные по проводной шине (Utp5e RS485) около 900метров без каких-либо промежуточных коммутаторов и усложнения проекта. В промежутке поставили компьютер AntexGate.

Вот такая простая схема!

Вот такая простая схема!

Итак проект реализовали на разработанном нами контроллере интернет вещей AntexGate + бесплатный софт Node-red, который передает данные либо сразу на экран монитора либо через web-интерфейс:

На главный экран выводится текущая температура и влажность по каждому прибору, в случае обрыва или отсутствия датчика выводится значение ERR, а для выбора страницы реализован всплывающий экран.

График температуры и влажности

График температуры и влажности

За каждый день можно посмотреть данные на графике и проанализировать отношение температуры и влажности (синяя линяя влажность, белая температура), график строится как за отдельный датчик, так и средние значения в теплице.

Экспорт данных CSV

Экспорт данных CSV

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

Настройки системы оповещения

Настройки системы оповещения

Страница настроек для оповещения и привязки Teleram бота. Когда достигнут критический придел из всех устройств (телефоны, ПК) с открытым web интерфейсом либо из подключенного монитора происходит голосовое оповещение о низкой, или высокой температуре определенной теплицы и конкретного датчика.

Оповещение в телеге

Оповещение в телеге

Планируем расширять проект, т.к. в локальной wifi сети у Всех есть доступ к текущим значениям, но хочется посмотреть значения удаленно, тут мы планируем использовать Умный дом Яндекс, бесплатное приложения для мониторинга отлично подойдём еще и строит график.

Немного красоты из систем Умного дома

Немного красоты из систем Умного дома

Примерно такой дружелюбный интерфейс у Яндекса, в добавок на производстве можно раскидать колонок и спрашивать о состоянии системы.

В заключении хотелось бы сказать, что реализация данной системы подходит для конкретного заказчика и большое преимущество свободно программируемых систем AntexGate + Node-red в том, что ее можно доработать в дальнейшем. Можно добавить стыковку с другими системами, весами, поливом, приводами, климатическими системами и другим.

Ниже наш прибор на котором реализован проект, система отработала год.

Компьютер интернет вещей AntexGate

Компьютер интернет вещей AntexGate

Интересно услышать мнение профессионалов о необходимости такой системы на рынке, с разработчиками в РФ и учетом Европейских санкций.

Подробнее об устройстве на котором реализован проект можно почитать в нашем Телеграмм-канале и задать вопросы.

Показать полностью 8
497

Чем заменить Raspberry PI в промышленности?

Если коротко, то речь пойдет о промышленном ПК на основе Raspberry CM4 – это абсолютный аналог Raspberry Pi4 в промышленном исполнении с надёжной eMMC от Samsung и полной программно-аппаратной совместимостью.

Одну статью мы закончили фразой: «Надеемся, что мы вдохновим читателей на переработку Ваших личных проектов в более масштабное производство с коммерческими перспективами.»

В этой статье мы расскажем о продолжении этой истории и что мы имеем на сегодняшний день.

Глава 1. Небольшие трудности

После пандемии начался великий дефицит на устройства Raspberry CM3+, а потом их и вовсе сняли с производства, что сильно нас не поломало. Мы нашли моментальный выход в виде китайского качественного переходника Raspberry CM3-CM4, тем самым клиенты получили лучшие технические характеристики, а мы время на переход к новому форм-фактору.

Переходник CM3-CM4

Переходник CM3-CM4

Еще одной проблемой была замена корпуса с Китайского Gainta на собственный, в связи с тем же дефицитом и тяжёлой логистикой (дорого возить куски металла) из Китая. Было решено покончить с этой коробкой.

Корпус Gainta - крепкий, но дефицитный.

Корпус Gainta - крепкий, но дефицитный.

Спустя несколько недель корпус получился, а идею крепления на DIN рейку/панель взяли у Moхи.

Первая версия устройства в новом корпусе.

Первая версия устройства в новом корпусе.

Глава 2. Пора переезжать на новую платформу.

Собрав обратную связь от текущих клиентов, специалистов АСУ ТП и остальных диванных критиков, мы выделили следующие недостатки в первой версии:

  1. Необходима гальваническая развязка RS485 портов.

  2. Необходимо два LAN порта для создания киберзащищенных шлюзов между низким и высоким уровнем.

  3. Малый объем оперативной памяти 1Gb в некоторых случаях (установка Касперского, VipNet и другая большая обработка данных)

  4. Отсутствие дополнительного хранилища данных кроме внешней USB флешки.

  5. Нехватка питания для мощных периферийных модемов.

  6. Отсутствие дискретных входов\выходов.

Решено было оставаться на обновленной Raspberry CM4, это устройство сразу решало несколько наших недостатков, а именно ОЗУ до 8GB, WIFI сразу на борту, есть MPCI-E линия для SSD диска, инфраструктура под 1GB Ethernet и самое главное это всемирное сообщество, поддерживающее этот продукт.

В интернете много готовых программах продуктов и исходников для Raspberry.

Самое главное, что клиенту нет необходимости предварительно приобретать такое устройство и можно весь софт писать и тестировать на настольной Raspberry PI и даже целиком перенести слепок на AntexGate c помощью Win32DiskImager.

Инженеру больше не нужно краснеть перед руководством, объясняя, что на этой малинке можно собрать все что угодно, малина — это как-то по-детски, а тут железяка черная – красота!

Накидали функциональную схему и начал тянуться долгий год разработки и отладки.

Функциональная схема нового устройства

Функциональная схема нового устройства

И вот, наконец, поле нескольких подходов плата получилась и работает безупречно, питание не скачет, все нагрузки выдерживает.

RS485 мы конечно развязали, предусмотрели возможность демонтажа гальваники, когда это критически необходимо, получили два LAN порта 1Gb/s и 100Mb/s и более того добавили возможность питания от любого passive POE-инжектора.

По традиции набор интерфейсов 2xRS485/1xRS232/1x1Wire/1xCAN/2xUSB/1xHDMI/2xSMA, самое главное появились дискретные каналы: 4 входа 9-48В развязанные оптопарами, 3 выхода: 2-реле и 1-оптопара.

Также оставили очень полезные вещи: RTC часы, аппаратный watchdog, MPCI-e разъем для модема, двухцветный программируемый светодиод, которым можно поморгать либо настроить для внешнего визуального осмотра состояния прибора (зеленый/желтый/красный).

С диском m.2 получилось все достаточно хорошо и одна линия MPCI-e выдает свои стабильные 300Mb/s на чтение и 300Mb/s на запись. Теперь уже можно хранить огромные базы данных, использовать как тонкий клиент, загрузить медиа контент, хранить и обрабатывать фото и видеофайлы.

Питание для устройства сделали с запасом и в широком диапазоне от 9 до 48В. У каждого инженера найдется блок питания в таком диапазоне. Отдельно для периферийных устройств реализовали понижающий импульсный источник питания в пределах 5А для дисков NVME + модем одновременно.

Плата сверху с вычислительным модулем Raspberry CM4

Плата сверху с вычислительным модулем Raspberry CM4

Плата снизу с периферийными устройствами

Плата снизу с периферийными устройствами

Корпус решили оставить в прежнем исполнении за исключением нескольких технических решений, а именно выкинуть крепежные стойки для платы. Вместо стоек мы отогнули 4 уха и нарезали в них резьбу, таким образом в одном цикле мы получаем 2 готовые железяки к сборке.

Корпус из стали 0.7мм порошковая покраска

Корпус из стали 0.7мм порошковая покраска

Составные части устройства

Составные части устройства

У нас получился компьютер для встраиваемых систем и действительно безотказный! Всем «дедам» назло.

Изображение устройства со стороны подключения промышленных интерфейсов

Изображение устройства со стороны подключения промышленных интерфейсов

Изображение устройства со стороны стандартных интерфейсов

Изображение устройства со стороны стандартных интерфейсов

Шутки в сторону — мы ведь серьезная организация!

Всем кто дочитал до конца мы готовы предоставить устройство на тестирование.

Подробная инструкция и обсуждение в Telegram.

Показать полностью 10
53

Встраиваемый компьютер AntexGate + 3G-модем. Полезные настройки для более стабильного интернет-соединения

В сфере промышленной автоматизации существует негласная парадигма, в которой многие производители промышленного оборудования делают контроллеры отдельно, а модемы отдельно. Как правило, каждое устройство помещается в свой корпус, имеет своё питание, большие габариты и высокую стоимость. Такой вариант разделения функционала имеет свои преимущества и недостатки, но, по нашему мнению, он ведет, скорее, к бóльшей коммерциализации, чем обусловлен какими-то объективными причинами. Поэтому мы решили пойти немного по другому пути и сделали универсальное устройство, которое представляет из себя свободно программируемый контроллер на базе Linux с модемом в едином корпусе. Это нам позволило в своих проектах практически совсем отказаться от привычных всем щитов автоматизации и прийти к более мобильным решениям.


В этой статьи мы поделимся с Вами тонкостями настройки модема и несколькими полезными скриптами для более стабильного 3G-соединения.

Предпосылки и решения


При разработке своего устройства мы руководствовались тем, что оно должно выходить в мобильный интернет, чтобы подключаться к облачным платформам. Было два пути: напаивать модем на плату, либо использовать mPCIe-разъемы. Мы остановились на втором варианте и предусмотрели сразу два mPCIe-разъема (рисунок 1), поскольку такой вариант нам показался более интересным и гибким. Ведь установка и замена модема занимает считанные секунды, плюс для пользователя появляется необходимая вариативность и он может использовать такие комбинации mPCIe-модулей, которые ему необходимы под конкретный проект. Кроме 3G-модема это может быть LoraWan или Wi-Fi модули. Плюс ко всему mPCIe-решения зарекомендовали себя как достаточно надежные и качественные.

Рисунок 1 — mPCIe-разъемы

В качестве основного 3G-модуля для нашего устройства мы рассматривали следующие варианты:


- MikroTik R11e-LTE6

- Quectel EC25-E

- YUGA CLM920 TE5

- HUAWEI MU709s-2p


Однако после проведения тестов наиболее предпочтительным для нас в плане надежности и соотношения цена-качество оказался модем фирмы HUAWEI (рисунок 2). Мы взяли его за основу и устанавливаем опционально в наши устройства. Поэтому в дальнейшем мы будем рассматривать настройку и скрипты относительного модема этой модели. Возможно, этот скрипт будет универсальным и будет полезен для других модемов, однако стабильность работы с другими моделями не гарантируется. Для Rasbian Buster и HUAWEI MU709s-2p всё работает отлично.

Рисунок 2 — Модем HUAWEI MU709s-2p, установленный на плату устройства

Использование скрипта для перезагрузки 3G-модема


Для более устойчивой и безотказной работы мы написали скрипт, который будет пинговать заданный IP-адрес, а если же определенное в настройках количество пингов не прошло, то GSM-модем перезагрузится, тем самым восстанавливая зависшее сетевое соединение. Стоит отметить, что модем определяется в системе как сетевая карта lan1.


Архив со всеми необходимыми файлами можно скачать по этой ссылке. Также текст самих скриптов представим ниже.


Файл check_inet.sh необходим для проверки наличия интернет соединения. Если заданный IP-адрес не пингуется, то мы дергаем 19 ногу и перезапускаем модем по питанию.


Файл start_inet.sh запускает check_inet.sh после перезагрузки устройства.


Также в архиве находится файл конфигурации igate.conf


Последовательность настройки:


1. Добавьте правило соответствия физического подключения COM-порта модема к концентратору USB. Для этого поправьте файл по следующему пути:

sudo nano /etc/udev/rules.d/99-com.rules

2. Добавьте в файл следующую строку:

KERNEL==”ttyUSB*”, KERNELS==”1-1.5:2.4″, SYMLINK+=”GSM”

3. Сохраните правила и перезагрузите устройство. Теперь порт Вашего модема будут определять по удобному псевдониму /dev/GSM;


4. Скачайте архив по предложенной выше ссылки, либо самостоятельно создайте файлы

check_inet.sh, start_inet.sh и igate.conf;


5. Скопируйте файл check_inet.sh в папку:

/home/pi/

6. Сделайте файл check_inet.sh исполняемым:

sudo chmod +x /home/pi/check_inet.sh

7. Скопируйте файл start_inet.sh в папку:

/etc/init.d/

8. Сделайте файл start_inet.sh исполняемым:

sudo chmod +x /etc/init.d/start_inet.sh

9. Обновите конфигурацию автозагрузки выполнив команду:

sudo update-rc.d start_inet.sh defaults

10. Скопируйте файл igate.conf в папку:

/home/pi/

11. Настройте файл конфигурации igate.conf.

Управление скриптом


Запуск в фоновом режиме файла скрипта check_inet.sh:

/etc/init.d/start_inet.sh start

Остановить check_inet.sh:

/etc/init.d/start_inet.sh stop

Скрипт также автоматически запускается после перезагрузки устройства.


Варианты применения устройства


Рассмотрим основные задачи, под которые можно использовать устройство:


1. Контроллер с выходом в интернет для передачи данных в облако;

2. 3G-роутер для задач в «поле»;

3. Контроллер для умного дома с резервирующим каналом 3G. То есть можно использовать LAN-порт как основной канал связи, а 3G в качестве резервного, чтобы всегда был доступ к устройству;

4. Базовая станция LoRaWAN, то есть опрос устройств по LoRaWAN и передача данных в облако через сеть 3G или LTE;

5. Устройство для мониторинга транспорта (подключение по CAN и стыковка с различными сервисами)


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

Показать полностью 2
79

Встраиваемый компьютер AntexGate. От прототипа к серийному производству

Не так давно мы с командой разработали небольшой встраиваемый компьютер для решения задач IIoT и промышленной автоматизации. Первую статью о нашем устройстве можно посмотреть здесь: Разработка IoT-шлюза на базе Raspberry CM3+

Разрабатывать устройство решили на распространенном и оттестированном модуле Raspberry CM3+, что позволило нам создать компьютер с большими вычислительными способностями, огромным сообществом и простотой его использования. Под катом расскажу по этапам, от чего отталкивались и к чему пришли в итоге.

Муки выбора корпуса

Для устройств даже в промышленной сфере очень важен внешний вид устройства и законченность, таким образом начались долгие поиски корпуса, подходившие под наши требования по размеру. Хотелось максимально много уместить в одну коробку и самые минимальные параметры платы получались 10*10 см.

После того, как мы заказали несколько вариантов корпусов, пришлось большее количество из них выбросить, так как они подходили только для домашних поделок и продавать их людям в таком виде не представлялось возможным. Основным претендентом на тот момент стал алюминиевый корпус с пластиковыми крышками 10*10*5 см (рисунок 1).

Рисунок 1 — Первый вариант корпуса

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

Глянец весь быстро поцарапался и в этой блестящей рамке отверстия выглядели очень асимметрично (рисунок 2). Ожидание и реальность, как говорится.

Рисунок 2 — Пластиковые крышки корпуса

Однако отказываться от корпуса не пришлось, потому что у производителя был такой же, но с алюминиевыми торцами, мы быстро его заказали и удивились, насколько он идеально выглядел (рисунок 3). Торцы очень красивые, матовые и бонусом была дополнительная помехозащищенность. Стоил такой корпус уже немного дороже, но красота требует жертв.

Рисунок 3 — Металлический корпус

Вторая попытка обработать торцы была гораздо удачнее. Технологию надписей мы выбрали путём гравировки (рисунок 4), однако были недостатки которые пришлось решать. Самое главное это то, что гравер (сверло) очень маленький и нежный, скорость нанесения гравировки достаточно низкая. Плюс само сверло часто ломается. Из-за всего этого сильно растёт цена из-за потребляемой электроэнергии и трудозатрат. Также внутрь гравировки набивается грязь и постепенно окисляется алюминий, делая надписи менее заметными.

Рисунок 4 — Гравировка металлического корпус

Эту технологию пробовали менять на лазерную гравировку, но получилось некрасиво. Лазер выжигал краску некорректно, а надписи получались темными.

В итоге мы пришли к шелкографии с запеканием в печи (рисунок 5). Эта технология оказалась самой быстрой и очень крепкой. Всё свелось к тому, чтобы заказать единожды шаблон (фотовывод) и по нему делать партию до 50 штук в день.

Рисунок 4 — Гравировка металлического корпус

Исправление недоработок

С корпусом закончили, а вот с платой оставались недоработки. Задумка нашего компьютера в том, чтобы любой пользователь мог спокойно установить дополнительное оборудование в устройство, открутив четыре болта на корпусе, как в свой ноутбук. Я думаю прошли те времена, когда на корпуса клеили наклеечки «Не вскрывать, потеря гарантии».

Внутри корпуса есть периферия для прошивки вычислительного модуля, SIM-карта и многое другое. Однако была одна проблема с монтажом платы в корпус, а именно выводные светодиоды на ножках, которые постоянно гнулись у наших клиентов, взявших прототипы на тест (рисунок 6).

Рисунок 6 — Выводные светодиоды на ножках

В этой связи пришлось поменять диоды на ножках на SMD-светодиоды, которые светят в бок и проблема с установкой платы в корпус решилась, больше ничего не гнулось (рисунок 7).

Рисунок 7 — SMD-светодиоды

Индикация была глубоко внутри корпуса и чтобы увидеть свет приходилось смотреть под прямым углом на торец. В голову пришла идея световодов из полимерных прозрачных материалов (рисунок 8). Оставалось найти бюджетный, но эстетически красивый вариант. В голову пришел молочный плексиглас с прозрачностью 20% с толщиной листа 3 мм, в первой же фирме лазерной резки подобрали диаметр миниатюрного цилиндра, он был равен диаметру отверстия в корпусе. Особенность в том, что станок при лазерной резке дает небольшой скос нижнего диаметра на 0.1 мм и таким образом мы получили мешок миниатюрных усеченных конусов с нижним диаметром 2,9 мм и верхним 3 мм, а высота была 3 мм как и толщина торцов нашего корпуса. Вставляем конус в отверстие и запрессовка крепко загоняет эти световоды в отверстие, а небольшая капелька клея с обратной стороны фиксирует их намертво.

Рисунок 8 — Световоды из плексигласа

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

Итог...

Также мы решили сделать небольшое видео с презентацией нашего устройства.

Спасибо за внимание! Надеемся, что мы вдохновим читателей на переработку Ваших личных проектов в более масштабное производство с коммерческими перспективами. В нашей великой стране на полочках у инициаторов пылятся действительно нужные вещи, которые могут заменять зарубежные производства.

В следующей статье мы расскажем Вам историю тестирования и тонкости настройки mPCIe 3G-модема Huawei и mPCIe LoraWan-модуля MikroTik.

Показать полностью 8 1
31

SCADA для LINUX. Есть ли жизнь на ARM е?

Имея достаточно большой опыт работы в области промышленной автоматизации, мы вечно находимся в поиске оптимальных вариантов для решения своих задач. В зависимости от технического задания заказчика, приходилось останавливаться на той или иной программно-аппаратной базе. И если не было каких-то жестких требований по установке оборудования Siemens в связке с TIA-portal`ом, то, как правило, выбор падал на MasterSCADA 3.XX. Однако ничто не вечно под луной…


О своём опыте перехода на MasterSCADA 4D, предпосылках, особенностях её работы на встраиваемых компьютерах архитектуры ARM под катом данной статьи.


Предпосылки


Мы начали тестировать относительно новую разработку компании Insat – MasterSCADA 4D – не так давно. Предпосылок для этого было несколько. Во-первых, мы провели несколько независимых опросов среди специалистов в области промышленной автоматизации с целью выяснить, какие SCADA-системы наиболее популярны (рисунок 1). По результатам опроса первое место среди отечественных систем занимает система MasterSCADA.

Рисунок 1 — Результаты опроса наиболее популярных SCADA-систем


Второй предпосылкой можно считать…


Теперь перейдем непосредственно к самой MasterSCADA 4D. Она состоит из двух программных продуктов, а именно: среда разработки и среда исполнения. О работе каждой из этих частей поговорим ниже.


Среда разработки


Проект системы создается в среде разработки MasterSCADA 4D, для этого необходимо получить бесплатную версию на сайте компании Insat и установить, следуя подсказкам.

Рисунок 2 — Интерфейс среды разработки


Первое, что бросается в глаза — это приятный интерфейс среды разработки и удобная иерархическая структура построения проекта. Теперь в одном проекте можно создавать программу не только под АРМ, но и под весь объект, начиная с контроллера — заканчивая сервером или рабочим местом оператора.


Среда разработки работает только на ОС Windows, это относительно привычно и терпимо, а вот среда исполнения (RunTime) приятно удивила своей возможностью интегрироваться в различные операционные системы и архитектуры процессоров, но об этом дальше.


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

Рисунок 3 — Элементы визуализации


Коммуникационные протоколы


В системе поддерживаются различные драйверы (протоколы обмена), которые по умолчанию интегрированы в MasterSCADA 4D:


Modbus TCP/RTU, RTU поверх TCP

DCON

OPC UA/DA/HDA

IEC61850

SNMP

PostgreSQL

MQTT

IEC104

MSSQL

MySQL

Меркурий (отдельная библиотека) и др.


Среда исполнения


Среда исполнения может быть запущена на различных операционных системах и архитектурах персональных компьютеров, также вы можете запустить RunTime и на локальной машине, она устанавливается совместно со средой разработки и функционирует час (либо 32 тега) без ограничений.


Устройство AntexGate


MasterSCADA Runtime предустановлена отдельной опцией на встраиваемый ПК AntexGate с архитектурой процессора ARM и операционной системой Debian, тесты будем проводить на этом устройстве.

Рисунок 4 — Устройство AntexGate


Характеристики:


ЦПУ: 4-ядерный x64 ARM v8 Cortex-A53

1.2Mhz Оперативная память: LPDDR2 1024MB

Энергонезависимая память: 8/16/32GB eMMC


Подробнее об устройстве можно прочитать здесь.


Запустим программу в исполнительном устройстве. Для примера мы создали опрос и управление устройством по протоколу Modbus RTU, процесс настройки опроса интуитивно понятный и чем-то похож на настройку привычного OPC-сервера. Правда сейчас в RunTime встроены драйверы протоколов для обмена данными.


В качестве примера создадим простой проект для управления тремя насосами и двумя задвижками, необходимого для абстрактного производственного процесса. В среде разработки он выглядит следующим образом, как на рисунке 5.

Рисунок 5 — Проект в среде разработки


В итоге у нас получилась простая мнемосхема (рисунок 6), которая работает в любом браузере с поддержкой HTML5.

Рисунок 6 — Мнемосхема


Варианты отображения информации HMI


Есть возможность подключиться к среде исполнения через WEB, этот вариант не ограничивает нас в выборе клиента для просмотра данных на мнемосхеме.

В нашем случае на устройстве предусмотрен вывод информации через HDMI, Ethernet, 3G.

При подключении через HDMI мы обращаемся на LocalHost 127.0 0.1:8043 через встроенный браузер в AntexGate, либо подключаемся к фиксированному IP:8043 адресу в интернете или локальной сети предприятия другим «Тонким клиентом».

Рисунок 7 — Структура мониторинга WEB


Интересной новостью стал долгожданный MQTT протокол, которого обычно не хватало для мониторинга удаленных объектов в SCADA системах.

На сегодняшний день каждый имеет возможность получить недорогой VDS-сервер в интернете с фиксированным IP-адресом (например, сервер сайта компании) и развернуть на нем MQTT Broker (например, Mosquito).

Получив один сервер с MQTT брокером, мы легко можем отвязаться от дорогих услуг оператора — фиксированного IP и платить в год 900 рублей вместо 4000 рублей за связь 3G, т.е. при подключении 500 устройств экономия в год более 1,5 млн.руб..

Рисунок 8 — Структура мониторинга MQTT


Такое построение сети позволит не только экономить на трафике, но и обезопасит данные, так как передача данных по протоколу Modbus TCP в сети интернет не гарантирует безопасность и качество связи.

Таким образом, вы можете продавать тиражируемые проекты, в которых клиент сам выбирает поставщика интернета. И ни у кого не болит голова с настройкой и выделением IP адресов: клиент сам вставляет любую SIM-карту или подключается к маршрутизатору с DHCP-сервером.


Быстродействие


Для проекта главное быстродействие, в этом нам помогут так называемые «Задачи». По умолчанию у каждого узла при его создании только одна — Основная задача. Разработчик проекта может создать их столько, сколько необходимо для работы конкретного проекта. Особенности вычисления, например, цикл вычисления, будут зависеть от настроек той или иной задачи. Каждая из них будет работать независимо от других в устройстве. Создание нескольких задач целесообразно, если необходимо обеспечить разные циклы вычисления разных программ проекта.


Данная функция особенно интересна для устройств, на борту которых процессор с несколькими ядрами. Каждая «Задача» запускается как отдельный процесс в системе и нагрузка распределятся равномерно на работу процессора. В устройстве AntexGate установлен процессор ARM с 4-мя ядрами по 1.2ГГц и 1ГБ оперативной памяти, что позволяет создать как минимум 4 крупные задачи и распределить нагрузку по ядрам. В сравнении с ПЛК, устройство AntexGate может предоставить как минимум в 4 раза больше вычислительных способностей за такую же цену.

Рисунок 9 — Загрузка вычислительных способностей AntexGate в режиме исполнения


Как мы видим из рисунка 9, загрузка ЦП не более 2,5%, а памяти выделено всего 61Мб. Таким образом, небольшой проект в режиме исполнения потребляет очень мало встроенных ресурсов.

Устройство может использоваться не только как контроллер, но уже и как полноценный сервер с опросом более 2000 точек ввода-вывода и возможностью поддержки более 100 WEB-клиентов.


Для примера подключим 9 WEB-клиентов к устройству и посмотрим прогресс потребления ресурсов (рисунок 10).

Рисунок 10 — Загрузка вычислительных способностей AntexGate при подключении 9-ти WEB-клиентов


Как видно из рисунка выше, загрузка ЦП поднялась в среднем с 2,5% до 6%, а памяти выделено всего на 3Мб больше.

Благодаря большому запасу вычислительных ресурсов устройства, разработчику нет необходимости экономить на качестве программы, созданной в MasterSCADA 4D.


Кроссплатформенность


Также хочется отметить кроссплатформенность рассматриваемой SCADA-системы, которая дает интеграторам огромный выбор платформ для реализации своих проектов. Благодаря такому подходу переход между операционными системами или архитектурами ПК происходит очень просто.


Заключение


MasterSCADA 4D — относительно новый продукт компании Insat. На сегодняшний день информации по работе с этим программным продуктом не так много, как хотелось бы. Однако можно скачать бесплатную среду разработки с официального сайта компании, она имеет весьма подробную справку по работе с программой.

Рисунок 11 — Окно справки


В заключении хотелось бы сказать о том, что данная статья имеет вводные данные о программном продукте MasterSCADA 4D и много чего не сказано. Однако при Вашей поддержке, мы выпустим более подробные примеры и уроки по работе с этим программным продуктом.


Хотелось бы увидеть в комментариях, какие вопросы больше всего интересуют Вас. И самые часто задаваемые мы по возможности превратим в урок по созданию проектов в MasterSCADA 4D.

Показать полностью 11
Отличная работа, все прочитано!