Версия для печати темы (https://pro1c.org.ua/index.php?s=3d2cbd9bea642a4fdcc765899994c9fd&showtopic=48484)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Получение данных с COM порта

Автор: SeverinPasha 23.10.18, 12:29

Итак, я уже писал в одной теме о подключении и получении данных с магнитного ридера. У меня это удалось, вот только данные я получаю непонятно какие. Вот код


Если учесть, если на карте имеется номер 0000255740(десятиричный) и 039,01335(некий ТЕКСТОВЫЙ код).
Помогите связать результат вывода с данными которые по идее должны выводиться(написаны на карте)

Автор: andr_andrey 23.10.18, 14:16

SeverinPasha @ Сегодня, 13:29 * ,
Два байта - мало, возможно вы не всю посылку приняли.

Автор: SeverinPasha 24.10.18, 7:58

Значится нашёл я документацию своей считки. Узрил необходимую скорость считывания данных и настройки, окей.

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

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

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

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

Автор: andr_andrey 24.10.18, 15:07

Цитата(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 24.10.18, 18:49

andr_andrey @ Сегодня, 16:07 * ,

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

http://pro1c.org.ua/redirect.php?http://www.cyberforum.ru/kip-sensors/thread771426.html
http://pro1c.org.ua/redirect.php?http://vkmodule.com.ua/Description/Description3.html
http://pro1c.org.ua/redirect.php?http://vkmodule.com.ua/Description/Description4.html
http://pro1c.org.ua/redirect.php?https://www.tensay.by/%21files/readers/Z-2%20USB.pdf

конвертер Wiegand26 to HEX http://pro1c.org.ua/redirect.php?http://www.ccdesignworks.com/wiegand_calc.htm

Автор: Vladal 24.10.18, 20:05

Цитата(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 29.10.18, 13:13

Всем спасибо, решение получено, тему можно закрывать icon_beer17.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua