Kitsok Posted March 4, 2011 Share Posted March 4, 2011 Добрый день! Итак, имеется в наличии старенькое устройство, которое использует 9 бит для обозначения начала кадра. Также имеется Moxa 8410, связь держим по RS-485. Поскольку напрямую управлять битом четности не получается, я использую функцию SetSerialParams (по памяти, в ней выставляется четность, кол-во бит данных и стоповых бит) из библиотеки, которая шла на CD. Чтобы выставить бит, включаю режим четности MARK (всегда 1), когда надо убрать - SPACE. Ну и при отправке кадра ставлю MARK, отправляю первый байт, проверяю, что выходная очередь пуста, ставлю SPACE и шлю остатки. Тут кроется проблема номер один. Не смотря на то, что очередь пуста (функция проверки возвращает ноль), если изменить режим 9 бита и сразу начать передачу, то протокол не срастается - пришлось поставить задержку usleep(1). Теперь все работает, но есть проблема номер два - судя по показаниям сниффера ports из примеров (с диска), задержка получается не 1 мкс, а 10мс. Осцилограф пока не подключал, так что возможно, это не ошибка usleep, а ошибка таймера, показания которого берет ports. С отправкой разобрался, стал разбираться с приемом данных и понял, что узнать, какое значение 9 бита у принятого байта не представляется возможным. Описанные в интернетах флаг termios PARMRK не работает, т.е. все байты 0xff префиксуются 0xff (вместо одного пришедшего физически я считываю два одинаковых), а вот байты с неправильным (относительно заданного режима порты) битом четности никак не отмечаются. Подскажите пожалуйста, как мне отловить этот 9 бит на приеме? Заранее спасибо! Link to comment
Komantsev Posted March 5, 2011 Share Posted March 5, 2011 Добрый день, Попробуем подумать с программистами, как проще сэмулировать 9-битную посылку. Для конкретики - могли бы скинуть кусочки кода, которыми передаете и принимаете данные? Link to comment
Kitsok Posted March 5, 2011 Author Share Posted March 5, 2011 Добрый день, Попробуем подумать с программистами, как проще сэмулировать 9-битную посылку. Для конкретики - могли бы скинуть кусочки кода, которыми передаете и принимаете данные? Добрый день! Сейчас в личку зашлю. Link to comment
Komantsev Posted March 5, 2011 Share Posted March 5, 2011 Получил! Будем разбираться. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now