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

 
 
> Windows7: прием байтов через COM-порт без потерь, Кто-то имеет личный опыт? чем побороть потерю отдельных байтов?
Ruslan1
сообщение May 22 2017, 06:27
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Здравствуйте!
Есть Windows7 Pro, 32-bit, компьютер- китайский одноплатник на Intel 1037U, 4GB RAM.
СОМ-порты- 4 штуки прямо на материнке.
И есть внешний передатчик, посылающий в COM-порт пакеты.
Скорость- 115200, стандартный формат 8N1.
Длина пакета- не более 255 байт, межпакетный интервал- не менее 4 байт, часто гораздо больше (десятки миллисекунд). Каждый пакет имеет контрольную сумму (crc16), по которой и принимается решение о валидности пакета. Общая загрузка канала где-то 5-8 килобайт в секунду, то есть до 80%. Загрузка CPU около 10-15%.

И есть самописная программа на С++Билдере (6), данный вариант делался по прерываниям, с несколькими потоками (базой был вот этот документ).
Есть поток, принимающий все байты по прерываниям и валящий в большой кольцевой буфер. И другой поток периодически выгребает байты из буфера и делит на пакеты для обработки, проверяет валидность.

Только прием, никаких переключений на передачу.
В результате приемник иногда пропускает байты. То есть все принятые байты всегда совпадают с переданными, но некоторые байты пропущены. Всегда пропущено не более одного байта за раз, в любом месте пакета. Часто бывает что пропущено по одному байту в двух следующих друг за другом пакетах.

Обычно фактов потери байта где-то 10-20 в сутки. Корреляция с действиями Виндоуса пока не найдена, очень уж все случайно.
Потери именно в компьютере- подключенный прямо к этому же разъему логический анализатор исправно ловит все байты, никакого криминала или отклонений во времянке не обнаружено (по уровню тоже все без проблем)


Вопросов два:
1. Кто-то в подобных условиях добивался абсолютно безошибочного приема потока через COM-порт в Виндоус (7) на 115200?
2. куда копать? Сильно надеюсь что моя программа виновата. На другом железе пробовал- эффект тот же, то есть это не электроника глючит.
С приоритетами игрался, никакого эффекта.

Заранее спасибо за любые советы (по существу).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
neiver
сообщение May 22 2017, 08:25
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



Начинать надо с того, что COM порт вообще и его реализация в Windows в частности, не гарантирует безошибочной передачи данных.
То есть рассчитывать на это нельзя, и контроль и/или обеспечение целостности данных надо реализовывать в протоколе обмена. Поврежненный пакед должен отбрасываться и если нужно передаваться повторно.
По возможным причинам. У стандартного аппаратного СОМ порта есть внутренний буфер, как правило размером 15 байт. Это не тот буфер, который задается в SetupComm. Если драйвер порта по каким-то причинам не успеет прочитать этот буфер, то принятые байты теряются, о чем извещают соответствующие флаги возвращаемые ClearCommError.
Приоритет пользовательского процесса не влиет на приоритет драйвера СОМ порта при обработке прерываний.
Go to the top of the page
 
+Quote Post
sonycman
сообщение May 22 2017, 13:48
Сообщение #3


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(neiver @ May 22 2017, 12:25) *
Начинать надо с того, что COM порт вообще и его реализация в Windows в частности, не гарантирует безошибочной передачи данных.
То есть рассчитывать на это нельзя, и контроль и/или обеспечение целостности данных надо реализовывать в протоколе обмена. Поврежненный пакед должен отбрасываться и если нужно передаваться повторно.
По возможным причинам. У стандартного аппаратного СОМ порта есть внутренний буфер, как правило размером 15 байт. Это не тот буфер, который задается в SetupComm. Если драйвер порта по каким-то причинам не успеет прочитать этот буфер, то принятые байты теряются, о чем извещают соответствующие флаги возвращаемые ClearCommError.
Приоритет пользовательского процесса не влиет на приоритет драйвера СОМ порта при обработке прерываний.

Тоже думаю, что проблема просто в переполнении ФИФО аппаратного приёмника.
Потому, что винда тупо не успевает выгребать данные.

Но тогда надо проверить, флаг переполнения должен быть установлен.

Может, стоит попробовать адаптер COM->USB, там аппаратная буферизация может быть лучше, и ошибок не будет?
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 25 2017, 22:14
Сообщение #4


Гуру
******

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



Цитата(sonycman @ May 22 2017, 15:48) *
Тоже думаю, что проблема просто в переполнении ФИФО аппаратного приёмника.
Потому, что винда тупо не успевает выгребать данные.

Не думайте ибо этого не может быть.
Даже если-б загрузка CPU была == 100%, драйвер COM-порта, работающий на высоком уровне привилегий, всё равно успевал бы всё выгребать. Тем более на такой низкой скорости. Тем более, что и загрузка CPU никакая.

Цитата(AHTOXA @ May 24 2017, 09:07) *
Я делал так: в потоке приёма создавал на куче пакет, собирал его, проверял валидность, потом отправлял главному окну указатель на этот пакет при помощи PustMessage(). Главный поток обрабатывал пакет и удалял его.

Хмм... А очередь сообщений, связанная с окном и её обработка тредом окна гарантирует, что сообщения из этой очереди будут обрабатываться в том же порядке, в котором они постились в очередь? Тем более если постинг идёт из разных тредов?
Я бы на это не рассчитывал.
Да и вроде в случае межпоточной передачи сообщений, PostMessage аналогичен SendMessage-у.

Цитата(DS @ May 22 2017, 21:49) *
В 7 похоже, есть баг в COM драйвере. Многие программы, нормально работавшие с XP, глючат с ком-портами на 7. Единственное, что надежно под ней работает -USB-COM адаптер, причем с FTDI чипом.

Моя программа, написанная много лет назад под WinXP, сейчас работает одновременно с 3-я компортами на Win8, каждый - на скорости 921600 бод (отладочные потоки 3-х устройств). Сейчас это COM-порты - на PCI-карте, раньше были - на USB-UART-ах (FTDI и CP210x), а также - комбинации того и другого.
До этого всё так же работало на Win10 на другом компе. Работает это целыми днями.
Так что проблема 99.9% не в виндовых дровах. А как всегда - в кривых руках написателей этих "многих программ".
Проблемы возникают только с PL230x на высоких скоростях. На всех опробованных виндах. Вот тут явно дело в дровах Prolific.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 26 2017, 07:05
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(jcxz @ May 26 2017, 03:14) *
Хмм... А очередь сообщений, связанная с окном и её обработка тредом окна гарантирует, что сообщения из этой очереди будут обрабатываться в том же порядке, в котором они постились в очередь?

Да, гарантирует:
Цитата
With the exception of the WM_PAINT message, the WM_TIMER message, and the WM_QUIT message, the system always posts messages at the end of a message queue. This ensures that a window receives its input messages in the proper first in, first out (FIFO) sequence.

Цитата(jcxz @ May 26 2017, 03:14) *
Тем более если постинг идёт из разных тредов?

Без разницы.
Цитата(jcxz @ May 26 2017, 03:14) *
Я бы на это не рассчитывал.

А здесь не надо гадать, надо просто читать документацию.
Цитата(jcxz @ May 26 2017, 03:14) *
Да и вроде в случае межпоточной передачи сообщений, PostMessage аналогичен SendMessage-у.

Нет.

ЗЫ. Совершенно очевидно, что вы не разбираетесь в теме ©.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 26 2017, 10:14
Сообщение #6


Гуру
******

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



Цитата(AHTOXA @ May 26 2017, 09:05) *
Да, гарантирует:
А здесь не надо гадать, надо просто читать документацию.

Читать лень - сейчас это не нужно. Но помнится, что в WinAPI есть функции, позволяющие считывать сообщения из очереди по маске. А значит - в произвольном порядке.

Цитата(AHTOXA @ May 26 2017, 09:05) *
Нет.
ЗЫ. Совершенно очевидно, что вы не разбираетесь в теме ©.

Да ладно! А если внимательнее прочитать описание WinAPI? wink.gif

Цитата(AHTOXA @ May 24 2017, 09:07) *
Я делал так: в потоке приёма создавал на куче пакет, собирал его, проверял валидность, потом отправлял главному окну указатель на этот пакет при помощи PustMessage().

А если надо отправить сообщение не главному окну? Или у Вас всегда приложения только с одним окном? laughing.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 26 2017, 11:23
Сообщение #7


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(jcxz @ May 26 2017, 15:14) *
Читать лень - сейчас это не нужно. Но помнится, что в WinAPI есть функции, позволяющие считывать сообщения из очереди по маске. А значит - в произвольном порядке.

Читать лень, а пофлудить - не лень? Не в произвольном, а FIFO.
Если вы отправляете сообщения WM_MY_DATA, то они будут извлекаться в том порядке, в котором были отправлены.
Цитата(jcxz @ May 26 2017, 15:14) *
Да ладно! А если внимательнее прочитать описание WinAPI? wink.gif

Если почитаете, то, может, немного начнёте разбираться. Но я сомневаюсь и в этом.
Цитата(jcxz @ May 26 2017, 15:14) *
А если надо отправить сообщение не главному окну? Или у Вас всегда приложения только с одним окном? laughing.gif

Без разницы, какому окну. Любому.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 26 2017, 12:38
Сообщение #8


Гуру
******

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



Цитата(AHTOXA @ May 26 2017, 13:23) *
Если вы отправляете сообщения WM_MY_DATA, то они будут извлекаться в том порядке, в котором были отправлены.

А если другое не WM_MY_DATA?

Цитата(AHTOXA @ May 26 2017, 13:23) *
Если почитаете, то, может, немного начнёте разбираться. Но я сомневаюсь и в этом.

Мне его за Вас читать недосуг. Я то прекрасно знаю, что если исходный тред не имеет окна и связанной с ним обработки очереди сообщений
(а так скорее всего и есть, так как треду, читающему байты из потока COM-порта, окно не нужно), то работа SendMessage() и PostMessage() похожа.
Но я сильно сомневаюсь, что Вам это чем-то поможет. Вы это не читайте, а то вдруг ещё поумнеете! biggrin.gif

Цитата(AHTOXA @ May 26 2017, 13:23) *
Без разницы, какому окну. Любому.

Ну да, так и думал - представления о работе WinAPI и взаимодействии окон, тредов, сообщений Вы не имеете.
Отсюда начинаем думать, что будет если отправите этому "любому" окну ваши сообщения с указателями на буферы, а это окно получит WM_CLOSE (либо будет закрыто иным образом) и обработает его раньше?
Будет утечка памяти. Что и является обычным явлением в "прогах" написанных подобными Вам деятелями.

Цитата(XVR @ May 26 2017, 13:33) *
Вы не забывайте, что у ТС не микроконтроллер, а вполне взрослая ПС. Все кольцевые буфера уже сделаны в ядре ОС, зачем ему еще один у себя?

Затем, что обработка кадра - это не сферический конь в вакууме. Для её работы нужна как правило инфа, находящаяся в контролах управляющего окна.
Так что гораздо удобнее работать с этой инфой в пределах одного треда.
И зачем тогда выносить работу с кадрами в другой тред и поиметь кучу проблем с межпотоковым взаимодействием?
И я не говорю, что "нельзя". Я говорю, что "обычно удобнее" делать это в потоке управляющего окна. А уже байтики принимать/передавать в других тредах.

Цитата(XVR @ May 26 2017, 13:33) *
Но это уже клинические случаи biggrin.gif

По Вашему - изменение например протокола обработки потока байт - это клинический случай?
Или изменение скажем каких-то параметров обработки потока (собственного адреса и т.п) - это клинический случай?
Вот изменили Вы какой-то из таких параметров в управляющем окне (находящемся в другом треде), и как теперь определить - кадры, которые уже лежат в очереди виндовых сообщений окна - они для старых параметров были сделаны или для новых? А как передавать эти изменённые параметры в тред, работающих с потоками байт? Нужна синхронизация, лишние сложности.
Проще сделать это всё в одном потоке окна управления, тем более никаких проблем с этим нет.

Цитата(XVR @ May 26 2017, 13:33) *
Это почему вдруг? Обоснуйте 1111493779.gif

Это чревато утечками памяти. И другими чудесами. См. выше - уже обосновал.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 27 2017, 00:28
Сообщение #9


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(jcxz @ May 26 2017, 17:38) *
А если другое не WM_MY_DATA?

А мозг включить никак? Хорошо, отвечу: тоже FIFO. Но ведь вы вещали про то, что порядок пакетов с данными может перепутаться. И как же это может произойти, а?
Цитата(jcxz @ May 26 2017, 17:38) *
Мне его за Вас читать недосуг. Я то прекрасно знаю, что если исходный тред не имеет окна и связанной с ним обработки очереди сообщений
(а так скорее всего и есть, так как треду, читающему байты из потока COM-порта, окно не нужно), то работа SendMessage() и PostMessage() похожа.

Какая отборная чушь. И SendMessage и PostMessage работают совершенно независимо от того, имеет ли вызывающий тред окно. Вы бы перестали позориться, а?
Цитата(jcxz @ May 26 2017, 17:38) *
Ну да, так и думал - представления о работе WinAPI и взаимодействии окон, тредов, сообщений Вы не имеете.
Отсюда начинаем думать, что будет если отправите этому "любому" окну ваши сообщения с указателями на буферы, а это окно получит WM_CLOSE (либо будет закрыто иным образом) и обработает его раньше?

Очередной перл. Вы что, даже не понимаете разницы между окном и оконной функцией? Ну это уже даже не смешно. Как можно быть настолько дилетантом, и при этом вещать с таким апломбом?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ruslan1   Windows7: прием байтов через COM-порт без потерь   May 22 2017, 06:27
- - AlexRayne   Цитата(Ruslan1 @ May 22 2017, 10:27) Есть...   May 22 2017, 08:15
|- - Ruslan1   AlexRayne, большое спасибо за конструктивный ответ...   May 22 2017, 12:23
||- - AlexRayne   Цитата(Ruslan1 @ May 22 2017, 16:23) Alex...   May 23 2017, 09:20
||- - Ruslan1   Цитата(AlexRayne @ May 23 2017, 12:20) Во...   May 23 2017, 11:17
||- - AlexRayne   Цитата(Ruslan1 @ May 23 2017, 15:17) Хм. ...   May 23 2017, 15:09
||- - Ruslan1   Большое спасибо всем за кучу отличных идей и совет...   May 23 2017, 17:13
||- - AlexRayne   Цитата(Ruslan1 @ May 23 2017, 20:13) дада...   May 23 2017, 20:00
||- - AHTOXA   Добавлю в копилку способов передачи данных от пото...   May 24 2017, 07:07
|- - Lagman   Цитата(AlexRayne @ May 22 2017, 11:15) Чт...   May 22 2017, 12:59
|- - AlexRayne   Цитата(neiver @ May 22 2017, 12:25) Начин...   May 22 2017, 08:37
||- - V_G   Цитата(jcxz @ May 26 2017, 22:38) Мне его...   May 26 2017, 13:42
|||- - jcxz   Цитата(V_G @ May 26 2017, 15:42) А вот фу...   May 26 2017, 16:13
|||- - XVR   Цитата(jcxz @ May 26 2017, 19:13) Я вот н...   May 26 2017, 19:11
||||- - AlexRayne   ЦитатаЯ вот не пойму - а в чём плюс-то такого разд...   May 26 2017, 20:19
|||- - V_G   Цитата(jcxz @ May 27 2017, 02:13) Вот зде...   May 26 2017, 22:47
|||- - jcxz   Цитата(V_G @ May 27 2017, 00:47) Речь вед...   May 29 2017, 08:12
||- - XVR   Цитата(jcxz @ May 26 2017, 15:38) Затем, ...   May 26 2017, 14:15
|- - XVR   Цитата(neiver @ May 22 2017, 11:25) У ста...   May 23 2017, 11:20
|- - Ruslan1   Цитата(XVR @ May 23 2017, 13:20) Чтение э...   May 23 2017, 12:42
|- - V_G   Цитата(Ruslan1 @ May 23 2017, 22:42) Я то...   May 23 2017, 13:33
- - rx3apf   1. Дурацкий вопрос - а порты вообще с FIFO ? И оно...   May 22 2017, 15:55
- - Raven   Если Wind'а иногда не успевает выгребать данны...   May 22 2017, 16:10
- - DS   В 7 похоже, есть баг в COM драйвере. Многие програ...   May 22 2017, 19:49
- - ViKo   Я пересылал в комп пакеты данных на скорости 11520...   May 23 2017, 05:09
|- - V_G   Цитата(ViKo @ May 23 2017, 15:09) Я перес...   May 23 2017, 05:39
|- - Ruslan1   Цитата(ViKo @ May 23 2017, 08:09) Я перес...   May 23 2017, 10:48
- - ViKo   Возможно, фантазирую, детально не вникал, полагаю,...   May 23 2017, 07:09
|- - @Ark   Вероятная причина, все-таки, несовпадение тактовых...   May 23 2017, 11:04
|- - krux   Цитата(@Ark @ May 23 2017, 14:04) Вероятн...   May 23 2017, 12:51
|- - @Ark   Цитата(krux @ May 23 2017, 15:51) считаю,...   May 23 2017, 13:15
- - V_G   Кстати, о больших трафиках. Так ли они необходимы?...   May 23 2017, 09:30
- - ViKo   Я не сутками пересылал, а кадрами. По ним - обрабо...   May 23 2017, 10:52
- - ViKo   Посмотрел, сколько стопов использую, оказалось, 1....   May 23 2017, 11:31
|- - Ruslan1   Цитата(ViKo @ May 23 2017, 13:31) Посмотр...   May 23 2017, 12:51
- - XVR   Вызов Synchronize(RxDataProcessing); из нити чтени...   May 23 2017, 14:06
- - XVR   Через Synchronize можно, но в нем должно выполнять...   May 23 2017, 17:58
- - AlexandrY   Цитата(Ruslan1 @ May 22 2017, 09:27) Здра...   May 24 2017, 07:35
|- - Ruslan1   Цитата(AlexandrY @ May 24 2017, 09:35) На...   May 24 2017, 12:53
|- - AlexRayne   Цитата(Ruslan1 @ May 24 2017, 16:53) Спаи...   May 24 2017, 12:55
- - AlexRayne   Напишите хоть в чем выявился источник потерь   May 24 2017, 12:52
|- - Ruslan1   Цитата(AlexRayne @ May 24 2017, 14:52) На...   May 24 2017, 12:55
|- - Timmy   В коде меня удивляет использование overlapped Wait...   May 25 2017, 10:49
- - XVR   WaitForSingleObject вызывать можно. Если WaitCommE...   May 25 2017, 11:14
|- - V_G   Цитата(XVR @ May 25 2017, 21:14) WaitForS...   May 25 2017, 22:37
- - rudy_b   Тут есть стандартная проблема - после приема прише...   May 26 2017, 10:19
|- - jcxz   Цитата(rudy_b @ May 26 2017, 12:19) Вероя...   May 26 2017, 10:33
||- - XVR   Цитата(jcxz @ May 26 2017, 13:33) Принима...   May 26 2017, 11:33
|- - V_G   Цитата(rudy_b @ May 26 2017, 20:19) Тут е...   May 26 2017, 11:59
- - Ruslan1   Поздравляю всех с началом новой рабочей недели...   May 29 2017, 10:57
- - XVR   Ваш снифер умеет показывать ошибки от COM порта? Е...   May 29 2017, 11:07
|- - V_G   Цитата(XVR @ May 29 2017, 21:07) Ну и уро...   May 29 2017, 11:31
|- - XVR   Цитата(V_G @ May 29 2017, 14:31) Стандарт...   May 29 2017, 11:58
|- - Ruslan1   Цитата(XVR @ May 29 2017, 13:58) Ключевое...   May 29 2017, 12:24
|- - @Ark   Цитата(Ruslan1 @ May 29 2017, 15:24) Ребя...   May 29 2017, 12:39
||- - Ruslan1   Цитата(@Ark @ May 29 2017, 14:39) Вы ниче...   May 29 2017, 12:53
||- - @Ark   Цитата(Ruslan1 @ May 29 2017, 15:53) Там ...   May 29 2017, 13:02
||- - AlexRayne   Цитата(Ruslan1 @ May 29 2017, 16:53) поте...   May 29 2017, 14:32
||- - Ruslan1   Цитата(AlexRayne @ May 29 2017, 16:32) Вы...   May 29 2017, 16:20
||- - @Ark   Цитата(Ruslan1 @ May 29 2017, 19:20) Мы ...   May 29 2017, 17:15
|||- - Ruslan1   Цитата(@Ark @ May 29 2017, 19:15) Мы дожд...   May 29 2017, 19:00
|||- - @Ark   Цитата(Ruslan1 @ May 29 2017, 22:00) тип ...   May 29 2017, 20:06
|||- - Ruslan1   Цитата(@Ark @ May 29 2017, 22:06) Я так п...   May 29 2017, 20:34
||- - AlexRayne   Цитата(Ruslan1 @ May 29 2017, 20:20) Это ...   May 29 2017, 17:59
|- - jcxz   Цитата(Ruslan1 @ May 29 2017, 14:24) Если...   May 30 2017, 08:50
|- - XVR   Цитата(Ruslan1 @ May 29 2017, 15:24) Наде...   May 30 2017, 10:15
|- - @Ark   Цитата(XVR @ May 30 2017, 13:15) О! У...   May 30 2017, 10:23
|- - krux   Цитата(@Ark @ May 30 2017, 13:23) ТС гово...   May 30 2017, 17:28
|- - Ruslan1   Цитата(krux @ May 30 2017, 19:28) Давайте...   May 30 2017, 20:18
|- - @Ark   Цитата(Ruslan1 @ May 30 2017, 23:18) Upd:...   May 30 2017, 21:05
|- - XVR   Цитата(Ruslan1 @ May 30 2017, 23:18) Проб...   May 31 2017, 07:06
|- - Ruslan1   Цитата(XVR @ May 31 2017, 09:06) Вы в это...   May 31 2017, 07:28
|- - XVR   Цитата(Ruslan1 @ May 31 2017, 10:28) Слыш...   May 31 2017, 11:38
- - ViKo   Может, на большей скорости попробовать?   May 29 2017, 19:16
- - rx3apf   Я бы в такой ситуации попробовал такой вариант (ну...   May 31 2017, 08:43
- - rx3apf   Ну при чем тут скорость и уровни ? Скорость не сов...   Jun 1 2017, 10:00
|- - XVR   Цитата(rx3apf @ Jun 1 2017, 13:00) Ну при...   Jun 1 2017, 11:25
- - rx3apf   Ошибка кадра должна все ж обрабатываться и как-то ...   Jun 1 2017, 12:28


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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 03:48
Рейтинг@Mail.ru


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