Native компонента для чтения из Com порта

Компонента позволяет посредством ВнешнегоСобытия получать данные из Com-порта

Компонента поставляется в x32 и x64 вариантах.

Порядок подключения:

Из макета

ПодключитьВнешнююКомпоненту("Обработка.КомПорт.Макет.Библиотека","allsp_1C_ComPort",ТипВнешнейКомпоненты.Native);
КомПорт = Новый("AddIn.allsp_1C_ComPort.allsp_1C_ComPort");

Из файла:

ПодключитьВнешнююКомпоненту("Путь к dll файлу","allsp_1C_ComPort",ТипВнешнейКомпоненты.Native);
КомПорт = Новый("AddIn.allsp_1C_ComPort.allsp_1C_ComPort");

Свойства:

КомПорт.ИмяПорта(PortName) = "COM1"; // Имя ком порта

КомПорт.РазмерБлокаДанных(BlockSize) = 1; // Размер данных, который накопит компонента прежде чем
// вызовет внешнее событие (произвольное целое число)

КомПорт.Скорость(BaudRate) = 9600;        // Скорость работы Com порта (110, 300, 600, 1200, 2400,
// 4800, 9600, 14400, 19200, 38400, 56000, 57600, 115200,
// 128000, 256000)
КомПорт.СтопБит(StopBits) = 0;            // 1 стоп бит = 0, 1.5 стоп бита = 1, 2 стоп бита = 2

КомПорт.БитДанных(DataBits) = 8;          // Количество бит данных (целое число)

КомПорт.Четность(Parity) = 0;             // Четность (NOPARITY=0, ODDPARITY=1,EVENPARITY=2,
// MARKPARITY=3,SPACEPARITY=4)

Методы:

КомПорт.ОткрытьПорт(); // Открывает порт
КомПорт.ЗакрытьПорт(); // Закрывает порт

Все свойства устанавливаются до открытия порта. Для изменения свойств необходимо закрыть и заново открыть порт.

Внешнее событие:

Процедура ВнешнееСобытие(Источник, Событие, Данные) // Истичник = COM_PORT, Событие = DATA_BLOCK
ПрочитанныеДанные = Данные;
КонецПроцедуры

Дополнительныая информация

Ссылка на объект компоненты должна быть доступна на протяжении всей работы с Com  портом, во избежании выгрузки компоненты платформой.

Например так:

Перем КомПорт

Процедура ПриОткрытии()
ПодключитьВнешнююКомпоненту("Обработка.КомПорт.Макет.Библиотека","allsp_1C_ComPort",ТипВнешнейКомпоненты.Native);
КонецПроцедуры

Процедура ДействиеНачатьПрослушивание()
КомПорт = Новый("AddIn.allsp_1C_ComPort.allsp_1C_ComPort");
КомПорт = ОткрытьПорт();
КонецПроцедуры

Процедура ДействиеЗакончитьПрослушивание()
КомПорт = ЗакрытьПорт();
КомПорт = Неопределено;
КонецПроцедуры

Процедура ПриЗакрытии()
Если КомПорт <> Неопределено Тогда
КомПорт = ЗакрытьПорт();
КомПорт = Неопределено;
КонецЕсли;
КонецПроцедуры

КомПорт = Неопределено;

Планируется выход платной версии, с возможностью записи в COM порт и управлением сигнальными линиями.

Заключение

Внимание! Компонента выпущена в бета версии, никаких гарантий на ее работу не предусмотрено, хотя в настоящее время и работает в реальных решениях. Выложена для ознакомления и применения с целью сбора отзывов. Компонента не обременена лицензионными соглашениями и предоставляется для свободного использования на свое усмотрение как есть.

17 Comments

  1. jaroslav.h

    Дуже дуже вдячний, якщо все гуд, то це супер, це то, що нам якраз треба з специфічним сканером штрих-кодів. Буду тестувати.

    Reply ↓
  2. jaroslav.h

    Получаю

    {Форма.Форма.Форма(7)}: Тип не определен (AddIn.allsp_1C_ComPort.allsp_1C_ComPort)

    КомПорт = Новый(«AddIn.allsp_1C_ComPort.allsp_1C_ComPort»);

    с таким подключением

    &НаКлиенте
    Перем КомПорт;
    
    &НаКлиенте
    Процедура ПриОткрытии()
    ПодключитьВнешнююКомпоненту(«C:ComPort_x64.dll»,»allsp_1C_ComPort»,ТипВнешнейКомпоненты.Native);
    КомПорт = Новый(«AddIn.allsp_1C_ComPort.allsp_1C_ComPort»);
    КонецПроцедуры
    
    

    Показать

    да и

    ПодключитьВнешнююКомпоненту(«G:WH-ОБМЕНComPort_x64.dll»,»allsp_1C_ComPort»,ТипВнешнейКомпоненты.Native) = Ложь

    Толстый клиент. Управляемое приложение.

    Reply ↓
  3. jaroslav.h

    У кого то подключилась данная компонента?

    Reply ↓
  4. compguru

    (2) myr4ik07, Отвечу в ближайшее время

    Reply ↓
  5. compguru

    (3) myr4ik07, Подключать необходимо версию х32

    Reply ↓
  6. jaroslav.h

    (4)

    спасибо, работает, бомба

    &НаКлиенте
    Перем КомПорт;
    
    &НаКлиенте
    Процедура ПриОткрытии()
    ПодключитьВнешнююКомпоненту(«G:logComPort_x32.dll»,»allsp_1C_ComPort»,ТипВнешнейКомпоненты.Native);
    КомПорт = Новый(«AddIn.allsp_1C_ComPort.allsp_1C_ComPort»);
    КомПорт.ИмяПорта = «com3»;
    КомПорт.ОткрытьПорт();
    КонецПроцедуры
    
    &НаКлиенте
    Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Сообщить(Данные);
    Сообщить(Источник);
    Сообщить(Событие);
    КонецПроцедуры
    
    
    

    Показать

    Reply ↓
  7. compguru

    (6) myr4ik07, Это хорошо. Будут проблемы, пишите

    Reply ↓
  8. sasha777666

    Как проверить используется ли порт чем-то другим

    Reply ↓
  9. RuslanGaliev

    (7) Компонента подключается, но внешнее событие так и не получил.

    Reply ↓
  10. user921229

    ComPort_x64.dll не генерирует событие. кто нибудь подключал успешно?

    Reply ↓
  11. herfis

    (10) Я после плясок вокруг разных наколенных компонет по работе с ком-портом остановился на старом добром MSCOMMLib, известном еще с 7.7 (майкрософтовский драйвер). Его повыпиливали, но по-прежнему можно найти, скачать и установить. Правда, чтобы он заработал, его еще нужно зарегистрировать, записав в реестр нужные ключи. Все это гуглится.

    По внешнему событию через него работать не пробовал, но майкрософтовская дока говорит, что у него есть для этого событие OnComm. А в 8-ке есть оператор ДобавитьОбработчик, с помощью которого можно подписываться на события ком-объектов. Я таким образом успешно подписывался на события сторонних ком-объектов по работе со сканерами (которые не по технологии создания внешних компонент 1С писаны). Думаю, и тут должно получиться.

    ЗЫ. И на всякий случай я бы заглянул в свежую библиотеку подключаемого оборудования — вдруг туда уже засунули православный драйвер.

    Reply ↓
  12. tka4enk0

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

    Так же если открыть какой нибудь монитор порта по этому номеру, то он свободно открывается и получается данные. Хотя при уже открытом порте должен был бы падать в ошибку.

    Reply ↓
  13. jaroslav.h

    (13)

    &НаКлиенте
    Перем КомПорт;
    
    &НаКлиенте
    Процедура ПриОткрытии()
    ПодключитьВнешнююКомпоненту(«G:logComPort_x32.dll»,»allsp_1C_ComPort»,ТипВнешнейКомпоненты.Native);
    КомПорт = Новый(«AddIn.allsp_1C_ComPort.allsp_1C_ComPort»);
    КомПорт.ИмяПорта = «com3»;
    КомПорт.ОткрытьПорт();
    КонецПроцедуры
    
    &НаКлиенте
    Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Сообщить(Данные);
    Сообщить(Источник);
    Сообщить(Событие);
    КонецПроцедуры

    Показать

    Reply ↓
  14. Alvils

    (14) я читать умею, и ваш код прочитал и попробовал использовать сразу же. Но у меня х64 платформа. Со всеми вытекающими. И не только я написал что нет внешнего события.

    Reply ↓
  15. jaroslav.h

    (15) если ты прочитал что х64 не работает, зачем качать и возмущения высказывать, думаешь что то изменилось …

    Reply ↓
  16. jaroslav.h

    (15) плюс он же пишет «Внимание! Компонента выпущена в бета версии, никаких гарантий на ее работу не предусмотрено»

    Reply ↓
  17. ut2k5

    спасибо за материал, очень помогли

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *