Имя: Пароль:
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С. Но тут тоже есть вероятность что чтение закончится на нулях.