Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.19;
Скачать: CL | DM;

Вниз

Сканер штрих-кодов и com-порт   Найти похожие ветки 

 
Woland USSR   (2006-01-20 09:01) [0]

Добрый день. Кто-нибудь сталкивался с работой сканера штрих кодов? Сканер metrologic MS5100 Eclipse или любой другой аналогичный. Com-портовый.
Проблема такая: в 30-40% случаев считывает штрих-код в 2 посылки. Т.е. в порт приодит начало кода и второй посылкой конец кода+0D0A. Работаю с компонентой ComportDriverThread на дельфях разумеется. Может конечно компонента глючит.
Программно я это победил, конечно, но все равно вопрос остается. Т.к. этот сканер под 1С, работает нормально.
Вот простой тестовый пример:

procedure TForm1.PortReceiveData(Sender: TObject);
var s:string;
begin
Port.ReadString(s);
if Pos(#13#10,s)=0 then
   begin
   ss:=ss+s;
   flag:=true;
   end
else
   begin
   if flag then
      begin
      s:=ss+s;
      ss:="";
      flag:=false;
      end;
   end;

Edit1.Text:=s;
inc(i);
Label1.Caption:=IntToStr(i);
end;

Так конечно все нормально работает.
В чем может быть проблема и как с ней бороться?
Настройки сканера из мануала по умолчанию. 9600, 8Bits, 1StopBits и т.д.


 
sniknik ©   (2006-01-20 09:28) [1]

маленький таймаут стоит, компоненты не ориентируются на определенные символы (#13#10) а на время между приходом символов, если больше посылка закончена.

может не у всех так (специализированный можно и на символы написать, но не все сканера(настройки) его посылают), но с тем с чем сталкивался так было, только у нас наоборот в 1С "разрывало" причем у какогото конкретного типа сканера, специально под него компонент переделывали (для 1С это COM обьект), именно увеличением таймаута победили. но нам проще у нас драйвер по работе с ком портом написан собственный, там все можно исправить, а у тебя посмотри нет там чегото что за таймауты отвечает (параметр)?
возможно, можно было бы и настройкой сканера "поборотся", но нам как раз лучше один раз драйвер поправить чем для всех сканеров предпродажку специально делать.

другой компонент поищи если в этом настроек нет.
вот это например
http://www.sbarcode.com/soft/comkey/comkey.html
(не компонент но для проверки сгодится)


 
tesseract ©   (2006-01-20 09:47) [2]

Всё в норме сканер просто не успевает выложить всё в порт. Проще использовать режим ожидания на RX_CHAR на #13#10


 
Woland USSR   (2006-01-20 10:14) [3]

Похоже, что и правда не успевает. Что за RX_CHAR, я не въехал? Т.е. пользоваться тем приемом, что я уже написал? Сижу и жду пока прилетит 1310?

У моего компонента возможны следующие настройки:

 TComPortNumber        = (pnCOM1,pnCOM2,pnCOM3,pnCOM4);
 TComPortBaudRate      = (br110,br300,br600,br1200,br2400,br4800,br9600,
                          br14400,br19200,br38400,br56000,br57600,br115200);
 TComPortDataBits      = (db5BITS,db6BITS,db7BITS,db8BITS);
 TComPortStopBits      = (sb1BITS,sb1HALFBITS,sb2BITS);
 TComPortParity        = (ptNONE,ptODD,ptEVEN,ptMARK,ptSPACE);
 TComportHwHandshaking = (hhNONE,hhRTSCTS);
 TComPortSwHandshaking = (shNONE,shXONXOFF);


Сейчас выставлены такие:
 
 FReceiving               := False;
 FComportHandle           := 0;
 FComportNumber           := pnCOM1;
 FComportBaudRate         := br9600;
 FComportDataBits         := db8BITS;
 FComportStopBits         := sb1BITS;
 FComportParity           := ptNONE;
 FComportHwHandshaking    := hhNONE;
 FComportSwHandshaking    := shNONE;
 FComportInputBufferSize  := 2048;
 FComportOutputBufferSize := 2048;
 FOnReceiveData           := nil;
 FTimeOut                 := 0;//30;
 FComportPollingDelay     :=0;


Увеличение FTimeOut никак не влияет. Проблема остается.

Увеличение задержки в таймере сказывается на скорости приема из порта, сбои проскакивают, но реже. Дальнейшее увеличение только добавляет тормозов.

procedure TTimerThread.Execute;
begin
 Priority := tpNormal;
 repeat
   Sleep(100); //50
   if Assigned(FOnTimer) then Synchronize(FOnTimer);
 until Terminated;
end;


 
Reindeer Moss Eater ©   (2006-01-20 10:19) [4]

Возьми TapdComPort + TapdDataPacket из AsyncProfessional

У пакета выставть условия срабатывания anyData + ограничитель пакета #13#10
И будешь ловить готовые  данные в обработчике OnPacket



Страницы: 1 вся ветка

Текущий архив: 2006.02.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.303 c
15-1138337131
begin...end
2006-01-27 07:45
2006.02.19
С Днём рождения! 27 января


3-1135602457
Punch
2005-12-26 16:07
2006.02.19
Хочу быструю сортировку


15-1138629674
Ega23
2006-01-30 17:01
2006.02.19
До чего-же гениальное описание воздушного боя!


10-1114072163
Priest
2005-04-21 12:29
2006.02.19
Проблема с запуском COM сервера


1-1137843315
Arkano
2006-01-21 14:35
2006.02.19
Имитрование нажатия правой кнопки крысы