На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: ElcnU
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Symbol MK500 + С#, Программа "Price Checker"
    Собрался написать программку проверки цены для Symbol MK500 на Windows CE 5.0
    Имеем: Visual Studio 2008, EMDK for .NET v2.9 от Motorola и почти никакого опыта (SimpleScan), но огромное желание
    В EMDK есть примеры для работы со встроенным сканером штрих-кодов. Казалось бы просто, надо вычленить нужную часть из примера и вставить в свой проект... Пока стоит вопрос - форма, на ней TextBox. Запускаем программу, курсор на textBox, сканер активирован. Подносим бар-код, сканер его сканирует.
    Никак не могу этого добиться - сканер не активируется. Прошу помощи у знающих людей.

    P.S. Конечная задача - сканируем товар, если он находится в локальном текстовом файле с перечнем бар-кодов/наименований/цен, то выводим на экран цену, название товара и сам бар-код.
      Цитата Pljushevij @
      В EMDK есть примеры для работы со встроенным сканером штрих-кодов.
      Цитата Pljushevij @
      сканер не активируется
      Цитата Pljushevij @
      Visual Studio 2008
      Цитата Pljushevij @
      Windows CE 5.0

      Похоже, нужно разобраться с удаленной отладкой и отладчиком посмотреть ошибку, возвращаемую софтом.
      Обычно, либо работает, либо нет. Если нет - есть причина, она отображена в коде ошибки, которую возвращает функция.
        Возможно я просто не те функции активации лазера использую...
        Не могу тут выложить проекты, правила форума не позволяют (пишет, что превышен размер), поэтому вот ссылка.
          Pljushevij, у Вас в примере есть файлик API.cs.
          Подключите его к своему проекту. просмотрите его.
          Сканер активируется функцией
          ExpandedWrap disabled
            bool InitReader()

          В примере делают так:
          ExpandedWrap disabled
            // Initialize the ScanSampleAPI reference.
            this.myScanSampleAPI = new API(); // Создают экземпляр
            // Команда инициализации ридера  
            this.isReaderInitiated = this.myScanSampleAPI.InitReader();
            ...
            // Если все успешно цепляют хендлер - функция, которая будет дергаться сканером
            // Attach a status natification handler.
            this.myStatusNotifyHandler = new EventHandler(myReader_StatusNotify);
            myScanSampleAPI.AttachStatusNotify(myStatusNotifyHandler);

          У Вас в коде я не заметил работу с апи ридера.

          И еще кусочек:
          ExpandedWrap disabled
            // Проверяют, инициализирован ли ридер
            //If the reader has been initialized
            if (isReaderInitiated)
            {
              // Start a read operation & attach a handler.
              myScanSampleAPI.StartRead(false);
              this.myReadNotifyHandler = new EventHandler(myReader_ReadNotify);
              myScanSampleAPI.AttachReadNotify(myReadNotifyHandler);
            }


          Где myReader_StatusNotify и myReader_ReadNotify - функции-обработчики соответствующих событий.

          Пробуйте, спрашивайте что именно не работает., желательно кодом.. :)
          Сообщение отредактировано: simsergey -
            Сорри. Я не тот свой пример проекта приложил...
            Открываю проект, делаю дебаг, форма на MK500 запускается. Сканер не активируется.
            Добавляю в проект API.cs, делаю дебаг, вываливается куча ошибок...
            Вот... пример с добавленым API.cs
            Сообщение отредактировано: Pljushevij -
              А сам пример работает? Может проще на основе него сделать? Просто убрать что не нужно..
                Сам пример от Motorola работает, только там хлама много не нужного и мне не хватает мозгов вычистить не нужное...
                Сообщение отредактировано: Pljushevij -
                  В таком случае стоит все же разобраться с тем кодом. А хлама там не много, увы.
                  Там минимальный набор функций для работы механизма скана. Пример очень удачный.
                  Я просто не могу выделить сам скилет, он без примера использования будет не понятен. :-?
                  А пример там и так есть...
                  В файлике MainForm.cs все удачно написано...

                  Не ленитесь, уделите ему пару часиков чтобы откомментировать. Все пойдет :)
                  Я раньше лишнее просто убирал, строчку за строчкой, объект, функцию.
                    Посидел - кое что вышло. Поставил на форму дополнительно текстбокс и кнопку. Так же добавил таймер. Кнопка - что бы всегда можно было выйти из программы. Текстбокс - активен при старте, в него надо что бы сканировалось. Таймер - лазер запускается, но на 5 сек, а таймер его активирует повторно. Теперь задача, как мне сосканированные данные получить в текстбокс? Сейчас сканер считывает в никуда, т.е. пикает что прочитал... Код таймера:

                    private void timer1_Tick(object sender, EventArgs e)
                    {
                    this.textBox1.Focus();

                    this.myScanSampleAPI.StopRead();
                    this.myScanSampleAPI.StartRead(true);
                    this.timer1.Interval = 5500;
                    }

                    Проект...
                      Опять же, писал выше:
                      ExpandedWrap disabled
                        // Проверяют, инициализирован ли ридер
                        if (isReaderInitiated)
                        {
                          // Начало операции чтения
                          myScanSampleAPI.StartRead(false);
                         
                          // Подключение функции обработки события чтения
                          this.myReadNotifyHandler = new EventHandler(myReader_ReadNotify);
                          myScanSampleAPI.AttachReadNotify(myReadNotifyHandler);
                        }

                      Обработчик события чтения:
                      ExpandedWrap disabled
                        private void myReader_ReadNotify(object Sender, EventArgs e)

                      Я так понимаю, судя по коду обработчика, он вызывается на каждый считанный сканером символ.
                      По коду можно видеть как собираются данные функцией
                      ExpandedWrap disabled
                        HandleContinuousData(TheReaderData);
                      и в конце, когда считывание закончено - вызвается завершающая сбор данных функция
                      ExpandedWrap disabled
                        HandleData(TheReaderData);

                      Разберите код myReader_ReadNotify.

                      И да, во время считывания могут происходить ошибки. Плохой штрих код, убрали штрих-код от сканера в моменты считывания и т.д.
                      Эти ошибки нужно тоже обрабатывать, иначе будет не пойми что. Для этого обработчики так написаны.
                      Сообщение отредактировано: simsergey -
                        Учитывая, что я не программер, наверное можно поступить проще... :)
                        При старте программы (пример от Motorola) запускается listView с выбором разных функций. Из них меня интересует SCAN CONTINUOUS. Как сделать так, что бы SCAN CONTINUOUS опция "выбралась" сама, т.е. при старте попадаем сразу в SCAN CONTINUOUS?
                          Я предполагаю, что нужно добавить две строчки в конец функции MainForm.
                          ExpandedWrap disabled
                            public MainForm()
                            {
                              ....
                             
                              Cursor.Current = savedCursor;
                             
                              // Вот эти строчки
                              unloadMainListView();
                              loadScanContinuousDataListView();
                            }


                          Добавлено
                          Цитата Pljushevij @
                          Учитывая, что я не программер

                          Вы не поверите, я C# вообще не знаю и не пишу на нем.
                          Сообщение отредактировано: simsergey -
                            Добавил, теперь при старте Debug в конце вываливается ошибка:
                            user posted image

                            Добавлено
                            Кхе...
                            Где выскочила ошибка, туда и вставил:

                            private void loadMainListView()
                            {
                            currentListView = ROOT;

                            //Add column headers
                            this.listViewMain.Columns.Add(this.numberColumn);
                            this.listViewMain.Columns.Add(this.itemColumn);
                            this.listViewMain.Columns.Add(this.nameColumn);
                            this.loadMainListViewItems();

                            setListViewColumnWidth();

                            unloadMainListView();
                            loadScanContinuousDataListView();

                            }

                            Всё взлетело и сразу в нужную форму! Мучаю дальше :)
                              Теперь такой вопрос - надо организовать поиск по EXCEL файлу. Для этого сначала надо добавить в референции что-то от Microsoft как я понимаю? Нашёл инфу на Microsoft сайте, что все .NET компоненты есть в инсталяции самого офиса, правда там разговор про .NET Framework 4... Да же офис 2010 переставил, компоненты .NET 2.0 и просто .NET видел были при инсталяции. Но в Visual Studion 2008 что-то ничего не появилось:

                              user posted image

                              Может что-то отдельно надо скачать? Был такой опыт?
                              Сообщение отредактировано: Pljushevij -
                                Приходилось экспортировать данные в эксель.
                                На сколько мне известно, с файлом работает сам Excel, Вы лишь из своей программы командуете что ему делать, говоря простыми словами.
                                Поиск по Excel файлу нужно делать из программы на устройстве? Тогда офис должен стоять на устройстве (я смутно себе представляю сие безумие :facepalm: ).
                                Это можно сделать в связке с компьютером. Т.е. офис на ПК и есть Ваша программа на ПК., с этой программой связывается программа на устройстве.
                                Это имеет смысл лишь в том случае, если для обработки файлика нужен именно эксель (формулы, макросы и т.д.).
                                Если это просто табличка с товаром, база - можно просто сохранить файлик в .cvs, в файлике будут в качестве разделителей (столбцов) запятые. Это можно уже читать на устройстве.

                                Устройство будет жутко долго ковыряться в большом файлике. А наименований у Вас много, я предполагаю.

                                Если делать по нормальному - делаете MSSQL сервер, в нем таблицы.
                                Из программы на устройстве просто подключаетесь к SQL серверу, формируете запрос и отображаете данные.
                                Программу для наполнения и редактирования базы на ПК можно сделать с помощью Microsoft LigthSwitch, в визуальном режиме, без знаний программирования.
                                С клиентом на терминале сбора данных придется попотеть.

                                Как-то так.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script Execution time: 0,1338 ]   [ 18 queries used ]   [ Generated: 19.11.19, 00:59 GMT ]