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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Com порт, как юзать 9 байт 
:(
    Опции темы
AlexNor
Дата 23.9.2004, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Можно организовать протокол с непосредственной передачей двоичных данных. При этом управляющие символы и байты данных различаются с помощью настройки дополнительного девятого бита в UART. Для управляющих символов этот бит устанавливается в "1". Первым в посылке передается управляющий символ с единичным девятым битом - остальные его "нормальные" биты могут содержать адрес устройства-получателя, признак начала/конца посылки и что-нибудь еще. Затем передаются байты данных с нулевым девятым битом. Все принимающие устройства узнают по девятому биту управляющий символ и по содержанию его остальных битов определяют, кому адресованы последующие данные

А что это за 9-й бит такой??? Как его читать\устанавливать в программе???
Везде излазил - но все пишут что можно но никто не говорит как?!
ПОМОГИТЕ!

Это сообщение отредактировал(а) AlexNor - 23.9.2004, 10:32
--------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... "
PM MAIL   Вверх
Darked
Дата 23.9.2004, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 26.2.2004
Где: Южный Урал

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



Классический пример протокола для RS232. 9-ый бит - бит паритета. Смотря на чем ты пишешь и с использованием каких средств, зависит как его савить/снимать.


--------------------
Veni, Vidi, Vici !!!
PM MAIL ICQ   Вверх
AlexNor
Дата 24.9.2004, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Darked
в смысле бит чётности?
если да то тогда не понятно как с ним работать.
Пишу на С++.

Проблема в чём: для передачи байта

Код

GetCommState(hComPort, &dcb);
dcb.fParity = false; // сами будем устанавливать этот бит
dcb.Parity = MARKPARITY; // установим бит чётности
SetCommState(hComPort,&dcb)
DWORD writen = 0;
BYTE bt = 0x35;
WriteFile(hComPort, &bt, 1, &writen, 0);

GetCommState(hComPort, &dcb);
dcb.fParity = false; // сами будем устанавливать этот бит
dcb.Parity = SPACEPARITY // сбросим бит чётности
SetCommState(hComPort,&dcb)
writen = 0;
bt = 0x12;
WriteFile(hComPort, &bt, 1, &writen, 0);


т.е. я хочу передать один байт с установленым битом чётности а другой нет.

Но возникает проблема а при приёме как мне узнать у какого из принятых байт установлен бит чётности, а у какого нет???

Ведь ReadFile возвращает токо сам байт!

Это сообщение отредактировал(а) AlexNor - 24.9.2004, 13:30
--------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... "
PM MAIL   Вверх
Russ
Дата 24.9.2004, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(AlexNor @ 23.9.2004, 11:23)
А что это за 9-й бит такой??? Как его читать\устанавливать в программе???
Везде излазил - но все пишут что можно но никто не говорит как?!
ПОМОГИТЕ!

9-й бит и бит паритета - это две обсолютно разные вещи.
9-й бит поддерживают некоторые микроконтроллеры, например MCS 51, и он прибавляется аппаратно. Его назначение может быть различное, в зависимости от применяемого программного решения. Обычно 9 бит исрользуют при обмене информации с другими микроконтроллерами.

В PC RS-232 9 бит не поддерживает.
PM MAIL   Вверх
AlexNor
Дата 24.9.2004, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Из описания:
"Давтчик является автономным устройством на интерфейсе RS485".
Точно - что он работает с PC. (есть прога с которой он общается - она под винду-но исходников её нету sad.gif )
По документации сказано только что при передаче байта с адресом неободимо установить КОНТРОЛЬНЫЙ РАЗРЯД в 1. При передаче информационных байт КОНТРОЛЬНЫЙ РАЗРЯД долженн равнятся 0.
Я вот и не пойму:
Что это за контрольный разряд такой - в одном форуме выцепил вот-что
Цитата

Всем спасибо. Да в итоге все решилось взведением dcb.Parity в значения 3 и 4, с последующим SetCommState.
2kaifo: здесь Toshkin догадался, действительно на COM циклически подключаются нескодько устройств, и каждому присваиваивается свой адрес 1, 2, 3, .....
и действительно приначале связи посылается синхронизационный байт с номерои устройства (к кому обращаемся), а после отзыва посылаются байты со всякими данными, и правда нужно, чтобы первый байт был битом четности равным 1, а в остальных байтах бит четности должен бытьравным 0.

это то что мне нужно. Но токо как с ним работать под виндой ума не приложу - и нигде ни слова об этом! Отослать байты - пол беды. Вроде через SetCommState я могу установить с каким битом чётности (установленным или нет) передавать байт, НО КАК МНЕ ПРИНЯТЬ этот байт так что бы посмотреть - установлен ли там бит чётности или нет - незнаю sad.gif
--------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... "
PM MAIL   Вверх
Darked
Дата 24.9.2004, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 26.2.2004
Где: Южный Урал

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



Russ
Может я чего - то не понимаю, а в чем разница??? При передачи по RS232 бит паритете и используется обычно для отделения данных от адреса. ИМХО так.



--------------------
Veni, Vidi, Vici !!!
PM MAIL ICQ   Вверх
AlexNor
Дата 24.9.2004, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Darked
да-да-да!!! НО КАК ПОД ВИНДУ ЭТО СДЕЛАТЬ???sad.gif
--------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... "
PM MAIL   Вверх
Darked
Дата 25.9.2004, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 26.2.2004
Где: Южный Урал

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



AlexNor
Думаю, мануаы просматриваю,исхдоники....ищу


--------------------
Veni, Vidi, Vici !!!
PM MAIL ICQ   Вверх
AlexNor
Дата 25.9.2004, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Darked
спасибо rolleyes.gif

я уже третий день инет лопачу - и нефига sad.gif Везде где токо начиналась обсуждаться такая тема - всё заканчивается или "под Windows нельзя" или "используй SetCommState".

Пробовал и так:
1. передавал два байта предварительно установив
Код

dcb.fParity = false;  // сами будем устанавливать этот бит
dcb.Parity = MARKPARITY;  // установим бит чётности
SetCommState(hComPort,&dcb)


2. передавал два байта предварительно установив
Код

dcb.fParity = false;  // сами будем устанавливать этот бит
dcb.Parity = SPACEPARITY;  // сбросим бит чётности
SetCommState(hComPort,&dcb)


При приемё каждого байта вызывал GetCommState - результат отрицательный - он мне возвращал свои настройки (настройки принимающей стороны).
Может через DeviceIoControl как-то можно - я туда залез - дебри.... sad.gif
--------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... "
PM MAIL   Вверх
Gorlum
Дата 25.9.2004, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



9-й бит это бит четности, ты должен ставить его перед передачей.
Если хош, я могу тебе дать пару доков по УАРТу (конспекты електронные с политеха остались)
PM MAIL ICQ   Вверх
AlexNor
Дата 25.9.2004, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Gorlum
я и ставлю перед передачей:
Код

dcb.fParity = false;  // сами будем устанавливать этот бит
dcb.Parity = MARKPARITY;  // установим бит чётности, т.е. бит чётности равен 1
SetCommState(hComPort,&dcb)
DWORD writen = 0;
BYTE bt = 0x35;
WriteFile(hComPort, &bt, 1, &writen, 0);
....


проблема в том что я его принять не могу (бит чётности этот). В смысле ReadFile возвращает токо байт! и всё! А с каким он битом чётности пришёл - это знает токо драйвер наверное.

Т. е. я хочу узнать: как в Win32 API у каждого принятого байта анализировать с каким битом чётности он пришёл???

Цитата

Если хош, я могу тебе дать пару доков по УАРТу (конспекты електронные с политеха остались)

давай, буду благодарен - авось там есть что нить по этому поводу
[email protected]

Это сообщение отредактировал(а) AlexNor - 25.9.2004, 14:36
--------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... "
PM MAIL   Вверх
Gorlum
Дата 25.9.2004, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Тебе не надо его принимать он устанавливается непосредственно при передаче информации, и если ты принимаешь какой либо байт то бит четности еденица, бо без него низзя передать ниче.
То шо ты мне код переслал я дупля не отбиваю, я пока что пишу свой первый калькулятор на цпп, я больше по микроконтроллерам.
Ща перешлю на мыло доки но они правда тоже больше по железу но про бич четности там гденить быть обязано.
PM MAIL ICQ   Вверх
Gorlum
Дата 25.9.2004, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Отправил, если шо, стукни в асю 124944684
PM MAIL ICQ   Вверх
AlexNor
Дата 25.9.2004, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Gorlum
принимать-то как раз мне его и надо smile.gif - знать бы как.

инфу принял - но там (в основном) электронная часть... sad.gif
--------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... "
PM MAIL   Вверх
Gorlum
Дата 25.9.2004, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ты можешь что нибудь получить без этого бита, или тебе именно надо организовать ожидание начала передачи?
Если при помощи ReadFile ты можешь осуществлять прием, тебе не надо ловить этот бит - если передача началася то он стоит, нет значит нет передачи.
Если те надо именно ожидать его появления я бы посоветовал написать это на асме smile.gif




Цитата
Собственно данные (5, 6, 7 или 8 бит) сопровождаются стартовим битом, битом четности/нечетности (если такой контроль програмно предусмотренный) и стоповим еденичным сигналом, который включает 1; 1,5 или 2 стоп-бита. Получив стартовий біт, приемник вибирает з линии бити даних через определенные интервалы времени.
                                                                                                          доц. Новацкий А.А. smile.gif



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


Опытный
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 26.2.2004
Где: Южный Урал

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



Gorlum
Прочитай еще раз его вопорс ; ))))) А если серьезно, то по протоколу данные от адреса отличаются установкой 9-го бита. ВотAlexNor 'у и нужно определять установку или отсутствие этого бита, чтобы понять что же ему пришло.



--------------------
Veni, Vidi, Vici !!!
PM MAIL ICQ   Вверх
AlexNor
Дата 25.9.2004, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Darked
я тут что то нарыл с DeviceIoControl.

Из MSDN (ms-help://MS.MSDNQTR.2003APR.1033/devio/base/ioctl_serial_lsrmst_insert.htm)
Цитата

BOOL DeviceIoControl(
  (HANDLE) hDevice,            // handle to device
  IOCTL_SERIAL_LSRMST_INSERT,  // dwIoControlCode
  (LPVOID) lpInBuffer,        // input buffer
  (DWORD) nInBufferSize,      // size of input buffer
  NULL,                        // lpOutBuffer
  0,                          // nOutBufferSize
  (LPDWORD) lpBytesReturned,  // number of bytes returned
  (LPOVERLAPPED) lpOverlapped  // OVERLAPPED structure
);

The IOCTL_SERIAL_LSRMST_INSERT control code enables or disables the placement of line status and modem status values into the regular data stream that an application acquires through the ReadFile function.

When this line-status and modem-status data placement mode is enabled, status values are preceded in the data stream by an escape character. The user-definable escape character is set by the IOCTL_SERIAL_LSRMST_INSERT control code. Status values consist of 1 to 3 BYTEs. See the Remarks section following for status value details.


Но блин я эту функцию понять не могу! sad.gif Она вроде должна пихать байты сосотяния после каждого принятого байта. И больше я не понял практически ничего! Блин. Меня саксовцы уже ну зае..ли!(нервы) Они любят то что и так понятно разжёвывать - а то что посложнее будет - вооще практически не описывать...

Это сообщение отредактировал(а) AlexNor - 25.9.2004, 22:12
--------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... "
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0559 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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