Подключение к 1С нестандартного оборудования с помощью ардуино

19.04.15

Интеграция - Периферийные устройства

Возможно ли из 1С управлять такими устройствами, как: шлагбаум, домофон, кондиционер, телевизор, холодильник и т.д.? Да - возможно. С помощью микроконтроллера можно управлять любыми устройствами при помощи замыкающих реле, ИК передатчиков и другой периферии. Но как подключить сам контроллер к 1С, чтобы получить функцию, отправляющую данные на МК и возвращающую с него ответ? В этой статье будет описано подключение через юсб интерфейс, а точнее через серийный порт.

Скачать файлы

Наименование Файл Версия Размер
777.zip
.zip 1,39Mb
23
.zip 1,39Mb 23 Скачать

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

Перед подключением ардуины необходимо установить драйвер CH341SER.EXE (Приложен к статье) либо другой, а для её прошивки нужна ещё среда разработки http://arduino.ru/Arduino_environment.

Итак, ардуина прошита следующим кодом:

    

const int Trig = 22; // Пин для подачи 5 вольт на уз датчик расстояния
  const int Echo = 23; // Пин для приёма информации о расстоянии
   char s[3];          // Для хранения команды полученной из 1С 
   int i=0;            // Для счётчика
   unsigned int time_us=0;    // Для хранения длительности импулься в мк сек. полученного с уз датчика
   unsigned int distance_sm=0; // Для хранения расстояния до объекта 

void setup()                    
{
 Serial.begin(9600);      //установка порта на скорость 9600 бит/сек
 pinMode(7, OUTPUT);       // Пин 7 используем для управления реле (5 вольт - реле включено, 0 - выключено)
 pinMode(Trig, OUTPUT);    
 pinMode(Echo, INPUT);   
}

void loop()
{  
  s[0] = '0';  // При каждой итерации обнуляем переменные
  i=0;

 while (Serial.available() > 0) // Пока в буфере серийного порта есть данные - читаем
    {  
      s[i]=Serial.read();  // Записываем их в S, в нашем случае команда занимает 1 символ, 2-й перенос строки, 3 - на всякий случай))
      i++;
       if (i>=3) break;
    }
    
     if (s[0] == '1') {delay(5);         // Если получена команда 1 то управляем реле
        if (digitalRead(7) == 1) {digitalWrite(7, LOW);Serial.print('1'); } // Проверяем состояние, если включено выключаем и отправляем ответ 1
       else {digitalWrite(7, HIGH);Serial.print('2');}}  // Если выключено - включаем и отправляем ответ 2 

 else  if (s[0] == '2') {delay(5);              // Если получена команда 2 измеряем расстояние   
       digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера
      delayMicroseconds(10); // Удерживаем 10 микросекунд
      digitalWrite(Trig, LOW); // Затем убираем
      time_us=pulseIn(Echo, HIGH); // Замеряем длину импульса
      distance_sm=time_us/58; // Пересчитываем в сантиметры
      Serial.print(distance_sm); // Выводим на порт
     }
}




Теперь 1С. Для отправки данных достаточно использовать метод "ЗаписьТекста", пишем напрямую в ком порт:

 Команда = 1; // 1- для реле, 2- для датчика расстояния 
 модемЗ = Новый ЗаписьТекста("\\.\Com5",КодировкаТекста.ANSI);    
 модемЗ.ЗаписатьСтроку(Команда + Символы.ПС);        
 модемЗ.Закрыть();



Ответ получаем с помощью "ЧтениеТекста", делаем всё аналогично:

 

МодемЧ= Новый ЧтениеТекста();    
   МодемЧ.Открыть("\\.\Com5",КодировкаТекста.ANSI);
   
     // важный момент, если вместо ответа выполучаете "", Неопределено - это значит ком порт не успевает 
     // после открытия записать получанные данные в буфер, поэтому делаем в этом месте небольшую задержку 
     // 15 миллисекунд хватит. Раскомментировать следующие 3 строчки в случае проблемы
 // т = ТекущаяУниверсальнаяДатаВМиллисекундах() + 15;  // Задержка 15 миллисекунд
 // Пока т > ТекущаяУниверсальнаяДатаВМиллисекундах() Цикл  // Все супер-пупер проффи с чрезвычайно прямыми руками
 // КонецЦИкла;   // идут лесом!!!  и нечего срать в комментариях коль по делу сказать нечего

   Ответ= МодемЧ.ПрочитатьСтроку();  // Читаем буфер ком порта
   модемЧ.Закрыть();



Ну вроде бы и всё, но есть НО, очень большое НО. Ком порт должен быть проинициализирован!
Про то, как это сделать, есть много статей, однако все они довольно сложные, поэтому ниже будет предложен более
простой вариант (Все супер-пупер проффи с чрезвычайно прямыми руками идут лесом!!!).
При первом обращении к ком порту необходимо установить некоторые параметры в регистрах контроллера. В типовых
конфигурациях 1С есть встроенные драйвера для тестирования фискального оборудования, они находятся в общих макетах в виде двоичных данных. Один из них - ДрайверАТОЛФискальныеРегистраторы, его мы и будем использовать (файл приложен к статье, также его можно взять из типовой конфигурации). С помощью этой компоненты мы протестируем наш контроллер, результат, естественно, будет отрицательным, ведь у нас ардуино, а не АТОЛ, но во время теста драйвер установит все нужные параметры.
Итак, драйвер залит в макет в виде двоичных данных:

  

  НомерКомПорта = 5;
    ПодключитьВнешнююКомпоненту(ПоместитьВоВременноеХранилище(ПолучитьМакет("ДрайверАТОЛФискальныеРегистраторы")), "АтолУниверсальный");
    ОбъектДрайвера = Новый ("AddIn.АтолУниверсальный.ATOL_KKM_1C82");
    ОбъектДрайвера.УстановитьПараметр("BaudRate", 7);     // цифра 7 означает скорость 9600
    ОбъектДрайвера.УстановитьПараметр("PortNumber", 1000 + НомерКомПорта);
    ОбъектДрайвера.ТестУстройства(,);

 
Ну вот и всё.

 

ПС  Часть материала позаимствована с просторов интернета

1c ардуино arduino ком порт com подключение через ком порт подключение любого устройства подключение нестандартного оборудования

См. также

Распознавание номеров автомашин с ip - камер, видео, фото

Распознавание документов и образов Периферийные устройства Автомобили, автосервисы Россия Платные (руб)

Программа считывает кадры с ip-камер (http - запрос к камере), видео, фото (источники кадров (нет ограничения на их количество) настраивается в конфигурационном файле), находит и распознает номера автомашин и сохраняет в базу db, с сохранением фото номера и автомашины, а также времени детекции.

20400 руб.

31.05.2023    3800    2    1    

3

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

Инструментарий разработчика Периферийные устройства Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Внешняя обработка получения изображения с веб-камеры с возможностью его кадрирования по произвольно выделенной области. Использует собственную внешнюю компоненту на основе библиотеки AForge. Содержит примеры интерактивного взаимодействия с полем HTML.

20.03.2024    322    1    AndSem    1    

3

У.дача каждому 1С-нику или Умный дом для ленивых (зачеркнуто) пытливых

Робототехника и умный дом (Arduino, NFC, RFID) Бесплатно (free)

Обладая минимальными навыками инженера, вполне можно сделать «умными» относительно недорогие устройства, и управлять всей логикой на 1С. Возможности огромны: управление светом, включением-выключением розеток, автополив, сигнализация и т.д. О самостоятельной реализации в 1С нестандартной логики управления устройствами пойдет речь в статье.

29.02.2024    1937    atland    6    

25

Прямая печать на принтерах TSC из 1С

Периферийные устройства Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Прямая печать на принтерах TSC из 1С при вызове с сервера позволяет печатать из тонкого клиента, мобильного клиента и веб-клиента. Потребуется установка драйвера и библиотеки для отправки команд на этот драйвер.

1 стартмани

19.02.2024    533    3    realslavyan    0    

5

HotKeys на Python для 1С

Периферийные устройства Конфигурации 1cv8 Бесплатно (free)

Недавно прочитал статью на Инфостарте о KeyPad и вначале захотел себе такой, но через какое-то время я понял, что дополнительная даже маленькая клавиатура занимает место, и нужно все время держать ее под рукой. Это все создает дополнительные неудобства.

20.12.2023    4929    John_d    25    

70

Очистка очереди печати конкретного принтера

Периферийные устройства Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Очистка очереди печати выбранного принтера, перезапуск службы печати, вывод списка системных принтеров, открытие свойств принтера из 1С.

1 стартмани

07.11.2023    1257    1    vsnazarov    1    

26

Печать этикеток на DYMO LabelManager 280 через DYMO Connect Web Service

Периферийные устройства WEB-интеграция Этикетки, ценники Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

На сайте производителя принтера DYMO LabelManager 280 вместе с драйвером поставляется пакет DYMO Connect, который предлагает функционал вёрстки этикеток в фирменном формате и отправки их напрямую на принтер. Так же в этом пакете есть веб-сервис для взаимодействия с принтером через HTTP-запросы, о котором и пойдет речь в этой статье.

29.08.2023    1458    GeraltSnow    0    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. AngelVIII 19.04.15 22:24 Сейчас в теме
Прикольно, конечно!
только бы придумать, как это применить...
sasha777666; +1 Ответить
21. BlinOFF 7 22.04.15 08:25 Сейчас в теме
(1) AngelVIII,
Бить током бухов, если что-то неправильно делают )))
A_Max; DeFunes; Stanislav1993; AVBachurin; shard; karpik666; uriy; AngelVIII; Atori-kun; bbbsss; veretennikoff; +11 Ответить
34. Atori-kun 23.04.15 09:59 Сейчас в теме
(21) BlinOFF, либо тока не хватит, либо через 2 -3 цикла у них иммунитет выработается... Хотя в заметки поставил)
2. Жолтокнижниг 258 20.04.15 10:02 Сейчас в теме
Ардуин добрался до 1с, точнее 1с до него)))
Nefilimus; Stanislav1993; sasha777666; +3 Ответить
3. flyer 231 20.04.15 10:18 Сейчас в теме
надо взять на заметку. хорошая идея
Atori-kun; sasha777666; +2 Ответить
4. Atori-kun 20.04.15 11:44 Сейчас в теме
В голове родилась мысль навесить ардуинку на ДО для оповещения о поступившей задаче. Чую кто то мне ближайшие выходные испортил...
veretennikoff; +1 Ответить
5. TODD22 18 20.04.15 11:50 Сейчас в теме
6. Atori-kun 20.04.15 12:33 Сейчас в теме
(5) TODD22, Сори, по привычке написал. ДО - Документооборот
7. TODD22 18 20.04.15 12:58 Сейчас в теме
(6) Atori-kun, Для этих целей люди прикручивают всякие WhatsApp и итд.

16. Atori-kun 21.04.15 05:06 Сейчас в теме
(7) TODD22, Ну такие месенжеры внешним оборудованием управлять не смогут, а вот какую нибудь игрушку на данном примере замутить можно. Но это действительно пока только поиграться - реальных (нужных) для себя вещей пока не придумал.
18. eugeniezheludkov 43 21.04.15 09:53 Сейчас в теме
(16) Atori-kun, у мня как то была задача сделать на каждое рабочее место две хардовые кнопки ("нравится обслуживание"/"не нравится") там правда заказчик заранее купил usb-gpio девайс с 30 gpio поэтому пришлось один из компьютеров запустить в роли сервиса с него тянется паутина проводов к кнопкам, на компе работает программа на C++ которая в 1С отсылает данные через WebService, дурняк короче , дешевле было отдельными девайсами теми же ардуинками или esp8266 (по 1$ за штуку при покупке оптом и провода не нужны их в сеть wifi загоняешь и на батарейках)
Atori-kun; +1 Ответить
8. q_i 577 20.04.15 16:26 Сейчас в теме
Занятно ))
Есть только одно замечание:
s[i]=Serial.read(); // Записываем их в S, в нашем случае команда занимает 1 символ, 2-й перенос строки, 3 - на всякий случай))

Символы.ПС занимает 2 байта (0xOD 0x0A), поэтому не на "всякий случай", а как раз чтобы вся строка поместилась в буфер (если бы буфер был объявлен как s[2], то вместо следующей команды Вам приходило бы "0x0A <код-следующей-команды>"). Да и вообще - а нужен ли этот перевод строки? Его наличие в Вашем коде нигде не проверятся и не обрабатывается. Может его вообще убрать? Пусть будет просто "char cmd = 0"; Прочитал однобайтовую команду ("cmd = Serial.read()") и сразу выполнил ("if (cmd == '1') ..."; кстати, имхо тут был бы уместен switch/case, но это уже дело вкуса).
13. sasha777666 321 21.04.15 01:15 Сейчас в теме
(8) q_i, В начале у меня и было без него, однако происходили зависания на стороне 1с, после добавления ПС проблема исчезла, в чём причина разбираться не стал.
9. Simon14 20.04.15 17:08 Сейчас в теме
Только недавно с ардуинкой баловался не думал что можно с 1 с связать. но на практике что полезного в этом пока не приодит на ум
10. TODD22 18 20.04.15 17:17 Сейчас в теме
(9) Simon14, Можно например с каким нибудь производственным оборудованием связать. Но профита маловато. Так если только побаловаться.
11. GusevNA 359 20.04.15 22:15 Сейчас в теме
Спасибо за пост, давно хотел поковыряться с Ардуино, а тут уже код для 1С готов.
12. uriy 3 20.04.15 23:35 Сейчас в теме
Статейка понравилась, И даже есть с десяток идей где можно это применить.
14. eugeniezheludkov 43 21.04.15 03:46 Сейчас в теме
все портит внешняя компонента.
кстати, а что если учесть (статистику) настройки большинства портов в винде по умолчанию, в коде ардуинки сразу это учесть "Serial.begin(115200);"
и попытаться работать без внешней компоненты? ардуинка дома, 1с на работе , думаю завтра это дело и проверю если не забуду :)
15. sasha777666 321 21.04.15 04:57 Сейчас в теме
(14) eugeniezheludkov, Соединение через юсб интерфейс само по себе является недостатком из-за необходимости наличия компьютера в радиусе 5 метров, на ардуине можно поднять веб сервер и подключаться по хттп через сеть. При этом не используя внешние компоненты, думаю на выходных начну статью про такой способ связи.
veretennikoff; Atori-kun; +2 Ответить
17. Atori-kun 21.04.15 05:08 Сейчас в теме
38. sasha777666 321 26.04.15 14:30 Сейчас в теме
19. revned 6 21.04.15 12:38 Сейчас в теме
Интересно! Честно говоря, даже и не думал, что можно к 1С ардуино подключать. А оказывается ничего сложного и нет.
20. Rokstedi 19 21.04.15 14:35 Сейчас в теме
Хорошая идея! Когда то игрался с attiny и 1с. Для мигания лампочкой такого наворотил, писал внешнюю компоненту, которая читает из порта... мда. Оказывается все намного проще. Спасибо, добавлю в закладки.
22. Serg3141 11 22.04.15 08:56 Сейчас в теме
А если для работы с сом-портом использовать, к примеру, http://x-romix.narod.ru/vk_rs232_hex.zip, не будет ли проще? С помощью этой компоненты вполне нормально можно с последовательным портом работать.
23. Starky 22.04.15 09:13 Сейчас в теме
Интересно! Я как-то подключал к 1с GPS приемник-логгер с USB интерфейсом. Читал в 1с поток текущих данных, парсил и показывал на карте текущее местоположение. Бухи сидящие со мной в одном кабинете смотрели на меня очень удивленно ))).
Но идея с веб обработчиком и хттп на ардуино, более удобна в плане ухода от лишних проводов.
24. SGordon1 22.04.15 09:35 Сейчас в теме
драйвер CH341SER.EXE - от дешевого китайского клона ардуины. Если у вас настоящий аппарат то драйвера там соответсвенно другие ... А в новых версиях платформы 1с нет функций , способных читать из COM как из файла?
30. sasha777666 321 22.04.15 12:19 Сейчас в теме
(24) SGordon1, Я всё делал в 8.3. Да ты прав у меня дешёвая китайская подделка... стоп ардуина свободная платформа у неё не может быть подделок :) Контроллеры я заказываю с таобао самые дешёвые, сетевые шилды попадались бракованные, сами ардуины пока, что все работают
35. SGordon1 24.04.15 10:01 Сейчас в теме
(30) Т.е. если вместо вот такой ардуины http://arduino.cc/en/uploads/Main/ArduinoNano30Schematic.pdf тебе выдадут какой нить интел , скажут поставь наш соффт и оно на blink.ino замигает светодиодами то это не будет подделкой? А в чем тогда смысл копирайта на схему? Делай свое что хочешь, только не подписывайся нашим названием...
37. sasha777666 321 24.04.15 10:36 Сейчас в теме
(35) SGordon1, Ардуина открытая платформа, слово подделка к ней неуместна, мой китайский аналог работает точно так же, только загрузчик другой, поэтому драйвер и выложил, для контроллера со стандартным загрузчиком драйвера установятся вместе со студией.
25. 13jaguar 94 22.04.15 09:59 Сейчас в теме
Спасибо, это интересно. А еще интереснее работа с Arduino (или в моем случае с Cubieboard2) через порт Ethernet.
36. SGordon1 24.04.15 10:02 Сейчас в теме
(25) 13jaguar, А какие проблемы с интернетом, вроде полно как стандартных возможностей так и com компонент ...
26. karapuzzzz 63 22.04.15 11:05 Сейчас в теме
Последовательный порт вообще очень универсальная вещь. Все, что использует его можно прикрутить к 1С. И будь-то ардуинка или станок ЧПУ уже не важно. Все дело в прослойке между COM и 1С. Я для таких проектов использую шаблон на C# для внешних компонет и логику работы прописываю там.
Вот пример:
Библиотека классов для создания внешней компоненты 1С на C#
27. claymen 22.04.15 11:34 Сейчас в теме
Управляйте лифтами, атомными станциями и самолетами!!! =))))))
Ардуино это с ребенком собирать робота... с напряжением не больее 12 вольт.

Господа!!! Не морочьте людям голову...
Разработка на ардуино устройства которое не залипнет не зависнет выйдет в разы дороже готовых промышленных решений.
Хотите Из 1С свет включать во всем задании, или еше чего Вот модуль с Реле на выход , где ничего не залипнет и не устроит пожар на объекте
http://insat.ru/prices/info.php?pid=5619
Уже с Ethernet и работает как через WEB так и по стандартизированному протоколу Modbus. Разбираться в нем 1-2 часа от силы...
И таких решений уже очень много все придумано!
Ценник сопоставимый...
А цена самоделки может стоить пожара или жизней ...
29. sasha777666 321 22.04.15 12:12 Сейчас в теме
(27) claymen, и сколько тебе известно случаев пожара из-за ардуины? По поводу надёжности у неё конечно не всё хорошо, но не настолько, чтобы устроить пожар... и да сторожевой таймер перезагрузит контроллер через 8 секунд в случае зависания.

пс. там 5 вольт, а не 12.
32. claymen 22.04.15 20:29 Сейчас в теме
(29) Пожары не считал, выгоревшей техники класса LowCost видел много от бытовых автоматов до Сложного сетевого оборудования. И попадания молнии и чего тока не видел...
Ардуино это игрушка! и Все компоненты для нее игрушечные, и все соединения....
Вот вы думаете релюшка чего там сложно, тока поговорите с теми кто их эксплуатирует сколько нюансов, и то что они греются и пригорают и залипают, в ардуино модулях стоят не самые лучшие образцы... Потому как задача одна цена!
Всё просто пока не попробуете.


33. sasha777666 321 23.04.15 00:49 Сейчас в теме
(32) claymen, пробовал и много, вы видимо по цене судите качестве? подучите немного китайский и вперёд на таобао (сайт внутреннего катайскийого рынка), где быстро убедитесь, что высокая цена это лишь наценка жадных перекупщиков... Вопрос на засыпку, почему по популярности дуина на несколько порядков в переди? ... я верю в естественный отбор, ведь более худшая продукция не может вытеснить с рынка более лучшую, даже если стои дешевле
Atori-kun; +1 Ответить
28. claymen 22.04.15 11:38 Сейчас в теме
31. pavel_pss 289 22.04.15 15:30 Сейчас в теме
Спасибо классная идея. Надо будет сделать вход начальника в его кабинет только после перечисления ЗП :)
Atori-kun; sasha777666; +2 Ответить
39. shard 279 29.04.15 11:24 Сейчас в теме
В свое время была шутка что к коробочной версии девятой 1С будут прилагаться два usb-манипулятора для чесания пяток бухгалтеру. В каждой шутке есть доля шутки...
sasha777666; +1 Ответить
40. nikulin76 139 06.05.15 08:38 Сейчас в теме
Немного знаком с ардуинкой. И все бы хорошо, НО.
Вот никогда не соглашусь, что 1с должна общаться с ардунькой.
Логично было бы наладить онлайн обмен и накопление информации какой либо резидентной программы в любое хранилище.
а уже 1с периодически общалось бы уже с хранилищем.
Может my-SQL или что либо еще.
Вот это было бы уже взрослое решение.
41. starik-2005 3033 27.06.15 17:07 Сейчас в теме
В принципе, в Linux нет проблем с инициализацией порта, что крайне радует. Почему-то идея что-то толкать в ардуинку посредством сервера 1С не приходила мне в голову, т.к. есть PHP, Python, bash, sh, + CRONTAB... - мульон всего, но, с другой стороны, в принципе идея имеет право на существование.

Сегодня поэкспериментирую.
42. BIK_IT 08.09.15 14:56 Сейчас в теме
При запуске обработки появляется сообщение Не определен тип: AddIn.ATOL_KKM_1C82. Почему-то процедура ПодключитьВнешнююКомпоненту возвращает ЛОЖЬ... Кто знает?
43. sasha777666 321 09.09.15 02:25 Сейчас в теме
(42) BIK_IT, Проверь, что внешняя компонента есть в макете в виде двоичных данных
44. AngelVIII 08.10.15 13:20 Сейчас в теме
прошло уже полгода. Есть какие-то действующие реализованные идеи?
45. sasha777666 321 09.10.15 02:11 Сейчас в теме
(44) AngelVIII, У меня только возможность открывать замок на входной двери.... не было пока задач где можно было бы использовать это
46. Serj1C 483 14.07.22 23:31 Сейчас в теме
(44) В задачах учета не применял, но в хобби проектах связка 1С + ардуино у меня прям нормально используется. Эх, жаль тогда в 2015 я этого всего не умел)
Оставьте свое сообщение