Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Получение данных с COM порта
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
SeverinPasha
Итак, я уже писал в одной теме о подключении и получении данных с магнитного ридера. У меня это удалось, вот только данные я получаю непонятно какие. Вот код


Если учесть, если на карте имеется номер 0000255740(десятиричный) и 039,01335(некий ТЕКСТОВЫЙ код).
Помогите связать результат вывода с данными которые по идее должны выводиться(написаны на карте)
andr_andrey
SeverinPasha @ Сегодня, 13:29 необходимо зарегистрироваться для просмотра ссылки ,
Два байта - мало, возможно вы не всю посылку приняли.
SeverinPasha
Значится нашёл я документацию своей считки. Узрил необходимую скорость считывания данных и настройки, окей.

Потом решил все это затестить на ComRead. Получил следующие данные с карты

Окей, после чего решил вставить такие же настройки считки в свою обработку в 1с

И в итоге рпи запуске получаю следующие данные. Каждой паре соответствует свой элемент массива в 10-чной системе.

Но вся проблема остаётся в том, что ну не представляю совсем как эти данные перевести в те, которые указаны на карте, а именно; 0000188041 и 002,56969
Код программы чуть что указан выше
andr_andrey
Цитата(SeverinPasha @ 24.10.18, 8:58) необходимо зарегистрироваться для просмотра ссылки
И в итоге рпи запуске получаю следующие данные. Каждой паре соответствует свой элемент массива в 10-чной системе.

Но вся проблема остаётся в том, что ну не представляю совсем как эти данные перевести в те, которые указаны на карте, а именно; 0000188041 и 002,56969
Код программы чуть что указан выше


188041 (10) = 02DE89 (16)

137 (10) = 89 (16)
222 (10) = DE (16)
2 (10) = 2 (16)

44000000.gif
awp
andr_andrey @ Сегодня, 16:07 необходимо зарегистрироваться для просмотра ссылки ,

Не все так просто. Может поможет:

необходимо зарегистрироваться для просмотра ссылки
необходимо зарегистрироваться для просмотра ссылки
необходимо зарегистрироваться для просмотра ссылки
необходимо зарегистрироваться для просмотра ссылки

конвертер Wiegand26 to HEX необходимо зарегистрироваться для просмотра ссылки
Vladal
Цитата(SeverinPasha @ 23.10.18, 13:29) необходимо зарегистрироваться для просмотра ссылки
Если учесть, если на карте имеется номер 0000255740 (десятеричный) и 039,01335 (некий ТЕКСТОВЫЙ код).
Помогите связать результат вывода с данными которые по идее должны выводиться(написаны на карте)


Супер! Я ждал этого от Вас!
Алгоритм был найден на форуме разработчиков ПО работы с RFID-метками.
Процедуры конвертации чисел между системами счислений найдены на Мисте или Инфостарте.

Процедура КнопкаСчитатьRFIDНажатие(Элемент)
    
    СчитанноеЗначение = "";
    Результат = ВвестиСтроку(СчитанноеЗначение, "Считайте данные карточки RFID", 10, Ложь);
    Если НЕ Результат Тогда
        Возврат;
    КонецЕсли;
    
    // Преобразование 10-ричного серийного номера dec1 (0000255740) в 10-ричные данные (039,01335) dec2, хранящиеся в памяти карточки.
    // Алгоритм преобразования:
    // dec1 преобразовать в hex
    // Старшие 4 байта hex составляют целую часть dec2,
    // младшие 4 байта hex составляют дробную часть dec2.
    
    ДанныеHEX = Прав("00000000" + ОбщегоНазначения.Из_10_В_Любую(СчитанноеЗначение, 16), 8);     // с лидирующими нолями
    ЦелаяЧасть = Прав("000" + ОбщегоНазначения.Из_Любой_В_10(Сред(ДанныеHEX, 1, 4), 16), 3);     // старшие 4 байта в 10-ричное
    ДробнаяЧасть = Прав("00000" + Формат(ОбщегоНазначения.Из_Любой_В_10(Сред(ДанныеHEX, 5, 4), 16), "ЧГ=0"), 5); // младшие 4 байта в дробную часть
    
    НомерДес1 = СчитанноеЗначение;
    НомерДес2 = "" + ЦелаяЧасть + "," + ДробнаяЧасть;
    
КонецПроцедуры


процедуры из модуля ОбщегоНазначения:

Функция Из_10_В_Любую(Знач Значение=0, Нотация=36) Экспорт
    
    Если Нотация <= 0 Тогда
        Возврат ""
    КонецЕсли;
    Значение = Число(Значение);
    Если Значение <= 0 Тогда
        Возврат "0"
    КонецЕсли;
    Значение = Цел(Значение);
    Результат = "";
    Пока Значение>0 Цикл
        Результат = Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", Значение%Нотация + 1, 1) + Результат;
        Значение = Цел(Значение/Нотация);
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции

Функция Из_Любой_В_10(Знач Значение="0", Нотация=36) Экспорт
    
    Если Нотация <= 0 Тогда
        Возврат 0
    КонецЕсли;
    Значение = СокрЛП(Значение);
    Если Значение = "0" Тогда
        Возврат 0
    КонецЕсли;
    Результат = 0;
    Длина = СтрДлина(Значение);
    Для Х = 1 По Длина Цикл
        М = 1;
        Для У = 1 По Длина-Х Цикл
            М = М*Нотация
        КонецЦикла;
        Результат = Результат + (Найти("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", Сред(Значение, Х, 1)) - 1)*М;
    КонецЦикла;
    
    Возврат Окр(Результат);
    
КонецФункции
SeverinPasha
Всем спасибо, решение получено, тему можно закрывать icon_beer17.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.