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 не будет опубликован. Обязательные поля помечены *