Имя: Пароль:
1C
1C 7.7
v7: Чтение данных с СОМ порта
0 bigdenis22
 
27.06.17
10:14
Доброго всем дня!
Есть оборудование (сканер РФИД) с которого надо считывать данные;
Пытаюсь с использованием MSComm32, устройство выдает 20 байт данных вида "cc ff ff 10 32 0d 01 e2 00 51 74 15 06 02 51 23 40 26 e2 66  Мяя.2..в.Qt...Q#@&вf "
свойство InBufferCount - это подтверждает, НО в 1с 7.7 принимается ТОЛЬКО 8 первых байт, т.е.
    Буфер = РФИДскан.Input;
    СтрДлина(Буфер)=8
при этом в 1с 8.3 - принимаются все 20 символов !!!
я так понимаю, что загвоздка в 9 символе "00", так называемый "пустой символ", - потому что данные принимаются как раз до него.

Вопрос: - может кто сталкивался с таким? как побороть?
и второй вопрос - возможно ли в 1с принимать данные в HEX-виде? Потому как в данной ситуации мне надо читать 14-16 байты (02 51 23) это код в  HEX,в десятичном виде - 151843...

Пробовал разобраться с vk_rs232, но толкового описания не нашел, а из того что нашел, понял что она формирует внешнее событие при наличии
КонецСтроки=Симв(х), но в данном случае это не подходит, так как после  "моих данных" - дальше всегда разные символы, а последний это контрольная сумма передачи...

Уже и незнаю, может обратится к кому-нибудь, чтоб ВК написали под это обрудование (СДК есть) !?
1 Кирпич
 
27.06.17
10:58
а InputMode в 77 не работает?
https://msdn.microsoft.com/en-us/library/aa259414(v=vs.60).aspx
2 bigdenis22
 
27.06.17
11:26
(1) РФИДскан.InputMode = 1;
Буфер = РФИДскан.Input;
{Глобальный модуль(3957)}: Тип переменой не поддерживается
3 trdm
 
27.06.17
11:31
4 Кирпич
 
27.06.17
11:37
мож по одному символу читать как нибудь
5 NorthWind
 
27.06.17
11:37
(0) когда-то давно сталкивался с подобным, правда, на Delphi. Помогало чтение в несколько приемов. Количество данных, оказывающихся в буфере, зависело от настроек порта и конкретного компа/ОС - где-то оказывалось все сразу, где-то нет. Символ тут ни при чем скорее всего.
6 Кирпич
 
27.06.17
11:37
7 NorthWind
 
27.06.17
11:41
(5) + логика была примерно такая - читался кусок и его длина сравнивалась с требуемой. Если она была меньше, то делался перекур несколько миллисекунд и читался следующий кусок. Процедура завершалась тогда, когда данных в буфере не оказывалось (считано 0 байт) или общий объем считанного становился равным требуемой длине. Работало во всех случаях.
8 Кирпич
 
27.06.17
11:45
(0) попробуй поставит InputLen = 1 и читать 20 раз по символу. Если символ - пустая строка, то пусть будет 0
9 bigdenis22
 
27.06.17
11:47
(6) дело в том, что метод Input после считывания очищает буфер. как я понял , в данном примере считывается 10 символов из буфера...

кажется "Ура", но пока боюсь раньше времени обрадоваться...
- vk_rs232_hex - считала полностью(20 символов) содержимое в бинарном виде и передала 1-эсине в виде строки(внешним событием):Внешнее событие: Источник=vk_rs232  Событие=BarCodeValue  Данные=CC FF FF 10 32 0D 01 E2 00 51 74 15 06 02 51 23 40 26 E2 66

счас буду учится HEX в десятичные переводить...
10 Кирпич
 
27.06.17
11:53
11 bigdenis22
 
27.06.17
12:40
(10) что-то этот метод не правильно переводит HEX в десятичную...
взял отсюда https://helpf.pro/faq/view/940.html - работает правильно...

в общем спасибо всем откликнувшимся, текущая задача решена, - огромный респект "Ромикс" за компонету vk_rs232_hex (жаль что по ней описание очень скудное)...

можно было-бы тему закрывать, но любопытство осталось:
почему при использовании MSComm32 в 1с8 принимаются все 20 символов, а в 1с7.7 только 8 (получение данных и открытие порта прописано совершенно идентично)???
12 Serginio1
 
27.06.17
12:40
13 MadDAD
 
30.06.17
12:14
(11) Потому что, при преобразовании в строковый тип ты получаешь символ конца строки Hex(00) и остаток отбрасывается. Бинарных типов данных в 7.7 штатно нет.
14 MadDAD
 
30.06.17
12:15
Как вариант читать буфер через скрипт на VBS и передавать в модуль в виде массива чисел.
15 MadDAD
 
30.06.17
12:20
Еще в качестве экзотики (но все же не такой как тащить .Net) - создавать CMD через который вычитывать из COM в текстовик и потом его уже парсить из 1С. Но тут тоже есть вероятность что чтение закончится на нулях.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан