|
RS-232 на скоростях 115200 и х2 |
|
|
|
Jun 30 2015, 12:24
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 16-02-11
Пользователь №: 63 037

|
115200/9/2=6400 Скорость приема. Скорее такой параметр мне нужен. Поэтому делю на 2. Подскажите как правильно написать?
Сообщение отредактировал rf_pcb - Jun 30 2015, 12:27
|
|
|
|
|
Jun 30 2015, 12:28
|

Местный
  
Группа: Свой
Сообщений: 417
Регистрация: 28-10-04
Из: Украина
Пользователь №: 1 002

|
Цитата(rf_pcb @ Jun 30 2015, 16:05)  Прошу дать совет Получу я свои 7200? ну хоть 5000 байт/с? >>я должен увидеть скорость приема близкую к 7200 байт/с (115200/8/2). Неправда. 115200/10=11,52 килобайт\сек. Это в идеале. Десять битов на посланный байт. >>Пишу ПО в Билдере, использую стандартный API функции Прочтите мой ответ "по буквам". А затем "слитно". Как быстрее? А почему? Правильно выбирайте функции. Непременно получите. Удачи.
--------------------
Умею молчать на 37 языках...
|
|
|
|
|
Jun 30 2015, 17:42
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 16-02-11
Пользователь №: 63 037

|
Подскажите пожалуйста какие функции Вы используете? Может есть пример?
|
|
|
|
|
Jun 30 2015, 20:23
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 16-02-11
Пользователь №: 63 037

|
В программе использую поток - выставляю максимальный приоритет (в данном случае получаю приоритет - 15). В XP получаю скорость данных в 1 сек. около 800 циклов обращений (1 цикл = 1 символ передачи и 1 символ приёма). В W7 и в W8 циклов меньше в разы. Начинаю отключать процессы в виндах - количество циклов возрастает, но не значительно... Кроме того, в настройках таймаутах порта при потоке ставлю 0 для макс. скорости. Возможно, что проблема в виндах. Какие процессы отключить, чтобы добиться требуемой теоретической скорости?
|
|
|
|
|
Jul 1 2015, 06:25
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 155
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(rf_pcb @ Jun 30 2015, 23:23)  ...(1 цикл = 1 символ передачи и 1 символ приёма).В W7 и в W8 циклов меньше в разы.... Вы как-то быстро принимаете!!! Надо нододрыгом, софтверно и по-битно  Но если серьёзно - Вам уже основные вектора сказали - отдавать работу по приёму на нижний уровень. Чем больше - тем лучше. Если говорить применительно к форточкам - Вы забываете такие вещи как переключение потоков и межпроцессную передачу данных и управления. Ведь порты обслуживают драйвера - а это не пользовательское кольцо привилегий. Вот Вам и накладные расходы. Если Вы посимвольно - то Вы как минимум всё суммируете по одному разу, а это тысячи и тысячи тактов. Как принимать пачки - тут либо по времени резать(тайминг ожидания), либо строго длину пачки ожидать(но необходимо обязательно предусмотреть самовыравнивание), либо опираться на управляющие доп. сигналы. где-то так
|
|
|
|
|
Jul 1 2015, 07:23
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 16-02-11
Пользователь №: 63 037

|
Прошу меня услышать. Я спросил, как мне передавая и принимая один байт, добиться скорости 115200 кб/с. Для снятия всех вопросов с железом я установил перемычку на COM порт. Так можно? Можно. Значит раз есть такая скорость, должны быть способы ее достижения. Вопрос и звучит, как мн её добитьсься. В решаемой задаче побайтный прием и передача. От этого и отталкиваюсь. Служебыне сигналы не использую.
|
|
|
|
|
Jul 1 2015, 07:32
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (rf_pcb @ Jul 1 2015, 10:23)  В решаемой задаче побайтный прием и передача. Меняйте условия задачи. Из приложения, да еще и на билдере, побайтно, да еще и через USB-COM (угадал?) добится 115200 нереально. Так-что бросайте фантазии о такой скорости - собирайте пакеты ( по любому задержки получаете при проходе через операционку, API и драйвера ) и передавайте. В таком случае ограничение 800 байт в секунду станет ограничением 800 пакетов в секунду и практически перестанет влиять.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 1 2015, 11:30
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 16-02-11
Пользователь №: 63 037

|
может и угадали)) Сейчас я тестирую с перемычкой на com порту. Результат 200-400 байт /с. Вы считаете это нормально? В моем представлении - есть интерфейс - есть заявленная скорость. Значит должны быть способы реализации. Откуда это информация про пакеты? про задержки в операционке?! Тактовая частота процессора 3 ГГц!
|
|
|
|
|
Jul 1 2015, 19:08
|
Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 3-07-07
Из: С-Петербург
Пользователь №: 28 859

|
Уважаемый rf_pcb, Вы попробуйте проделать один простой эксперимент: подключите осциллограф на сигнал порта, по которому бегут отправляемые вами данные. Увидите много чего интересного. Вы наверное, предполагаете, что порт работающий на скорости 115200 будет отправлять 10- битные комбинации вплотную одна к другой, без пауз между ними? Придется разочароваться- между отправляемыми вами байтами будет пауза намного превышающая время передачи одного байта в формате 8N1. Из-за нее вы и не получаете желаемой скорости. После этого можно подумать, откуда берутся эти задержки и как влияет частота пироцессора на скорость передачи по com-порту. Правильный ответ - никак не влияет. Возможно, что время на открыть и закрыть порт уходит в разы больше чем на передачу байта. Что делать вам уже сказали : открыть порт, передать килограмм байт, закрыть порт.
|
|
|
|
|
Jul 2 2015, 05:11
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (jcxz @ Jul 1 2015, 19:41)  ... поциент безнадёжен. в морг  Ну не факт. Просто первое столкновение паскалевского-виндозного программиста с реальным миром железа о котором он до сих пор знал только про гигагерцы процессора. Постепенно, при желании, сможет осознать, что такое операционная система, что такое операционная система реального времени и почему WIN ей не является, что такое шедулер и как он задачи переключает, что его супер-пупер программа только одна из задач запускаемая периодически, что потом еще в системе куча кода, который распределяет доступ к аппаратным ресурсам типа того-же USB, что USB это ни разу ни байтовый интерфейс, что потом в конце есть еще драйвера. Хотя про драйвера он явно слышал, хотя явно только в контексте типа "скачать свежие"  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 3 2015, 06:38
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 10-02-09
Из: Выборг
Пользователь №: 44 667

|
Цитата(rf_pcb @ Jul 1 2015, 14:30)  может и угадали)) Сейчас я тестирую с перемычкой на com порту. Результат 200-400 байт /с. Вы считаете это нормально? В моем представлении - есть интерфейс - есть заявленная скорость. Значит должны быть способы реализации. Откуда это информация про пакеты? про задержки в операционке?! Тактовая частота процессора 3 ГГц! Скорость 115200 бит в сек., показывает что время передачи одного бита будет равно 1/115200 = 8,7 мкс и только. Чтобы передать все 115200 бит (или 11520 байт 8N1) за одну секунду нужно чтобы между стоп и старт битами каждого передаваемого байте не было вообще промежутков. Для компьютера это не реально, абсолютно. Даже если сформировать массив из 11520 байт и одной посылкой отправить с СОМ-порт, то все равно между передаваемыми байтами будут некоторые временные интервалы.
|
|
|
|
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|
|