Форум TRACE MODE: техническая поддержка   
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 5 » Мониторы Реального Времени / Real Time Monitors » Интеллектуальные RS-порты

   
Автор / Author Тема / Topic: Интеллектуальные RS-порты
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119


Icon 13 отправлено / posted      Профиль для / Profile for Kramarenko Stanislav           Редактировать/удалить сообщение / Edit/Delete Post 
Решили мы развести наши модули I-7000 на несколько линий, для чего приобрели плату Moxa CP-204J (4 RS-порта, интеллектуальная).
Начали проводить сравнительные испытания "Интегрированный на материнку СОМ-порт против порта Moxa". Для этого использовали "Trace Mode" и "I-7000 Utility". Результат нас крайне удивил.
При использовании I7000util с платой CP-204J снизились: загрузка процессора задачей на 40%, количество прерываний на 17%.
При использовании TraceMode те же показатели выросли: загрузка процессора задачей на 160%, количество прерываний на 64%.
При обновлении драйвера CP-204J с в.1.1 до в.1.4 показатели I7000util практически не изменились, а TraceMode выдал увеличение показателей относительно интегрированного порта: загрузка процессора задачей на 1677% (с 1,8% загрузки процессора до 32%), количество прерываний на 24%.
Исходя из того, что использование платы CP-204J (и прочих из серии Intellio фирмы Moxa) должно снижать нагрузку на ценральный процессор и мы увидели это при использовании программы I7000util, осмелюсь предположить, что TraceMode работает некорректно с такими устройствами.
Ваши комментарии...

Сообщения / Posts 337 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post 
Мы уже сталкивались с тем, что "интеллектуальные коммуникационные платы имеют определенные особенности функционирования", связанные с тем, что они "с целью оптимизации" предполагают работу в обход системных функций.
Многие утилиты именно так и работают.
Модули Трейс Моуд используют для поддержки коммуникаций только системные функции. А с ними такие "интеллектуальные" платы работают неэффективно.
В версии Трейс Моуд 6 мы будем рассматривать вопросы оптимизации коммуникационных процедур.

Сообщения / Posts 15198 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119


Icon 1 отправлено / posted      Профиль для / Profile for Kramarenko Stanislav           Редактировать/удалить сообщение / Edit/Delete Post 

Сообщения / Posts 337 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119


Icon 1 отправлено / posted      Профиль для / Profile for Kramarenko Stanislav           Редактировать/удалить сообщение / Edit/Delete Post 
Я понимаю, что все ваши силы сейчас брошены на шестую версию, но думаю, что обмен по последовательным портам является достаточно важной задачей, тем более, что вопросы по нему возникали (по крайней мере у меня) и до настоящей ситуации, которую я не могу рассматривать иначе, как существенное упущение, ввиду того, что проведенные мною дополнительные испытания с использованием программ различных производителей доказали эффективность "железа".
Буду искренне рад, если у вас найдутся силы проработать данный вопрос в рамках пятой версии.

Сообщения / Posts 337 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post 
Мы учтем Ваше пожелание.
Сообщения / Posts 15198 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119


Icon 2 отправлено / posted      Профиль для / Profile for Kramarenko Stanislav           Редактировать/удалить сообщение / Edit/Delete Post 
Поскольку платы уже закуплены, пришлось написать собственный драйвер обмена по произвольному носителю (простому системному СОМ-порту, но на плате CP-204J) c протоколом ADAM ASCII.

При этом для снижения нагрузки на процессор пришлось исключить проверку на наличие данных в буфере, т.е. просто читаем спустя таймаут (15 мс на скорости 19.2 кбит при поканальном опросе и 40 мс при групповом; при 115 кбит оба таймаута сравниваются на 12 мс). [Пдмигивание / Wink]

Кроме того, чтобы снизить количество прерываний использовали вызов процедуры чтения из буфера по прерыванию от платы по приходу контрольного символа (в данном протоколе это - CR(13)) - количество прерываний упало почти вдвое. [Спокойствие / Cool]

Но это - не выход из положения. Надо, чтоб ТМ сам справлялся. [prey / молящийся]

Сообщения / Posts 337 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post 
Проблема достаточно важна.
Мы учтем это в дальнейшем.

Сообщения / Posts 15198 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119


Icon 5 отправлено / posted      Профиль для / Profile for Kramarenko Stanislav           Редактировать/удалить сообщение / Edit/Delete Post 
Время у нас идет медленно, но мы уже собралсь внедрять. [master / мастер] И тут возник вопрос!

Насколько мне известно, при штатной работе с системными СОМ-портами TM запускает опрос по каждому из них в отделном потоке. Так ведь?

А у нас этой прелести не получится, поскольку драйвер (media_.dll) один на многопортовую плату и все каналы будут опрашиваться последовательно в одном потоке, хоть и обращаются к разным портам???

Сообщения / Posts 337 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post 
Тогда как варианты:
1) Создать несколько драйверов TYPE_12 для каждого СОМ-порта, тогда они будут работать в разных потоках.
2) Создать внешнее приложение для обмена по СОМ-портам, а с DrawServ оно будет обмениваться по COM-интерфейсам. Например, как вот этот программный задатчик: http://forum.adastra.ru/ubb/ultimatebb.php?ubb=get_topic;f=11;t=000056

Сообщения / Posts 15198 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119


Icon 5 отправлено / posted      Профиль для / Profile for Kramarenko Stanislav           Редактировать/удалить сообщение / Edit/Delete Post 
По первому варианту вопрос -
А надо ли для каждого СОМ-порта делать свою пару t12sN.dll + media_.dll или достаточно оставить один media_.dll и сделать только несколько t12sN.dll, которые будут вызывать media_.dll, естественно обращаясь к разным портам?

Сообщения / Posts 337 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 2 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post 
Нет - не обязательно, media_.dll может быть одна.
Сообщения / Posts 15198 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119


Icon 1 отправлено / posted      Профиль для / Profile for Kramarenko Stanislav           Редактировать/удалить сообщение / Edit/Delete Post 
Случайно :-) прогнали тесты, описанные в первом сообщении не на Win2000 Server, а на Professional!!! На Professional CP-204J работает нормально, но на Server, что на 2000, что на 2003 - все по прежнему.
Сообщения / Posts 337 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119


Icon 1 отправлено / posted      Профиль для / Profile for Kramarenko Stanislav           Редактировать/удалить сообщение / Edit/Delete Post 
Положительный результат теста оказался случайным стечением обстоятельств. Каких именно теперь не знаем и повторить не можем. [Неодобрение / Frown]
Есть влияние версии драйвера и настройки BIOS SETUP "PnP OS"=Yes/No, но влияние не принципиальное.
Через наш драйвер КОНТР_12 обмен медленнее на 15%, поэтому до сих пор эксперементируем.

В связи с этим вопрос: как ТМ, например для КОНТР_11, определяет что приняты все требуемые данные? Циклически подчитывает данные из буфера порта и многократно вызывает функцию Check_xxx до истечения тайм-аута?

Сообщения / Posts 337 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119


Icon 1 отправлено / posted      Профиль для / Profile for Kramarenko Stanislav           Редактировать/удалить сообщение / Edit/Delete Post 
Предыдущий вопрос снимается - разобрались.

Возник новый в результате переписки c компанией Moxa.
Их последний ответ про работу DrawServ с COM-портом звучит так:
"In fact, your utility could reduce to call the purge_comm (flush) function. Because your application is a traditional polling and responding application, there should not any garbage on serial buffer. So, it is not need to call purge_comm function frequency. Then everything should be fine." ,
что в литературном переводе примерно следующее -
"Ваша утилита (мы посылали им DrawServ) могла бы уменьшить количество вызовов функции очистки буфера порта. Поскольку ваше приложение является традиционным приложением, работающим по принципу запрос-ответ, то в буфере порта не должно быть мусора. Поэтому не нужно так часто вызывать функцию очистки. В результате все должно быть прекрасно."

Действительно, циклы обмена выглядят так:
18 0.01059492 DrawServ.exe IOCTL_SERIAL_PURGE MxcardB01P000 SUCCESS Purge: TXCLEAR RXCLEAR
19 0.00248747 DrawServ.exe IRP_MJ_WRITE MxcardB01P000 SUCCESS Length 5: #010.
20 0.01003424 DrawServ.exe IRP_MJ_READ MxcardB01P000 SUCCESS Length 9: >+0027.7.
21 0.01606266 DrawServ.exe IOCTL_SERIAL_PURGE MxcardB01P000 SUCCESS Purge: TXCLEAR RXCLEAR
22 0.00255982 DrawServ.exe IRP_MJ_WRITE MxcardB01P000 SUCCESS Length 5: #010.
23 0.00996272 DrawServ.exe IRP_MJ_READ MxcardB01P000 SUCCESS Length 9: >+0027.7.

т.е. в начале каждого вызова буферы чистятся, а если устройство не отвечает, то чистятся подряд два раза (!!!).
ЗАЧЕМ? Зачем это делать? Карта у меня слишком умная, да и буферы не маленькие - она этого не любит. Я понимаю, что это отчасти вопрос совместимости, но ведь действительно можно буферы не чистить!!! Если будет мусор, будет недостоверность - по ней, согласен, нужно очистить (что, в-общем-то, и имеет место), а при нормальном обмене это считаю лишним!

Сообщения / Posts 337 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post 
Это действительно так - и процедура очистки буфера производится перед каждым запросом. Причина - многие протоколы (особенно I7000 совместимые) в кадре ответа не содержат номера устройства его приславшего, поэтому может возникнуть ситуация, что сервер на запрос следующего устройства может принять пакет в буфере за уже готовый от него ответ, хотя на самом деле это ответ на совершенно другой - предыдущий запрос. Пример - поканальный опрос входов модуля I7017, если при этом не чистить буфер перед каждым запросом, все принимаемые значения "поплывут", потому как невозможно контролировать от кого пришел ответ.
Сообщения / Posts 15198 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119


Icon 1 отправлено / posted      Профиль для / Profile for Kramarenko Stanislav           Редактировать/удалить сообщение / Edit/Delete Post 
Вынужден согласиться - такое возможно, если таймаут катастрофически мал и ответ начинает поступать уже после его истечения и очистки буфера по недостоверности, а пауза до следующего запроса достаточно велика, чтобы ответ поступил полностью.
Однако, чаще всего такого не происходит, т.к. следующий запрос начинается сразу после получения ответа (или истечения таймаута) предыдущего, т.е. интерфейс постоянно занят и запоздавшему ответу просто не пробиться.
Я бы на месте разработчика оставил такую функцию, как постоянная очистка буфера на усмотрение пользователя.

Сообщения / Posts 337 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119


Icon 1 отправлено / posted      Профиль для / Profile for Kramarenko Stanislav           Редактировать/удалить сообщение / Edit/Delete Post 
А с другой стороны, вместо очистки буфера можно просто считать из него все данные перед новым запросом и "выкинуть" (в смысле никак не обрабатывать) - эффект будет тот же.
Сообщения / Posts 337 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post 
Чистка буфера - это всего лишь частная функция обмена.
Не исключено, что завтра появится (или уже появилась) какая-нибудь "умная" плата, которая еще какие-то особенности имеет.
Нельзя гарантировать, что не придется и под нее подлаживаться. А при этом надо еще обеспечить и совместимость со стандартными, "не очень умными" платами и интегрированными портами.
Либо надо менять системные стандарты, либо писать в каждом случае свои собственные драйверы.
Те решения, которые Вы приняли при написании собственного драйвера, ориентированы на конкретный протокол. В Трейс Моуд для всех протоколов принята единая идеология.

Да и само стремление снизить нагрузку на процессор от задач обслуживания COM-портов не выглядит убедительным. Вы же сами пишете, что интегрированные порты ("тупые") загружают процессор всего на 1.8%.
Основная нагрузка на процессор - это не COM-порты, а графика, межзадачный интерфейс, файловые операции, сеть и пр.

Сообщения / Posts 15198 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

   Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us

Rambler's Top100 Rambler's Top100



Powered by Infopop Corporation
UBB.classic™ 6.7.2