24.07.2004, 15:02 | #21 |
Участник
|
Цитата:
2 Alks
Немного переформулирую вопрос: Как подключить COM сервер в Axapta и использовать его source интерфейс? Код обработчика события на X++ я не нашел. |
|
19.08.2004, 09:23 | #22 |
Участник
|
Здравствуйте.
Скажите, а какую информацию посылает сканер штрих-кодов на COM-порт. Это просто набор чисел, соответствующий коду, или есть какие-нибудь специальные стоп-флаги? Может кто знает что-нибудь по этому поводу ? Я реализовал приведенную в этой теме схему (используя ActiveX), теперь хочу протестировать свою разработку, но сканера под рукой нет |
|
19.08.2004, 09:45 | #23 |
Участник
|
// глюки связи
|
|
19.08.2004, 09:50 | #24 |
Участник
|
Цитата:
Скажите, а какую информацию посылает сканер штрих-кодов на COM-порт.
Цитата:
Я реализовал приведенную в этой теме схему (используя ActiveX), теперь хочу протестировать свою разработку, но сканера под рукой нет
|
|
19.08.2004, 10:14 | #25 |
Модератор
|
На самом деле, любой сканер штрих-кода можно настроить. И префикс, и суффикс. И часть данные можно передавать. И еще много чего... Но стандарт - строчка символов (те, что обычно подписаны под штрих-кодом: вдруг сканер не возьмет и оператору придеться вводить его вручную) + CR (0x0D) (или LF+CR (0x0A 0x0D)) - тоже можно настроить.
с Уважением, Георгий |
|
19.08.2004, 10:34 | #26 |
Участник
|
Цитата:
какую именно схему? с call-back ф-ей из отдельного потока? [/B]
Взял ActiveX-компоненту (NetComm) вставил её на форму. Добавил обработчик события OnComm. В обработчике получаю данные с com-порта. Пару слов о том как тестировал все это дело. Взял прогу Virtual Serial Port Driver - это прога создает два виртуальных com-порта, соединенных нуль-модемом. Создал два порта COM2 и COM3. Написал на сях прогу, которая пишет что-то в COM2. Из Аксапты обрабатываю то, что приходит на COM3. Вроде все работает нормально. Что посылаю на COM2 то и получаю с COM3. Цитата:
На самом деле, любой сканер штрих-кода можно настроить. И префикс, и суффикс. И часть данные можно передавать. И еще много чего... Но стандарт - строчка символов (те, что обычно подписаны под штрих-кодом: вдруг сканер не возьмет и оператору придеться вводить его вручную) + CR (0x0D) (или LF+CR (0x0A 0x0D)) - тоже можно настроить.
с Уважением, Георгий |
|
20.08.2004, 08:07 | #27 |
Участник
|
у меня вот еще вопрос какой возник.
я вообще первый раз столкнулся с программированием com-порта. и так сказать опытным путем вроде вычислил способ извлечения полученных данных. при получении информации на com-порт ActiveX-компонента NetComm (кстати, как я понял - она полный аналог MSComm) генерирует события в следующем порядке: comEvDSR (изменение в Data Set Ready. DSR=true) потом одно или несколько событий: comEvReceive (здесь все также DSR=true) а после них опять: comEvDSR (DSR=false). Так вот, во время первого события comEvDSR и при каждом comEvReceive, я считываю данные, которые находятся в буфере приемки ActiveX'а. После того, как отловлено второе событие comEvDSR считываение данных заканчиваю, и то, что собрал в предыдущих событиях, объявляю результатом. Вроде бы все работает нормально, но иногда проскакивает следующий глюк: Обычно, когда срабатывает второе событие comEvDSR, буфер ActiveX с данными пуст. Но, иногда (я не могу понять закономерность) там оказываются данные... :-/ Вообщем, что я не правильно делаю? Может не учитываю какую-нибудь особенность? PS. Если знаете где сколь-нибудь толково описано как работать с com-портом, дайте пожалуйста ссылочку. |
|
20.08.2004, 09:17 | #28 |
Участник
|
Цитата:
Изначально опубликовано George Nordic
На самом деле, любой сканер штрих-кода можно настроить. И префикс, и суффикс. И часть данные можно передавать. И еще много чего... Но стандарт - строчка символов (те, что обычно подписаны под штрих-кодом: вдруг сканер не возьмет и оператору придеться вводить его вручную) + CR (0x0D) (или LF+CR (0x0A 0x0D)) - тоже можно настроить. с Уважением, Георгий Это не так только для сканнеров, вставляемых в разьем клавиатуры - там данные передаются (по определению) as is. |
|
20.08.2004, 09:29 | #29 |
Участник
|
Интересно, если протокол у разных сканеров отличается, тогда выходит что невозможно написать универсальное решение.
Тем не менее, например, АТОЛ предлагает универсальный драйвер для сканера штрих-кодов (и не только) (описание) Платный только к сожалению. Работает с аксаптой, события все отлавливает, только прочитанные данные не читает, говорит ключ вставьте |
|
20.08.2004, 10:31 | #30 |
Модератор
|
Цитата:
Изначально опубликовано Alks
А вот протокол по которому эти данные передаются в копьютер почти наверняка изобилует дополнительными двоичными или текстовыми заголовками команд / терминаторами и т.п. С Уважением, Георгий |
|
20.08.2004, 11:48 | #31 |
Участник
|
Цитата:
Изначально опубликовано George Nordic
Абсолютно неверно! Нет буду спорить с тем что скорее всего один из этих протоколов "вырожден" в простое посылание сканнером отсканированных штрих-кодов AS IS с каким нибудь символом-разделителем, но меня такой вариант не привлекает хотя бы, потому что: Цитата:
Попробуйте не втыкать его в сом-порт - думаете, он вам пропищит, что данные не дошли?
для справки: LS2208 поддерживает следующие виды протоколов общения с хостом: STANDAD RS-232 ICL RS-232 NIXDORF RS-232 MODE A NIXDORF RS-232 MODE B FUJITSU RS-232 OPOS/JPOS |
|
20.08.2004, 12:17 | #32 |
Участник
|
Вот ради любопытства потестил этот самый LS2208 в некоторых режимах:
NORMAL: просто посылает штрих-код AS IS не без постфиксов и префиксов (т.е. настраиваем их вручную) ICL: непосредственно после сканирования ничего не посылает в ком-порт, ждет 10 секунд и не дождавшись подтверждения (т.к. я не знаю чем подтверждать ) недовольно пищит и сбрасывается NIXDORF MODE A: предваряет сосканированное префиксом штрих-кода и дополняет сзади переводом строки NIXDORF MODE B: после сканирования ничего не послал в ком-порт и... отключился навечно, в бесконечном цикле ожидая какой то команды от хоста. пришлось перегрузить сканер FUJITSU: выводит штрих-код AS IS дополняя сзади переводом строки OPOS/JPOS: в общем действует как NORMAL, но после сканирования отключается как NIXDORF MODE B |
|
20.08.2004, 12:51 | #33 |
Модератор
|
Ну, батенька, на то он и Symbol! Конечно, сканер за несколько сотен баксов будет пищать (хотя попробуйте настроить его на Rs-232) - он поведет себя как обычный сканер... (за 40 баков)
Остальные "протоколы" - это типы кассовых терминалов, к которому они цепляются... Да, согласен, бывают сканера, что ждут DSR или типа того... бывает, матери ASUS вешались после включения сканера, т.к. у них на 9 ноге был высокий уровень.. я еще очень много примеров привести могу Но, чаще всего, это тоже программно отключается. Иначе бы тот же Symbol не смог бы работать с обычной терминалкой - все ждал бы какого-нибудь таинственного ответа Удачи! Георгий. |
|
20.08.2004, 13:03 | #34 |
Участник
|
George, самое интересное что я перестал понимать о чём именно мы с вами спорим. Ведь говорим на самом деле одно и то же с самого начала. Мои изначальные слова "Это зависит от модели сканнера штрих-кодов и от режима в котором он работает / как он запрограммирован. ". Может быть я погорячился сказав что общего формата не существует - но опять же не факт что всё множество произведенных сканнеров в мире все умеют работать в том же "NORMAL" режиме.
|
|
20.08.2004, 13:20 | #35 |
Модератор
|
Согласен! Хотя, по идее, должны
Что-то мы, действительно, увлеклись спором, хотя согласны практически во всем Я аж изначальную тему забыл Да, Alks, а не подилитесь ли кодиком, как Вам удалось подключить сканер к Axapte? На будущее, для следующих так сказать поколений С Уважением, Георгий. |
|
20.08.2004, 13:39 | #36 |
Участник
|
Цитата:
Изначально опубликовано George Nordic
Согласен! Хотя, по идее, должны Что-то мы, действительно, увлеклись спором, хотя согласны практически во всем Я аж изначальную тему забыл Да, Alks, а не подилитесь ли кодиком, как Вам удалось подключить сканер к Axapte? На будущее, для следующих так сказать поколений С Уважением, Георгий. PHP код:
PHP код:
метод setTimeOut() активирует периодический запуск еще одного нового метода в Application: PHP код:
PHP код:
WorkplaceParameters.BarcodeScannerExists == NoYes::Yes думаю очевидно в свете вышесказанного. В методе checkDevice пользуюсь тем свойством LS2208 сканнера что он отключается после успешного сканирования - по этому признаку извлекаю новые данные и реактивирую сканнер. Далее по замечательному совету полученному из этого форума использую infolog.parmLastActivatedForm() для получения последней активированной формы и через TreeNode ищу есть ли у неё метод ActivateBarcode, который и вызываю. Ф-я removeLRSpaces описана мной в одном топике здесь - удаляет пробелы слева и справа на всякий случай. |
|
20.08.2004, 13:52 | #37 |
Участник
|
Хм.. интересная реализация.
А чем плох принцип помещения на форму, где необходим сканер, соответствующего ActiveX'а ? |
|
20.08.2004, 13:55 | #38 |
Участник
|
Ах да, забыл - я не обращаюсь непосредственно к OPOS-драйверу (хотя по идее должен мочь!), а написал на Delphi прослойку между ним и аксаптой в виде еще одного COM-объекта "AxaptaOposScannerLib.AxaptaOposScanner". Дело в том что при попытке обратится к методам OPOS-драйвера из самой аксапты вылезала непонятная совершенно ошибка, которая исчезла когда я "обернул" его в свой COM-объект (причём не сразу!). Впрочем это несущественно.
|
|
20.08.2004, 14:02 | #39 |
Участник
|
Цитата:
Изначально опубликовано Sirius
Хм.. интересная реализация. А чем плох принцип помещения на форму, где необходим сканер, соответствующего ActiveX'а ? 1. Обработка событий от сканнера осуществляется ЦЕНТРАЛИЗОВАННО из одного места через класс Application в связке BarcodeScanner. 2. Данные от сканнера поступают на последнюю открытую форму. Представьте что произойдет, если у вас откроются 2 формы с 2-мя активиксами? Кто из них перехватит управление? Получится вы не сможете работать более чем в одной форме со сканером. То же самое если таймер будет стоять в каждой форме, где нужны данные от сканера - какая то из них непонятно какая "залочит" его. Поэтому лучше когда цикл опроса сканнера находится в одном месте. Возможно реально создать ActiveX тоже глобальным экземпляром, не помещая его на конкретные формы? Если да, то такой вариант преимущественнее, но я лично не знаю можно ли динамически в рантайме связать его event-ы с кодом на X++. |
|
20.08.2004, 14:14 | #40 |
Участник
|
некоторве размышления насчет открытия двух форм.
на самом деле одновременно держать несколько activex'ов, которые ждут событий от ком-порта вообще не получается. т.к. порт одновременно может открыть только один activex и соответсвенно одна форма получит данные от сканера. таким образом нужно чтобы форма закрывала порт, когда она становится неактивной. |
|
|
Похожие темы | ||||
Тема | Ответов | |||
«Обрезание» длинных штрих-кодов | 7 | |||
Подвисает сканер штрих-кодов | 0 | |||
AX 4.0 + сканеры штрих кодов | 11 | |||
Еще раз про сканеры штрих кодов | 14 | |||
Нужен совет по сканеру штрих-кодов | 5 |
|