Пятница, 19.07.2019
Уголок эникейщика
Меню сайта
Категории раздела
Около ПК [67]
Полезные программы [33]
Интересности [26]
[8]
Android [8]
Личное [27]
Настройки сайта [8]
Избранное

Рахни православні

Погода в Виннице
Сайт Экслера

Форум Ru.Board
CWER.ru

Hot Line - Цены
Яндекс.Маркет

Форум rutracker.org

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » 2012 » Апрель » 9 » Работа с com-портом в 1C
16:28
Работа с com-портом в 1C

На фирме создался (и продолжает пополняться новыми экземплярами) "зверинец" из разного оборудования, которое нужно сопрягать с ПК через com-порт (для получения данных в 1С).
Автовесы, ж/д весы, анализаторы зерна.

До недавнего времени я решал вопрос сопряжения так - выходил на поставщиков оборудования и старался получить от них внешнюю компоненту или exe-файл, которые могут считывать информацию с оборудования и предоставлять ее 1С через OLE-объект или внешний текстовый файл. Вникать в программирование внешних компонент как-то не хотелось, да и времени нет.

Сейчас нашел способ считывания данных с com-порта и дальнейшего их использования (можно через 1С, VBS и т.д.)

Нужна библиотека Mscomm32.ocx (вроде, из состава Visual Basic) + reg-файл с лицензией для нее. В Сети это легко находится.
Вот небольшая документация на нее. Справка по элементу управления на firststeps.ru.

Далее нужно забросить ее  в %windir%\system32\ и зарегистрировать в системе: regsvr32 "%windir%\system32\MSCOMM32.OCX".
И можно использовать. Естественно, нужна документация по оборудованию - что оно выводит в com-порт, по какой команде (или без команды), в каком формате.

Важные свойства этого элемента управления:

  • ComPort  - Устанавливает и возвращает номер используемого COM-порта
  • Settings  - Устанавливает и возвращает скорость в бодах, контроль по четности, биты данных, стоповые биты 
  • PortOpen - Устанавливает и возвращает состояние порта связи, а также открывает и закрывает COM-порт
  • Input - Возвращает и удаляет символы из получающего буфера
  • InputLen - Устанавливает и возвращает число считываемых символов свойством Input из буфера
  • InBufferCount - Возвращает количество символов ждущих в получаещем буфере
  • InBufferSize - Устанавливает и возвращает размер получающего буфера в байтах
  • Output - Записывает последовательность символов в передающий буфер
  • OutBufferCount - Возвращает число символов ждущих в передающем буфере
  • OutBufferSize - Устанавливает и возвращает размер передающего буфера в байтах

Пример (1С 7.7, весовой терминал WE2108):

Перем Конт, КомПорт;
// ===============================================================
Процедура ПолучитьВес(ИзТТН = 0)
 Состояние("Триває отримання результатів зважування");
 ВремяОжиданияВСек = 10;
 флПревышенияОжидания = 0;

 тв1 = глТекущееВремяВСек();
 тд1 = ТекущаяДата();

 КомПорт.Settings = "9600,N,8,1";
 КомПорт.Output = "MSV?;"; // Посылаем в com-порт команду WE2108 на выдачу веса

 Буфер = "";
 Пока КомПорт.InBufferCount <= 2 Цикл // Пока в буфере <= 2-х символов. Цикл реально загружает процессор - для длительного ожидания лучше использовать процедуру ОбработкаОжидания()
 тв2 = глТекущееВремяВСек();
 тд2 = ТекущаяДата();

 Если тв2 > тв1 Тогда
 Если тв2 - тв1 > ВремяОжиданияВСек Тогда
 флПревышенияОжидания = 1;
 Прервать;
 КонецЕсли;
 Иначе
 Если тд2 > тд1 Тогда
 Если тв2 > ВремяОжиданияВСек Тогда
 флПревышенияОжидания = 1;
 Прервать;
 КонецЕсли;
 КонецЕсли;
 КонецЕсли;
 КонецЦикла;

 Если флПревышенияОжидания = 1 Тогда
 Сообщить("Перевищено час очікування отримання ваги!");
 Возврат;
 Иначе
 // В буфере строка вида: s ° ° m m m m m , a a , st st st CR LF (при COF=9)
 // CR - конечный символ 1 (заводская установка: возврат каретки) 
 // LF - конечный символ 2 (заводская установка: перевод строки)
 // m - цифра измеренного значения 
 // s - знак (- или пробел) 
 // ° - пробел 
 // a - адрес 
 // st - байт статуса 

 Буфер = СокрЛП(КомПорт.Input);

 Поз = Найти(Буфер,","); 
 пВес = Число(Лев(Буфер,Поз-1)) * 10; // Переводим вес в кг
 КонецЕсли;

 Состояние("");

 Если ИзТТН = 1 Тогда
 Конт.Вес = пВес;
 Форма.Закрыть();
 Иначе
 Сообщить("Отримана вага: " + пВес + " кг.");
 КонецЕсли;
КонецПроцедуры // ПолучитьВес

// ===============================================================
 Процедура ПриОткрытии()
 ОчиститьОкноСообщений();

 НомерПорта = 1;
 Попытка
 КомПорт = СоздатьОбъект("MSCOMMLib.MSComm.1");
 Исключение
 Сообщить(ОписаниеОшибки());
 СтатусВозврата(0);
 Возврат;
 КонецПопытки;

 КомПорт.CommPort = НомерПорта;

 Если Компорт.PortOpen = 1 Тогда
 Сообщить("Com-порт №" + НомерПорта + " занят");
 СтатусВозврата(0);
 Возврат;
 Иначе
 Компорт.PortOpen = 1;
 КонецЕсли;

 Если ПустоеЗначение(Форма.Параметр) = 0 Тогда
 Конт = Форма.Параметр;
 ПолучитьВес(1);
 КонецЕсли;
КонецПроцедуры

// ===============================================================
Процедура ПриЗакритии()
 Компорт.PortOpen = 0;
КонецПроцедуры
Категория: | Просмотров: 5998 | Добавил: Игорь | Рейтинг: 0.0/0
Облако тегов
сайт программы Статьи личное разочарования Windows 1c антивирус политика почитать рекомендую Prices math ссылки english скрипты total сеть VBS
Календарь
«  Апрель 2012  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
30
Архив записей
Поиск
Google

WWW на сайте
Copyright IgorDanyK © 2019
Создать бесплатный сайт с uCoz