powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TComPort & Сканер ШК Symbol DS6707 & AztecCode
17 сообщений из 67, страница 3 из 3
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620517
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman, да да. Там все есть. Подскажи как array of byte в TBytes перевести. Эта строка изначально была сжата через zlib
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620523
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13Подскажи как array of byte в TBytes перевести.
Это одно и тоже.
авторTBytes declares an array of Bytes.

The TBytes type declares a dynamic array of Bytes.

Где тебе это нужно?
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620524
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получается следующее. Подсчитывая количество прочитанных данных

Код: pascal
1.
2.
3.
4.
5.
6.
7.
var
CNT: Integer;
buffer: array[1..3000] of byte;
begin
CNT := ComPort.Read(buffer, 3000);
Memo.Lines.add(IntTostr(CNT));
end;



Показывает несколько подходов. Но итоговая сумма всегда одна и та же. Я так понял что идет проход несколько раз. Но т к строка была сжата zlib-м он для распаковки хочет принять в себя тип TBytes. Вот я и не знаю как сделать
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620526
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZDecompressStr из zlib
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620534
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть вроде просто ZDecompress, но пока понять как это работает не понимаю
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620542
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще функция Move, но и она что то не хочет:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var
abc: TBytes;
buffer: array[1..3000] of byte;
cnt: Integer;
Str: String;
begin
cnt := Comport.Read(buffer, 3000);
Move(buffer, abc, cnt);
Str := ZDecompressStr(abc);
Memo.Lines.add(Str);
end;
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620552
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TBytes этот тоже array, только динамический. Задать ему размер можно с помощью Setlength.
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620558
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

Код: pascal
1.
2.
3.
4.
SetLength(abc, 3000);
Comport.Read(abc,3000);
Str := ZDecompress(abc);
Memo.Lines.Add(Str);



Ничего не выводит, а по отладчику после чтения с компота abc - пустой
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620563
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13, точнее после прочтения даже дальше ничего не происходит. Винда аж потухла и сканер тупанул
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620565
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13точнее после прочтения даже дальше ничего не происходит.
Потому что идет ожидание 3000 байт?
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620567
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman, наверное да. А как правильно? Внутренний Count использовать?
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620572
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

Код: pascal
1.
2.
3.
SetLength(abc, Count);
Comport.Read(abc, Count);
.... ну и тд



Вылетает AV. По отладчику Count до чтения равен 64, а после уходит в минус(((
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620609
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13,

считай по символам. Не понятно, когда связь может оборваться в реальности и порт может никогда эти 64 байта не получит.
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620610
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanсчитай
читай :) (по одному символу или байту)
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620729
MBo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBo
Гость
dartveider13,
вот как читать в динамический массив, если процедура имеет нетипизированный var-аргумент:

Код: pascal
1.
2.
3.
4.
5.
abc: TBytes;
begin
   SetLength(abc, Сount);
   ComPort.Read(abc[0], Count);
   ...



Но есть ещё один момент - данные из компорта приходят порциями, их нужно собирать и склеивать вместе, пока не наберётся полный пакет, пригодный для обработки.
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620854
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBo, да я это заметил, что данные приходят порциями. Получается надо наверное завести глобальную переменную и читать в нее?
...
Рейтинг: 0 / 0
TComPort & Сканер ШК Symbol DS6707 & AztecCode
    #39620857
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBo (отдельно за совет с abc[0]), и всем всем всем спасибо за участие. Основные вопросы решены. Дальше я думаю уже дело техники. Вобщем подводя итоги:

1) Вопрос по настройке сканера ШК. Тут конечно сам тупанул. Забыл совсем, что чтобы сканер корректно работал в режиме COM, он должен корректно определятся в Диспетчере устройств. Здесь меня ввел в заблуждение стандартный Последовательный порт (COM1) в системе (я наивно подумал, что это сканер, а отсоединить сканер и посмотреть осталось ли устройство не додумался).
В итоге после того как на каком-то сайте я увидел настройку др сканера и там в разделе КОМ увидел именованый сканер, то до меня дошло и я кинулся искать дровишки.
Нашел на оф сайте дровишки и скачал именно с оф сайта мануал, т к там настроечный ШК, который мне был нужен более корректный. Перепечатал страницу настроечного ШК, установил дровишки, пикнул ШК из табл 7-6 USB CDC Host. И вуаля))) Сканер заработал в режиме компота)))

2) По остальному. Поначалу я довольствовался режиму клавиатуры (со скрипом), но потом встала задача печатать 2-й ШК, в котором много букв (2-3 страницы А4). Опять же погуглив, я не нашел ничего лучше чем пользоваться библиотекой zlib, сжимая строку. С рисованием ШК получилось неплохо, но вот с расшифровкой появились вопросы именно потому что функции zlib по сжатию и распаковке строки всасывают в себя только тип TBytes. Выводя количество считанных данных за один проход, я увидел, что то что писал MBo. Данные приходят кусками. Но заделка уже была - Read(abc[0], Count); (мне надо было узнать как именно в TBytes можно считывать)
В итоге: В работающем примере получился следующий код. Конечно скорее всего не самый элегантный, но это только пример. Дальше будет перенос на основную программу.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
// Глобально инициализирована переменная res: TBytes
// с установкой SetLength(res, 0);

// Процедура ComPortRxChar
var
   CNT, LM: Integer;
begin
   CNT := 0;
   LM := Length(res);
   SetLength(res, LM + Count);
   CNT := ComPort.Read(res[LM], Count);
   Memo.Lines.Add(IntToStr(CNT));
end;

// Далее процедура кнопки расшифровки
var
   Str: String;
begin
   Str := ZDecompressStr(res);
   Memo.Lines.Add(Str); // И вуаля - наша строка в поле. Проверил длину с исходной - все совпало
end;



Еще раз всем спасибо за участие!!!
...
Рейтинг: 0 / 0
17 сообщений из 67, страница 3 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TComPort & Сканер ШК Symbol DS6707 & AztecCode
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]