Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2016, 15:19   #1
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию ComPort Library

Здравствуйте. Работаю с библиотекой ComPort Library
Все нравиться, все хорошо, но при работе с одним из сканеров штрих кода возникла проблема.
1. Штрих код считывается частями
Решил проблему так
Код:
procedure TFmMain.SCANERCOMRxChar(Sender: TObject; Count: Integer);
  var
    Str: String;
  const
    CRLF = #$0A;
begin  
  SCANERCOM.ReadStr(Str, Count);
  G_BARCODE := G_BARCODE + Str;
  if Pos(CRLF,G_BARCODE) > 0 then
    begin
      BARCODEEdt.Text := G_BARCODE;       

      //ПРОДАЖА
        
      end;
    end;
end;
Т.е. при считывании длинного штрих кода процедура SCANERCOMRxChar пробегается несколько раз, я читаю до завершающего символа и продаю по полученному штрихкоду.
2. Во время процедуры //ПРОДАЖА мне нужно отключить прием данных со сканера, поэтому я делаю так
Код:
procedure TFmMain.SCANERCOMRxChar(Sender: TObject; Count: Integer);
  var
    Str: String;
  const
    CRLF = #$0A;
begin  
  SCANERCOM.ReadStr(Str, Count);
  G_BARCODE := G_BARCODE + Str;
  if Pos(CRLF,G_BARCODE) > 0 then
    begin
      BARCODEEdt.Text := G_BARCODE;       
        try
          COMPORT.CLOSE;          
          //ПРОДАЖА
        finally
          COMPORT.OPEN;
        end 
      end;
    end;
end;
Но во время закрытия порта повисает все приложения.
Как мне правильно закрыть порт во время проведения процедуры продажи? Помогите пожалуйста.
tarakan1983 вне форума Ответить с цитированием
Старый 21.07.2016, 16:01   #2
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

Ну попробуйте просто открыть порт и тут же закрыть. все нормально? может нужно с объектом сканер какие-то действие произвести перед закрытием порта.? а то что сканер читает не все сразу это какая-то ерунда. что значит частями, со второго раза? может символ попадает какой при чтении?
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 21.07.2016, 16:04   #3
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

или как вариант выставляйте флаг при получении полного ответа и делайте продажу. при этом сканер можно не отключать. он просто будет будет считывать и проходить мимо процедуры продажи. а когда продажа завершится , выставляйте флаг обратно
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 21.07.2016, 16:16   #4
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Цитата:
Сообщение от Gregor Посмотреть сообщение
Ну попробуйте просто открыть порт и тут же закрыть. все нормально?
Да все нормально.
Цитата:
Сообщение от Gregor Посмотреть сообщение
может нужно с объектом сканер какие-то действие произвести перед закрытием порта.?
SCANERCOM это имя компонента типа TComPort, я тоже думал, пробовал и очищать буфер и BeginUpdate EndUpdate - результат нулевой.
Цитата:
Сообщение от Gregor Посмотреть сообщение
а то что сканер читает не все сразу это какая-то ерунда. что значит частями, со второго раза? может символ попадает какой при чтении?
Никаких символов нет, я не знаю почему, но это глюк одного сканера, спрашивал на форуме штрих-м, там ребята посоветовали сделать так, как я и сделал.

Цитата:
Сообщение от Gregor Посмотреть сообщение
или как вариант выставляйте флаг при получении полного ответа и делайте продажу. при этом сканер можно не отключать. он просто будет будет считывать и проходить мимо процедуры продажи. а когда продажа завершится , выставляйте флаг обратно
Я так и делал, но библиотека все равно накапливает данные где-то у себя и потом разом их все вываливает. Например, ситуация : Через сканер пикают разливное пиво, что приводит к показу окна в модальном режиме, в котором пользователь-кассир должен ввести количество продаваемого пива, пока это окно висит я пикаю другой разливной товар, в процедуре OnRxChar ничего не происходит, но стоит мне закрыть модальное окно, процедура начинает срабатывать сразу со всем, что пикалось после показа модального окна. Надеюсь понятно объяснил
tarakan1983 вне форума Ответить с цитированием
Старый 21.07.2016, 16:32   #5
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

тогда скорее всего что-то накапливается в буфере порта и надо его очищать. у меня такое подозрение что это библиотека виновата. а попробуйте открыть блокнот или др. текстовик и отсканировать. там тоже половина кода выводится?
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 21.07.2016, 16:38   #6
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

И еще это модальное окно. Вроде как основное окно перестает принимать всяческие сообщения если открыто дочернее модальное окно. попробуйте его сделать не модальным и произвести продажу
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 21.07.2016, 16:41   #7
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Цитата:
Сообщение от Gregor Посмотреть сообщение
тогда скорее всего что-то накапливается в буфере порта и надо его очищать. у меня такое подозрение что это библиотека виновата. а попробуйте открыть блокнот или др. текстовик и отсканировать. там тоже половина кода выводится?
в блокноте не получиться, сканер работает в режиме эмуляции com, при такой настройке сканер не будет отображать данные простом тескст. редакторе. для этого его надо перевести в режим работы usb. и меня такой режим не устраивает.
tarakan1983 вне форума Ответить с цитированием
Старый 21.07.2016, 16:43   #8
Gregor
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 208
По умолчанию

а с модальным окном не пробовали?
интенсивно гуглю прежде чем задать вопрос
Gregor вне форума Ответить с цитированием
Старый 21.07.2016, 16:47   #9
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Пока нет, сейчас покупателей наплыв пройдет и начну тестировать
tarakan1983 вне форума Ответить с цитированием
Старый 21.07.2016, 16:51   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А чо за сканер? Они ж ща все HID-интерфейснутые, нахрена ком-порт?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установка comport на ХЕ IliaIT Компоненты Delphi 7 22.10.2015 16:47
Не могу принять данные с COMport Lepton Visual C++ 0 11.01.2012 19:20
ComPort fedor6124 Общие вопросы Delphi 0 28.10.2011 21:22
Отправить текст по Ethernet или ComPort Vovick Работа с сетью в Delphi 19 22.08.2007 08:57