Подключение к 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 подключение через ком порт подключение любого устройства подключение нестандартного оборудования

См. также

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

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

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

1 стартмани

07.11.2023    946    1    vsnazarov    1    

24

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

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

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

29.08.2023    755    GeraltSnow    0    

3

Умный дом на 1С: это намного проще, чем кажется, и значительно лучше, чем можно предположить

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

Кто сказал, что умный дом на 1С сделать невозможно? На конференции Infostart Event 2021 Moscow Premiere Юрий Лазаренко из компании «Цифровой Кот» показал, какие уникальные прикольные вещи можно делать на базе IoT (интернета вещей), где в этом всем 1С, и как это все между собой интегрируется.

19.06.2023    3484    TitanLuchs    27    

14

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

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

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

20400 руб.

31.05.2023    3289    1    1    

2

Второй монитор в качестве дисплея покупателя

Розничная торговля Периферийные устройства Платформа 1С v8.3 1С:Управление торговлей 11 Абонемент ($m)

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

1 стартмани

02.02.2023    2663    18    windsurf    3    

4

Мобильное приложение 1С и Умный дом. В каждый дом. Пролог

Мобильная разработка Робототехника и умный дом (Arduino, NFC, RFID) Мобильная платформа Конфигурации 1cv8 Абонемент ($m)

Хотите попробовать свои силы в разработке собственного мобильного приложения на 1С для управления светом и электроприборами в своём доме? Добро пожаловать! Хочу поделиться собственными наработками в этой области. Это будет приложение, разработанное для мобильных устройств на базе Android. Основное предназначение: управление включением/выключением устройств, работающих от сети 220 V (свет, телевизор, чайник, вентилятор, микроволновка и т.д.). Управлять будем: из приложения, голосом, на заданный промежуток времени, интенсивностью света, расписанием работы.

1 стартмани

19.12.2022    2157    osivv    8    

21

Космическая Одиссея 2020 года

Мониторинг Периферийные устройства Языки и среды Бесплатно (free)

Организация потокового обмена системы 1С с большим количеством разнородных устройств – нетривиальная задача. О том, как организовать архитектуру такого решения с учетом возможного масштабирования хранимых данных и поддерживаемых интерфейсов, на конференции Infostart Event 2021 Post-Apocalypse рассказал TeamLead и специалист по внедрению компании ИнфоСофт Григорий Шатров.

11.11.2022    3196    G.Shatrov    2    

25
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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. Жолтокнижниг 256 20.04.15 10:02 Сейчас в теме
Ардуин добрался до 1с, точнее 1с до него)))
Nefilimus; Stanislav1993; sasha777666; +3 Ответить
3. flyer 230 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 Сейчас в теме
(4) Atori-kun,
ДО
Это что?
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 569 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 319 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 358 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 319 21.04.15 04:57 Сейчас в теме
(14) eugeniezheludkov, Соединение через юсб интерфейс само по себе является недостатком из-за необходимости наличия компьютера в радиусе 5 метров, на ардуине можно поднять веб сервер и подключаться по хттп через сеть. При этом не используя внешние компоненты, думаю на выходных начну статью про такой способ связи.
veretennikoff; Atori-kun; +2 Ответить
17. Atori-kun 21.04.15 05:08 Сейчас в теме
(15) Ждем с нетерпением)
38. sasha777666 319 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 319 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 319 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 319 22.04.15 12:12 Сейчас в теме
(27) claymen, и сколько тебе известно случаев пожара из-за ардуины? По поводу надёжности у неё конечно не всё хорошо, но не настолько, чтобы устроить пожар... и да сторожевой таймер перезагрузит контроллер через 8 секунд в случае зависания.

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


33. sasha777666 319 23.04.15 00:49 Сейчас в теме
(32) claymen, пробовал и много, вы видимо по цене судите качестве? подучите немного китайский и вперёд на таобао (сайт внутреннего катайскийого рынка), где быстро убедитесь, что высокая цена это лишь наценка жадных перекупщиков... Вопрос на засыпку, почему по популярности дуина на несколько порядков в переди? ... я верю в естественный отбор, ведь более худшая продукция не может вытеснить с рынка более лучшую, даже если стои дешевле
Atori-kun; +1 Ответить
28. claymen 22.04.15 11:38 Сейчас в теме
ошибся ссылкой тот Без Ethernet
Вот он http://insat.ru/prices/info.php?pid=5902
31. pavel_pss 289 22.04.15 15:30 Сейчас в теме
Спасибо классная идея. Надо будет сделать вход начальника в его кабинет только после перечисления ЗП :)
Atori-kun; sasha777666; +2 Ответить
39. shard 276 29.04.15 11:24 Сейчас в теме
В свое время была шутка что к коробочной версии девятой 1С будут прилагаться два usb-манипулятора для чесания пяток бухгалтеру. В каждой шутке есть доля шутки...
sasha777666; +1 Ответить
40. nikulin76 139 06.05.15 08:38 Сейчас в теме
Немного знаком с ардуинкой. И все бы хорошо, НО.
Вот никогда не соглашусь, что 1с должна общаться с ардунькой.
Логично было бы наладить онлайн обмен и накопление информации какой либо резидентной программы в любое хранилище.
а уже 1с периодически общалось бы уже с хранилищем.
Может my-SQL или что либо еще.
Вот это было бы уже взрослое решение.
41. starik-2005 2898 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 319 09.09.15 02:25 Сейчас в теме
(42) BIK_IT, Проверь, что внешняя компонента есть в макете в виде двоичных данных
44. AngelVIII 08.10.15 13:20 Сейчас в теме
прошло уже полгода. Есть какие-то действующие реализованные идеи?
45. sasha777666 319 09.10.15 02:11 Сейчас в теме
(44) AngelVIII, У меня только возможность открывать замок на входной двери.... не было пока задач где можно было бы использовать это
46. Serj1C 483 14.07.22 23:31 Сейчас в теме
(44) В задачах учета не применял, но в хобби проектах связка 1С + ардуино у меня прям нормально используется. Эх, жаль тогда в 2015 я этого всего не умел)
Оставьте свое сообщение