реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> RS-232 на скоростях 115200 и х2
rf_pcb
сообщение Jun 30 2015, 12:05
Сообщение #1


Участник
*

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



Прошу дать совет и прокоментировать мои рассуждения.
Пишу ПО по для приема данных от МК на скорости 115200 по интерфейсу RS-232.
В качестве простейшего теста ставлю на ПК перемычку между Rx и Tx.
1 байт, 1 стоп, без четности и всего остального.
Если я правильно понимаю я должен увидеть скорость приема близкую к 7200 байт/с (115200/8/2).
Пишу ПО в Билдере, использую стандартный API функции, но скорость вижу от 200 до 400 байт /с.
Пробовал с выводом на график и с записью в фаил и просто из памяти в фаил, но больше чем 400 байт /с не получил.
Заметил особенность что на XP и 7ке разные скорости.
Подскажиет как быть?
Получу я свои 7200? ну хоть 5000 байт/с?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 30 2015, 12:21
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 297
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(rf_pcb @ Jun 30 2015, 18:05) *
Если я правильно понимаю я должен увидеть скорость приема близкую к 7200 байт/с (115200/8/2).

Нет.
Если правильно напишете, то получите скорость = 115200/10 Б/с
Go to the top of the page
 
+Quote Post
rf_pcb
сообщение Jun 30 2015, 12:24
Сообщение #3


Участник
*

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



115200/9/2=6400
Скорость приема. Скорее такой параметр мне нужен. Поэтому делю на 2.
Подскажите как правильно написать?

Сообщение отредактировал rf_pcb - Jun 30 2015, 12:27
Go to the top of the page
 
+Quote Post
Gorby
сообщение Jun 30 2015, 12:28
Сообщение #4


Местный
***

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



Цитата(rf_pcb @ Jun 30 2015, 16:05) *
Прошу дать совет
Получу я свои 7200? ну хоть 5000 байт/с?


>>я должен увидеть скорость приема близкую к 7200 байт/с (115200/8/2).
Неправда. 115200/10=11,52 килобайт\сек. Это в идеале. Десять битов на посланный байт.

>>Пишу ПО в Билдере, использую стандартный API функции
Прочтите мой ответ "по буквам". А затем "слитно". Как быстрее? А почему? Правильно выбирайте функции.

Непременно получите. Удачи.


--------------------
Умею молчать на 37 языках...
Go to the top of the page
 
+Quote Post
rf_pcb
сообщение Jun 30 2015, 17:42
Сообщение #5


Участник
*

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



Подскажите пожалуйста какие функции Вы используете? Может есть пример?
Go to the top of the page
 
+Quote Post
rf_pcb
сообщение Jun 30 2015, 20:23
Сообщение #6


Участник
*

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



В программе использую поток - выставляю максимальный приоритет (в данном случае получаю приоритет - 15).
В XP получаю скорость данных в 1 сек. около 800 циклов обращений (1 цикл = 1 символ передачи и 1 символ приёма).
В W7 и в W8 циклов меньше в разы.
Начинаю отключать процессы в виндах - количество циклов возрастает, но не значительно...
Кроме того, в настройках таймаутах порта при потоке ставлю 0 для макс. скорости.
Возможно, что проблема в виндах. Какие процессы отключить, чтобы добиться требуемой теоретической скорости?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 1 2015, 05:54
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 7 902
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Отсылайте сразу килограмм символов, после чего принимайте этот килограмм обратно. Увеличение скорости затмит солнце.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jul 1 2015, 06:25
Сообщение #8


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 079
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(rf_pcb @ Jun 30 2015, 23:23) *
...(1 цикл = 1 символ передачи и 1 символ приёма).В W7 и в W8 циклов меньше в разы....


Вы как-то быстро принимаете!!! Надо нододрыгом, софтверно и по-битно sm.gif Но если серьёзно - Вам уже основные вектора сказали -
отдавать работу по приёму на нижний уровень. Чем больше - тем лучше. Если говорить применительно к форточкам - Вы забываете такие вещи как
переключение потоков и межпроцессную передачу данных и управления. Ведь порты обслуживают драйвера - а это не пользовательское кольцо
привилегий. Вот Вам и накладные расходы. Если Вы посимвольно - то Вы как минимум всё суммируете по одному разу, а это тысячи и тысячи тактов.

Как принимать пачки - тут либо по времени резать(тайминг ожидания), либо строго длину пачки ожидать(но необходимо обязательно
предусмотреть самовыравнивание), либо опираться на управляющие доп. сигналы.

где-то так
Go to the top of the page
 
+Quote Post
rf_pcb
сообщение Jul 1 2015, 07:23
Сообщение #9


Участник
*

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



Прошу меня услышать.
Я спросил, как мне передавая и принимая один байт, добиться скорости 115200 кб/с.
Для снятия всех вопросов с железом я установил перемычку на COM порт. Так можно? Можно.
Значит раз есть такая скорость, должны быть способы ее достижения.
Вопрос и звучит, как мн её добитьсься.
В решаемой задаче побайтный прием и передача. От этого и отталкиваюсь. Служебыне сигналы не использую.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 1 2015, 07:32
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
rf_pcb
сообщение Jul 1 2015, 11:30
Сообщение #11


Участник
*

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



может и угадали))
Сейчас я тестирую с перемычкой на com порту. Результат 200-400 байт /с. Вы считаете это нормально?
В моем представлении - есть интерфейс - есть заявленная скорость. Значит должны быть способы реализации.
Откуда это информация про пакеты? про задержки в операционке?! Тактовая частота процессора 3 ГГц!
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 1 2015, 16:41
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 297
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(rf_pcb @ Jul 1 2015, 17:30) *
Откуда это информация про пакеты? про задержки в операционке?! Тактовая частота процессора 3 ГГц!

... поциент безнадёжен. в морг twak.gif
Go to the top of the page
 
+Quote Post
soldat_shveyk
сообщение Jul 1 2015, 19:08
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 411
Регистрация: 3-07-07
Из: С-Петербург
Пользователь №: 28 859



Уважаемый rf_pcb, Вы попробуйте проделать один простой эксперимент: подключите осциллограф на сигнал порта, по которому бегут отправляемые вами данные. Увидите много чего интересного.
Вы наверное, предполагаете, что порт работающий на скорости 115200 будет отправлять 10- битные комбинации вплотную одна к другой, без пауз между ними? Придется разочароваться- между отправляемыми вами байтами будет пауза намного превышающая время передачи одного байта в формате 8N1. Из-за нее вы и не получаете желаемой скорости. После этого можно подумать, откуда берутся эти задержки и как влияет частота пироцессора на скорость передачи по com-порту. Правильный ответ - никак не влияет.
Возможно, что время на открыть и закрыть порт уходит в разы больше чем на передачу байта.
Что делать вам уже сказали : открыть порт, передать килограмм байт, закрыть порт.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 2 2015, 05:11
Сообщение #14


Гуру
******

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



QUOTE (jcxz @ Jul 1 2015, 19:41) *
... поциент безнадёжен. в морг twak.gif

Ну не факт. Просто первое столкновение паскалевского-виндозного программиста с реальным миром железа о котором он до сих пор знал только про гигагерцы процессора. Постепенно, при желании, сможет осознать, что такое операционная система, что такое операционная система реального времени и почему WIN ей не является, что такое шедулер и как он задачи переключает, что его супер-пупер программа только одна из задач запускаемая периодически, что потом еще в системе куча кода, который распределяет доступ к аппаратным ресурсам типа того-же USB, что USB это ни разу ни байтовый интерфейс, что потом в конце есть еще драйвера. Хотя про драйвера он явно слышал, хотя явно только в контексте типа "скачать свежие" sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Abrams
сообщение Jul 3 2015, 06:38
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 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 байт и одной посылкой отправить с СОМ-порт, то все равно между передаваемыми байтами будут некоторые временные интервалы.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th May 2017 - 05:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01555 секунд с 7
ELECTRONIX ©2004-2016