SlideShare a Scribd company logo
1 of 26
IIoT
НА ГРАНИЦЕ HW И .NET
Антон Сысоев
Руководитель отдела разработки
“Вещи” в IIoT
Промышленные датчики
Приборы учета
Промышленное оборудование
Все, что не IoT, но хочет в Сеть
:)
Внедрение IIoT
Построить “с нуля”
Поставить “умную” железку
Подключиться “напрямую”
дорогую
Типовая схема IoT
Data
Hub
DBSource
?
Схема подключения
//
//
RS-485
RS-485<->TCP/IP
//
RS-485
//
Router
Ethernet
RS-485/Ethernet
“Прямая” схема IIoT
Data
Hub
DBSource
RS-485<->TCP/IP
TCP/IP
Проблемы связи
Засыпания
устройств
Монтаж Помехи
Ошибки
fw
Упрощенные протоколы
ADDR BODY (N bytes) CRC
Request
ADDR BODY (M bytes) CRC
Response
ERROR
ADDR BODY (K bytes) CRC
Потоковая передача
start 0 1 2 ... 6 7 par stop
byte 1 byte 2 byte 3 ... byte N-1 byte N
FIFO buffer
Толстеющие протоколы
ADDR N bytes CRC
Request (v.1)
ADDR N bytes 1 byte CRC
Request (v.2)
ADDR Y bytes 1 byte Z bytes CRC
Request (v.3)
Потоковые протоколы
[...Noise...]
Start marker
Escaped payload data
End marker
[...Noise...]
Инкапсуляция
протоколов
Protocol A (Ethernet)
Protocol B (TCP/IP)
Protocol C
(HTTP)
public interface IHighLevel{
}
public interface ILowLevel{
}
Дизайн драйвера
Обработка ошибок
Проверка CRC
Не всегда Exception однозначен
Повторы запросов
Реализация протокола
Наследование Stream
Потоковая или блочная обработка
Наследование при инкапсуляции протоколов
Транспортные
протоколы
Modbus
IEC (МЭК)
DLMS/COSEM
…
Разбор данных
Работа с массивом байт
BitConverter
BinaryReader
Reflection
Unsafe code (C-style)
Marshaling
Упаковка пакета
UInt16 ch2 = 0;
ch2 |= (UInt16)(1 << (ch1-1));
buf[len++] = (byte) ch2;
buf[len++] = (byte)(ch2 >> 8);
buf[len++] = 0x00;
buf[len++] = 0x00;
buf[len++] = (byte)ID;
buf[len++] = (byte)(ID >> 8);
Распаковка пакета
statusB = reply[1];
isWinter = (statusB & 0x08) == 8;
isNotFull = (statusB & 0x02) == 2;
bit17 = (statusB >> 4) & 0x1;
Типовой пакет данных
HEADER BODY CRC
HEADER - заголовок, общий для всех пакетов
BODY - тело пакета с данными
CRC - контрольная сумма, общая для всех пакетов
Marshaling Helper
public static byte[] BytesFromStructArray(TValue[] srcValues);
public static TValue[] StructArrayFromBytes(byte[] srcBytes,
int offset = 0,
int count = 0);
public static TValue StructFromBytes(byte[] srcBytes,
int offset = 0,
int count = 0)
public static byte[] BytesFromStruct(TValue value)
public interface IRequest
{
byte[] GetBytes();
}
public interface IResponse
{
void SetBytes(byte[] bytes, int offset, int count);
ushort FrameCrc { get; }
}
public interface IPackageBody
{
byte[] GetBytes();
void SetBytes(byte[] bytes, int offset, int count);
byte GetLength();
}
public class RequestDataFrame:IRequest
{
private byte[] _bodyData = null;
public IPackageBody Body
{
set { _bodyData = value.GetBytes(); }
}
public void SetBody<TFrameBody>(TFrameBody body) where
TFrameBody : IPackageBody
{
_bodyData = body.GetBytes();
}
//Skiped code
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct DataHolder
{
[MarshalAs(UnmanagedType.U4)]
public uint Mask;
...
}
public class SampleRequestBody : IPackageBody
{
private DataHolder _dataHolder;
public BitVector32 Mask { set { _dataHolder.Mask = value.Data; } }
public byte[] GetBytes()
{
return MarshallingHelper<DataHolder>.BytesFromStruct(_dataHolder);
}
public byte GetLength()
{
return (byte)Marshal.SizeOf(typeof(DataHolder));
}
}
Запрос данных по маске
Request Mask (0x06)
0 0 0 0 0 1 1 0
7 6 5 4 3 2 1 0
Response
[Header]
Data 2
Data 3
[Footer]
Вопросы

More Related Content

Similar to Антон Сысоев «IIoT: на границе HW и .NET»

ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питонеekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
it-people
 
Microcontroller
MicrocontrollerMicrocontroller
Microcontroller
jskonst
 
Технология Cisco Instant Access для упрощения структуры кампусных сетей
Технология Cisco Instant Access для упрощения структуры кампусных сетейТехнология Cisco Instant Access для упрощения структуры кампусных сетей
Технология Cisco Instant Access для упрощения структуры кампусных сетей
Cisco Russia
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
Andrey Karpov
 

Similar to Антон Сысоев «IIoT: на границе HW и .NET» (20)

WhereShock Platform 4CIO 09.2018
WhereShock Platform 4CIO 09.2018WhereShock Platform 4CIO 09.2018
WhereShock Platform 4CIO 09.2018
 
ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питонеekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
ekbpy'2012 - Марк Коренберг - Системное программирование на Питоне
 
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ... Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 
Обзор платформы B4
Обзор платформы B4Обзор платформы B4
Обзор платформы B4
 
Ruscrypto CTF 2010 Full Disclosure
Ruscrypto CTF 2010 Full DisclosureRuscrypto CTF 2010 Full Disclosure
Ruscrypto CTF 2010 Full Disclosure
 
Проблемы 64-битного кода на примерах
Проблемы 64-битного кода на примерахПроблемы 64-битного кода на примерах
Проблемы 64-битного кода на примерах
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)
 
Microcontroller
MicrocontrollerMicrocontroller
Microcontroller
 
Подводные камни System.Security.Cryptography
Подводные камни System.Security.CryptographyПодводные камни System.Security.Cryptography
Подводные камни System.Security.Cryptography
 
Технология Cisco Instant Access для упрощения структуры кампусных сетей
Технология Cisco Instant Access для упрощения структуры кампусных сетейТехнология Cisco Instant Access для упрощения структуры кампусных сетей
Технология Cisco Instant Access для упрощения структуры кампусных сетей
 
Развитие технологий построения распределенных ЦОД
Развитие технологий построения распределенных ЦОДРазвитие технологий построения распределенных ЦОД
Развитие технологий построения распределенных ЦОД
 
Arista интеллектуальная сеть и облако
Arista интеллектуальная сеть и облакоArista интеллектуальная сеть и облако
Arista интеллектуальная сеть и облако
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Продолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложений
 
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studioчто пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
 
Стек протоколов ip
Стек протоколов ipСтек протоколов ip
Стек протоколов ip
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя:опыт статического анализа исходного кода200 open source проектов спустя:опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
 

More from MskDotNet Community

Николай Гусев «Функциональное программирование для C# разработчиков»
 Николай Гусев «Функциональное программирование для C# разработчиков» Николай Гусев «Функциональное программирование для C# разработчиков»
Николай Гусев «Функциональное программирование для C# разработчиков»
MskDotNet Community
 

More from MskDotNet Community (19)

Николай Гусев «Функциональное программирование для C# разработчиков»
 Николай Гусев «Функциональное программирование для C# разработчиков» Николай Гусев «Функциональное программирование для C# разработчиков»
Николай Гусев «Функциональное программирование для C# разработчиков»
 
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
 
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовЮлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
 
Владимир Кочетков "OWASP TOP 10 для.NET"
Владимир Кочетков  "OWASP TOP 10 для.NET"Владимир Кочетков  "OWASP TOP 10 для.NET"
Владимир Кочетков "OWASP TOP 10 для.NET"
 
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
Дмитрий Сошников    Искусственный интеллект и нейросети для .NET-разработчиковДмитрий Сошников    Искусственный интеллект и нейросети для .NET-разработчиков
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
 
Викторина MskDotNet Субботник
Викторина MskDotNet СубботникВикторина MskDotNet Субботник
Викторина MskDotNet Субботник
 
Елизавета Голенок Переходим на mono или как это было
Елизавета Голенок  Переходим на mono или как это былоЕлизавета Голенок  Переходим на mono или как это было
Елизавета Голенок Переходим на mono или как это было
 
Иван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языковИван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языков
 
Дмитрий Тежельников «Разработка вэб-решений с использованием Asp.NET.Core и ...
Дмитрий Тежельников  «Разработка вэб-решений с использованием Asp.NET.Core и ...Дмитрий Тежельников  «Разработка вэб-решений с использованием Asp.NET.Core и ...
Дмитрий Тежельников «Разработка вэб-решений с использованием Asp.NET.Core и ...
 
Павел Притчин "Конфигурации в.NET"
Павел Притчин  "Конфигурации в.NET"Павел Притчин  "Конфигурации в.NET"
Павел Притчин "Конфигурации в.NET"
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"
 
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере" Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 
Андрей Матвеев "Основные принципы микросервисов и их реализации"
Андрей Матвеев "Основные принципы микросервисов и их реализации"Андрей Матвеев "Основные принципы микросервисов и их реализации"
Андрей Матвеев "Основные принципы микросервисов и их реализации"
 
Александр Сурков «Вещи» в «Интернете вещей»
Александр Сурков «Вещи» в «Интернете вещей»Александр Сурков «Вещи» в «Интернете вещей»
Александр Сурков «Вещи» в «Интернете вещей»
 
Петр Тимошевский «Industrial IoT на практике»
Петр Тимошевский «Industrial IoT на практике»Петр Тимошевский «Industrial IoT на практике»
Петр Тимошевский «Industrial IoT на практике»
 
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»
 
Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»
 

Антон Сысоев «IIoT: на границе HW и .NET»