Exemplo n.º 1
0
        //-----------------------------------------------------------------------

        //Разложение телеграммы
        public void telegram_decode(string string_telegram)
        {
            //Перевод строки в массив байтов
            byte[] byte_telegram = StringToByteArray(string_telegram);
            //Выделение заголовка
            mbus_telegram telegram = new mbus_telegram();

            Debug.WriteLine("Длинна телеграммы " + byte_telegram.Length);
            //Проверка длинны
            if (byte_telegram.Length > 4)
            {
                //header
                telegram.header = new byte[] { byte_telegram[0], byte_telegram[1], byte_telegram[2], byte_telegram[3] };
                //ci
                telegram.ci = new byte[] { byte_telegram[6] };
                //dataheder
                //id накладки
                Array.Copy(byte_telegram, 7, telegram.data_header.id, 0, 4);
                //id производителя
                Array.Copy(byte_telegram, 11, telegram.data_header.man_id, 0, 2);
                //Версия
                telegram.data_header.ver = byte_telegram[13];
                //Тип накладки
                telegram.data_header.devtype = byte_telegram[14];
                //Доступ
                telegram.data_header.access = byte_telegram[15];
                //Сигнатура
                Array.Copy(byte_telegram, 16, telegram.data_header.signature, 0, 2);
                //Выделяем блок с данными
                int length = byte_telegram.Length - 19;
                telegram.data_part = new byte[length - 2];
                Array.Copy(byte_telegram, 19, telegram.data_part, 0, length - 2);
                //Отделяем контрольную сумму
                telegram.crc = byte_telegram[byte_telegram.Length - 2];
                //Стопбайт = 16
                telegram.stop = byte_telegram[byte_telegram.Length - 1];

                //Отладночная информация
                //debugHex(telegram.data_part);
                //Debug.WriteLine(mbus_decode_manufacturer(telegram.data_header.man_id));
                //Передача данных для расшифровки
                mbus_decode_data(telegram);
            }
        }
Exemplo n.º 2
0
        public void mbus_decode_data(mbus_telegram telegram)
        {
            byte dif;

            byte[] dife = new byte[10];
            byte   vif;

            byte[] vife = new byte[10];
            byte[] data;
            bool   start = true;

            mbus_decoded decode      = new mbus_decoded();
            int          num         = 0;
            int          add_counter = 0;

            dif = telegram.data_part[num];
            while (has_next_data(dif))
            {
                num++;
                dife[add_counter] = telegram.data_part[num];
                add_counter++;
            }
            add_counter = 0;
            num++;
            vif = telegram.data_part[num];
            if (has_next_data(vif))
            {
                num++;
                vife[add_counter] = telegram.data_part[num];
                add_counter++;
            }
            int length = get_data_lenght(dif);

            //debugHex(telegram.data_part);

            //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        }