К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Может ли 1С 8.2 определить на каком COM порту находится модем ?

med
0 - 28.05.2012 - 09:40
Разрабатываем возможность рассылки СМС через GSM модем
более менее приемлемое решение нашли через внешнюю библиотеку:
RS=Новый COMОБъект("MSCOMMLib.MSComm");
RS.Settings = "115200,n,8,1";
RS.CommPort=5;
RS.Handshaking = 1;
RS.RThreshold = 1;
RS.SThreshold = 1;
RS.InputLen = 0;
RS.RTSEnable = 1;
RS.InputMode = 0 ;
Если RS.PortOpen тогда
RS.PortOpen=false;
КонецЕсли;
RS.PortOpen=True;
RS.Output="ATZ"+Символ(13);
Буфер="";
Пока ((Найти(СокрЛП(Буфер),"OK")=0) И (Найти(СокрЛП(Буфер),"ERROR")=0)) Цикл
Буфер=Буфер+СокрЛП(RS.Input);
КонецЦикла;
Сообщить(Буфер);
RS.Output="AT+CMGF=0"+Символ(13);
Буфер="";
Пока ((Найти(СокрЛП(Буфер),"OK")=0) И (Найти(СокрЛП(Буфер),"ERROR")=0)) Цикл
Буфер=Буфер+СокрЛП(RS.Input);
КонецЦикла;
Сообщить(Буфер);
RS.Output="AT+CMGS=26"+Символ(13);
Буфер="";
Пока ((Найти(СокрЛП(Буфер),"OK")=0) И (Найти(СокрЛП(Буфер),"ERROR")=0))Цикл
Буфер=Буфер+СокрЛП(RS.Input);
КонецЦикла;
Сообщить(Буфер);
RS.Output="0011000B919740186559F60008170C041F04400 438043204350442"+Символ(26);

Тестовые СМС ки отправляются, но получается обработка привязана к данному системному блоку - на другом системнике ее запускаешь - уже неизвестно, какой там COM порт, надо узнавать и править...
а может 1С как как то опрашивать COM порты на предмет занятости?



med
1 - 28.05.2012 - 09:43
Еще нашли способ работать через запись/считывание:

модемЧ = Новый ЗаписьТекста("\\.\Com5",КодировкаТекста.ANSI);
Строк="ATIMEI"+Символ(13);
модемЧ.ЗаписатьСтроку(Строк);
Сообщить("Отправлена строка - "+ТекущаяДата());
модемЧ.Закрыть();
МодемЧ= Новый ЧтениеТекста();
МодемЧ.Открыть("\\.\Com5",КодировкаТекста.ANSI);
сч=0;
Буфер="";
Сообщить("Начало ожидания ответа - "+ТекущаяДата());
Пока ((Найти(СокрЛП(Буфер),"OK")=0) И (Найти(СокрЛП(Буфер),"ERROR")=0)) Цикл
Состояние(сч);
Буфер=Буфер+СокрЛП(МодемЧ.ПрочитатьСтроку());
Сообщить("Время цикла - "+ТекущаяДата());
сч=сч+1;
КонецЦикла;
Сообщить(сч);
Сообщить(Буфер);
Сообщить("Получен Ответ - "+ТекущаяДата());
Здесь всё хорошо ничего внешнего не используется, но обнаружились странные задержки по времени:
Отправлена строка - 25.05.2012 11:37:36
Начало ожидания ответа - 25.05.2012 11:37:36
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:39:15

ATIMEIManufacturer: TCT Mobile International LimitedModel: HSPA Data CardRevision: WX111000XXIMEI: 355249042491906+GCAP: +CGSM,+FCLASS,+DSManufacturer: TCT Mobile International LimitedModel: HSPA Data CardRevision: WX111000XXIMEI: 355249042491906+GCAP: +CGSM,+FCLASS,+DSOK
Получен Ответ - 25.05.2012 11:39:15
Т.е. ожидание ответа почти две минуты,
Может кто знает Из-за чего может быть такой долгий срок ответа ?
2 - 28.05.2012 - 09:57
Предлагаю вынести номер порта в константу, чтобы не править код.
Гость
3 - 28.05.2012 - 11:05
2-Ткачик > В атрибуты вызова метода...
med
4 - 28.05.2012 - 12:12
2-Ткачик > В принципе - да, это самый очевидный выход и так и сделаем если другого не найдем, просто не хотелось бы человеческий фактор совсем задействовать.3-VZ > А в атрибуты он откуда попадать будет ?
5 - 28.05.2012 - 12:13
(3) Я старый клюшечник и не знаю слов "атрибуты вызова метода"...


К списку вопросов






Copyright ©, Все права защищены