Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Вниз

Сканер штрих-кодов и 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.045 c
2-1138464386
TeNbOK
2006-01-28 19:06
2006.02.19
Как выбрать соответствие свойству Text в списке Combobox?


8-1126434169
Ego
2005-09-11 14:22
2006.02.19
Как вставить звуковой файл в тело программы?


15-1138799384
Kerk
2006-02-01 16:09
2006.02.19
IP-адреса прокси-сервера здания Конгресса будут заблокированы


2-1138531757
Evgenius
2006-01-29 13:49
2006.02.19
Hint и как с ними дружить...


1-1137884308
ancot
2006-01-22 01:58
2006.02.19
Очередной генератор отчетов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский