Форум: "Основная";
Текущий архив: 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.038 c