|
Команды с 1С 8.2 на Сom Port | ☑ | ||
---|---|---|---|---|
0
AlexGS87
31.01.13
✎
13:05
|
Подскажите, синтаксис команд с 1с 8.2 на Сom Port?
Драйвер = Новый COMОбъект("MsCommLib.MsComm.1"); Драйвер.HandShaking = 1; Драйвер.InputLen = 0; //чистим буфер Драйвер.RThreshold = 1; Драйвер.NullDiscard = 1; Если Драйвер.PortOpen =1 Тогда Драйвер.PortOpen = 0; КонецЕсли; Драйвер.CommPort = 1; // COM1 Драйвер.Settings = "19200,N,8,1"; Драйвер.PortOpen=1; Драйвер.InputMode = 0; Здесь Драйвер.Output= ???? - как записать команду? |
|||
1
mikecool
31.01.13
✎
13:06
|
помню еще в 7.7 формировал текстовый файл и тупо командой системы copy text con
|
|||
2
mzelensky
31.01.13
✎
13:11
|
(0) на ИС глянь - видел там пример.
|
|||
3
AlexGS87
31.01.13
✎
13:21
|
Спасибо, посмотрю.
|
|||
4
AlexGS87
31.01.13
✎
13:21
|
Ещё варианты?
|
|||
5
alexei366
31.01.13
✎
13:36
|
Тебе для чего (подозреваю для gsm модема)?
|
|||
6
AlexGS87
31.01.13
✎
13:43
|
Задача состоит в том , чтобы организовать передачу команд на com port напрямую на ЭККА 500.02МE
|
|||
7
alexei366
31.01.13
✎
13:48
|
Ну тогда мануал тебе по устройству надо искать, ещё посоветую установить putty , чтоб самому команды ручками повводить посмотреть. Я тренировался с gsm модемами, там команда а в конце её символ(13) обычно. И там ещё такая особенность в модемах я заметил что после выполнения команды необходимо делать некую задержку, а то не всегда устройство бывает готово к приему новой команды.
|
|||
8
AlexGS87
31.01.13
✎
13:53
|
спасибо, с мануалами сейчас работаю. Пример кода не подскажеш со своего опыта с gsm модемом.
|
|||
9
alexei366
31.01.13
✎
14:20
|
Ты ещё тут?
|
|||
10
AlexGS87
31.01.13
✎
15:33
|
Да
|
|||
11
AlexGS87
31.01.13
✎
15:49
|
Пишу код:
Драйвер = Новый COMОбъект("MsCommLib.MsComm.1"); Драйвер.Output = Символ(1055)//Здесь выдает " помилка при встановленны атрибуту контексту (OUTPUT)" подскажите в чем пробелма? |
|||
12
Кирпич
31.01.13
✎
15:55
|
"помилка при встановленны атрибуту контексту" на румынском чтоли?
|
|||
13
AlexGS87
31.01.13
✎
15:58
|
Как устранить не подскажете?
|
|||
14
Vladal
31.01.13
✎
16:30
|
(13) У этой библиотеки точно есть метод Output? Еще он может быть только для чтения, как представление вывода (ответа) устройства, подключенного к порту.
|
|||
15
AlexGS87
31.01.13
✎
16:38
|
Этот метод есть.
|
|||
16
Kreont
31.01.13
✎
16:43
|
всередину поставь
Драйвер.PortOpen = 1; хотя в гугле полно описаний по методам, берешь от VB и почти прям так и вставляешь в код 1С :) |
|||
17
AlexGS87
31.01.13
✎
16:44
|
Посмотрите пожалуйста на первое сообщение, там весь код, порт я открываю
|
|||
18
Kreont
31.01.13
✎
16:58
|
не вижу :)
Там пишет: Если Драйвер.PortOpen =1 Тогда Драйвер.PortOpen = 0; КонецЕсли; То есть, если порт открылся успешно, то его сразу закрываешь? |
|||
19
AlexGS87
31.01.13
✎
17:02
|
Дальше я открываю опять
Драйвер.Settings = "19200,N,8,1"; Драйвер.PortOpen=1; |
|||
20
AlexGS87
31.01.13
✎
17:05
|
В отладчике в методе output изначально пишет: "Ошибка чтения значения", тоесть ничего нельзя передать на порт. Как єто исправить?
|
|||
21
Kreont
31.01.13
✎
17:12
|
(19) а ну да сори, хотя я не уверен что в 1с-ку вернется правильно статус от Если Драйвер.PortOpen =1 Тогда, это ж оле там ложь может быть равно 0, и истина все другое.
Для теста напиши минимум кода, без проверок и т.п. И без отладчика запускай, это ж оле да еще и коппорт может и отваливаться по ходу, лучше в сообщить() пиши что надо :) Меня сам метод заинтересовал через MsCommLib.MsComm, под 7-ку когда то писал на комп порт матричного принтера, но через dynwrap. |
|||
22
Kreont
31.01.13
✎
17:13
|
Например так сработает?:
Драйвер = Новый COMОбъект("MsCommLib.MsComm.1"); Драйвер.PortOpen =1; Драйвер.Output = "1"; Драйвер.PortOpen =0; |
|||
23
Kreont
31.01.13
✎
17:14
|
(6) этот кассовый уже с веб модулем передачи я так вижу, и как впечатления от онлайн подачи отчетов? :)
|
|||
24
AlexGS87
31.01.13
✎
17:18
|
Тоже самое.
|
|||
25
AlexGS87
31.01.13
✎
17:20
|
уже не рад , второй день парюсь с этой проблемой. Может есть какойто другой способ подавать команды на сом порт?
|
|||
26
Kreont
31.01.13
✎
17:22
|
Есть: (1)
|
|||
27
AlexGS87
31.01.13
✎
17:29
|
Примерчик работы с dynwrap не покажете?
|
|||
28
AlexGS87
31.01.13
✎
17:53
|
Проблема не решена
Драйвер.Output не поддается)) |
|||
29
oleg_km
31.01.13
✎
18:13
|
(29) А с гипертерминала нормально работает? мы уже 3 год пользуем этот компонент для ШК и СМС. На СМС и прием и отправки и все нормально и читаем данные с КОМ порта и пишем
|
|||
30
Kreont
31.01.13
✎
18:24
|
(27)
Пробую вот выдрать из обработки из 7-ки, но получается набор какой то :( массив - содаржал коды управляющие для матричного принтера: Массив[1] = 27; Массив[2] = 64; Массив[3] = 27; Массив[4] = 40; Массив[5] = 116; Массив[6] = 03; Массив[7] = 00; Массив[8] = 00; Массив[9] = 49; Массив[10] = 00; // .... и т.д. Wrapper = CreateObject("DynamicWrapperX"); Wrapper.Register("winspool.drv", "OpenPrinterA", "i=sll","r=l"); Wrapper.Register("winspool.drv", "AddJobA", "i=llplp","r=l"); Wrapper.Register("winspool.drv", "ScheduleJob","i=ll","r=l"); Wrapper.Register("winspool.drv", "ClosePrinter","i=l","r=l"); sFPrinterHandle = Wrapper.Space(256); FPrinterHandle = Wrapper.StrPtr(sFPrinterHandle); Принтер = СокрЛП(НазваПринтера3); OpenPrinter_ = Wrapper.OpenPrinterA(Принтер,FPrinterHandle,0); _FPrinterHandle_ = Wrapper.NumGet(FPrinterHandle); cbNeeded = Wrapper.Space(256); pcbNeeded = Wrapper.StrPtr(cbNeeded); FJOB = Wrapper.Space(256); pFJOB = Wrapper.StrPtr(FJOB); AddJob_ = Wrapper.AddJobA(_FPrinterHandle_,1,FJOB,512,pcbNeeded); AddJob_JobId = Wrapper.NumGet(pFJOB,4,"n"); AddJob_Path = СокрЛП(Wrapper.StrGet(Wrapper.NumGet(pFJOB,0,"l"),"s")); GENERIC_READ = 2147483648; GENERIC_WRITE = 1073741824; FILE_SHARE_READ = 1; FILE_SHARE_WRITE = 2; CREATE_NEW = 1; FILE_ATTRIBUTE_NORMAL = 128; slotName = AddJob_Path; Wrapper.Register("KERNEL32.DLL", "CreateFile", "i=sllllll", "r=l"); Wrapper.Register("KERNEL32.DLL", "WriteFile", "i=hllll", "r=l"); Wrapper.Register("KERNEL32.DLL", "CloseHandle", "i=h", "r=l"); hFile = Wrapper.CreateFile(СтрЗаменить(СокрЛП(slotName),"\","\"), GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); _hFile_ = hFile; cbWritten = " "; pcbWritten = Wrapper.StrPtr(cbWritten); MessageText = Wrapper.Space(45); pMessageText = Wrapper.StrPtr(MessageText)+4; //Для чого зміщення на +4, тому що стрічка виділяється в форматі BSTR(UNICODE), де перших 4 байта є довжина її Адрес = pMessageText; Для і = 1 по Разм(Массив) Цикл Адрес = Wrapper.NumPut(Массив[і],pMessageText,і-1,"b"); КонецЦикла; BytesBeSend = Разм(Массив); fResult0 = Wrapper.WriteFile(_hFile_, pMessageText, BytesBeSend, pcbWritten, 0); Wrapper.CloseHandle(_hFile_); ScheduleJob_ = Wrapper.ScheduleJob(_FPrinterHandle_,AddJob_JobId); ClosePrinter_ = Wrapper.ClosePrinter(_FPrinterHandle_); |
|||
31
AlexGS87
31.01.13
✎
18:47
|
Спасибо, посмотрю.
|
|||
32
AlexGS87
31.01.13
✎
18:48
|
Может кто знает какие ёще библиотеки можно использовать для работы с сом портами?
|
|||
33
alexei366
31.01.13
✎
20:35
|
ты в putty то пробывал?
|
|||
34
Ork
31.01.13
✎
20:42
|
(0) Есть два момента между собой не связанных, но напрямую относящихся к вашему вопросу :
1. Писать из 1С в ком-порт можно так же как вы делаете. Но! 1С все строки имеет ввиду и кодировке Юникод. А порт работает с 8-ми битной кодировкой. Возможности управлять строкама в кодировке отличной от Юникод в 1С пока нет. Кроме как через внешние файлы. 2. Для работы с миниками вам работа с ком-портом напрямую и на.не.на. Для этого есть вполне штатные ОЛЕ серверы. Вот с их помощью и работайте. |
|||
35
Ork
31.01.13
✎
21:09
|
(34) Все здесь : http://unisystem.ua/ru/content/poddyerzhka.html + Кассовые аппараты / Кассовый аппарат MINI-500.02
|
|||
36
oleg_km
31.01.13
✎
21:10
|
(34) Это делает ActiveX, он перед отправкой в порт перекодирует UTF - ANSI
|
|||
37
Ork
31.01.13
✎
21:13
|
(36) Какой АктивХ это может делать? Имеется ввиду получить строку, переконвертировать и отдать ее в порт?
|
|||
38
oleg_km
31.01.13
✎
22:23
|
(37) Сам АктивИкс внутри себя берет BSTR и превращает ее в char* потом засылает в порт и наоброт
|
|||
39
Ork
31.01.13
✎
22:24
|
(38) Готовый есть? Хочу ссылку.
|
|||
40
AlexGS87
01.02.13
✎
01:07
|
Спасибо, за ответы. На сайте производителя были скачаны оле сервер в первую очередь, но не видит через него мой кассовый аппарт.
|
|||
41
oleg_km
01.02.13
✎
09:04
|
(39) Бляха, да про него уже 40 постов написано: MsCommLib.MsComm.1 (11) входит в поставку Microsoft Studio 2003 как приложение к VB. Вот описание:
Output Property Writes a stream of data to the transmit buffer. This property is not available at design time and is write-only at run time. Syntax object.Output [ = value ] The Output property syntax has these parts: Part Description object Anobject expression that evaluates to an object in the Applies To list. value A string of characters to write to the transmit buffer. Remarks The Output property can transmit text data or binary data. To send text data using the Output property, you must specify a Variant that contains a string. To send binary data, you must pass a Variant which contains a byte array to the Output property. Normally, if you are sending an ANSI string to an application, you can send it as text data. If you have data that contains embedded control characters, Null characters, etc., then you will want to pass it as binary data. Data Type Variant Если хотим загнать в прот текст пишем просто текст, не забываем что АктивХ его преобразует в char*. Поэтому в вашем случае: Драйвер.Output = Символ(1055) нужно наверное использовать COMSafeArray |
|||
42
AlexGS87
01.02.13
✎
10:35
|
Примерчик с использованием COMSafeArray можно для посилки текста на порт.
|
|||
43
oleg_km
01.02.13
✎
11:06
|
(42) У меня нет устройств с двоичным обменом, что-то вроде:
мс = Новый Массив; мс.добавить(1); мс.Добавить(2); мс1 = Новый COMSafeArray(мс, "UI_1"); Драйвер.Output = мс1; |
|||
44
oleg_km
01.02.13
✎
11:08
|
тип неправильно указал: VT_I1
|
|||
45
AlexGS87
01.02.13
✎
11:14
|
Сейчас попробую
|
|||
46
AlexGS87
01.02.13
✎
15:32
|
Та самая ошибка.
|
|||
47
oleg_km
01.02.13
✎
15:59
|
(20) Ошибка чтения значения
Это не ошибка, это означает, что у этого свойства нет метода get, а есть только put. Т.е. его нельзя прочитать, только записать что и логично. Поэтому не нужно смотреть, что в отладчике написано в этом свойстве. Просто присваивайте ему нужную информацию, она улетит в КОМ-порт. После присвоения появляется какая-то ошибка? Как вы поняли что ничего не работает. Есть сниферы КОМ-порта (только не спрашивайте какие и где, давно уже не пользовался ничего не подскажу). Посмотрите что там. |
|||
48
AlexGS87
01.02.13
✎
16:18
|
Присваиваю нужную информацию и в самом предприятии вылетает, таже ошибка
|
|||
49
oleg_km
01.02.13
✎
16:21
|
Тогда не знаю, порт при этом нормально открыт. С такими проблемами не сталкивался
|
|||
50
AlexGS87
01.02.13
✎
16:23
|
Думаю проблема в самом устройстве
|
|||
51
AlexGS87
01.02.13
✎
16:24
|
Буду смотреть, пробовать разные варианты.
|
|||
52
AlexGS87
01.02.13
✎
18:49
|
Всем спасибо за советы.
|
|||
53
oleg_km
01.02.13
✎
18:56
|
(52) Это значит все получилось или пятница дануегонах
|
|||
54
AlexGS87
05.02.13
✎
16:29
|
Скорее 2 вариант))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |