Дата: Воскресенье, 28.09.2014, 18:35 |
Сообщение № 1
Группа: Гости
Добрый день. Для реинжиниринга эл.устройства нужно проанализировать поток данных проходящих по RS232. Все данные в HEX. Нужен макрос который бы суммировал ячейки без перевода в "десятичные". На данный момент пользуемся именно переводами в десятичные, затем все необходимые вычитания\сложения и после обратный перевод в hex. Данных много а работа по сути изыскательская. Наличие большого числа преобразований увеличивает колл ошибок (человеческий фактор). Большая просьба для тех у кого есть решение - поделитесь пожалуйста. Три макроса: 1. SUM_HEX суммирует указанные hex-ячейки и даёт результат hex в заданной разрядности. Этот же макрос должен работать и на вычитание. 12+A2+01=B5 B5-CD=FE8 2. CRC16 суммирует указ hex-ячейки и результат даёт в hex-виде только 2 разрядами ( 00 .... FF ). Старшие разряды отбрасываем. По сути это та же сумма что и в пункте 1 но с более понятным названием для исключения путаницы и ошибок. 3. CRC16_CELL суммирует разряды только одной ячейки и даёт результат в hex-виде двумя разрядами, при переполнении старшие разряды отбрасываем. 12A2=B4 01FF=00 F0F=1E 01A0=A1
Спасибо.
Добрый день. Для реинжиниринга эл.устройства нужно проанализировать поток данных проходящих по RS232. Все данные в HEX. Нужен макрос который бы суммировал ячейки без перевода в "десятичные". На данный момент пользуемся именно переводами в десятичные, затем все необходимые вычитания\сложения и после обратный перевод в hex. Данных много а работа по сути изыскательская. Наличие большого числа преобразований увеличивает колл ошибок (человеческий фактор). Большая просьба для тех у кого есть решение - поделитесь пожалуйста. Три макроса: 1. SUM_HEX суммирует указанные hex-ячейки и даёт результат hex в заданной разрядности. Этот же макрос должен работать и на вычитание. 12+A2+01=B5 B5-CD=FE8 2. CRC16 суммирует указ hex-ячейки и результат даёт в hex-виде только 2 разрядами ( 00 .... FF ). Старшие разряды отбрасываем. По сути это та же сумма что и в пункте 1 но с более понятным названием для исключения путаницы и ошибок. 3. CRC16_CELL суммирует разряды только одной ячейки и даёт результат в hex-виде двумя разрядами, при переполнении старшие разряды отбрасываем. 12A2=B4 01FF=00 F0F=1E 01A0=A1
Вы в курсе о наличии в языке возможности указывать систему счисления? &128 = 1010, &258 = 2110 &H1816 = 2410? &HFF16 = 25510 А также наличия (в вашем случае) функции HEX() ?
Остаётся только вопрос - в каком виде хранятся эти ваши "hex-данные" в ячейках... Рисуйте примеры исходников... И не нарушайте Правила форума
Вы в курсе о наличии в языке возможности указывать систему счисления? &128 = 1010, &258 = 2110 &H1816 = 2410? &HFF16 = 25510 А также наличия (в вашем случае) функции HEX() ?
Остаётся только вопрос - в каком виде хранятся эти ваши "hex-данные" в ячейках... Рисуйте примеры исходников... И не нарушайте Правила форума AndreTM
Дата: Воскресенье, 28.09.2014, 21:48 |
Сообщение № 3
Группа: Гости
Нет, я не в курсе о наличии в языке возможности указывать систему исчисления. Я не программист, у меня другая профессия.
На данный момент hex данные хранятся в виде текста и чисел и оказались они в ячейках после копирования их из другой программы. Нарисовать нечего - обычные hex-числа 00.....FF которые были сняты с сом порта. Каждое число в отдельной ячейке. Пытаемся понять как работал старый прибор.
У меня имеется макрос XOR_HEX который любезно предоставил мне один хороший человек. Занимает размер всего 3 строки в VB. Этим макросом я ксорю ячейки как мне вздумается. Родные функции Excel этого не позволяют ( Ex2007 ). Хотелось бы иметь в дополнение и функции суммы для HEX.
Нет, я не в курсе о наличии в языке возможности указывать систему исчисления. Я не программист, у меня другая профессия.
На данный момент hex данные хранятся в виде текста и чисел и оказались они в ячейках после копирования их из другой программы. Нарисовать нечего - обычные hex-числа 00.....FF которые были сняты с сом порта. Каждое число в отдельной ячейке. Пытаемся понять как работал старый прибор.
У меня имеется макрос XOR_HEX который любезно предоставил мне один хороший человек. Занимает размер всего 3 строки в VB. Этим макросом я ксорю ячейки как мне вздумается. Родные функции Excel этого не позволяют ( Ex2007 ). Хотелось бы иметь в дополнение и функции суммы для HEX.allert
для всех кто так же как я искал готовые функции но так и не нашёл вот ещё несколько вариантов, которые рабочие как и вариант от doober [vba]
Код
------------- Function SUM_HEX(i, j As String) As String SUM_HEX = Hex(Val("&H" & i) + Val("&H" & j)) End Function ---------------- Function SUB_HEX(i, j As String) As String SUB_HEX = Hex(Val("&H" & i) - Val("&H" & j)) End Function ---------------- Function SUM_HEX_RANGE(rng As Range) For Each cell In rng a = a + Application.WorksheetFunction.Hex2Dec(cell) + 0 Next SUM_HEX_RANGE = Application.WorksheetFunction.Dec2Hex(a) End Function ---------------- Function SumHex(r As Range) As String Dim cell As Range Dim iSum As Long
For Each cell In r If Len(cell.Text) Then iSum = iSum + ("&H" & cell.Value2) Next cell SumHex = Hex(iSum) End Function -----------------
[/vba]
to doober да, работает, спасибо огромное
для всех кто так же как я искал готовые функции но так и не нашёл вот ещё несколько вариантов, которые рабочие как и вариант от doober [vba]
Код
------------- Function SUM_HEX(i, j As String) As String SUM_HEX = Hex(Val("&H" & i) + Val("&H" & j)) End Function ---------------- Function SUB_HEX(i, j As String) As String SUB_HEX = Hex(Val("&H" & i) - Val("&H" & j)) End Function ---------------- Function SUM_HEX_RANGE(rng As Range) For Each cell In rng a = a + Application.WorksheetFunction.Hex2Dec(cell) + 0 Next SUM_HEX_RANGE = Application.WorksheetFunction.Dec2Hex(a) End Function ---------------- Function SumHex(r As Range) As String Dim cell As Range Dim iSum As Long
For Each cell In r If Len(cell.Text) Then iSum = iSum + ("&H" & cell.Value2) Next cell SumHex = Hex(iSum) End Function -----------------