Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Ком порт

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

echech

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день! Уважаемые форумчане!
Помогите разобраться с кадрами ком порта.
Отправляю запрос на измерение, получаю ответ вида  "55 AA 1A 15 00 00 00 0F 00 3E", описание кадра http://savepic.su/4556188.jpg , но мне ничего не понятно в описании, растолкуйте пожалуйста!

Всего записей: 4 | Зарегистр. 09-12-2014 | Отправлено: 11:39 09-12-2014 | Исправлено: echech, 11:41 09-12-2014
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А что именно непонятно-то? Расписано же максимально подробно.  
 
Первый байт равен 55h - признак начала кадра, второй - всегда ААh, Это заголовок, дальше в одном байте два значения. Тебя, скорее всего, интересуют следующие 4 байта, это число с фиксированной запятой - результат измерения от датчика, следующий байт - значение погрешности. Дальше байт с битовыми флагами и контрольная сумма.

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 12:02 09-12-2014
echech

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, меня интересуют эти 4 байта с запятой, вот я не могу их перевести в результат измерения. Как их надо перевести? Делаю в C#

Всего записей: 4 | Зарегистр. 09-12-2014 | Отправлено: 12:07 09-12-2014 | Исправлено: echech, 12:13 09-12-2014
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Число с фиксированной запятой - это что-то типа хранения цены не в рублях как float, а в копейках как integer. Т.е. тебе нужно умножать его на некий коэффициент.

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 12:53 09-12-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
using System;
 
namespace testuSv
{
    class Program
    {
        struct SV
        {
            public byte _55, _AA, addr;
            public int uSv;
            public byte err, flags, chksum;
        };
 
        static void Main(string[] args)
        {
            SV sv;
            sv.uSv = 0x15;
            sv.flags = 0;
 
            if ((sv.flags & 0x80) == 0)
            {
                Console.WriteLine(sv.uSv * 0.01 + " uSv/h");
            }
            else
            {
                Console.WriteLine(sv.uSv * 0.1 + " uSv/h");
            }
        }
    }
}

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 13:00 09-12-2014
echech

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я правильно написал?
                         if ((bytes[4] & 0x80) == 0)
                         {
                             Console.WriteLine(bytes[3] * 0.01 + " uSv/h");
                         }
                         else
                         {
                             Console.WriteLine(bytes[3] * 0.1 + " uSv/h");
                         }
 
Мне что-то не совсем понятен ваш код

Всего записей: 4 | Зарегистр. 09-12-2014 | Отправлено: 13:58 09-12-2014 | Исправлено: echech, 13:59 09-12-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если bytes массив из 10 байтов, то неправильно.
 
static void Main(string[] args)
{
    byte[] bytes = new byte[10] {0x55,0xAA,0x1A,0x15,0,0,0,0x0F,0,0x3E};
 
    int x = bytes[3] | (bytes[4] << 8) | (bytes[5] << 16) | (bytes[6] << 24);
 
    if ((bytes[8] & 0x80) == 0)
    {
        Console.WriteLine(x * 0.01 + " uSv/h");
    }
    else
    {
        Console.WriteLine(x * 0.1 + " uSv/h");
    }
}

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 14:36 09-12-2014
echech

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
Спасибо! Вы мне помогли!

Всего записей: 4 | Зарегистр. 09-12-2014 | Отправлено: 14:51 09-12-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Ком порт


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru