Pull to refresh
19
0

Инженегр АСУТП

Send message

Память как у пингвина: Работа памяти в Linux

Level of difficulty Easy
Reading time 20 min
Views 36K

Что такое память и какие они бывают в Linux? Как с ней взаимодействовать? Каковы её особенности?

Как реализована память в ядре Linux? Как с ней работать?

Что такое кластеры, откуда в ядре Linux грязные и чистые страницы - читайте в этой статье!

Читать далее
Total votes 101: ↑97 and ↓4 +93
Comments 56

Открытые стандарты и архитектуры или самоделки?

Reading time 7 min
Views 3.1K

Специфика моей деятельности связана с имитационным моделированием технологических объектов и процессов (как сейчас модно говорить - цифровые двойники, оптимизация, тренажеры для обучения персонала). И конечно в этом деле постоянно сталкиваюсь с задачей сетевого обмена информацией и синхронизацией данных, как при реализации многопользовательского режима так и при организации сетевого обмена между отдельными моделями. И вот наблюдаю интересную картину — некоторые производители цифровых двойников и тренажеров используют стандарты для этого всего (например OPC UA, IEEE 1516, DDS (Data Distribution Service), MQTT, CAPE‑OPEN, xAPI), а некоторые — делают самоделки, причем закрытые. Особенно меня удивляют товарищи, создающие эти самые самоделки, ни с чем не совместимые и абсолютно закрытые, только для того, чтобы потом с этими самоделками являться «единственным поставщиком» скажем так, требуя при этом совместимости со своими велосипедами, да еще и являются организациями, которые сами же и проверяют совместимость стороннего ПО со своими‑же велосипедами. Жуть, в общем.

Читать далее
Total votes 7: ↑7 and ↓0 +7
Comments 0

KC868-AM: мини мы или ESP32 IO Expansion Board

Level of difficulty Easy
Reading time 4 min
Views 5.6K


Когда я впервые увидел KC868-AM, то долго думал как можно его охарактеризовать — и тут меня осенило: это не что иное, как контроллер Kincony в его минималистическом воплощении, ужатый до размеров 9x7 см. Тут присутствуют все основные элементы «больших» контроллеров Kincony (Wi-Fi, Ethernet, RS485, USB-UART и т. д.), размещённые на плате минимального размера, плюс свободные GPIO и возможность крепления на DIN-рейку.

Кроме типовых элементов, на плате KC868-AM присутствует и что-то новенькое — в этом контроллере компания Kincony впервые на моей памяти использует не готовый модуль ESP32, а самостоятельно развела на плате и сам чип и всю радиочастотную часть. Для чего она это сделала не совсем понятно, моё предположение — чтобы потренироваться и попробовать свои силы в конструировании подобных устройств.

Но обо всем по порядку…
Читать дальше →
Total votes 14: ↑14 and ↓0 +14
Comments 18

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

Level of difficulty Medium
Reading time 3 min
Views 13K

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

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

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

Читать далее
Total votes 13: ↑11 and ↓2 +9
Comments 43

Пишем printf на языке ассемблера FASM

Level of difficulty Hard
Reading time 12 min
Views 15K

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

Читать далее
Total votes 55: ↑54 and ↓1 +53
Comments 5

Мал, да удал. ASCADA. Простейшая система диспетчеризации (SCADA) для Arduino и других микроконтроллеров

Level of difficulty Easy
Reading time 9 min
Views 18K

Я, как любой другой любитель «поковыряться» в различных железках, связанных с датчиками, микроконтроллерами и сопутствующих штуках, несколько лет назад столкнулся с необходимостью связать очередную микроконтроллерную историю с ПК, а именно, мне нужно было выводить в реальном времени значения различных сигналов с микроконтроллера на дисплей компьютера в виде различных графиков, прогресс‑баров, а также, с помощью кнопок и ползунков управлять моим «железом».

Имея достаточный опыт работы с промышленными SCADA‑системами было принято написать свою! Да такую, чтобы с ней справился совсем уж начинающий программист.

Рад поделиться своими наработками и буду вдвойне рад если это пригодится еще кому‑то еще кроме меня!

Узнать подробнее про ASCADA
Total votes 25: ↑25 and ↓0 +25
Comments 45

Как выбрать программируемый логический контроллер для задач автоматизации производства

Level of difficulty Medium
Reading time 12 min
Views 7.3K

Российские промышленные предприятия и компании, которые занимаются разработкой решений АСУ ТП, столкнулись с необходимостью поиска альтернативы программируемым логическим контроллерам (ПЛК) европейских, американских и японских производителей. В этой статье мы предлагаем вашему вниманию сравнительный обзор технических характеристик программируемых контроллеров Consyst Electronics. 

Читать далее
Total votes 39: ↑35 and ↓4 +31
Comments 38

Производительность таблиц в WPF и Avalonia

Level of difficulty Medium
Reading time 3 min
Views 3.3K

Предыстория: как-то возникла у меня необходимость в приложении на WPF сделать таблицу с количеством столбцов в несколько десятков, притом с шаблонизированным содержимым. По задумке пользователь должен иметь возможность выбрать столбцы, которые нужны, но по умолчанию должны быть видны все. Решение не то чтобы сложное, но после сборки и запуска оно начало жутко тормозило... Проведённое по-быстрому исследование показало, что тупит этап layout-а, но в моменте было принято решение вбить костыль и преобразовать представление до удобоваримого. Однако червячок остался и поисследовать поведение хотелось более детально, а заодно сравнить с другими элементами для отрисовки таблиц.

Результатом такого исследования и стала данная статья. Полученные результаты - под катом.

Читать далее
Total votes 13: ↑13 and ↓0 +13
Comments 6

Исправляем мнемосхему диспетчеризации за 2 часа

Level of difficulty Easy
Reading time 3 min
Views 4.3K

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

В том посте были комментарии из серии «всё везде регламентировано, раз так сделано — значит умные люди подумали», но если в условном Газпроме за АРМ наблюдает инженер или техник, который отличает на схеме трехходовой клапан от обратного, то в гражданских системах часто за этим следят те же диспетчера, что следят за пожаркой, диспетчеризацией лифтов и прочих систем, диспетчера часто меняются, новые могут не знать чего то, а для того же ТЦ быстрота фиксации и ликвидации аварии могут спасти много денег.

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

Читать далее
Total votes 25: ↑25 and ↓0 +25
Comments 22

Графическое программирование конечных автоматов для Arduino. Часть 1

Level of difficulty Medium
Reading time 8 min
Views 9.1K

Как только сложность программы выходит за пределы "Hello Word!", у начинающих ардуинщиков появляются проблемы. Самая тяжелая из них - удержать в голове структуру программного кода. Нельзя сказать, что у опытных программистов встраиваемых систем этой проблемы нет. Достаточно попытаться реанимировать собственный проект двухлетней давности, если он недостаточно документирован, то включиться в работу будет очень трудно.

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

Все это хорошо, но новичку просто лениво. Зачем что-то рисовать, если того же результата можно добиться несколькими строчками кода? Ответ: макрокоманды. Такие, например, как WAIT(Time,Counter), она позволяет с легкостью организовать временную задержку. И это будет вовсе не Delay(Time) от Arduino, которая остановит выполнение всего остального пользовательского кода. Нет. По предоставляемым возможностям ближайшей аналогией будет RTOS - операционная система реального времени. Если один автомат замер в ожидании отсчета времени, то остальные автоматы проекта будут продолжать работать.

Рассмотрим практическое использование графических конечных автоматов под Arduino на примере часов-метеостанции.

Читать далее
Total votes 16: ↑15 and ↓1 +14
Comments 13

Консоль мечты в 2023-ем году — Playstation 3

Level of difficulty Easy
Reading time 7 min
Views 38K

Лебединая песнь Sony! на втором месте, конечно, Steam Deck, на третьем — Nintendo Switch. Ну, а если говорить максимально серьезно, то у Playstation 3 есть несколько весомых преимуществ, делающих ее незаменимой даже в 2023 году.

🤦‍♂️Спасибо, Кэп!🤦‍♂️
Total votes 26: ↑23 and ↓3 +20
Comments 52

Работа с «Ягодой» для новичков: подключение пяти микроконтроллеров ESP32 к микрокомпьютеру Raspberry Pi 4 Model B по SPI

Level of difficulty Medium
Reading time 7 min
Views 4.6K

Данная статья создана с ознакомительной целью и служит рекомендацией по работе с Raspberry Pi 4 Model B ("Ягода"), WEMOS WiFi & Bluetooth ESP32 ("ESP32") при настройки Serial Peripheral Interface (SPI).

Читать далее
Total votes 6: ↑4 and ↓2 +2
Comments 4

Управление временем жизни объектов: почему это важно и почему для этого пришлось создать новый язык «Аргентум»

Level of difficulty Medium
Reading time 8 min
Views 7.5K

Аргентум - язык программирования, построенный на новой ссылочной модели, которая не использует сборщик мусора и гарантирует отсутствие утечек памяти.

Читать далее
Total votes 32: ↑30 and ↓2 +28
Comments 50

Zig для меня — это новый C

Reading time 9 min
Views 16K

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

Читать далее
Total votes 41: ↑40 and ↓1 +39
Comments 111

Производительность Android приложений Kotlin в сравнении с С++ или цена управления памятью

Reading time 9 min
Views 17K

Взгляд на скорость выполнения кода с применением NDK.

Вычисление фрактала Мандельброта с помощью Kotlin и С++ и тест на реальных устройствах

Читать далее
Total votes 34: ↑33 and ↓1 +32
Comments 106

Безопасная работа с памятью в D

Level of difficulty Hard
Reading time 37 min
Views 3.7K

Оригинальные статьи вышли с июня 2022-го по январь 2023-го в виде трёх постов на blog.dlang.org под общим заголовком «Безопасность памяти в современном языке системного программирования». Статьи посвящены DIP1000 — набору изменений, призванному существенно улучшить безопасность работы с памятью. Перевод объединяет все три.

Если стремитесь глубже разобраться с использованием @safe-кода, атрибутов scope и return scope и узнать про автовыведение атрибутов функции, эта статья может оказаться полезной.

Читать далее
Total votes 10: ↑10 and ↓0 +10
Comments 7

С чем едят конечный автомат

Level of difficulty Easy
Reading time 8 min
Views 15K
image

Машина Тьюринга и машина состояний, детерминированный и недетерминированный конечный автомат, конечный автомат Мура и конечный автомат Мили. Голова кругом от всех этих понятий. Как во всем этом разобраться новичку? Тем более, что и у бывалых спецов бывает такая каша в голове из этих понятий. Чего только стоит вебинар от Яндекс Практикум на тему «Конечные автоматы в реальной жизни». Именно случайный просмотр этого вебинара сподвиг меня написать статью. Я обратил внимание, что даже более опытные лекторы ловко жонглируют всеми этими понятиями или подменяют одни другими в своих лекциях. С этим можно просто смириться, или дойти до безумия, разбираясь что к чему. И как со всем этим жить начинающему ардуинщику, если про конечные автоматы в программировании трубят из каждого утюга, а добраться до истины самостоятельно непросто?

Не гарантирую, что после прочтения статьи все сразу станет на свои места, но, как минимум, постараемся выудить из всей этой «каши» что-то полезное для себя. Так что усаживайтесь по удобнее, тема не простая, под катом будет много текста.
Читать дальше →
Total votes 28: ↑22 and ↓6 +16
Comments 26

Автоматное программирование в SimInTech и ВКПа

Reading time 10 min
Views 1.5K

В контексте автоматного программирования ВКПа опять вспомним про SimInTech. Представляется удобным и наглядным создать аналог проекта из в SimInTech, который основан на базе элементов ее библиотеки «Конечные автоматы». Так мы осваиваем проектирование в рамках данных сред и заодно проведем сравнение технологий автоматного программирования. Ну, а за основу для достижения поставленных целей возьмем проект «Нагреватель» из SimInTech.  

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

Графы на рис. 1 представляют собой модель автоматной программы в ВКПа. И уже на уровне модели видны основные отличия. Кратко или, так сказать, в первом приближении они сводятся к следующему. На уровне отдельного процесса (автомата) мы сразу разделяем программу на части. Это операторы, названные предикатами и действиями, и управление программы – собственно модель конечного автомата (КА). А на уровне самой программы в общем случае это сеть из автоматов. В соответствии с данным ранее определением все это вместе и составляет автоматную программу.

Читать далее
Total votes 7: ↑4 and ↓3 +1
Comments 20

EBYTE MA01-AACX2240: внешний RS485/ModbusRTU блок DI+AI+DO

Reading time 6 min
Views 3.3K


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

Подобные блоки могут поддерживать различные интерфейсы, наиболее популярным и демократичным из которых является RS485/ModbusRTU. Из всего разнообразия подобных устройств на AliExpress мне показалась интересной серия блоков MA0x-xxCXxxx0 с интерфейсами RS485/RS232 компании EBYTE.

В отличие от прочих подобных блоков расширения, изделия EBYTE имеют приличный внешний вид, вменяемую документацию, широкий модельный ряд и при этом вполне демократичную цену. Правда потом выяснилось, что производитель предоставляет только компьютерную утилиту для работы со своими блоками, а программирование Modbus RTU оставляет на откуп покупателя (а в интернете нет никаких примеров работы с этими блоками).

В результате мне пришлось провести исследовательскую работу, разобраться с железом MA01-AACX2240 и научится его программировать в составе контроллера на ESP32.

Обо всём этом мы и поговорим далее…
Читать дальше →
Total votes 15: ↑15 and ↓0 +15
Comments 11

Быстрый старт с ARM Mbed: разработка на современных микроконтроллерах для начинающих

Reading time 17 min
Views 73K
Привет, Хабр.

Традиционным уникальным преимуществом платформы Arduino называлось (да и сейчас иногда называется, хотя это уже неверно — и мы поговорим, почему) опускание порога входа в микроконтроллерную разработку до уровня базовых знаний C/C++ и электроники в маштабе «подключить светодиод в нужной полярности».

Спросите примерно у любого активного сторонника Arduino — и вам быстро объяснят, что можно, конечно, писать под STM32 или nRF52, но выгоды в том реальной никакой, зато вас ждут бессонные ночи над сотнями страниц даташитов и бесконечные простыни функций с длинными непонятными названиями.

Заслуги Arduino в снижении порога вхождения действительно трудно переоценить — эта платформа появилась на свет в середине нулевых годов, а после 2010 завоевала серьёзную популярность среди любителей. Особых альтернатив на тот момент ей не было — процессоры на ядрах Cortex-M только появились, по сравнению с AVR они были довольно сложны даже для профессиональных разработчиков, а отладочные платы у большинства вендоров стоили от сотни долларов и выше (и в общем в индустрии ценник за отладку на 5-долларовом контроллере в $500 никого сильно не удивлял).

Однако большая проблема Arduino в том, что её развитие за минувшие 10+ лет более всего напоминает некоторые модели АвтоВАЗа:


Так как дальше я планирую длинное вступление, то сейчас, чтобы вы представляли, в чём будет заключаться практическая часть, я приведу полный текст программы, включающий инициализацию процессора STM32 и мигание светодиодом. Программа написана для ОС ARM Mbed:

#include "mbed.h"
DigitalOut myled(LED1);

int main() {
    while(1) {
        myled = 1; // LED is ON
        wait(0.2); // 200 ms
        myled = 0; // LED is OFF
        wait(1.0); // 1 sec
    }
}

Похоже ли это на высокий входной порог? На функции с непонятными названиями? Бессонные ночи над даташитами? Нет? Ладно, давайте не будем забегать вперёд.
Читать дальше →
Total votes 114: ↑98 and ↓16 +82
Comments 463

Information

Rating
Does not participate
Location
Россия
Registered
Activity