Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 2233 - Тестирование сканера ШК Eclipse M S5145 RS232/LP Code Gate   Make a simular bug
Summary: Тестирование сканера ШК Eclipse M S5145 RS232/LP Code Gate
Status: CLOSED FIXED
Alias: None
Product: Отдел тестирования
Classification: Внутреннее (Etersoft)
Component: 1С (show other bugs)
Version: не указана
Hardware: PC All
: P4 minor
Target Milestone: ---
Assignee: Денис Баранов
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 553 1930
  Show dependency treegraph
 
In work:
Reported: 2008-08-08 14:34 MSD by Денис Баранов
Modified: 2009-11-14 16:27 MSK (History)
3 users (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments
wine regsvr32 Scaner1C.dll (9.48 KB, text/plain)
2010-11-18 03:58 MSK, Александр Морозов
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Денис Баранов 2008-08-08 14:34:29 MSD
Необходимо провести тестирование
фискального регистратора в Windows и в WINE.

1. Тестирование и настройка при помощи
тестовой утилиты, входящей в состав
драйвера АТОЛ.
2. Подключение сканера ШК в 1С и работа с ним.
Comment 1 Денис Баранов 2008-08-08 14:59:21 MSD
Настройка в 1С описана по адресу:
http://www.atol.ru/support/encyclopedy/1c/1s77-all/1c77-scan/
Comment 2 Денис Баранов 2008-08-08 15:08:36 MSD
Все как написано удается осуществить корректно, но при попытке ввести в 1С штрих код для товара ничего не получается.
Comment 3 Александр Морозов 2008-08-12 14:31:24 MSD
Сканер пишет в COM-порт строки, состояющие из штрих-кода и символов завершения строки. Они без проблем читаются под Linux с помощью примитивной программы.

В логах 1С следующее:
0009:Call KERNEL32.ReadFile(0000072c,0032e604,00001000,0032e564,0032e550) ret=02cef403
0009:Ret  KERNEL32.ReadFile() retval=00000000 ret=02cef403
0009:Call KERNEL32.GetLastError() ret=02cef40c
0009:Ret  KERNEL32.GetLastError() retval=000003e5 ret=02cef40c
0009:Call KERNEL32.WaitForSingleObject(00000724,000005dc) ret=02cecf40
0009:Ret  KERNEL32.WaitForSingleObject() retval=00000102 ret=02cecf40
0x3e5 - это ERROR_IO_PENDING. То есть надо дождаться завершения операции чтения. 1С ждёт её в течении 1500 мс, но не дожидается (0x102 - WAIT_TIMEOUT). Если сделать хак, заставляющий Wine вместо 1500 мс ждать вечно, то всё зависает.

При поиске оборудования ReadFile завершается сразу же и штрих-код читается:
0009:Call KERNEL32.ReadFile(0000072c,02bbe5f8,00000008,0032d838,0032d824) ret=02cef403
0009:Ret  KERNEL32.ReadFile() retval=00000001 ret=02cef403
0009:Call KERNEL32.WaitForSingleObject(000006e0,000005dc) ret=02cecf40
0009:Call KERNEL32.GetOverlappedResult(0000072c,0032d824,0032d838,00000000) ret=02cef459

Написал тестовую программу для Wine, читающую штрих-код со сканера. В ней ReadFile тоже возвращает ERROR_IO_PENDING, но чтение завершается за конечное время и всё прекрасно работает.
Comment 4 Александр Морозов 2008-08-12 15:54:11 MSD
Под Wine ReadFile читает COM-порт, пока не прочитает заданное 3-м аргументом число байт. Под Windows он может завершиться, прочитав меньше.

Из MSDN: "When reading from a communications device, the behavior of ReadFile is determined by the current communication time-out as set and retrieved by using the SetCommTimeouts and GetCommTimeouts functions".
Comment 5 Александр Морозов 2008-08-12 18:00:37 MSD
Пофиксил. Исправление не совсем правильное, но для того чтобы исправить правильно надо проверить, как ведёт себя Windows при поступлении данных на COM-порт с разной скоростью и при различных комбинациях параметров в структуре COMMTIMEOUTS, так что пока пусть будет так.
Comment 6 Денис Баранов 2008-08-14 22:40:09 MSD
Проверил еще раз, все работает.
Ждем релиза  и закрываем.
Comment 7 Денис Баранов 2009-10-15 16:09:47 MSD
На последней версии в тестовой программе для сканера от АТОЛ не открывается меню настройки свойств сканера.
WINE@Etersoft 1.0.11 eter9/eter5
Драйвера версии: DTO6_2009_10_09.zip
Comment 8 Александр Морозов 2009-10-16 15:10:55 MSD
При использовании DTO6_2009_10_09.zip происходит падение при регистрации DLL.
Comment 9 Александр Морозов 2009-10-16 15:12:50 MSD
Created attachment 1343 [details]
wine regsvr32 Scaner1C.dll
Comment 10 Александр Морозов 2009-10-16 15:18:46 MSD
Scaner1C.dll успешно регистрируется, если в директорию, где она находится, скопировать DTO_comm.dll из ATOL/Drivers/Bin.
Comment 11 Александр Морозов 2009-10-16 15:35:45 MSD
При нажатии на кнопку "Поиск оборудования..." кроме окна поиска оборудования появляется ещё какое-то окно "Dialog" с кнопками OK и Cancel. 1С очень сильно тормозит, когда открыты эти окна, хотя процессор загружен не на 100%. Штрих-коды в окне поиска оборудования читаются, хоть и с большой задержкой.

При вводе штрих-кода в самой 1С она на какое-то время подвисает, но потом штрих-код таки вводится.
Comment 12 Александр Морозов 2009-10-16 15:52:27 MSD
С более старым дистрибутивом DTO6_2008_10_06.zip таких проблем нет.
Comment 13 Денис Баранов 2009-11-14 16:26:38 MSK
Решена путем использования более старых драйверов.