Проверка активности lan-порта

Тема в разделе "Arduino & Shields", создана пользователем okodemicos, 2 апр 2018.

  1. okodemicos

    okodemicos Нуб

    Всех приветствую!
    Граждане-товарищи, подскажите советом (ссылкой, отсылкой, etc - буду рад любой помощи). Уже голову сломал. В тематике arduino недавно, но пытаюсь разобраться.
    Исходник: имеем стандартный ПК с lan-портом (8p8c) 100/1000Base-TX, обжатый патч-корд на 8 жил "витой пары", сетевой коммутатор 100/1000Base-TX и arduino pro mini.
    Задача: при помощи arduino понять, когда по "витой паре" происходит обмен данными от lan-порта ПК к тому же коммутатору и т.п. оборудованию. Т.е. различить состояния, когда link up, а когда link down.
    Понимаю, что надо мерить напряжение на парах (контакты 1, 2, 3 и 6 разъема 8p8c при 100Base-TX), но как их измерить? Пробовал цепляться параллельно к тому же 1 контакту (TX+) на A0 arduino - поскольку "земля" разная, arduino гонит поток напряжений от 0 до 5В с самой себя, как я понимаю. А как подцепить единую "землю"? Короче, я в загоне и тупике и не замечаю, вероятно, очевидного ответа. Если не затруднит - подскажите, в какую сторону копать?
     
  2. Krest

    Krest Нерд

    Фоторезистор, расположенный непосредственно рядом с лампочкой линка, не будет решением проблемы?
     
  3. okodemicos

    okodemicos Нуб

    to Krest
    Хорошая идея, спасибо.
    Тоже прикидывал вначале читать непосредственно мерцание светодиода link'а, но оставил "на крайний случай". Хотелось бы все-таки считать параметры сигналов в витопаре контактным методом. Но никак не могу схему подобрать (скорее всего, не вижу очевидного, потому как глаз "замылился").
     
  4. okodemicos

    okodemicos Нуб

    Пока дошел до того, что сумел "распознать" момент, когда есть физическое подключение патч-корда с RJ45 к разъему 8p8c, и, соответственно, когда его нет. В первом случае, если завести неиспользуемый в 100Base-TX TX+ (бело-синий, бело-коричневый - не важно) провод витопары на тот же А0, arduino постоянно считывает 1В (в округлении). Если же патч-корд физически отключен, то от "висящей в воздухе" ноги на А0 получаем хаос из последовательности 0В-5В. По-идее, при активной передаче данных (а неиспользуемые ноги все-равно опрашиваются, если хотя бы на одной из сторон 1000Base-TX сетевая карта) также должен наблюдать на TX+ постоянные скачки напряжения 0В-4В/5В. Но этого не происходит. Даже если патч-корд отключить с обеих сторон, arduino все равно читает эту белиберду. Вообще, при попытке читать аналоговый вход, к которому ничего не подключено, что должна выводить arduino?
     
  5. b707

    b707 Гуру

    да вы же сами выше написали - "хаос из последовательности 0В-5В".
     
  6. okodemicos

    okodemicos Нуб

    to b707
    Спасибо :)
    Просто это был вопрос из разряда "так и должно быть?"
    Насколько понял устройство сетевой карты, там развязка через трансформаторы идет + определение логических "0" и "1" происходит по разнице на TX+/TX- одной и той же пары. Теоретически, если GND arduino зацепить на TX-, то с TX+ arduino на своем А0-контакте будет читать 0В в случае отсутствия передачи и 4В/5В в случае передачи данных. На практике такое не сработало. Возможно, вся проблема в длительности импульсов (не смог найти конкретики в Сети, но что-то около 5 мкс занимает 1 импульс). Может, arduino его попросту не замечает?
    Извиняюсь за поток сознания. Просто тема горит, и уже совсем уперся в эту чертову стену...
     
  7. okodemicos

    okodemicos Нуб

    Вести с полей. Очень хочется возопить "Эврика!", но рано, наверное...
    Провел ряд тестов обычным китайским мультиметром. На витопарах UTP-5e от разных производителей с разной длиной кабеля (пробовал от 1 до 50 м.) получаю примерно равные значения сопротивлений между 1 и 2 линиями (бел.-ор. и ор. соответственно). В случае наличия сетевого обмена (ПК включен, сетевая карта включена, link up) получаем порядка 4-5 Ом, в случае его отсутствия (link down, сетевая карта выключена) - около 2 Ом.
    Возник новый вопрос:
    Как перевести arduino в режим омметра? Только ли через дополнительный резистор с заранее известным значением (как вот тут: http://psenyukov.ru/?p=528)? Не хотелось бы на концы TX+/TX- витопары, участвующие в сетевом обмене, подавать 5В с arduino по такой схеме...
     
  8. okodemicos

    okodemicos Нуб

    Подниму тему еще раз - теперь прошу конкретного совета.
    Посидел-подумал и замерил переменное напряжение на концах витопары (состояния link up и link down). По этому параметру (смешно, что столь очевидно, да) можно решить мою задачу - выявить состояния link'a. Только беда, arduino с переменкой работать не умеет. Поэтому подключил к схеме диодный мост RB157. Мой китайский вольтметр и промышленная APPA показали примерно один результат: при link up 0.3-0.4В DC, при down - 0.1В DC. А вот ардуина на отрез отказалась нормально читать результат.
    Схема подключения к ардуине: бел.-ор. и ор. провода витопары на вход переменки диодного моста -> минус DC диодного моста на GND ардуины, плюс DC диодного моста на A0. AnalogReference(INTERNAL), чтобы повысить точность. Читаю сигнал int A0, value = analogRead(A0). Считаю через volts = 1.1*value/1023. И все равно получаю нестабильные значения от 0.0 до 1.1 вне зависимости от состояния link'a.
    Возможно, неверная схема подключения к arduino? Или какой-то хитрый элемент должен быть в коде?
     
  9. okodemicos

    okodemicos Нуб

    Если кому интересно, задачу решил. Диодный мост + хороший контакт + изоляция + правильное усреднение значений в коде + задержка при считывании (чтобы остаточный сигнал гасить) = profit! Тему можно убирать в архив (ежели тут имеется, не поглядел). Спасибо всем за моральную поддержку :Ъ
     
  10. ostrov

    ostrov Гуру

    Оптопара с простенькой программкой на простеньком контроллере решила бы эту проблему просто.
     
  11. ZAZ-965

    ZAZ-965 Гуру

    Интересно, как это влияет на пропускную способность сети. Каким-нибудь iperf или NetPerf не проверяли сколько пакетов теряется?
     
  12. okodemicos

    okodemicos Нуб

    to ostrov
    Оптопары не имею, а с "чистыми МК" пока серьезно не работал. Тестовый экземпляр делаю на Ардуино, дальше, если все сложится хорошо, буду думать и допиливать в сторону упрощения. Как говорится, даже самый долгий дорог начинается с первый шаг (с)

    to ZAZ-965
    Не поверите, просадок пропускной способности не заметил (ни при длине кабеля в 1 м., ни на расстоянии метров в 50). Конкретные потери пакетов не отлавливал, но, с учетом стабильной работы TCP и ICMP протоколов (в рамках моей задачи, конечно), не думаю, что там критичные значения выплывают.
    Вот повышенная экранировка этой конструкции нужна, это да. На выходе диодного моста получаются крайне низкие значения напряжений (с позиции Ардуины, конечно), так что любая наводка или плохое место контакта влияют. Сейчас хорошо пропаял все точки подключений, залил термоклеем и уложил в фальгированный бокс с заземлением (по той же витопаре) - тестовые испытания за ночь (5-6 часов непрерывной работы с периодичностью link up-down в полчаса) показали стабильность, близкую к 100%. Когда соберу стенд в реальной сети, поглядим на результат...
     
  13. ostrov

    ostrov Гуру

    Оптопара стоит рубль ведро. Сделать можно и на Ардуине, разницы нет.
     
  14. okodemicos

    okodemicos Нуб

    to ostrov
    Но все равно ведь будет считывание по миганию светодиода, как я понимаю? А это пыль, грязь, засветка, куча доп.факторов. Контактный метод, как мне кажется, надежнее будет...
     
  15. ostrov

    ostrov Гуру

    Какая засветка? Вы бы сперва прсмотрели что такое оптрон.
    [​IMG]
     
  16. okodemicos

    okodemicos Нуб

    Верно, перепутал опять-таки с фоторезистором. С оптронами не работал. Тогда просветите (каламбур, да) как к моему случаю ее/его применить? Предлагаете TX+/TX- контакты витопары зажать на оптрон и на выходе читать напряжение в момент link up и link down?
     
  17. ostrov

    ostrov Гуру

    К любому иформационному котакту анодом, к земле через резистор катодом. А на выходе тестить как кнопку. Засекать таймаут контроллером, сбрасывая счетчик активностью, как ватчдог.
     
    Последнее редактирование: 13 апр 2018
  18. okodemicos

    okodemicos Нуб

    То ли чего-то не понимаю, то ли разница не велика. Даже при отключенной с одной стороны сетевой карте все равно имеется активное сетевое оборудование на другом конце. Все равно идут сигналы синхронизации (условно, конечно). Т.е. в витопаре будет постоянно присутствовать какое-то напряжение и какой-то ток пока не отключишь оба конца. Следовательно, оптрон будет срабатывать всегда (мощность светодиода будет меняться разве что). И либо подбирать по мощности, либо отсеивать "лишние" сигналы при, положим, отключенной сетевой карте с одной стороны, программно. Ничем не проще того, что имею сейчас. Поправьте, если ошибаюсь...
     
  19. ostrov

    ostrov Гуру

    На тх то не должно быть активности при зависании? Или что тестируется, может цедостность линии, тогда rx прощупывать.
     
  20. okodemicos

    okodemicos Нуб

    Практика показала, что вне зависимости от TX или RX - везде кратковременные скачки напряжения при выключенной сетевой карте с одной стороны