|
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С. Но тут тоже есть вероятность что чтение закончится на нулях.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |