Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Формирование пакета данных 
:(
    Опции темы
Melevir
Дата 30.7.2009, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



Ну.. Бит четности - "лишний" бит после битов данных и перед стоп-битом (если он есть).
Я боюсь, их нужно вручную вставлять.. как это сделать я не очень представляю... Нашел на просторах инета пару человек с похожей проблемой, нигде решения нет. Вот. smile 
PM MAIL   Вверх
mes
Дата 31.7.2009, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Может познакомите нас с этой документацией ? Чтоб можно было представить картину того, с чем Вы имеете дело  smile 



--------------------
PM MAIL WWW   Вверх
andrew_121
Дата 31.7.2009, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(mes @  31.7.2009,  00:58 Найти цитируемый пост)
Может познакомите нас с этой документацией ? Чтоб можно было представить картину того, с чем Вы имеете дело

А зачем?
Вы люди опытные, сами должны догадаться smile


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
mes
Дата 31.7.2009, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(andrew_121 @  31.7.2009,  00:13 Найти цитируемый пост)
А зачем?
Вы люди опытные, сами должны догадаться smile 

но к сожалению большинство из форумчан не телепаты smile  smile 
и хотя не против были помочь,  если бы им объяснили о чем речь, но из за неполноты рассказа тс. не могут этого сделать.  smile 

Это сообщение отредактировал(а) mes - 31.7.2009, 01:22


--------------------
PM MAIL WWW   Вверх
Melevir
Дата 31.7.2009, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



Вся документация - разворот инструкции по эксплуатации, где описан протокол "9 байт" - авторское изобретение фирмы-создателя весов. Есть длинная и неинтересная таблица команд, меня интересует только одна из них - считывание веса. Обмен с прибором происходит пакетами по 9 байт таким форматом: первые три байта - адрес прибора (в моем случае нули, широковещательный), потом имя команды (1 байт), следующая тройка - данные (когда отправляю - пишу туда нули), дальше 1 байт на контрольную сумму и один - на символ конца строки. 
Смысл такой - я посылаю пакет с указанной в нем командой, мне возвращается такой же пакет, но в поле данных у него записано нужное значение.
Дальше цитирую инструкцию:

Байты 1, 2, 3 передаются с еденичным битом четности, остальные - с нулевым. Обмен производится на скорости 14400, с 1-м старт-битом, с 8ю битами данных, 1м битом четности и 1-м стоповым битом.

Все, больше не слова.. Загвоздка в чем: порт я открыл, запрос отправил, пытаюсь считать ответ, а его нет. Значит, что-то не то с запросом... Могу код написать если надо.
Еще раз благодарю всех за оказываемую помощьsmile
PM MAIL   Вверх
mes
Дата 31.7.2009, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Melevir @  31.7.2009,  00:30 Найти цитируемый пост)
Загвоздка в чем: порт я открыл, запрос отправил, пытаюсь считать ответ, а его нет. Значит, что-то не то с запросом... Могу код написать если надо.

было бы неплохо  

Это сообщение отредактировал(а) mes - 31.7.2009, 02:04


--------------------
PM MAIL WWW   Вверх
Melevir
Дата 31.7.2009, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



Код

//открытие порта
hCom = CreateFile( "COM1",
    GENERIC_READ | GENERIC_WRITE,
    0,    // exclusive access
    NULL, // no security attributes
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL
    );
if (hCom == INVALID_HANDLE_VALUE)
  Memo1->Lines->Add("Ошибка открытия порта СОМ "+IntToStr(COMno+1)+"!");
else
  Memo1->Lines->Add("Порт СОМ "+IntToStr(COMno+1)+" открыт успешно.");
//формирование пакета
char buf[9];
buf[0] = 0;
buf[1] = 0;
buf[2] = 0;
buf[3] = '$10';
buf[4] = 0;
buf[5] = 0;
buf[6] = 0;
buf[7] = 1;
buf[8] = '#ODh';
//отправка
DWORD RealSend;
WriteFile(hCom,&buf[0],9,&RealSend,NULL);
Memo1->Lines->Add("Отправлено "+IntToStr(RealSend)+" байт.");

Далее в цикле происходит вот что:
Код

COMSTAT CurrentState;
unsigned long CodeError;
ClearCommError(hCom,&CodeError,&CurrentState);
int AvalibleBytes = CurrentState.cbInQue;
Memo1->Lines->Add("К чтению готово "+IntToStr(AvalibleBytes)+" байт.");

И хоть ты тресни - к чтению готово 0 байт. Если в цикле написать
Код

ReadFile(hCom,&buf[0]9,&RealGet,NULL);

то результата также никакого...
PM MAIL   Вверх
xvr
Дата 31.7.2009, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Можете расслабится - динамически управлять настройками бита четности (для каждого передаваемого байта) на PC НЕВОЗМОЖНО. Причем невозможно на аппаратном уровне.
Единственное решение такое -
  •  Пишите свой драйвер последовательного порта
  •  Отключаете аппаратное FIFO в порту
  •  Перед передачей каждого байта ожидаете (просто вися на опросе UART'а) окончания передачи предыдущего байта
  •  Програмируете настройку бита четности и передаете байт
Мое мнение - легче сразу застрелится  smile 
Второй вариант - делается внешняя приблуда на МК, которая будет преобразовавать 8ми битные посылки от PC в 9ти битные. Приблуда включается между PC и весами

PS. Разработчикам весов нужно оторвать все, что висит за использование 9го бита  smile 

PM MAIL   Вверх
GoldFinch
Дата 31.7.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Цитата(Melevir @  31.7.2009,  02:30 Найти цитируемый пост)
с 8ю битами данных

если данные нада посылать отдельными байтами, зачем вам этот пакет?
PM MAIL ICQ   Вверх
Melevir
Дата 31.7.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



xvr, способ с внешней приблудой отметаем сразу - есть стандартное ПО которое блин работает, так что надо как то так реализовать... программно... А первый способ - я наверное не понимаю, но мне кажется, что тогда каждый байт будет оформляться как пакет. Но это ведь не верно - в пакете должно быть 9 байт... Или нет...
GoldFinch , я вот теперь тоже думаю, что надо каждый отдельно посылать. Тогда надо сделать 3 посылки, поменять четность, остальные тоже отправить... Бред какой то.

Это сообщение отредактировал(а) Melevir - 31.7.2009, 11:33
PM MAIL   Вверх
GoldFinch
Дата 31.7.2009, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



а надо было всего-то почитать MSDN
http://msdn.microsoft.com/en-us/library/aa...28VS.85%29.aspx
Код

Parity

    The parity scheme to be used. This member can be one of the following values.
    Value    Meaning

    EVENPARITY
    2

     

    Even parity.

    MARKPARITY
    3

     

    Mark parity.

    NOPARITY
    0

     

    No parity.

    ODDPARITY
    1

     

    Odd parity.

    SPACEPARITY
    4

     

    Space parity.

видимо имелось ввиду EVENPARITY и ODDPARITY

Добавлено через 2 минуты и 40 секунд
Melevir, не, данные можно отправлять сразу по 9 байт, а каждый байт в пакет будет заворачиваться сам.

если есть готовое ПО, можно посмотреть как сделано в нем %)
PM MAIL ICQ   Вверх
Melevir
Дата 31.7.2009, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



GoldFinch, я наверное туплю... не понимаю что это дает smile 
PM MAIL   Вверх
GoldFinch
Дата 31.7.2009, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



наверное то что число единичных разрядов будет четным или нечетным, соответственно в правильном пакете будет 0 или 1 бит четности
для oddparity наверное будет 00000000 1
для evenparity наверное будет 00000000 0
PM MAIL ICQ   Вверх
Melevir
Дата 31.7.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



А к готовому исходников нету:( Только програмулина сама...
А с заворачианием отдельно каждого байта я так и не понял... Может, пример где есть?smile
PM MAIL   Вверх
xvr
Дата 31.7.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(GoldFinch @ 31.7.2009,  11:31)
а надо было всего-то почитать MSDN
http://msdn.microsoft.com/en-us/library/aa...28VS.85%29.aspx
Код

Parity
    EVENPARITY
    MARKPARITY
    NOPARITY
    ODDPARITY
    SPACEPARITY

видимо имелось ввиду EVENPARITY и ODDPARITY

IMHO имелось в виду MARKPARITY и SPACEPARITY.
Но тогда данные придется отсылать по частям:
  •  Выставляется MARKPARITY 
  •  Отсылается первые 3 байта
  •  Завем FlushFileBuffers
  •  Дожидаемся, когда байты РЕАЛЬНО уйдут из UART'а (т.е. ждем дополнительно время передачи 3х байтов на 14400 + еще немного)
  •  Переключаем в SPACEPARITY
  •  Отсылаем остаток
  •  Завем FlushFileBuffers
  •  Дожидаемся, когда байты РЕАЛЬНО уйдут из UART'а
Данный способ называется 'удаление гланд автогеном через задницу'  smile 

PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0615 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.