Имя: Пароль:
1C
1С v8
Работа с USB-портом
,
0 PALESIA
 
06.04.13
14:43
Добрый день всем!
Если кто-нить работал или встречался с инфой по USB - порту, который регится как виртуальный COM5 - скиньте плиз ссылочки сюда.
Необходимо направлено отправлять инфу на него через определенные промежутки времени. Аппаратка висит на конвейере - параллельно через RS232 - идет обмен сигналами с датчиками и весами.
Заранее благодарю.
1 dangerouscoder
 
06.04.13
14:51
Для весов драйвер нужно писать.. ищи sdk
2 vs1c
 
06.04.13
15:10
Ну так и отправляйте в COM5. Что мешает?
3 Voronve
 
06.04.13
15:12
Точно на Ком5 ? а то есть на Ком2; но там система комнд и синтаксис принципиально разный
4 vs1c
 
06.04.13
15:12
Где-где синтаксис разный?
5 Torquader
 
06.04.13
15:13
Если у вас виртуальный COM-порт, то USB уже вообще не при чём. А для работы с COM-портом есть много компонент, ну и никто не отменял написание программы.
(3) Виртуальный COM-порт может быть любой - его номер в настройках драйвера можно поменять.
6 Voronve
 
06.04.13
15:13
на ком 2 и ком 5
7 vs1c
 
06.04.13
15:13
(6) Вы о чем???
8 oleg_km
 
06.04.13
15:14
(1) Ну если не знаешь, зачем фантазировать? Если устройство является чистым USB-девайсом, то да, без драйвера не обойтись. Но если оно эмулирует COM-порт, значит драйвер уже есть и можно спокойно пользовать его в пользовательском режиме.

(0) Можно попробовать 1С-ный ScanOPOS, можно попробовать Misrosoft ActiveX
9 Voronve
 
06.04.13
15:14
(7) А Вы ?
10 vs1c
 
06.04.13
15:15
"на ком 2 и ком 5"
Это вот о чем?
11 Voronve
 
06.04.13
15:15
о синтаксисе, а что ?
12 vs1c
 
06.04.13
15:16
Хорошо... Можете привести пример?
13 Web00001
 
06.04.13
15:17
(11)тут просто все возбудились от фразы
>>но там система комнд и синтаксис принципиально разный
в ожидании подробностей запаслись попкорном, а ты все тянешь, ну не томи же, жги уже давай :) давай (12)!
14 Voronve
 
06.04.13
15:19
(12)
ConnectString;Port=Com2,AnnexA=True ...
ConnectString;Port=Com5,AnnexВ=True ...

(13) по запросу ;)
15 Torquader
 
06.04.13
15:21
(13) На самом деле, драйвер может узнавать номер порта, через который он работает, и это позволяет использовать разные протоколы для разных номеров портов - НО ЗАЧЕМ ???
16 vs1c
 
06.04.13
15:22
(14) Титры пошли... А где кино?
17 Voronve
 
06.04.13
15:23
(16) чо ты как баба; то не так свистю, то не так крыльями машу. Лопай чо дают
18 vs1c
 
06.04.13
15:24
(17) А что ты свистнул-то тут в (14), махатель крыльями?
19 Voronve
 
06.04.13
15:26
Тапера не трогать! Играю как могу...
20 oleg_km
 
06.04.13
15:51
ТС только куда-то исчез. Само рассосалось похоже
21 Torquader
 
06.04.13
15:58
(20) Так поди он уже всё написал и забыл.
22 PALESIA
 
06.04.13
15:59
сори, ребят отлучился - на участок бегал
клюшка RS232 с COM3 и 4 работают уже давно - норм - но итальянцы новую приспособу прикрутили - принтер через прокладку USB - она его не видит, хотя сигналы передает (
23 PALESIA
 
06.04.13
16:01
Для наглядности из дока:

//**************************************************************************************************
Процедура ОткрытиеПортов()
   
   ИмяПорта1 = "COM3";
   Попытка
       КомПорт1 = Новый("AddIn.vk_rs232");
       КомПорт1.ОткрытьПорт(ИмяПорта1);
       КомПорт1.КонецСтроки = Символ(13);
       //КомПорт1.ПерехватКлавиатуры(1);
       Сообщить("Был открыт порт: " + ИмяПорта1);
   Исключение
       Сообщить("Не был открыт порт: " + ИмяПорта1);
   КонецПопытки;
   
   ИмяПорта2 = "COM4";
   Попытка
       КомПорт2 = Новый("AddIn.vk_rs232");
       КомПорт2.ОткрытьПорт(ИмяПорта2);
       КомПорт2.КонецСтроки = Символ(13);
       //КомПорт2.ПерехватКлавиатуры(1);
       Сообщить("Был открыт порт: " + ИмяПорта2);
   Исключение
       Сообщить("Не был открыт порт: " + ИмяПорта2);
   КонецПопытки;
   
   ИмяПорта3 = "COM5";
   Попытка
       КомПорт3 = Новый("AddIn.vk_rs232");
       КомПорт3.ОткрытьПорт(ИмяПорта2);
       КомПорт3.КонецСтроки = Символ(13);
       //КомПорт2.ПерехватКлавиатуры(1);
       Сообщить("Был открыт порт: " + ИмяПорта3);
   Исключение
       Сообщить("Не был открыт порт: " + ИмяПорта3);
   КонецПопытки;
   
   Сообщить("-");
   
КонецПроцедуры // ОткрытиеПортов()
//**************************************************************************************************
Функция ОбрСтроки(перСтрока)
   
   Результат = СокрЛП(перСтрока);
   Результат = СтрЗаменить(Результат,",",".");
   Результат = СтрЗаменить(Результат,"я","Я");
   Возврат Результат;
   
КонецФункции // ОбрСтроки(перСтрока)
//**************************************************************************************************
Функция СтрокаПараметров(перНомерУпаковки,перМассаБрутто,перМассаТары,перМассаКонусов,перМассаНетто,перМассаКондиции)
   
   Результат    = ОбрСтроки(перНомерУпаковки) + "," // Номер упаковочного места
               + ОбрСтроки(Наименование1) + " " + ОбрСтроки(Наименование2) + "," // Наименование пряжи
               + ОбрСтроки(ТексПряжи.Сокращение) + "," // Текс пряжи
               + "," // Пропущенное значение
               + ОбрСтроки(НоменПряжи.Код) + "," // Артикул пряжи
               + ОбрСтроки(СоставПряжи.Наименование) + "," // Состав пряжи
               + Лев(СортПряжи,1) + "," // Сорт пряжи
               + ОбрСтроки(ЦветПряжи.Наименование) + "," // Цвет пряжи
               + ОбрСтроки(УстойОкраски.Сокращение) + "," // Группа устойчивости окраски
               + ОбрСтроки(КолтвоЕдиниц) + "," // Количество единиц продукции
               + ОбрСтроки(ПартияПряжи.Наименование) + "," // Номер партии пряжи
               + ОбрСтроки(Формат(ВлажностьНорма,ФорматВлажности)) + "," // Нормированная влажность
               + ОбрСтроки(Формат(ВлажностьФакт,ФорматВлажности)) + "," // Фактическая влажность
               + ОбрСтроки(Формат(перМассаБрутто,ФорматМасс)) + "," // Масса брутто
               + ОбрСтроки(Формат(перМассаТары,ФорматМасс)) + "," // Масса тары
               + ОбрСтроки(Формат(перМассаКонусов,ФорматМасс)) + "," // Масса конусов
               + ОбрСтроки(Формат(перМассаНетто,ФорматМасс)) + "," // Масса нетто
               + ОбрСтроки(Формат(перМассаКондиции,ФорматМасс)) + "," // Кондиционная масса
               + ОбрСтроки(Формат(Дата,"ДФ=dd.MM.yyyy")) + "," // Дата упаковывания
               + ОбрСтроки(ИспытаниеПряжи.ВидПаковки.Сокращение) + "," // Вид единицы продукции
               + ОбрСтроки(Упаковщик.ТабНомер) + "," // Таб.номер упаковщика
               + "№ " + СокрЛП(ИспытаниеПряжи.Номер) + "," // Номер паспорта качества
               + "от " + Формат(ИспытаниеПряжи.Дата,"ДФ=dd.MM.yyyy") + "," // Дата паспорта качества
               + ОбрСтроки(Норматив1) + "," // Норматив (стандарт) № 1
               + ОбрСтроки(Норматив2) + "," // Норматив (стандарт) № 2
               + "24" + Формат(перНомерУпаковки,"ЧЦ=10; ЧДЦ=0; ЧВН=; ЧГ=0") + "," // Штрихкод (12 символов)
               + СокрЛП(Техусловие.ВидЭтикетки) + "," // Код вида этикетки (в принтере)
               + ОбрСтроки(Примечание) + "," // Примечание
               + ","; // Дополнительная строка
   Возврат Результат;
   
КонецФункции // СтрокаПараметров()
//**************************************************************************************************
Процедура ЗакрытиеПортов()
   
   Сообщить("-");
   
   Попытка
       КомПорт1.ЗакрытьПорт();
       Сообщить("Был закрыт порт: " + ИмяПорта1);
   Исключение
       Сообщить("Не был закрыт порт: " + ИмяПорта1);
   КонецПопытки;
   
   Попытка
       КомПорт2.ЗакрытьПорт();
       Сообщить("Был закрыт порт: " + ИмяПорта2);
   Исключение
       Сообщить("Не был закрыт порт: " + ИмяПорта2);
   КонецПопытки;
   
   Попытка
       КомПорт3.ЗакрытьПорт();
       Сообщить("Был закрыт порт: " + ИмяПорта3);
   Исключение
       Сообщить("Не был закрыт порт: " + ИмяПорта3);
   КонецПопытки;
   
КонецПроцедуры // Процедура ЗакрытиеПортов()
//**************************************************************************************************
Процедура МенюУпаковокЗапустить(Кнопка)
   
   ОчиститьСообщения();
   ОткрытиеПортов();
   
   Заползло = Ложь;
   Напечатано = Ложь;
   
   Режим = РежимДиалогаВопрос.ОК;
   Текст = "ПРЕРВАТЬ ВЫПОЛНЕНИЕ ОПЕРАЦИИ ?";
   Пока Вопрос(Текст, Режим, 4,,"ИДЕТ ПРОЦЕСС !!!") = КодВозвратаДиалога.Таймаут Цикл
       
       ПерЗначение = Символ(2) + "1,1,Строка данных 1,Строка данных 2,Строка данных 3,Строка данных 4,Строка данных 5,Строка данных 6" + Символ(3);
       КомПорт3.ЗаписатьСтроку(ПерЗначение);
       Сообщить("Передано на " + ИмяПорта3 + ": " + ПерЗначение);
       
       ПерЗначение = Символ(2) + Символ(5) + Символ(3);
       КомПорт2.ЗаписатьСтроку(ПерЗначение);
       Сообщить("Передано на " + ИмяПорта2 + ": " + ПерЗначение);
               
       Если Заползло Тогда
           ПерЗначение = Символ(27) + Символ(5) + Символ(13);
           КомПорт1.ЗаписатьСтроку(ПерЗначение);
           Сообщить("Передано на " + ИмяПорта1 + ": " + ПерЗначение);
       КонецЕсли;
       
   КонецЦикла;    
   ЗакрытиеПортов();
       
КонецПроцедуры // МенюУпаковокЗапустить(Кнопка)
//**************************************************************************************************
Процедура ВнешнееСобытие(Источник, Событие, Данные)
   
   ПолЗначение = СокрЛП(Данные);
   Сообщить("Получены данные: " + ПолЗначение);
   
   ПервыСимвол = Лев(ПолЗначение,1);
   Если ПервыСимвол = "0" Тогда
       Заползло = Ложь;
       Напечатано = Ложь;
   ИначеЕсли ПервыСимвол = "1" Тогда
       Заползло = Истина;        
   ИначеЕсли ПервыСимвол = "$" Тогда
       Если Заползло Тогда
           Если не Напечатано Тогда
                               
               СпрШтрихКоды = Справочники.ШтрихкодыУпаковок13;
               НовШтрихкод = СпрШтрихКоды.СоздатьЭлемент();
               НовШтрихкод.Записать();
               Штрихкод12 = глПрефиксУпаковок + Формат(НовШтрихкод.Код,"ЧЦ=10;ЧВН=;ЧГ=0");
               НовШтрихкод.Наименование = ШтрихКод12 + глШтрихкод.КонтрСимволEAN13(ШтрихКод12);
               НовШтрихкод.Записать();
               
               КонстМасс = Перечисления.КратныеКонстанты.МассыУпаковок;
               КонстСумм = Перечисления.КратныеКонстанты.УчетныеСуммы;
               
               НовУпаковка = Упаковки.Добавить();
               НовУпаковка.НомерУпаковки = НовШтрихкод.Код;
               НовУпаковка.ШтрихкодУпаковки13 = НовШтрихкод.Ссылка;
               НовУпаковка.КолЕдиниц = КолтвоЕдиниц;
               НовУпаковка.МассаБрутто = Число(Сред(ПолЗначение,2,7));
               Если (НовУпаковка.МассаБрутто = 0) или (НовУпаковка.КолЕдиниц = 0) Тогда
                   НовУпаковка.НамотМасса = 0;
                   НовУпаковка.УпакМасса = 0;
                   НовУпаковка.ПаковМасса = 0;
                   НовУпаковка.ПеремМасса = 0;
                   НовУпаковка.МассаНетто = 0;
                   НовУпаковка.КондМасса = 0;
                   НовУпаковка.УчетСумма = 0;
               Иначе
                   НовУпаковка.НамотМасса = глБазовые.Округлить(КонстМасс,ТараНамоточная.МассаТары*НовУпаковка.КолЕдиниц,Дата);
                   НовУпаковка.УпакМасса = глБазовые.Округлить(КонстМасс,ТараУпаковочная.МассаТары*НовУпаковка.КолЕдиниц,Дата);
                   НовУпаковка.ПаковМасса = глБазовые.Округлить(КонстМасс,ТараПаковальная.МассаТары,Дата);
                   МассаНеттоУпаковки = НовУпаковка.МассаБрутто - НовУпаковка.НамотМасса - НовУпаковка.УпакМасса - НовУпаковка.ПаковМасса;
                   НовУпаковка.МассаНетто = глБазовые.Округлить(КонстМасс,МассаНеттоУпаковки,Дата);
                   НовУпаковка.КондМасса = глБазовые.Округлить(КонстМасс,НовУпаковка.МассаНетто*КоэфВлажности,Дата);
                   НовУпаковка.УчетСумма = глБазовые.Округлить(КонстСумм,НовУпаковка.КондМасса*НоменПряжи.УчетнаяЦена,Дата);
               КонецЕсли;
               
               ПодсчетИтоговыхЗначений();
               Записать(РежимЗаписиДокумента.Запись);
               
               ПерЗначение = Символ(2) + "1,1,"
                           + СтрокаПараметров (НовУпаковка.НомерУпаковки,
                                               НовУпаковка.МассаБрутто,
                                               НовУпаковка.УпакМасса + НовУпаковка.ПаковМасса,
                                               НовУпаковка.НамотМасса,
                                               НовУпаковка.МассаНетто,
                                               НовУпаковка.КондМасса)
                           + Символ(3);
               КомПорт2.ЗаписатьСтроку(ПерЗначение);
               Сообщить("Передано на " + ИмяПорта2 + ": " + ПерЗначение);
               Напечатано = Истина;
               
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   
   
КонецПроцедуры // ВнешнееСобытие(Источник, Событие, Данные)
//**************************************************************************************************
24 PALESIA
 
06.04.13
16:07
ну вобщем 3-ий порт (COM5) по стандарт схеме не срабатывает (
система на компе тоже итальянская - не смогу сменить - из-за специфики ((( вообщем полный пипец
как вариант - поставить доп.РС-ку - но это понедельника жадать - итальянцы в командировке - могут срулить - не успеем (
25 oleg_km
 
06.04.13
16:23
(24) тебе протокол обмена известен? Если текстовой можно тупо из Hyperterminal попробовать
26 PALESIA
 
06.04.13
16:34
(25) подробнее плиз. или ссылочку на инфу?
27 PALESIA
 
07.04.13
09:57
опаньки, опатулечки