Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Компьютерное железо
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2012, 23:30   #21
HalG
Новичок
Джуниор
 
Регистрация: 13.09.2012
Сообщений: 3
По умолчанию Вопрос по СРС

Добрый день.
Я тоже начинаю вникать в программированию на Кэшкод.
Вопрос встал по СРС16.
Нашел несколько алгоритмов для расчета СРС, однако они не правильно выдают результат.
То что не правильно, я узнаю сверив результаты которые тут выложили.
НАпример чтобы сделать RESET,подаю на вход процедуры следующие байты:
0х02,0х03,0х06,0х30 а ответ как тут выложили, должно быть 0х41 и 0хВ3. но у мены не получаются такие результаты. То F2 и 0С, иногда F2 и 28.
В чем может проблема?
HalG вне форума Ответить с цитированием
Старый 13.09.2012, 23:40   #22
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в мане кэшкода вроде как есть код на С и на Паскале про CRC16, я брал оттуда его в итоге.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.09.2012, 08:56   #23
hos
java кодер
Пользователь
 
Аватар для hos
 
Регистрация: 10.05.2011
Сообщений: 13
По умолчанию

Да да, в мануале есть примеры кода расчета, недавно туда заглядывал - вспоминал, видел. Посмотри там, может поможет разобраться...
А чтоб понять в чем у тебя проблема - желательно увидеть код, а то на расстоянии не видя кода угадать ошибку могут только еденицы
Помощь в разработке ПО для терминалов/киосков/автоматов. Работа с устройствами через com-порт
hos вне форума Ответить с цитированием
Старый 14.09.2012, 10:12   #24
HalG
Новичок
Джуниор
 
Регистрация: 13.09.2012
Сообщений: 3
По умолчанию Код СРС16

Код:
using System;
 
namespace CommunicationManager
{
     public class Crc16
    {
        const ushort polynomial = 0xA001;
        ushort[] table = new ushort[256];

        public ushort ComputeChecksum(byte[] bytes)
        {
            ushort crc = 0;
            for (int i = 0; i < bytes.Length; ++i)
            {
                byte index = (byte)(crc ^ bytes[i]);
                crc = (ushort)((crc >> 8) ^ table[index]);
            }
            return crc;
        }

        public byte[] ComputeChecksumBytes(byte[] bytes)
        {
            ushort crc = ComputeChecksum(bytes);
            return BitConverter.GetBytes(crc);
        }

        public Crc16()
        {
            ushort value;
            ushort temp;
            for (ushort i = 0; i < table.Length; ++i)
            {
                value = 0;
                temp = i;
                for (byte j = 0; j < 8; ++j)
                {
                    if (((value ^ temp) & 0x0001) != 0)
                    {
                        value = (ushort)((value >> 1) ^ polynomial);
                    }
                    else
                    {
                        value >>= 1;
                    }
                    temp >>= 1;
                }
                table[i] = value;
            }
        }        
    }
}

///////////////////////////////////////////////////////////
using System;

namespace CommunicationManager
{
    public class PortChat
    {
          static byte[] b={0x2,0x3,0x6,0x30}; 
          static Crc16 tt;  
          public static void Main()
         {
            tt = new Crc16();
            byte[] st = tt.ComputeChecksumBytes(b); ////// В результате в st ///получаю слеюующие данные: 0xF2,0x0c
            
         }
    }
}


Может я что то не то делаю?

Последний раз редактировалось Вадим Мошев; 02.04.2016 в 19:27.
HalG вне форума Ответить с цитированием
Старый 14.09.2012, 10:53   #25
hos
java кодер
Пользователь
 
Аватар для hos
 
Регистрация: 10.05.2011
Сообщений: 13
По умолчанию

Немного подзапутался в коде твоем, вот как это делается у меня, чутка поскромнее... Надеюсь поможет
Код:
public static int crc16(byte[] data, int offset, int count) {
        int crc = 0;
        for (int i = offset; i < count; i++) {
                crc ^= data[i] & 0xFF;
                for (int j = 0; j < 8; j++) {
                        if ((crc & 0x0001) != 0) {
                                crc = 0x8408 ^ crc >>> 1;
                        } else {
                                crc >>>= 1;
                        }
                 }
        }                   
        return crc;    
}
Помощь в разработке ПО для терминалов/киосков/автоматов. Работа с устройствами через com-порт
hos вне форума Ответить с цитированием
Старый 14.09.2012, 12:23   #26
HalG
Новичок
Джуниор
 
Регистрация: 13.09.2012
Сообщений: 3
По умолчанию

Спасибо большое! Ты меня выручил.
Правда пришлось кое что подправить в твоем в коде, иначе программа ругалась не следующие 2 строки
Код:
                                crc = 0x8408 ^ crc >>> 1;
                                crc >>>= 1;
исправил на
Код:
                                crc = 0x8408 ^ crc >> 1;
                                crc >>= 1;
HalG вне форума Ответить с цитированием
Старый 14.09.2012, 12:41   #27
hos
java кодер
Пользователь
 
Аватар для hos
 
Регистрация: 10.05.2011
Сообщений: 13
По умолчанию

Цитата:
Сообщение от HalG Посмотреть сообщение
Спасибо большое! Ты меня выручил.
Правда пришлось кое что подправить в твоем в коде, иначе программа ругалась не следующие 2 строки
Пожалуйста, рад помочь... Просто у меня код на java написан! ))
Помощь в разработке ПО для терминалов/киосков/автоматов. Работа с устройствами через com-порт
hos вне форума Ответить с цитированием
Старый 12.07.2014, 11:40   #28
Rolex21
Новичок
Джуниор
 
Регистрация: 31.10.2011
Сообщений: 1
По умолчанию

Цитата:
Сообщение от Gonzo Посмотреть сообщение
Кстати тема полезная и как-нибудь доберусь до старого ПК и выложу исходники
Gonzo, выложите пожалуйста, как раз на Делфи надо.
Rolex21 вне форума Ответить с цитированием
Старый 31.03.2016, 17:09   #29
slavix
Новичок
Джуниор
 
Регистрация: 31.03.2016
Сообщений: 1
По умолчанию

Свяжитесь со мной, кто победил это CashCode. ICQ 208892333
или по почте dayhater@gmail.com
slavix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование купюроприёмников CashCode SM СТРАННИК Общие вопросы Delphi 21 02.04.2014 17:14
Вывод печати на термопринтер Custom VKP-80 СТРАННИК Общие вопросы Delphi 3 21.06.2010 20:01
Текст в формате Terminal Dunpeal Общие вопросы Delphi 1 19.12.2007 08:17