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

19.04.15

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
777.zip
.zip 1,39Mb
25
25 Скачать (1 SM) Купить за 1 850 руб.

Платформа ардуино позволяет подключить к себе практически всё, на просторах интернета можно найти много информации об этом, поэтому мы не будем тратить на это время, а ограничимся 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-камер (http - запрос к камере), видео, фото (источники кадров (нет ограничения на их количество) настраивается в конфигурационном файле), находит и распознает номера автомашин и сохраняет в базу db, с сохранением фото номера и автомашины, а также времени детекции.

20400 руб.

31.05.2023    5172    4    4    

7

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

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

1 стартмани

31.12.2024    398    0    user821472    0    

2

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

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

10 стартмани

14.11.2024    837    5    aximo    0    

3

Периферийные устройства Системный администратор Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 Абонемент ($m)

Простая в использовании обработка https://infostart.ru/1c/tools/1001819/ в целом решает поставленную задачу, но имеет явный недостаток - взаимодействует только с принтерами, подключенными к серверу. Доработанная версия позволяет работать как с принтерами на клиенте, так и на сервере

1 стартмани

30.08.2024    528    3    Sergey1CSpb    0    

4

Робототехника и умный дом (Arduino, NFC, RFID) Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Управлять умными устройствами можно не только через Алису... Как насчет 1С?

1 стартмани

15.08.2024    837    1    vasilievil    0    

3

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

Расширение для вывода информации для покупателя из РМК на второй монитор. Также реализован вывод картинок из каталога в левую часть экрана покупателя. Разработано для УТ 11.5, УНФ 3.0.6 и 3.0.9.

1 стартмани

12.08.2024    1548    30    Rastopchinss    17    

4

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

Вывод для клиента на второй монитор (информационное табло) номера заказа в браузер (по умолчанию, например, Яндекс). Внешняя обработка может быть легко переделана под другие конфигурации (нужды) даже начинающим программистом.

1 стартмани

02.08.2024    848    1    AlOkt    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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. Жолтокнижниг 259 20.04.15 10:02 Сейчас в теме
Ардуин добрался до 1с, точнее 1с до него)))
Nefilimus; Stanislav1993; sasha777666; +3 Ответить
3. flyer 233 20.04.15 10:18 Сейчас в теме
надо взять на заметку. хорошая идея
Atori-kun; sasha777666; +2 Ответить
4. Atori-kun 20.04.15 11:44 Сейчас в теме
В голове родилась мысль навесить ардуинку на ДО для оповещения о поступившей задаче. Чую кто то мне ближайшие выходные испортил...
veretennikoff; +1 Ответить
5. TODD22 20 20.04.15 11:50 Сейчас в теме
6. Atori-kun 20.04.15 12:33 Сейчас в теме
(5) TODD22, Сори, по привычке написал. ДО - Документооборот
7. TODD22 20 20.04.15 12:58 Сейчас в теме
(6) Atori-kun, Для этих целей люди прикручивают всякие WhatsApp и итд.

16. Atori-kun 21.04.15 05:06 Сейчас в теме
(7) TODD22, Ну такие месенжеры внешним оборудованием управлять не смогут, а вот какую нибудь игрушку на данном примере замутить можно. Но это действительно пока только поиграться - реальных (нужных) для себя вещей пока не придумал.
18. eugeniezheludkov 45 21.04.15 09:53 Сейчас в теме
(16) Atori-kun, у мня как то была задача сделать на каждое рабочее место две хардовые кнопки ("нравится обслуживание"/"не нравится") там правда заказчик заранее купил usb-gpio девайс с 30 gpio поэтому пришлось один из компьютеров запустить в роли сервиса с него тянется паутина проводов к кнопкам, на компе работает программа на C++ которая в 1С отсылает данные через WebService, дурняк короче , дешевле было отдельными девайсами теми же ардуинками или esp8266 (по 1$ за штуку при покупке оптом и провода не нужны их в сеть wifi загоняешь и на батарейках)
Atori-kun; +1 Ответить
8. q_i 584 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 326 21.04.15 01:15 Сейчас в теме
(8) q_i, В начале у меня и было без него, однако происходили зависания на стороне 1с, после добавления ПС проблема исчезла, в чём причина разбираться не стал.
9. Simon14 20.04.15 17:08 Сейчас в теме
Только недавно с ардуинкой баловался не думал что можно с 1 с связать. но на практике что полезного в этом пока не приодит на ум
10. TODD22 20 20.04.15 17:17 Сейчас в теме
(9) Simon14, Можно например с каким нибудь производственным оборудованием связать. Но профита маловато. Так если только побаловаться.
11. GusevNA 361 20.04.15 22:15 Сейчас в теме
Спасибо за пост, давно хотел поковыряться с Ардуино, а тут уже код для 1С готов.
12. uriy 3 20.04.15 23:35 Сейчас в теме
Статейка понравилась, И даже есть с десяток идей где можно это применить.
14. eugeniezheludkov 45 21.04.15 03:46 Сейчас в теме
все портит внешняя компонента.
кстати, а что если учесть (статистику) настройки большинства портов в винде по умолчанию, в коде ардуинки сразу это учесть "Serial.begin(115200);"
и попытаться работать без внешней компоненты? ардуинка дома, 1с на работе , думаю завтра это дело и проверю если не забуду :)
15. sasha777666 326 21.04.15 04:57 Сейчас в теме
(14) eugeniezheludkov, Соединение через юсб интерфейс само по себе является недостатком из-за необходимости наличия компьютера в радиусе 5 метров, на ардуине можно поднять веб сервер и подключаться по хттп через сеть. При этом не используя внешние компоненты, думаю на выходных начну статью про такой способ связи.
veretennikoff; Atori-kun; +2 Ответить
17. Atori-kun 21.04.15 05:08 Сейчас в теме
38. sasha777666 326 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 12 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 326 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 326 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 326 22.04.15 12:12 Сейчас в теме
(27) claymen, и сколько тебе известно случаев пожара из-за ардуины? По поводу надёжности у неё конечно не всё хорошо, но не настолько, чтобы устроить пожар... и да сторожевой таймер перезагрузит контроллер через 8 секунд в случае зависания.

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


33. sasha777666 326 23.04.15 00:49 Сейчас в теме
(32) claymen, пробовал и много, вы видимо по цене судите качестве? подучите немного китайский и вперёд на таобао (сайт внутреннего катайскийого рынка), где быстро убедитесь, что высокая цена это лишь наценка жадных перекупщиков... Вопрос на засыпку, почему по популярности дуина на несколько порядков в переди? ... я верю в естественный отбор, ведь более худшая продукция не может вытеснить с рынка более лучшую, даже если стои дешевле
Atori-kun; +1 Ответить
28. claymen 22.04.15 11:38 Сейчас в теме
31. pavel_pss 290 22.04.15 15:30 Сейчас в теме
Спасибо классная идея. Надо будет сделать вход начальника в его кабинет только после перечисления ЗП :)
Atori-kun; sasha777666; +2 Ответить
39. shard 282 29.04.15 11:24 Сейчас в теме
В свое время была шутка что к коробочной версии девятой 1С будут прилагаться два usb-манипулятора для чесания пяток бухгалтеру. В каждой шутке есть доля шутки...
sasha777666; +1 Ответить
40. nikulin76 140 06.05.15 08:38 Сейчас в теме
Немного знаком с ардуинкой. И все бы хорошо, НО.
Вот никогда не соглашусь, что 1с должна общаться с ардунькой.
Логично было бы наладить онлайн обмен и накопление информации какой либо резидентной программы в любое хранилище.
а уже 1с периодически общалось бы уже с хранилищем.
Может my-SQL или что либо еще.
Вот это было бы уже взрослое решение.
41. starik-2005 3098 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 326 09.09.15 02:25 Сейчас в теме
(42) BIK_IT, Проверь, что внешняя компонента есть в макете в виде двоичных данных
44. AngelVIII 08.10.15 13:20 Сейчас в теме
прошло уже полгода. Есть какие-то действующие реализованные идеи?
45. sasha777666 326 09.10.15 02:11 Сейчас в теме
(44) AngelVIII, У меня только возможность открывать замок на входной двери.... не было пока задач где можно было бы использовать это
46. Serj1C 483 14.07.22 23:31 Сейчас в теме
(44) В задачах учета не применял, но в хобби проектах связка 1С + ардуино у меня прям нормально используется. Эх, жаль тогда в 2015 я этого всего не умел)
47. Светлый ум 448 06.09.24 06:43 Сейчас в теме
уфф... очень полезное но...
"... но есть НО, очень большое НО. Ком порт должен быть проинициализирован!"

Из-за этого неделю уже купюроприемник в 1С подружить не можем
Оставьте свое сообщение