![]() |
|
![]() ![]() ![]() |
|
VanHelsing |
|
|||
![]() ХОЧУ ВСЕ ЗНАТЬ!!! ![]() ![]() Награды: 1 Профиль Группа: Участник Сообщений: 288 Регистрация: 3.1.2008 Где: Екатеринбург Репутация: нет Всего: 6 |
Необходимо написать программу для аппаратуры, которая используется при проверки кабелей. Система релейная, то есть управляем реле. Проблема заключается в следующем, необходимо организовать проверку на разобщение. Допустим есть 10 точек и необходимо проверить что они друг с другом не замыкают. Я написал вариант при котором по циклу первую точку проверяем со всеми остальными, затем вторую, затем третью и т.д. Данный алгоритм работает очень долго, есть ли возможность программно ускорить данную проверку?
Заранее спасибо. |
|||
|
||||
nworm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
Какие возможные независимые исходы у этого эксперимента?
Если все точки совершенно независимо друг от друга могут с друг другом замыкать/незамыкать, то есть всего 10*10=100 исходов, то разработанную проверку не улчшить. Это сообщение отредактировал(а) nworm - 13.9.2011, 19:53 |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Если разговор именно о замыкании, а не о минимально допустимом сопротивлении, и если направление тока не имеет значения, то:
1. Точку 1 проверяем на предмет замыкания с каждой точкой с 2 по N 2. Точку 2 - с каждой точкой с 3 по N *т.к. пару 1-2 уже проверили) 3. Точку 3 - с 4 по N И так далее. Если вопрос стоит о простой браковке кабеля, первое же замыкание должно останавливать все тестрование и посылать кабель на свалку. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
VanHelsing |
|
|||
![]() ХОЧУ ВСЕ ЗНАТЬ!!! ![]() ![]() Награды: 1 Профиль Группа: Участник Сообщений: 288 Регистрация: 3.1.2008 Где: Екатеринбург Репутация: нет Всего: 6 |
Я не до конца описал все сложности.
Во-первых - измерения производятся с помощью компаратора, у него есть две шины одна шина плюс, а другая шина минус. Соответственно на них мы подключаем измеряемые точки. Во-вторых - если использовать алгоритм проверки точки каждой с каждой (способом, которой описал _Y_), то проверка проходит очень долго, а необходимо чтобы проверка была быстрой. Предполагаю, например делим массив точке, которые проверяем, на две равные части, одну часть точек подключаем к шине минус, вторую к шине плюс, производим проверку, производим перетасовку, чтобы каждая точка обязательно побывала, на обоих шинах(то есть точки в шинам можно подключать группами). Очень хотелось бы чтобы кто-нибудь объяснил мне как правильно выстроить алгоритм проверки. Заранее спасибо. |
|||
|
||||
nworm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
ПРОЦЕДУРА P(G):
0. Если колличесвто точек 1, то конец процедуры. 1. Разбиваем точки на 2-е равные группы G1 и G2 2. Подклучаем G1 к +, G2 к - 3. Если есть замыкание, то Ответ:="не работает", конец программы. 4. Если нет замыкания, то выполняем P(G1) и P(G2). ПРОРГАММА: 1. Обозначим все точки как G 2. P(G) 3. Если по итогам выполнения P(G), не получен ответ "не работает", то Ответ:="работает". |
|||
|
||||
VanHelsing |
|
|||
![]() ХОЧУ ВСЕ ЗНАТЬ!!! ![]() ![]() Награды: 1 Профиль Группа: Участник Сообщений: 288 Регистрация: 3.1.2008 Где: Екатеринбург Репутация: нет Всего: 6 |
Проверку необходимо организовать таким образом чтобы проводилась проверка всего изделия сразу и выдавала информацию об ошибках.
|
|||
|
||||
nworm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
И чем тогда не подходит предложенный мной способ? |
|||
|
||||
VanHelsing |
|
|||
![]() ХОЧУ ВСЕ ЗНАТЬ!!! ![]() ![]() Награды: 1 Профиль Группа: Участник Сообщений: 288 Регистрация: 3.1.2008 Где: Екатеринбург Репутация: нет Всего: 6 |
Не совсем понял суть предложенного алгоритма. И как обнаружить ошибку, то есть найти какие конкретно точки замыкают.
|
|||
|
||||
nworm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
Суть алгоритма - деление пополам. Этот алгоритм в отличии от предыдущих будет иметь сложность O(n*log(n)), а не n*n. Для обнаружения конкретно замыкажющих точек надо править этот алгоритм в пункте "3. Если есть замыкание, то Ответ:="не работает", конец программы." Причём, не понятно надо все ошибки найти или только одну? |
|||
|
||||
VanHelsing |
|
|||
![]() ХОЧУ ВСЕ ЗНАТЬ!!! ![]() ![]() Награды: 1 Профиль Группа: Участник Сообщений: 288 Регистрация: 3.1.2008 Где: Екатеринбург Репутация: нет Всего: 6 |
Ошибки надо найти все, то есть проверка должна пройти до конца. Вот с выявлением ошибок у меня и проблема.
|
|||
|
||||
nworm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
А сколько там ошибок?
Если все со всеми замыкают, частая ситуация, то надо как _Y_ делать. Если же аппаратура, в основном, без ошибок, то можно с дихотомией проверять. Это сообщение отредактировал(а) nworm - 24.9.2011, 15:54 |
|||
|
||||
htoit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 27.8.2011 Репутация: нет Всего: нет |
Проверка на разобщение одной точки проводится за одно измерение. Смотреть надо не алгоритм, а электрическую схему организации проверок. Собираете все точки, кроме проверяемой в кучу (замыкаете), а затем контролируете разобщение. Если у вас нет возможности собирать точки в кучу, то переделывайте схему электрическую. Не тратьте впустую ресурсы реле. Нет разобщения -- в брак, или диагностируйте подробнее, метод деления пополам вполне годится.
|
|||
|
||||
VanHelsing |
|
|||
![]() ХОЧУ ВСЕ ЗНАТЬ!!! ![]() ![]() Награды: 1 Профиль Группа: Участник Сообщений: 288 Регистрация: 3.1.2008 Где: Екатеринбург Репутация: нет Всего: 6 |
Мой выбор пал на следующий алгоритм.
Первую точку я подключаю на шину плюс, вторую на шину минус, произвожу проверку сопротивления если ошибки нет, то вторую точку я снимаю с шины минус и подключаю ее к шину плюс. С третьей точкой мы производим те же действия что со второй точкой и т.к. далее. Если произошла ошибка, то точку, при подключении которой произошла ошибка, проверяю ее с каждой предыдущей. Возможно кто подскажет есть ли возможность усовершенствовать данный алгоритм. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
А плюс и минус имеют значение? Если нет, быстрее будет переключать через одну: минусом идти по нечетным точкам, а плюсом по четным.
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
htoit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 27.8.2011 Репутация: нет Всего: нет |
Усовершенствуйте не алгоритм, а схему: все садите на "землю", от которой каждый контакт может переключаться как на "плюс", так и на "минус". контроль контакта -- один контакт на "плюс", другой на "минус". Измеряете "плюс"-"минус". Контроль изоляции -- просто переключаете контакт на "плюс" и измеряете "плюс"-"земля". Иначе будете "жрать" ресурс реле -- немерено. Три реле на точку, плюс релейная схема переключения на вольтметр (с "земли" на "минус"). В этом направлении подумайте. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |