Часть 2: Роботизация бизнес-процессов в закупках
Часть 3: Волшебные интерфейсы и оживление железа (в этой публикации)
Часть 4: Автоматические личные кабинеты и чат-боты
Часть 5: Автоматизация на производстве
Часть 6: Траблшутинг на предприятии
Часть 7: Цифровой помощник оператора
Часть 8: Автоматическая MES-система
Часть 9: Смешивание муки в силосах
Влияние рабочего места диспетчера на пропускную способность отгрузки на заводе
Цифровизация предприятия - это не только процесс внедрение новых систем и сервисов. Этому предшествуют поиски узких мест в рабочих процессах и на конкретных рабочих местах пользователей.
Рекомендация: Не айтишные книги, которые полезно прочитать айтишнику
Принципы. Жизнь и работа. Рэй Далио
Цель. Процесс непрерывного совершенствования. Элияху Голдратт
Гемба Кайдзен. Путь к снижению затрат и повышению качества. Масааки Имаи
Какие идеи обычно возникают, когда нужно увеличить пропускную способность отгрузки на заводе:
Увеличить количество точек для одновременной отгрузки на заводе.
Увеличить количество КПП для одновременного въезда/выезда на завод.
На первый взгляд ответы правильные и логичные. Остается только найти пару 10 или 100 млн. руб. на инвестиционный проект и реализовать его.

Личный опыт: Не верьте программистам и консультантам
Когда программисты или консультанты тех. поддержки говорят вам, что у пользователей нет вопросов и проблем, потому что пользователи не обращались - это может означать, что:
У пользователя действительно все хорошо и прекрасно.
Пользователь не знает к кому обращаться со своими проблемами.
Пользователь много раз обращался, никто не решил проблему, потерял надежду и перестал обращаться.
Пользователь не видит проблем или привык к тому, что проблемы стали частью его повседневной жизни и адаптировался под них.
У пользователя нет возможности обратиться из-за отсутствия времени, так как оно полностью занято оперативной работой.
Еще одна причина:
Программист и консультант никогда не были в гемба и не видели, как именно пользователь работает с системой и насколько это соответствует реальным бизнес-процессам.
Общий счет 5:1 в пользу того, чтобы не верить программистам и консультантам, что у пользователей нет вопросов и проблем.
Завод находится в 150 км от моего непосредственного рабочего места. И точно уже не вспомню, письмо мне в почту со скриншотом ошибки или звонок на мобильный от диспетчера, что способствовало выехать меня на место, чтобы разобраться в причинах проблем.
Выявленные на месте явные проблемы (без погружения в детали):
3 рукописных журнала для оперативной работы (при наличии рабочего места в ERP).
2 монитора, чтобы вывести нужную информацию (изображение с 2-х видеокамер, данные с 2-х промышленных весов, программы для вывода текста на Led-табло, монитор для работы в ERP).
Настольный калькулятор (для вычисления max. веса к погрузке по каждой машине).
Ручки и фломастеры (для заполнения настольных журналов).
Поток жалоб от диспетчера на ошибки в рабочем месте ERP и постоянные проблемы со вторым монитором, куда выводятся данные с промышленных весов.
Лайфхак #1: Фотографируйте рабочие места пользователей
Когда повторно просматриваешь сделанные фотографии, обра��аешь внимание на детали, которые изначально могли быть не замечены. Иногда фотографии помогают вспомнить диалог или конкретную ситуацию.
Так выглядело рабочее место диспетчера, когда я приехал и это было нормой с 2016 года.







Лайфхак #2: Наблюдайте, слушайте диалоги, задавайте вопросы
Это помогло за одну 12-часовую смену понять суть работы диспетчера:
Регистрация прибытия водителей на погрузку.
Планирование времени отгрузки в журнале (формирование очереди).
Вызов водителей на погрузку по журналу (по очереди из числа прибывших)
Выдача номерных номерных пломб и магнитных карт, их регистрация в ERP (для погрузки).
Ручная отправка задания на промышленные весы (для взвешивания машины до погрузки).
Ручное вычисление max. веса к погрузке (по каждой машине с учетом грузоподъемности и веса пустой машины).
Ручная отправка на промышленные весы задания на погрузку (max. вес к погрузке).
Печать отгрузочных накладных (после окончания погрузки).
Простые замеры времени операций показали, что на заводе высокая скорость погрузки (одна машина грузится ~ 10 минут), но есть простои до 3-х минут между погрузкой машин , потому что диспетчер физически не успевает "обслужить" весь трафик.
Диалоги диспетчера с водителями обнажили бюрократию на рабочем месте и предвзятое отношение к водителям:
У одних водителей ничего не спрашиваем и не проверяем, у других - проверяем каждую букву в ФИО и гос. номерах.
Одни водители ожидают свою очередь, другие - проезжают на погрузку без очереди, хвастаясь перед другими водителями.
Одним водителям всё подробно рассказываем, других - игнорируем и не отвечаем на элементарные вопросы.
Все это порождало хаос в работе диспетчера и водителей, конфликты между людьми: между водителями и диспетчером, между самими водителями.
Анализ проблем показал, что узким местом на заводе является рабочее место диспетчера. Пропускную способность отгрузки можно увеличить без капитальных затрат, а с помощью автоматизации.
Нарисовались следующие задачи, которые были решены
Ускорить регистрацию прибывших на погрузку водителей.
Ускорить выдачу диспетчером номерных пломб и магнитных карт для водителей.
Развести машины по времени прибытия на завод.
Упорядочить очередь прибывших на погрузку машин.
Ускорить взвешивание машин до и после погрузки.
Привести в порядок интерфейс рабочего место диспетчера в ERP.
Убрать у диспетчера второй монитор, журналы, калькулятор и фломастеры.
На решение задач и автоматизации, которые дали наибольший эффект ~ 2 месяца с учетом покупки и настройки оборудования, закупки партий номерных пломб со штрихкодами, написания ТЗ и других связанных процессов.
Рабочее место диспетчера преображалось по мере готовности: первым появился сканер штрихкодов, поочередно убирались журналы, калькулятор и фломастеры, менялось рабочее место в ERP, последним убрали второй монитор.
На гифке сразу виден результат преобразований (автоматическая очередь машин в новом рабочем месте диспетчера в ERP).

Сканер штрихкодов вместо считывателя магнитных карт
Почему мы установили диспетчеру сканер штрихкодов вместо считывателя магнитных карт, которые уже использовались на заводе? Все дело в номерных пломбах, удобстве и скорости работы для диспетчера.
Так выглядят номерные пломбы для выдачи водителю:
Приходят в коробках по 10 тыс. шт. и соединены друг с другом пластиковыми "ножками" (особенность изготовления).
Изначально был только номер, затем мы заказали с нанесением штрихкодов.
Штрихкод просто кодирует номер самой пломбы.

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

Таким образом, диспетчер перед выдачей водителю сканирует номерные пломбы и магнитные карты на одном сканере штрихкодов и делает это машинально, не задумываясь:
Чтобы сканер различал штрихкоды, мы кодируем первый знак: 1 - штрихкод номерной пломбы, 2 - штрихкод магнитной карты.
Мы доработали подсистему распознавания штрихкодов, чтобы номерные пломбы не нужно было расцеплять до сканирования, и сканировать несколько раз без "задвоения" номеров штрихкодов.
Время "обслуживания" диспетчером одной машины сократилось в 10 раз
Автоматическая очередь машин через 1 КПП для 3-х точек отгрузки на заводе.
Автоматическое управление из ERP взвешиванием на промышленных весах.
Вся информация выведена на 1 экран 1 монитора пользователя.
Выдача номерных пломб и магнитной карты водителю с помощью сканера штрихкодов за 5 секунд.
Печать комплекта отгрузочных накладных диспетчером за 5 секунд.
Рабочее место диспетчера без журналов, калькулятора и фломастеров.
ГЛАВНЫЙ РЕЗУЛЬТАТ: пропускная способность отгрузки продукции автотранспортом на заводе увеличена в 2 раза без капитальных затрат.
Подробнее, о том, что для этого было сделано, далее...
Электронная очередь для грузового автотранспорта
Фактически очередь начинает формироваться на этапе приема заказов:
> с нашей дос��авкой, клиент указывает только дату и время выгрузки по адресу доставки.
> на самовывозе, клиент указывает только дату и время погрузки на заводе.
Клиентский сервис: когда завод принял заказ, то мы должны соблюдать время погрузки и выгрузки машин, не допускать простоев автотранспорта и срыва поставок клиентам.
Конкурентное преимущество: мы поддерживаем такой высокий уровень сервиса, чтобы клиенты могли получить продукцию завода: "день в день" - для регионов до 300 км, на следующий день - для регионов до 600 км, и через день - для регионов свыше 600 км.
Существующие ограничения на заводе при отгрузке в автотранспорт
Разная продукция завода отгружается в разные часы в течение суток.
Скорость отгрузки продукции на заводе не более 6 машин в час на 1 точку погрузки.
Один вид продукции отгружается с 2-х точек погрузки, второй - с одной точки.
Одновременно на заводе могут находиться не более 8 грузовых машин на всех точках погрузки.
Все машины заезжают на завод и выезжают с завода через 1 КПП и одного диспетчера в смену.
Пример настроек в ERP по действующим ограничениям


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

Экранная форма заказа клиента в ERP это тоже волшебный интерфейс (если сравнить со стандартной формой). Вся информация видна сразу, важная - имеет акценты (цвета, индикаторы, расшифровки).
В какой момент формируются 3 разные очереди в ERP
Заказ клиента принят 21.01.2021 в 11:14.
Расстояние от завода до пункта разгрузки у клиента 630 км.
Чтобы доставить заказ клиенту 22.01.2021 к 8:00, машина должна приехать на завод для погрузки 21.01.2021 не позднее 15:00 - это плановая очередь погрузки.
Когда машины приезжают на завод для погрузки - это фактическая очередь прибытия.
По плановому времени погрузки по заказу и фактическому времени прибытия машин на завод строится реальная очередь на отгрузку.
Способы регистрация прибытия водителей на заводе:
через уличный терминал
через чат-бот Telegram (подробнее в четвертой части)
через диспетчера (резервный вариант)
Пример регистрации водителей через диспетчера в ERP
Диспетчер видит все отметки прибытия водителей: сделанные в чат-боте Telegram, через сенсорный терминал или диспетчером в своем рабочем месте.

Машины, которые фактически находятся на погрузке на заводе.
Очередь машин на погрузку по статусам:
- кто еще не прибыл на завод (НЕ ПРИБЫЛ).
- кто прибыл и ожидает своей очереди (В ОЧЕРЕДИ).
- кто прибыл и автоматически приглашен на погрузку (К ПОГРУЗКЕ).
Динамические данные двух промышленных весов (показ только у диспетчера).
Изображение с двух камер на точках погрузки на заводе.
Пример регистрации водителей через уличный терминал на заводе
Сенсорный антивандальный монитор 24" российского производства (широкоформатный 16:9, TFT TN, 1920х1080, углы обзора 160/160), установлен на КПП завода.
Монитор без собственного ПО для подключения к любому ПК, с особыми характеристиками яркости (1000 кд/м2) и температурного режима (-30/+30), в защищенном корпусе (сталь 2 мм) c закаленным стеклом (4 мм) и весом ~ 20 кг.
Монитор подключен к системному блоку, на котором автоматически запускается ERP и разработанный нами интерфейс для самостоятельной регистрации прибытия водителей на погрузку.






Таймер обратного отсчета на экране монитора мотивирует водителя выполнять действия быстрее, чтобы не задерживать очередь у терминала.
Этот кейс также относится к теме оживления железа (оживление с помощью разработанного ПО для автономной работы в составе единой информационной системы), но здесь подробно рассматриваться не будет.
Пример регистрации водителей через чат-бот Telegram

Команда прибытия на погрузку в чат-боте Telegram.
Уведомление водителя с подтверждением времени прибытия.
Чат-бот для водителей в Telegram интегрирован с ERP в режиме онлайн и работает автоматически по заданным сценариям (подробнее в четвертой части).
Как происходит автоматический вызов водителя на погрузку из очереди:
Способ регистрации прибытия | Способ вызова на погрузку |
через диспетчера | уличное LED-табло и SMS |
через уличный терминал | уличное LED-табло и SMS |
через чат-бот Telegram | уличное LED-табло и чат-бот Telegram |
через распознавание гос. номера (в плане) | уличное LED-табло и SMS (в плане) |
Пример приглашения водителей на погрузку по SMS

Пример приглашения водителя на погрузку в чат-боте Telegram

На скриншоте ниже видно историю взаимодействия водителей с чат-ботом Telegram в интерфейсе ERP (подробнее в четвертой части).

Водитель (1) нажал команду прибытия в чат-боте (2). Когда пришла очередь, чат-бот вызвал водителя к погрузке (3).
Пример приглашения водителей через уличное Led-табло

Размер каждой LED-панели примерно 1,5 х 2 метра.
LED-панели развернуты на 2 стороны стоянки грузовых автомобилей перед заводом.
И если SMS или уведомление в чат-бот Telegram отправляется однократно, то приглашение на уличное LED-табло может выводиться несколько раз в соответствии с тем, как меняется автоматическая очередь в ERP:
Первый вызов и ожидание водителя в течение 5 минут.
Второй и последующие вызовы через каждые 5 минут, после вызова на погрузку следующего по очереди водителя и окончания погрузки очередной машины на заводе.
Так выглядит сенсорный терминал и электронное табло ночью.


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

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

После реализации автоматической очереди погрузки в ERP, логично, что информация на табло должна выводиться также автоматически.
Нам повезла, что изготовитель нашел документ с описанием протокола: описание формата пакетов второго уровня, вывода данных по строкам и столбцам, и пример одной функции подсчета контрольной суммы.
Пример 3-х страниц с описанием протокола



С программистом 1С мы посмотрели протокол и не поняли, как именно управлять выводом очереди машин на табло из ERP.
По нашей просьбе, изготовитель LED-панелей договорился с производителем компонент электроники, из которых оно состоит, чтобы они написали пример кода для программного вывода информации на табло. Пример был написан на языке Pascal, который программист с большим трудом перевел на язык 1С.
Пример кода на языке Pascal (Delphi 10) по использованию протокола
unit ConnTypes;
interface
const
RecBuffSizeByte=1024;
type
TLevel2Pack=packed record
SrcAddr:word; //source address
DstAddr:word; //receiver address
PId:byte; //Packet id
Cmd:byte; // Command code
Flags:byte; //options
Status:byte; //command status
DataLen:word; //length of data
Data:array[0..RecBuffSizeByte-1] of byte; //data
end;
PLevel2Pack=^TLevel2Pack;
TLevel2Head=packed record
SrcAddr:word; //source address
DstAddr:word; //receiver address
PId:byte; //Packet id
Cmd:byte; // Command code
Flags:byte; //options
Status:byte; //command status
DataLen:word; //length of data
end;
PLevel2Head=^TLevel2Head;
TFullPacket=packed record
bSTX:byte;
LenLo:byte;
LenHi:byte;
Data:array[0..RecBuffSizeByte*2-1+32] of byte;
end;
PFullPacket=^TFullPacket;
function MakeFullPacket(Src:PLevel2Pack; Dst:Pointer):integer;
function EncodeWord(v:word):word;
implementation
uses CRCUnit;
function CS2word(cslo, cshi:byte):word;
var b:PByte;
begin
Result:=0;
b:=@Result;
b^:=cslo or $80;
inc(b);
b^:=$80 or ((cslo shr 7) and $01) or ((cshi and $3F) shl 1);
end;
function EncodeWord(v:word):word;
begin
Result:=((v and $3F80) shl 1) or (v and $7F) or $8080;
end;
function DecodeWord(v:word):word;
begin
Result:=((v and $7F00) shr 1) or (v and $7F);
end;
function EncodeDataForComm(Src, Dst:Pointer; SrcSize:integer):integer;
var PS, PD:PByte;
i:integer;
b:byte;
begin
PS:=Src;
PD:=Dst;
Result:=0;
for i:=1 to SrcSize do
begin
b:=PS^ xor $80;
if (b<$20) or (b=$7F)
then begin
PD^:=$7F;
inc(PD);
PD^:=b or $80;
inc(Result);
end
else PD^:=b;
inc(PS);
inc(PD);
inc(Result);
end;
end;
function MakeFullPacket(Src:PLevel2Pack; Dst:Pointer):integer;
var cs:word;
PB:PByte;
F:PFullPacket;
PackLen:word;
PackSize:integer;
begin
PB:=Dst;
F:=Dst;
cs:=0;
PackLen:=word(Src^.DataLen+sizeof(TLevel2Head));
CountCSNewW(Src, PackLen, cs);
F^.bSTX:=$02;
PWord(@F^.LenLo)^:=EncodeWord(PackLen);
inc(PB, 3);// add bSTX, LenLo, LenHi
PackSize:=EncodeDataForComm(Src, PB, PackLen);
inc(PB, PackSize);
PWord(PB)^:=EncodeWord(cs);
inc(PB, 2); // add CsLo, CsHi
PB^:=$03;
Result:=PackSize+6;
end;
end.Таким образом, нам удалось реализовать полностью автоматическое управление выводом очереди автомобилей на LED-табло из ERP.
Мы также реализовали автоматическое управление взвешиванием машин из ERP до и после погрузки на 2-х промышленных весах на заводе. Напишите в комментариях, если вам интересно узнать об этом подробнее.
Спасибо, что дочитали до конца!
