//----------------------------------------------------------------------- //Разложение телеграммы 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); } }
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); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! }