Jump to content
Форум по продукции MOXA

Kitsok

Пользователи
  • Posts

    2
  • Joined

  • Last visited

Kitsok's Achievements

Новичок

Новичок (1/5)

0

Reputation

  1. Добрый день! Итак, имеется в наличии старенькое устройство, которое использует 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 бит на приеме? Заранее спасибо!
×
×
  • Create New...