Нет нуля в розетке: Please Wait… | Cloudflare

0,5=311 В.

Синусоида напряжения говорит, что среднее значение напряжения 220 В, пиковое значение 311 В. Измерения ведутся относительно нулевой оси абсцисс.

Форма кривой между двумя фазами также является синусоидой. Среднее значение линейного напряжения 380 В, а пиковое 536 В.

На взгляд простого обывателя непонятно почему при пропадении нуля, напряжение в сети должно возрасти. Логика подсказывает совсем обратное — полное пропадение напряжения. И действительно, если отключить нулевой провод на вашу квартиру, то свет потухнет и ничего страшного с оборудованием не случится. Но здесь речь идет о обрыве нуля на подстанции или на распределительных поэтажных квартирных щитах.

Разматывать клубок начнем с самого начала — счетчика активной энергии. На первый взгляд — стандартный прибор, но здесь есть подводный камень. В счетчике есть две обмотки — напряжения, включаемая между фазой и нулем, и тока, включаемую в разрыв фазы.

Напряжение между точками А и В — 220 В, полностью падающие на обмотке напряжения.

При обрыве нуля, фаза протечет через обмотку напряжения и потечет к потребителю. Если потребитель возьмет индикатор и ткнет в розетку, то обнаружит сразу две фазы, но при этом вольтметр покажет стабильный ноль. Возможно, от данной информации у многих мозг закипит, но здесь ничего волшебного нет. Все дело в счетчике.

При обрыве фазы все более логично — нигде ничего наблюдаться не будет.

Теперь о главном. При обрыве нуля до счетчиков, которые запитывают две и более квартир возникает интересный процесс. Оба счетчика останутся соединенными по нулевому проводу, но нуля не будет. Ситуацию усугубит то, что счетчики для равномерной загрузки трансформатора запитывают разными фазами. Получится, что одна фаза от первого счетчика пройдет через обмотку напряжения и сталкнется с другой фазой от второго счетчика, также прошедшей через обмотку напряжения.

Короткого замыкания не получится, т.к. две последовательно включенные обмотки напряжения, работающие при напряжении 220 В, будут запитаны от 380 В, т.е на каждую обмотку придется по 190 В. Это даже меньше заявленного, что для обмоток приемлимо. Для потребителя окажется, что на одном проводе будет потенциал в 220 В, а на втором проводе потенциал 190 В. И вроде все также неплохо, ведь на первый взгляд напряжение в квартире станет равным 220 — 190 = 30 В, но это не так.

В зависимости от загрузки нолевая точка сместиться к более загруженному потребителю и он получит вместо 220 В, значительно меньше, например на 100 В меньше, т.е 120 В, а вот его сосед получит 380 — 120= 260 В. Если же один потребитель будет вообще не загружен, то он и получит в свою систему все 380 В. Это не значит, что нужно запускать все приборы чтобы не допустить перекоса. Обрыв ноля — аварийный случай и встречается редко.

Часто в литературе описывается сдвиг фаз, при котором из-за несимметричности фаз, сдвигается точка нулевого потенциала и вместо нуля на проводе будет висеть 5-10 В, относительно провода заземления. В принципе, это нормально. Невозможно подключить равномерно множество однофазных потребителей с тем, чтобы загрузка была идеально симметричной. Лично я измерял ток в заземляющем проводе от высоковольтного трансформатора к заземлителям и он составлял 4 А. Сама по себе неравномерность фаз — норма.

В качестве эксперимента можно взять два трансформатора и подключить их последовательно между двумя фазами. Провод от средней точки обоих трансформаторов нужно вначале подключить к нулевому проводу. Нужно убедиться в напряжении на трансформаторах. Напряжение должно составлять 220 В. Если отключить нулевой провод и промерить напряжения на трансформаторах, то здесь и будет фокус — напряжения будут отличаться в том случае, если нагрузки на трансформаторах будут различными, или, если мощности трансформаторов будут различными, т.к. различным будет сопротивление первичных обмоток.

Результаты опыта следующие — обрыв ноля вызывает перекос фаз между всеми потребителями, смещая нулевую точку в зависимости от загрузки этих потребителей.

Чем больше нагрузка, тем меньшее напряжение придет на квартиру.

Содержание

Правильное положение фазы в розетке

Многие задают вопрос, как правильно подключать к бытовым розеткам фазные проводники: слева или справа. Забив такой вопрос в поисковую систему, вы обречены на занимательное чтение до утра. Варианты ответов, которыми пестрит интернет, или прямо противоположны, или не имеют отношения к сути вопроса. На многих ресурсах есть похожие темы, но формат их большинства, где субъективное мнение отдельных участников забивает все разумные доводы других, не позволяет неподготовленному пользователю получить в разумные сроки однозначный ответ.

Одни считают, что — слева, потому что «мы всегда так делали». Вторые ищут ответ, прозванивая штепсельные вилки, сетевые шнуры и встроенные в приборы выключатели, пытаясь таким образом определить (от клеммника, например, стиральной машины), где должна быть фаза в розетке, слева или справа.

Отдельный аргумент, найденный на просторах интернета — якобы требования некоторых производителей, например газовых бытовых котлов, подключать оборудование (уже с поставленным производителем гибким кабелем с вилкой) фазироованно, т. е. фаза вилки на фазу розетки. Термин «фазозависимый котел», на мой взгляд, просто неуместен при комплектации производителем котла стандартной не фазированной вилкой. Ну что значит «зависимый», если комплектуемую производителем вилку можно включить в розетку и так и так? 

Ответ одного из производителей котлов : На газовых котлах и горелках используется принцип контроля наличия пламени по зонду ионизации. Горящий газ электропроводен, поэтому в пламя помещают электрод, подают на него фазу и измеряют ток утечки на массу. Поэтому принципиально важно, на какой из проводов подать фазу. В просторечье такие котлы называются фазозависимыми. Никакими вилками котлы не комплектуются, считается правильным подключать электропитание к котлу стационарно (не через розетку) через отдельный автомат. В этом случае никаких проблем с «переворачиванием вилки» не происходит. 

Варианты вилок http://ru.wikipedia.org/wiki/Schuko. Вилки и розетки, применяемые в РФ неполяризованы, подключение фазы и нуля не контролируется, в отличии от вилок и розеток так называемого французского стандарта CEE 7/5 http://ru. wikipedia.org/wiki/CEE_7/5

Большинство склоняется к мнению, что «фаза» в розетке должны быть все таки справа, приводя в качестве аргументов некие ГОСТы и иные правила, собственные аргументы и прочее. К сожалению, субъективное прочтение и толкование нормативных документов еще больше запутывает пользователя. На одном из форумов даже приводится «доказательство» того, что «фаза справа» снижает уровень электромагнитного излучения системных блоков компьютеров. Смущает только, что формат той статьи содержит частично элементы заказной и распроданной по сайтам, а сама статья совершенно безграмотна и полна противоречий. Кому интересно, вот здесь: http://www.forumhouse.ru/threads/259518/ этот «материал» разложили по косточкам, да так, что администрация ресурса была вынуждена удалить его.

Альтернативное мнение, где должна быть фаза в розетке, справа или слева

Существует мнение некоторых аудиофилов о том, что якобы перевернутая вилка от радиоаппаратуры меняет качество звука.
Вряд ли стоить всерьез говорить об этом, если производитель укомплектовал аппаратуру стандартной вилкой, которую можно воткнуть и так, и так. На самом деле, так как наши розетки неполяризованные, т.е. вилку мы можем воткнуть любой стороной, и подключение фазного проводника в розетке пока никак не регламентировано, то не имеет особого значения, где в розетке будет фаза, слева или справа. Но видели ли вы хоть раз, чтобы домохозяйка перед включением утюга проверяла, где в вилке фаза? Вот и я нет! Главное, чтобы была исправная электрическая проводка, правильно выбранный защитный аппарат и надежное заземление.

Правильное положение фазы в розетке

Подводя итог, где должна быть фаза, слева и справа, отвечаем. Бытовые розетки в РФ не подразумевают «полярности» подключения, т.е. где фаза и где нейтраль для них не регламентировано. Таким образом, правильно будет и так, и так. 

Для профессиональных электромонтажников мы все же рекомендуем использовать некое однообразие в работе: фаза в розетке — справа и вот почему.
При монтаже и последующем тестировании розеток мы используем такой прибор для проверки правильности подключение фазного, нулевого и заземляющего проводников. 

Данный прибор позволяет мгновенно определить правильность подключения всех проводников в розетке, наличие напряжения, тест заземления и работоспособность УЗО (тест автомата защиты 30 мА, 120 мс ±40 мс).
Как видно на рисунке, «фаза» в розетке для тестирования должна быть СПРАВА. Поэтому для удобства тестирования и однообразия выполненного монтажа мы рекомендуем подключать «фазу» в розетке справа.
Надеемся, что данное правило появится в нормах хотя бы как рекомендация

«Ноль» и «земля»: в чем принципиальное отличие?

Исторически так получилось, что в Российской Федерации, как и в приграничных государствах, используется заземляющий принцип, когда нулевой проводник соединяется с заземляющим контуром. У многих людей может возникнуть «законный» вопрос: если они контактируют между собой, то для чего тянуть столько проводов – достаточно провести повсюду двойную жилу (фазу и нулевую линию) и будет возможность заземляться посредством нулевой жилы! Однако в такой постановке вопроса скрывается один технический нюанс, который превращает данное решение не только в бесполезную игрушку, но в некоторых случаях и в довольно опасную затею.

Для тех, кому не терпится, и кто любит «заглядывать в ответ», априори выскажу «секрет» – принципиальная идея заключается в том, в каком месте нулевой провод соединяется с заземлением. Вариант их соединения непосредственно внутри розетки, подключая заземляющую жилу (желто-зеленый провод) к нулевой (синий провод), не будет верным. Такая заземляющая схема войдет в противоречие с предписаниями ПУЭ. В результате никакой защиты людей от поражения током не получится, более того, добавится еще больше проблем с безопасностью.
В ПУЭ без каких-либо вариантов однозначно прописано, какой должна быть заземляющая жила. Она должна быть непрерывным проводом, без каких-либо размыкающих элементов – реле, предохранителей, выключателей, а также, положим, с помощью отсоединения электрической вилки от розетки.
Стоит нарушить это основное предписание, оговоренное в ПЭУ – и заземление из надежной защиты человека от поражения током превращается в бесполезную фикцию. Но проблемы на этом, как учит теория, и показывает практика, не заканчиваются! Если все-таки пытаться придавать нулевому проводу заземляющие функции, то не исключена возможность, что корпус холодильника, микроволновки или других бытовых приборов, окажется под напряжением. Это объясняется тем, что по нулевому проводу течет электроток с соответствующим падением напряжения, величину которого можно определить, умножая силу тока на показатель сопротивления проводника на промежутке между замеряемым местом и подлинной заземляющей точкой. Причем величина такого напряжения может характеризоваться десятками вольт, то есть может быть опасной для человека (в пределе – смертельной!).

Осталось подвести некоторые итоги и расставить акценты. В чем принципиальное отличие «ноля» от «земли»? В том, что по нулевому проводу протекает ток и к нему подключаются выключатели, те же вводные автоматы. То есть, если мы желаем иметь «землю» в виде непрерывной жилы, мы обязаны:
  • в многоэтажных многоквартирных домах: подсоединиться к особой земляной жиле в электрическом тоннеле;
  • для индивидуального жилого коттеджа: точкой подсоединения должен стать вводной автомат, точнее, его нулевой провод на входе, который тянется по воздуху или подземному кабелю от ближайшего от дома понижающего трансформатора, причем сечение нулевого провода должно быть не менее десяти квадратных миллиметров для медного провода и 16 мм2 – для алюминиевой жилы (см. в ПУЭ соответствующий пункт).

Любое другое место за вводным автоматом не может использоваться в качестве «земли», поэтому ни что, от металлических болванок, вкопанных недалеко от дома, до корпуса самого электрического щитка, таковыми считаться не могут.
Никогда не забывайте о правилах, изложенных в ПЭУ. Согласно им, следует руководствоваться элементарным, но верным правилом: когда нет уверенности в том, что вот этот конкретный провод является «землей», не стоит подсоединять к нему что бы то ни было, кроме устройства защитного отключения (УЗО) на 30 мА, который срабатывает мгновенно в отличие от автомата защиты. Бережёного, как известно, бог бережет!

Отгорание нуля

Какие бывают последствия отгорания нуля?

Приходилось ли вам слышать о том, что у кого-то сгорела дорогостоящая аппаратура. Возможно, тебе лично пришлось испытать такую неприятность. Почему такое произошло? Причина оказалась в том, что на проводнике в какой-то момент, присутствовало не 220 В, а 380 В. Как такое возможно? Кого винить в произошедшем? Кто будет покрывать убытки?

Были такие случаи, когда пьяный электрик во время профилактических работ в контактных соединениях перепутал проводники, вместо проводника нуль подсоединил фазу, а между фазой и фазой напряжение составляет 380 Вольт.

Но чаще всего, 380В может поступить в наши обители с неожиданной стороны. Проблема кроется в отгорании нуля. Что это за таинственное отгорание нуля? Как оно происходит? Как защититься от нежданного “гостя”?

Для чего нужен нулевой проводник?

Отгорание нуля это лексикон электриков, на техническом языке — обрыв нуля. Проводник нуль используется в трехфазной схеме звезда. Есть еще другая схема, схема треугольник. У такой схемы присутствуют три фазных проводника: А, В, С, но отсутствует четвертый проводник, нулевой. В основном используется в промышленных целях.

В схеме звезда четыре проводника, три фазных и нулевой. Нашему населению достается именно схема звезда и другого быть быть не может. Итак, в многоквартирный дом приходят не два проводника, как некоторые могут полагать, а четырехжильный или пятижильный провод, с защитным заземлением РЕ. Но пока во внимание заземление мы намерено брать не будем, на данный момент он нас не интересует.

Мощный силовой кабель приходит в водный распределительный щит. С главного щита идет распределение по подъездам, а с подъезда по этажам, с этажей по квартирам. Трехфазная схема распределяется равномерно по этажам. Если в подъезде 36 квартир, три фазы будут распределены следующим образом: фаза А – 12 квартир, фаза В – 12 квартир, фаза С – 12 квартир. Распределено равномерно, для баланса работы трехфазной схемы.

Но вот только жители не согласовывают включение и выключение энергопотребителей, да и такого на практике быть не может. Получается так, что один стояк может оказаться сильно загруженным, а другой остается мало задействованным. Что происходит в системе? Произошел перекос  в трехфазной схеме или  дисбаланс. Поставщику электроэнергии никогда не добиться равенства потребления электроэнергии с подобной схемой. Понятно, почему. Люди не роботы, действовать подобно бездушным изобретениям по заданным алгоритмам не могут.

Представим себе, как кипит жизнь в многоэтажном доме. Одни что — то включают, другие выключают. В общем и целом, потребление электроэнергии, чаще всего, происходит более или менее одинаково. Но бывает хороший перекос: по стояку фазы А “густо” разбирают энергию, а по фазе С “пусто”. С этим все понятно. Давайте немного углубимся в трехфазную схему звезда.

Переменные токи каждой фазы в трех одинаковых нагрузках сдвинуты по фазе ровно на одну треть и в идеале компенсируют друг друга, поэтому нагрузка в такой схеме называется трехфазной сосредоточенной нагрузкой. В средней точке ровна  нулю. При равномерной нагрузке трех фаз, например, работают станки на производстве, потребление энергии одинаково по всем фазам. Нуль остается невостребованным, нет дисбаланса. В связи с чем, сечение нулевого проводника гораздо меньше чем по фазе. Нет смысла тратить дорогой металл на то, в чем нет необходимости, там, где появляются незначительные токи. Но у нас в доме приборы работают не от трехфазной схемы, а от однофазной — это все в корне меняет.

Как отгорает нуль?

Тенденция отгорания нуля началась в эпоху 90-х годов. Эпоха экономического преобразования. На рынке появилось большое количество электротехники. Современная аппаратура: компьютеры, телевизоры, радиоприемники, DVD проигрыватели и многое другое. Характер таких устройств несколько отличается от классических бытовых потребителей. Дело в том, что такие приборы выбрасывают в сеть дополнительные импульсные токи, которые не компенсируются в средней точке. Когда включаются приборы , имеющие различные величины сопротивлений, на нулевом проводе может скопится равный или превышающий ток одной из фаз. Это те условия, которые могут создать отгорание нуля, из-за перегрузки на нулевой проводник.

Отгорание происходит в слабых местах, например, в плохо обжатом контакте. Такой перекос может из-за отгорания нуля  создать катастрофические последствия: скачек напряжения до 380 Вольт. Большая часть дорогостоящей аппаратуры может сгореть. Но вот спросить будет не с кого.

Как защитить аппаратуру во время отгорания нуля?

Для защиты бытовой техники от подобных неприятностей, поможет реле контроля напряжения.

реле напряжения

Надежная работа любых бытовых электроприборов от простой лампочки до посудомоечной машины зависит от стабильности электросети. Резкое повышение напряжения или его падение ниже допустимого предела, приводят к быстрому выходу из строя телевизоров, компьютеров, холодильников, стиральных машин и т.п. Это может привести к перегреву обмоток электродвигателей бытовых приборов и последующему выходу их из строя.

Реле напряжения отключает напряжение, если его значение выходит за допустимые пределы. Тем самым защищает все подключённые к нему устройства и приборы. То есть реле напряжения — это защита по напряжению. Для установки реле защиты и другим электромонтажным работам в Нижнем Новгороде, можно обратится за помощью к электрикам профессионалам.

Итак, подведем итог: отгорание нуля в наше время не редкость. Причины мы выяснили, следствия отгорания нуля понятны, как защитить аппаратуру узнали. Осталось приобрести надежное реле напряжения.

Советую не покупать реле напряжения Ресанта, время срабатывания 1 секунда, за такую медлительность все погорит. Приобретать прибор лучше со временем срабатывания по отсечке 0,2 секунды. Такой прибор стоит недешево, но без него ущерб может возрасти во много раз. Ставить прибор или надеяться на авось, решать вам.

Отгорание нуля. Видео.

Что такое модульно-штыревое заземление?

Оцените качество статьи:

Есть ли разница, где в розетке фаза, справа или слева?

Самый ответственный момент при установке штепсельной розетки – подсоединение проводов к контактам. Как минимум нужно подсоединить к клеммам фазу и ноль, а если проложена современная проводка с заземлением, то проводов 3. Часто возникает вопрос, к каким контактам подводить провода, с какой стороны находится фаза, с какой ноль. В быту не имеет особого значения, находится фаза в розетке слева или наоборот, слева ноль, но лучше знать их расположение.

Имеет ли значение расположение нуля и фазы?

Прежде чем выяснять, как найти фазу в розетке, следует разобраться, зачем это нужно. Многие слабо знакомые с электроустановочными изделиями люди считают, что перепутать фазу и ноль при включении в сеть электроприбора так же опасно, как перепутать полярность батареек. На самом деле штепсельные розетки, которые используются в России, неполяризованные, а многие вилки имеют симметричную конструкцию. Так что при включении слева оказывается то один, то другой штырь, и ничего страшного не происходит.

Иногда на форумах и других интернет-ресурсах можно встретить утверждения, что качество работы компьютера, аудиоаппаратуры снижается, если неправильно совместить фазу и ноль вилки и розетки. Но это миф.

Существуют электроприборы, при подключении которых расположение фазного, нулевого проводов и заземления принципиально важно, это оговаривается в инструкции. Но их подключением должны заниматься профессионалы, иначе прибор снимут с гарантийного обслуживания. К таким приборам относятся газовые котлы с электроконтроллером, но они не имеют вилки, которая включаются в розетку, а подключаются к сети стационарно. Если вы устанавливаете розетку для простых бытовых электроприборов у себя дома, особой разницы, с какой стороны подсоединить фазный провод, с какой нулевой, нет.

Но профессиональные электрики на вопрос где должна быть фаза в розетк отвечают: справа. Это неписаное правило, ПУЭ (правила устройства электроустановок) не регламентируют, с какой стороны должны быть нулевой и фазный контакты в бытовой розетке. Но удобнее, если все придерживаются единого стандарта, чтоб тому же электрику не пришлось гадать, фаза в розетке слева или с противоположной стороны. В странах, где розетки поляризованные, тоже соблюдается именно такойпринцип. И если вы хотите все сделать «по науке», фазный провод подсоединить к правой клемме, а нулевой – к левой, встает вопрос, как определить фазу в проводке.

Определение фазного и нулевого провода

Проще всего разобраться с назначением проводов, ориентируясь на маркировку. В РФ и ряде европейских стран действует такой стандарт:
ноль, или нейтраль (рабочий ноль) – жила синего, реже сине-белого цвета
земля (заземление, защитный ноль) – желто-зеленый;
фаза – любой другой цвет, часто коричневый, черный.

Но маркировка по цвету может отсутствовать или не соответствовать стандарту. В этом случае используют индикаторную отвертку (пробник) или тестер.

Проверка пробником:

Зажать корпус отвертки в руке, не касаясь пальцами металлического жала.
Поместить указательный палец на торец отвертки, где есть металлический контакт.
Поочередно прикоснуться жалом к проводам, светодиодный индикатор светится при контакте с фазным проводом.

Если перед вами всего 2 жилы, и вы разобрались, где фаза в проводке, задача решена. Если их 3, нужно отличить рабочий ноль от защитного, то есть заземления. Для этого понадобится тестер (мультиметр). Фазный провод метят маркером. На мультиметре нужно выбрать режим измерения переменного тока и задать предел измерения, превышающий 250 В. Один щуп прижимают к фазной жиле, вторым касаются по очереди двух остальных. На дисплее будет высвечиваться значение напряжения. При замере напряжения между фазой и землей этот показатель больше, между фазой и нейтралью меньше.

Иногда при обоих замерах получается одинаковый результат. В таком случае проверить, где заземление, можно путем измерения сопротивления. Зачищенную жилу фазного провода предварительно обязательно нужно заизолировать. Прибор переключается в режим измерения сопротивления, одним щупом прикасаются к объекту, который точно заземлен, например, металлической трубе, радиатору отопления или водопроводному крану. Прикасаясь вторым щупом попеременно к двум проводам, замеряют сопротивление. Между заземленным объектом и проводом земля сопротивление в пределах 4 Ом, при проверке нулевого провода оно выше.

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

фаза 150-220 В;
ноль (нейтраль) – 5-10 В;
земля – 0 В.

Определение фазы и ноля в розетке

Вы можете точно знать, где фаза и ноль в розетке, если установили ее своими руками, предварительно проверив проводку. Но если вы снимаете или купили на вторичном рынке квартиру, неизвестно, кто занимался монтажом электроустановочных изделий и придерживался ли он правила «фаза справа». Как в такой ситуации разобраться, где в розетке ноль и фаза? Придут на помощь те же самые приборы. Индикаторная отвертка используется точно так же, как при проверке проводки, только жало вставляется поочередно в оба разъема розетки.

При использовании мультиметра выбирается измерение напряжения переменного тока, один щуп (любой) вставляется в отверстие розетки, вторым нужно прикоснуться к собственному телу. Если вы попали в розетке на фазу, прибор покажет больше сотни вольт, если на ноль – всего несколько вольт. Поражения током при этом можно не опасаться, если только по ошибке не выбрать режим измерения силы тока. Иногда индикаторная отвертка показывает, что в розетке 2 фазы, а судя по показаниям мультиметра, напряжение отсутствует. Такая ситуация указывает на обрыв нулевого провода, при проведении ремонтных работ нужно учитывать, что на самом деле напряжение в сети есть.

Существуют и более экзотические способы, как определить фазу без специальных приборов. Вместо мультиметра используют вкрученную в патрон лампу накаливания, от которой отходит двужильный провод, одну из жил закрепляют к трубе, батарее, второй проверяют провода. Загоревшаяся лампочка указывает на фазу. Аналогичным способом замеряют напряжение между заземленным объектом и жилами проводки, используя в качестве индикатора разрезанную картошку. В месте контакта с фазой она темнеет. Оба способа подходят для проверки как проводки, так и уже смонтированной розетки, но являются довольно опасными – велик риск поражения током.

Подведем итоги. Определение нуля и фазы принципиально важно при монтаже выключателей, а для бытовых розеток особого значения не имеет. Разбираться с назначением проводов приходится при ремонте, когда розетка демонтируется и обнажаются концы жил. Фазный провод необходимо на период ремонтных работ заизолировать, хотя для подстраховки можно обмотать изолентой обе жилы. Желательно при монтаже розетки придерживаться неофициального, но общепринятого в среде электриков стандарта, и подключать фазу к правой клемме. Отличить ноль от фазы поможет цветовая маркировка, индикаторная отвертка, если проводка трехжильная, понадобится мультиметр. Проверку контактов в установленной розетке можно осуществлять с помощью обоих приборов.


Две фазы в розетке — почему так происходит и что делать

Электрическая проводка делается по простым принципам, которые изучаются еще в школе, но некоторые неисправности зачастую выходят за рамки стандартных представлений про работу электросети. Две фазы в розетке это распространенный казус, регулярно ставящий в тупик пользователей с недостаточным опытом в ремонте электропроводки.

Где и почему может появиться вторая фаза

Здесь сразу надо оговориться, что так как в квартиру заходит только один фазный провод, то понятие «вторая фаза» подразумевает что индикатор напряжения показывает фазу в контактах на которых она должна быть изначально и на нуле. Второй фазы, в правильном понимании этих слов, в квартире быть не может.

Следующий момент, который надо знать для понимания сути проблемы – каждый электроприбор является проводником электричества. Простейший пример это лампочка – ее нить накаливания светится из-за того, что она является проводником электрического тока. По сути, лампочка светит потому что она замыкает между собой фазу и ноль, а короткого замыкания не происходит так как нить накаливания обладает определенным электрическим сопротивлением. Точно так же работают остальные приборы – они зачастую подключаются к сети через трансформаторы, обмотка которых сделана из медной проволоки. Замыкания опять же не происходит, так как из-за длины провода и его сечения он обладает электрическим сопротивлением, но по сути, когда в розетку вставляется штепсель любого прибора, то в ней замыкаются фаза и ноль.

Теперь должно быть понятно, почему в розетке две фазы – эта неисправность может появиться только в том случае, если отсутствует ноль. Фаза приходит к розетке, проходит через включенный в нее электроприбор и появляется на нулевом проводе, а от него и на тех розетках, что расположены после обрыва ноля. Соответственно, если выключить все выключатели и вынуть все штепсели из розеток, то индикатор будет показывать фазу только на одном контакте.

Как итог – фаза вместо ноля может появиться в одной отдельно взятой розетке (при условии, что она двойная или тройная и в один из штепселей вставлена вилка какого-либо электроприбора). Далее, 2 фазы могут быть в одной из комнат, в половине квартиры или вообще везде.

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

В этом видео вы может посмотреть как эта неисправность воспроизводится на специально собранном стенде:

Две фазы в одной розетке

Такой случай практически не встречается – это редкое исключение, подтверждающее правило. Если все же такое случилось – все остальные розетки работают без нареканий, свет везде есть, а в одной единственной розетке индикатор показывает две фазы, то в первую очередь разбирается сама розетка. Поломка скорее всего будет в другом месте, но сперва на всякий случай надо убедиться что ее нет в месте к которому проще всего добраться.

Если повезет, то перебитый, отгоревший или выскочивший из крепления провод найдется в подрозетнике.

Когда розетка исправна и без следов перегрева проводов, то следующий шаг это определить как она подключена – напрямую к распределительной коробке или через другую розетку. Во втором случае есть вероятность того, что нулевой провод был некачественно прикручен в «родительской» розетке, а теперь выпал.

Далее проверяется распределительная коробка – это наиболее вероятное место, где может обнаружиться плохой контакт. Здесь надо принимать во внимание, что фазный провод не такой требовательный к качеству скрутки – при плохом соединении она греется, но какое-то время еще работает. Нулевой провод может окислиться и без видимых последствий – чтобы это увидеть придется разматывать скрутки, заново зачищать провода и собирать все обратно.

Если скрутка в порядке, то остается только прозвонить провод тестером – если он покажет обрыв внутри стены, то для ремонта придется разбивать штробу.

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

Две фазы в нескольких розетках

Ситуация аналогична предыдущей, но теперь две фазы определяются индикатором сразу в нескольких розетках, зачастую находящихся в одной комнате. При этом освещение может как работать, так и отсутствовать – в зависимости от способа его подключения.

 

Проверять розетки здесь смысла нет, за одним исключением – если все они подключены так называемым шлейфом. В этом случае от распределительной коробки провода приходят на одну из них, а остальные подключены последовательно. ПУЭ так делать настоятельно не рекомендует, но все может быть.

Порядок устранения неисправности зависит от желания лезть к распределительной коробке и от того, есть ли вероятность шлейфового подключения. Вероятнее всего обрыв провода обнаружится в распределительной коробке, но если там все подключения в норме, тогда надо поочередно разбирать все розетки в комнате.

Две фазы в половине комнат

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

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

Есть решение, чтобы не разбирать клеммные коробки во всех комнатах – можно поменять фазу и ноль на входном щитке, а потом воспользоваться индикатором напряжения который может показывать фазу через стену. Перед этим надо убедиться, что в розетках нигде не присутствует зануление и на всякий случай отсоединить заземление, если таковое подключено.

Две фазы во всех розетках

Если во всем доме выключилось освещение, а индикатор напряжения показывает в розетках две фазы, проблема скорее всего на входном щитке.

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

В старых домах часто установлены пробки или автоматические выключатели не только на фазу, как это рекомендовано последними редакциями ПУЭ, но и на нулевом проводе. Перегорание такой пробки равноценно обрыву ноля, поэтому рекомендуется проверить их в первую очередь.

Также надо учитывать возможности отсутствие электрощитка как такового, когда от счетчика провод идет сразу в главную распределительную коробку – неисправный контакт может быть в ней.

Если в квартире все в порядке, то дальше проверяется нулевой провод на этажном распределительном щитке – вероятно, что для этого придется пригласить электрика из ЖЭКа.

Как проверить заземление в розетке мультиметром, как найти фазу и ноль

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

Расцветка, индикаторная отвертка или мультиметр

Самый простой способ проверить заземление, это обратить внимание на цвет изоляции.

У заземляющего провода она должна быть желтой с зелеными полосами, а у нулевого светло-синей. Но не всегда это требование выполняется.

В некоторых домах старой постройки электропроводка сделана отдельными проводниками. Если хозяину пришлось проводить изменения в распределительной коробке, то вполне возможен вариант, когда на розетку приходят только два фазных или нулевых проводника. Поэтому необходимо проверить оба гнезда. При касании нуля неоновая лампочка на индикаторе напряжения не должна загораться.

В современных зданиях используются трехклеммные розетки. На нее приходят фазовый, нулевой и заземляющий проводники. Контакты должны соответствовать своему функциональному назначению.

Иначе, возможны несчастные случаи при использовании стиральной машины или бойлера. Поэтому возникают вопросы, как проверить заземление в розетке, чтобы избежать ошибок при монтаже и спокойно, без страха пользоваться своими приборами.

Индикаторная отвертка гарантированно определяет только фазу. Отличить ноль от земли она не может. Маленькой наводки недостаточно для загорания неоновой лампочки. Тогда найдем фазу и ноль мультиметром или вольтметром.

Варианты показания мультиметра

Любой прибор, индикаторную отвертку или тестер, необходимо проверить на работоспособность и только после этого применять. Изоляция должна быть целой, без трещин и разрывов. Острие щупа должно отделяться от держателя диэлектрической шайбой, для защиты от случайных прикосновений.

Корпус измерительного устройства должен быть целым. Перед замером штекеры вставляются в гнезда прибора, которые соответствует измерению переменного напряжения. Убедившись в исправности устройства, нужно перевести его в режим измерения переменного напряжения со шкалой 750 V. Это необходимо на случай измерения линейного напряжения, когда по ошибке на розетку завели две фазы.

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

  • прибор показывает 220 V, значит контакт фазовый;
  • если 0 или единицы вольт, то это нулевой провод.

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

Показания в несколько вольт говорят, что это ноль. Но как определить ноль, когда дом снабжается электричеством по системе энергоснабжения TN — C и повторным заземлением рядом со зданием? Ведь и в этом случае будут нулевые показания прибора.

Чтобы убедиться, что данный проводник нулевой, нужно отключить заземление в подъездном электрическом щите. Затем замерить напряжение между гнездовыми контактами розетки. Прибор показывает 220 V – найден ноль розетки. Мультиметр ничего не показывает – найдено заземление.

При показаниях прибора 220 V на каждом контакте относительно заземляющего, нужно произвести дополнительное измерение между двумя гнездами розетки. Прибор показывает 0, значит, одна фаза заведена на оба гнезда. В противном случае прибор покажет 380 V, что означает присутствие на розетке двух фаз.

Определение назначения проводников

При работе с электропроводкой обязательно нужно перепроверять назначения проводников розетки. Нет никакой гарантии, что электрик или предыдущий владелец помещения не перепутал провода. Поэтому, если тестер показывает напряжение 220 V относительно клеммы по внешнему виду являющейся заземляющей, это не значит, что она таковой и является.

Это значит, что один из контактов является фазой, а второй нулем или землей. Если тестер покажет 0, то здесь присутствуют нулевой и заземляющий проводник. Точно понять, что есть что, невозможно.

При отсутствии стопроцентной уверенности в назначении заземляющей клеммы розетки действуют иначе. Сначала нужно исключить наличие двух фаз. Проверяем напряжение между всеми контактами. Если прибор 380 V нигде не показывает, а только 220, значит, к розетке подведен один фазный проводник. Теперь нужно приступить к поиску заземления.

Сначала надо отключить заземляющий проводник в этажном щитке. Он присоединен через болтовое соединение к специальной шине, приваренной к корпусу электрического щита.

После этого замеряется напряжение между гнездовыми коннекторами.

Если прибор показывает 220 V, значит гнездовые контакты – это фазный и нулевой провод, а заземляющая клемма действительно таковой является. Теперь зная точно, где находится земля, можно определить остальные коннекторы, но предварительно нужно обратно присоединить «землю» к шине заземления.

Проводим измерение напряжения относительно земляной клеммы. Одно гнездо показывает 220 V – это фаза, второе – 0, то это нулевой контакт.

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

Показания в 220 V говорят сами за себя.

Проверка электропроводки

Проверка заземления электропроводки происходит примерно так же, как с розеткой. Для измерения параметров сети понадобятся мультиметр трехфазный или однофазный, а также индикаторная отвертка.

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

Вначале нужно отключить входной автомат на этажном щите. Затем вскрыть распределительную коробку. Развести провода в разные стороны, чтобы они не соприкасались между собой, и снять изоляцию в местах соединения.

После этого входной автомат включается. Индикаторной отверткой находятся фазные провода. Они могут принадлежать одной, двум или трем фазам.

При наличии трехфазного мультиметра, можно сразу проверить состояние сети. Однофазным мультиметром определение количества фаз происходит дольше. К примеру, если напряжения между тремя проводами составляют по 0 вольт, то это фазные провода от одной фазы.

Если прибор показывает напряжение между двумя проводами 380 V, а между двумя другими 0, то две фазы. При напряжении 380 V между всеми проводниками можно говорить о наличии трех фаз.

Определение заземления происходит, как и в случае с розеткой, только здесь проводов будет больше. Сначала отключается заземляющий провод в этажном щитке. Затем один щуп мультиметра цепляется за фазовый провод, а второй за проводник пока неизвестного назначения.

Если прибор покажет напряжение 220 V – этот провод нулевой, если ноль, то это и есть земля.

Дальше отключают входной автомат. Присоединяется заземляющий провод. Когда проверка закончена, выполняется правильное подсоединение всех элементов электросети, места соединений изолируются, коробка закрывается. Автомат защиты включается.

Количество обрабатываемых сокетов

Информация об обработке количества сокетов находится в этом разделе:

Где используется счетчик сокетов

Во время расчетов потребления лицензий для соответствующих типов лицензий IT Asset Management может использовать значение Sockets (на вкладке «Оборудование» в свойствах устройства инвентаризации) в три отдельных этапа:

1. Linking — это выбор лицензии, которую может использовать данное устройство инвентаризации. Этот процесс выбора на основе сокетов применяется только к лицензиям Oracle Processor и Oracle Named User Plus и только тогда, когда для параметра Metric на вкладке Identification свойств лицензии установлено значение Number of Sockets. Во всех остальных случаях количество сокетов не используется для привязки инвентарных устройств к лицензиям.
2. баллов — выбор применимого правила баллов из набора правил баллов, прикрепленного к лицензии. (Все другие факторы, определяющие правило баллов, такие как тип процессора, также должны соответствовать устройству инвентаризации.) Количество сокетов может быть задействовано при выборе правила очков одним из следующих способов, в зависимости от типа лицензии:
Значение сокетов для инвентарного устройства должно находиться в диапазоне от Мин.розетки и Макс. сокеты (включительно), указанные для правила очков. Пример: лицензия IBM PVU.
На вкладке «Оборудование» в свойствах устройства инвентаризации количество ядер, разделенное на количество сокетов, дает количество ядер на сокет.Это число должно быть между Мин. ядер на сокет и Макс. количество ядер на сокет, указанное для правила точек. Пример: лицензия Oracle Processor.

После выбора правила баллов рассчитывается базовое потребление для отдельного устройства, также как часть этого этапа.

Оптимизация
3.. Эта заключительная фаза вычислений охватывает кластеризацию, суммирование и ограничение счетчиков потребления.

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

Подсчет сокетов, когда невозможно подсчитать количество сокетов

Если ваши инструменты инвентаризации не могут автоматически собрать это количество, вы можете вручную ввести значение в качестве переопределения на вкладке «Оборудование» в свойствах устройства инвентаризации.Это переопределение является постоянным (не перезаписывается будущими коллекциями инвентаризации) и обеспечивает значение, используемое тремя способами, описанными выше.

Для устройств, для которых количество сокетов недоступно в инвентаризации и не установлено вручную, IT Asset Management предоставляет некоторые запасные значения для использования в расчетах потребления лицензий. К сожалению, по техническим причинам запасные значения на каждом этапе обрабатываются немного по-разному. В следующей таблице используется первое значение в каждом списке.

Совет: В этой таблице «числовые» значения — это те, которые отображаются в свойствах инвентарного устройства, когда начинаются вычисления. Эти значения могли быть собраны в инвентаре или могут быть введены вручную в качестве переопределения.

Количество сокетов

Связывание

1. Количество сокетов (для виртуальной машины используется количество сокетов для хоста, если доступно)
2. Количество процессоров (для виртуальной машины — количество процессоров, назначенное виртуальной машине, если известно)
3. Только для виртуальной машины количество процессоров на хосте

Очки

1. Количество сокетов (для виртуальной машины используется количество сокетов для хоста, если доступно)
2. Количество процессоров из инвентаря для данного устройства
3. Не задано (в этом случае счетчик сокетов не может использоваться для выбора правила баллов, и выбирается правило, в котором счетчик сокетов равен нулю / не указан).

Оптимизация

1. Количество розеток для данного устройства
2. Количество процессоров для этого устройства

Можно ли игнорировать счетчик сокетов?

В принципе нет.Вот почему.

Когда IT Asset Management выбирает правило баллов из лицензии для использования в расчетах потребления для определенного устройства инвентаризации, каждое значение, указанное в правиле баллов, включается в оценку, и устройство должно соответствовать каждому указанному параметру, например:

Мин. / Макс. Ядер на сокет (в свойствах устройства инвентаризации количество ядер, деленное на количество сокетов, дает количество ядер на сокет)
Ресурс (для лицензий IBM RVU, где введенное вами значение сопоставляется с диапазонами ресурсов для выбора правила баллов)
Мин. / Макс. Тактовая частота (МГц)
Самая ранняя / последняя дата покупки

Конечно, не все параметры применимы к каждому набору правил; а для индивидуальных правил индивидуальные значения могут быть легко сопоставлены (например, компьютерная модель №показано как * соответствует любому номеру модели компьютера). Следовательно, если в правилах отображается Мин. Сокетов = 0, а Макс. sockets = Любое число, тогда фактически счетчик сокетов игнорируется для этого правила, и неустановленное значение счетчика сокетов не имеет значения для этого правила. Однако ниже в том же наборе правил может быть другое правило с Мин. Сокетов = 3 и Макс. sockets = 4, и устройство с неустановленным счетчиком сокетов не может использовать это правило точек, даже если все остальные параметры совпадают (и даже если, возможно, это теоретически правильное правило для этого устройства).В случае отсутствия счетчика сокетов в этом случае система должна перейти к другому правилу баллов, что может привести к неправильным расчетам потребления, поскольку счетчик сокетов отсутствует для этого устройства.

До сих пор обсуждение в равной степени применимо к типам лицензий IBM PVU и Oracle: всем им может потребоваться счетчик сокетов для выбора правильного правила баллов. Однако количество сокетов имеет еще большее влияние для лицензий Oracle Processor и Oracle Named User Plus, когда для параметра Metric установлено значение Number of Sockets.В этом случае потребление для этого устройства является произведением количества розеток на количество очков в выбранном правиле. Таким образом, даже после выбора правила баллов, которое назначает (скажем) 50 баллов, произведение 50 баллов на неустановленное количество сокетов фактически равно нулю, что является совершенно неправильным результатом потребления, все потому, что значение количества сокетов не установлено.

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

socket (7) [страница руководства hpux]

Розетка
 (7) Разная информация Ручная розетка (7)

  NAME  
socket - межпроцессное взаимодействие ОПИСАНИЕ
Сокеты - это конечные точки связи, которые позволяют процессам обмениваться данными локально или удаленно.Доступ к ним осуществляется с помощью набора системные вызовы (см. socket (2)). Следующие запросы определены в (см. Ioctl (2)): Если int с адресом arg не равен нулю, сокет переводится в неблокирующий режим. В противном случае сокет переводится в режим блокировки. Режим блокировки по умолчанию. Запрос эквивалентен запросу, но использовать его не рекомендуется. Смотрите accept (2), connect (2), recv (2) и send (2) для объяснения того, как используется неблокирующий режим.Для сокетов SOCK_STREAM количество байтов, которые в настоящее время читаются из этого сокета, возвращается в виде целого числа с адресом арг. Для сокетов SOCK_DGRAM - количество байтов, доступных для чтения в данный момент, плюс размер структуры sockaddr (определенной в возвращается в виде целого числа с адресом arg. Для сокетов SOCK_STREAM TCP при возврате целое число с адресом arg не равно нулю, если входящий поток TCP был прочитан. туда, где начинается байт внеполосных данных.В противном случае входящий поток TCP еще не был прочитан до того места, где исходящий поток байт данных диапазона начинается. Для сокетов, отличных от сокетов SOCK_STREAM TCP, при возврате целое число с адресом arg всегда равно нуль. Этот запрос устанавливает группу процессов или процесс ID, связанный с сокетом, должен быть значением целого числа с адресом arg. Связанная группа процессов или идентификатор процесса с сокетом таким образом сигнализируется при изменении состояния сокета: доставляется при получении сообщения об отсутствии данные диапазона; доставляется, если сокет асинхронный, как описано ниже.Если значение целого числа с адресом arg положительный, сигнал отправляется процессу, идентификатор процесса которого соответствует указанному значению. Если значение отрицательное, сигнал отправляется всем процессам, у которых группа процессов равна абсолютному значению указанного значения. Если значение равно нулю, никакой сигнал не отправляется ни одному процессу. Необходимо отправить этот запрос с ненулевым целочисленным значением, чтобы включить механизм доставки сигнала, описанный выше.Значение по умолчанию для группы процессов или идентификатора процесса равно нулю. Этот запрос возвращает группу процессов или процесс Идентификатор, связанный с сокетом, выражается целым числом с адресом arg. См. Объяснение выше для получения более подробной информации о значение возвращаемого целочисленного значения. Если целое число, адрес которого arg не равен нулю, этот запрос устанавливает состояние сокета как асинхронное. В противном случае сокет переводится в синхронный режим (по умолчанию).Асинхронный режим позволяет доставлять сигнал при соблюдении любого из следующих условий. o Поступают новые данные. o Для протоколов, ориентированных на соединение, всякий раз, когда становится доступным дополнительное исходящее буферное пространство или соединение установлен или сломан. Группа процессов или идентификатор процесса, связанный с сокетом, должен быть ненулевым для отправки сигналов. Сигнал доставляется в соответствии с семантикой, описанной выше. Fcntl (2) и флаги (определенные в поддерживаются сокетами.Если этот флаг установлен, сокет переводится в неблокирующий режим в стиле POSIX. Если установлен флаг, сокет переводится в неблокирующий режим. В противном случае сокет переводится в режим блокировки. По умолчанию установлен режим блокировки. См. Accept (2), connect (2), recv (2) и send (2) для объяснения того, как используются эти формы неблокирующего режима. Поскольку поддерживаются флаги и запросы, далее поясняется, как эти функции взаимодействуют. Если установлен флаг или, и запросы ведут себя соответствующим образом, независимо от каких-либо запросов.Если ни флаг, ни флаг не были установлены, запросы управляют поведением из и ЗАВИСИМОСТИ
Только AF_CCITT Для сокетов определены только запросы и. АВТОР
был разработан Калифорнийским университетом в Беркли. СМОТРИ ТАКЖЕ
fcntl (2), getsockopt (2), ioctl (2), socket (2). розетка (7)
Розетка

— документация проекта yt 4.0.0

# Модуль-оболочка для _socket, предоставляющий некоторые дополнительные возможности
# реализовано на Python."" "\
Этот модуль обеспечивает операции с сокетами и некоторые связанные функции.
В Unix он поддерживает доменные сокеты IP (Интернет-протокол) и Unix.
В других системах он поддерживает только IP. Функции, специфичные для
socket доступны как методы объекта сокета.

Функции:

socket () - создать новый объект сокета
socketpair () - создать пару новых объектов сокета [*]
fromfd () - создать объект сокета из дескриптора открытого файла [*]
fromshare () - создать объект сокета из данных, полученных из сокета.Поделиться() [*]
gethostname () - вернуть текущее имя хоста
gethostbyname () - сопоставляет имя хоста с его IP-номером
gethostbyaddr () - сопоставить IP-адрес или имя хоста с информацией DNS
getservbyname () - сопоставить имя службы и имя протокола с номером порта
getprotobyname () - сопоставить имя протокола (например, 'tcp') с числом
ntohs (), ntohl () - преобразовать 16-, 32-битное int из сети в порядок байтов хоста
htons (), htonl () - преобразовать 16-, 32-битное int из хоста в сетевой порядок байтов
inet_aton () - преобразовать строку IP-адреса (123.45.67.89) в 32-битный упакованный формат
inet_ntoa () - преобразовать 32-битный IP в упакованном формате в строку (123.45.67.89)
socket.getdefaulttimeout () - получить значение тайм-аута по умолчанию
socket.setdefaulttimeout () - установить значение тайм-аута по умолчанию
create_connection () - подключается к адресу с необязательным таймаутом и
                       необязательный исходный адрес.

 [*] доступно не на всех платформах!

Специальные объекты:

SocketType - тип объекта для объектов сокета
error - исключение возникает для ошибок ввода / вывода
has_ipv6 - логическое значение, указывающее, поддерживается ли IPv6

Константы IntEnum:

AF_INET, AF_UNIX - домены сокетов (первый аргумент вызова socket ())
SOCK_STREAM, SOCK_DGRAM, SOCK_RAW - типы сокетов (второй аргумент)

Целочисленные константы:

Могут быть определены многие другие константы; они могут быть использованы при звонках
методы setsockopt () и getsockopt ()."" "

import _socket
из импорта _socket *

import os, sys, io, селекторы
из enum import IntEnum, IntFlag

пытаться:
    import errno
кроме ImportError:
    errno = Нет
EBADF = getattr (номер ошибки, 'EBADF', 9)
EAGAIN = getattr (errno, 'EAGAIN', 11)
EWOULDBLOCK = getattr (номер ошибки, 'EWOULDBLOCK'; 11)

__all__ = ["fromfd", "getfqdn", "create_connection", "create_server",
           "has_dualstack_ipv6", "AddressFamily", "SocketKind"]
__all __. extension (os._get_exports_list (_socket))

# Настроить socket.AF_ * socket.Константы SOCK_ * как члены IntEnums для
# более красивое строковое представление.
# Обратите внимание, что _socket знает только о целочисленных значениях. Публичный интерфейс
# в этом модуле понимает перечисления и переводит их обратно из целых чисел
# где необходимо (например, свойство .family объекта сокета).

IntEnum._convert_ (
        'AddressFamily',
        __название__,
        лямбда C: C.isupper () и C.startswith ('AF_'))

IntEnum._convert_ (
        'SocketKind',
        __название__,
        лямбда C: C.isupper () и C.начинается с ('SOCK_'))

IntFlag._convert_ (
        'MsgFlag',
        __название__,
        лямбда C: C.isupper () и C.startswith ('MSG_'))

IntFlag._convert_ (
        'AddressInfo',
        __название__,
        лямбда C: C.isupper () и C.startswith ('AI_'))

_LOCALHOST = '127.0.0.1'
_LOCALHOST_V6 = ':: 1'


def _intenum_converter (значение, enum_klass):
    "" "Преобразование числового значения семейства в член IntEnum.

    Если это неизвестный член, верните само числовое значение.
    "" "
    пытаться:
        вернуть enum_klass (значение)
    кроме ValueError:
        возвращаемое значение

_realsocket = сокет

# Коды ошибок WSA
если sys.platform.lower (). playswith ("win"):
    errorTab = {}
    errorTab [6] = "Указанный дескриптор объекта события недействителен."
    errorTab [8] = "Недостаточно памяти."
    errorTab [87] = "Один или несколько параметров недействительны."
    errorTab [995] = "Операция с перекрытием прервана."
    errorTab [996] = "Перекрывающийся объект события ввода-вывода не в сигнальном состоянии."
    errorTab [997] = "Операция с перекрытием будет завершена позже."
    errorTab [10004] = "Операция была прервана."
    errorTab [10009] = "Передан неверный дескриптор файла."
    errorTab [10013] = "В доступе отказано."
    errorTab [10014] = "Произошла ошибка в сети ??" # WSAEFAULT
    errorTab [10022] = "Попытка выполнить недопустимую операцию."
    errorTab [10024] = "Слишком много открытых файлов."
    errorTab [10035] = "Операция сокета будет заблокирована"
    errorTab [10036] = "Операция блокировки уже выполняется."
    errorTab [10037] = "Операция уже выполняется."
    errorTab [10038] = "Операция сокета на несокете."
    errorTab [10039] = "Требуется адрес назначения."
    errorTab [10040] = "Слишком длинное сообщение."
    errorTab [10041] = "Неверный тип протокола для сокета."
    errorTab [10042] = "Неверная опция протокола."
    errorTab [10043] = "Протокол не поддерживается."
    errorTab [10044] = "Тип сокета не поддерживается."
    errorTab [10045] = "Операция не поддерживается."
    errorTab [10046] = "Семейство протоколов не поддерживается."
    errorTab [10047] = "Семейство адресов не поддерживается семейством протоколов."
    errorTab [10048] = "Сетевой адрес используется."
    errorTab [10049] = "Невозможно назначить запрошенный адрес."
    errorTab [10050] = "Сеть не работает."
    errorTab [10051] = "Сеть недоступна."
    errorTab [10052] = "Сеть разорвала соединение при сбросе".
    errorTab [10053] = "Программное обеспечение вызвало прерывание соединения."
    errorTab [10054] = "Соединение было сброшено."
    errorTab [10055] = "Нет свободного места в буфере."
    errorTab [10056] = "Розетка уже подключена."
    errorTab [10057] = "Сокет не подключен."
    errorTab [10058] = "Сеть отключена."
    errorTab [10059] = "Слишком много ссылок."
    errorTab [10060] = "Истекло время ожидания операции."
    errorTab [10061] = "В соединении отказано."
    errorTab [10062] = "Невозможно перевести имя."
    errorTab [10063] = "Имя слишком длинное."
    errorTab [10064] = "Хост не работает."
    errorTab [10065] = "Хост недоступен."
    errorTab [10066] = "Каталог не пустой."
    errorTab [10067] = «Слишком много процессов».
    errorTab [10068] = "Пользовательская квота превышена."
    errorTab [10069] = "Дисковая квота превышена."
    errorTab [10070] = "Ссылка на дескриптор устаревшего файла."
    errorTab [10071] = "Элемент удален."
    errorTab [10091] = "Сетевая подсистема недоступна."
    errorTab [10092] = "Версия Winsock.dll вне допустимого диапазона."
    errorTab [10093] = "Успешный запуск WSAS еще не выполнен."
    errorTab [10101] = "Выполняется постепенное завершение работы."
    errorTab [10102] = "Нет результатов от WSALookupServiceNext."
    errorTab [10103] = "Вызов был отменен."
    errorTab [10104] = "Таблица вызова процедуры недействительна."
    errorTab [10105] = "Недопустимый поставщик услуг."
    errorTab [10106] = "Поставщику услуг не удалось инициализировать."
    errorTab [10107] = "Ошибка системного вызова."
    errorTab [10108] = "Служба не найдена."
    errorTab [10109] = "Тип класса не найден."
    errorTab [10110] = "Нет результатов от WSALookupServiceNext."
    errorTab [10111] = "Вызов был отменен."
    errorTab [10112] = "Запрос базы данных был отклонен."
    errorTab [11001] = "Хост не найден."
    errorTab [11002] = "Неверный хост не найден."
    errorTab [11003] = "Это неисправимая ошибка."
    errorTab [11004] = "Допустимое имя, тип записи данных не запрошен".
    errorTab [11005] = "Приемники QoS."
    errorTab [11006] = "Отправители QoS."
    errorTab [11007] = "Нет отправителей QoS."
    errorTab [11008] = "QoS нет приемников."
    errorTab [11009] = "Запрос QoS подтвержден."
    errorTab [11010] = "Ошибка допуска QoS."
    errorTab [11011] = "Ошибка политики QoS."
    errorTab [11012] = "Плохой стиль QoS."
    errorTab [11013] = "Плохой объект QoS."
    errorTab [11014] = "Ошибка управления трафиком QoS."
    errorTab [11015] = "Общая ошибка QoS."
    errorTab [11016] = "Ошибка типа службы QoS."
    errorTab [11017] = "Ошибка спецификации потока QoS."
    errorTab [11018] = "Неверный буфер поставщика QoS."
    errorTab [11019] = "Неверный стиль фильтра QoS."
    errorTab [11020] = "Недопустимый стиль фильтра QoS."
    errorTab [11021] = "Неверное количество фильтров QoS."
    errorTab [11022] = "Недопустимая длина объекта QoS."
    errorTab [11023] = "Неверный счетчик потока QoS."
    errorTab [11024] = "Неизвестный объект QoS."
    errorTab [11025] = "Недопустимый объект политики QoS."
    errorTab [11026] = "Неверный дескриптор потока QoS."
    errorTab [11027] = "Недопустимая спецификация потока, зависящая от поставщика QoS."
    errorTab [11028] = "Недопустимая спецификация фильтров для конкретного поставщика QoS."
    errorTab [11029] = "Недопустимый объект режима отмены формы QoS."
    errorTab [11030] = "Недопустимый объект скорости формирования QoS."
    errorTab [11031] = "Тип элемента QoS зарезервированной политики."
    __all __. append ("errorTab")


class _GiveupOnSendfile (Исключение): пройти


сокет класса (_socket.socket):

    "" "Подкласс _socket.socket, добавляющий метод makefile ()." ""

    __slots__ = ["__weakref__", "_io_refs", "_closed"]

    def __init __ (self, family = -1, type = -1, proto = -1, fileno = None):
        # Для пользовательского кода адресное семейство и значения типа являются членами IntEnum, но
        # для базового _socket.socket - это просто целые числа. В
        # конструктор _socket.socket преобразует данный аргумент в
        # целое число автоматически.
        если fileno равно None:
            если семья == -1:
                family = AF_INET
            если type == -1:
                type = SOCK_STREAM
            если proto == -1:
                proto = 0
        _socket.socket .__ init __ (я, семья, тип, прото, fileno)
        self._io_refs = 0
        self._closed = Ложь

    def __enter __ (сам):
        вернуть себя

    def __exit __ (self, * args):
        если не сам._закрыто:
            self.close ()

    def __repr __ (сам):
        "" "Оберните __repr __ (), чтобы показать настоящее имя класса и сокет
        адрес (а).
        "" "
        closed = getattr (self, '_closed', ложь)
        s = "<% s.% s% s fd =% i, family =% s, type =% s, proto =% i" \
            % (self .__ class __.__ module__,
               self .__ class __.__ qualname__,
               "[закрыто]" если закрыто еще "",
               self.fileno (),
               self.family,
               self.type,
               себя.прото)
        если не закрыто:
            пытаться:
                Laddr = self.getsockname ()
                если Laddr:
                    s + = ", laddr =% s"% str (laddr)
            кроме ошибки:
                проходить
            пытаться:
                раддр = self.getpeername ()
                если raddr:
                    s + = ", raddr =% s"% str (raddr)
            кроме ошибки:
                проходить
        s + = '>'
        вернуть s

    def __getstate __ (сам):
        Raise TypeError (f "не может мариновать {self.__class __.__ name __! r} объект ")

    def dup (сам):
        "" "dup () -> объект сокета

        Дублируйте розетку. Вернуть новый объект сокета, подключенный к тому же
        системный ресурс. Новый сокет не наследуется.
        "" "
        fd = dup (self.fileno ())
        sock = self .__ class __ (self.family, self.type, self.proto, fileno = fd)
        sock.settimeout (self.gettimeout ())
        вернуть носок

    def accept (self):
        "" "accept () -> (объект сокета, адресная информация)

        Дождитесь входящего соединения.Вернуть новую розетку
        представляющий соединение и адрес клиента.
        Для IP-сокетов информация об адресе представляет собой пару (hostaddr, порт).
        "" "
        fd, addr = self._accept ()
        sock = socket (self.family, self.type, self.proto, fileno = fd)
        # Проблема № 7995: если не установлен тайм-аут по умолчанию и прослушивание
        # сокет имел (ненулевой) тайм-аут, принудительно заблокировать новый сокет
        # режим для переопределения наследования флагов сокетов, зависящих от платформы.
        если getdefaulttimeout () - None и self.gettimeout ():
            sock.setblocking (Истина)
        возврат носок, адрес

    def makefile (self, mode = "r", buffering = None, *,
                 encoding = None, errors = None, newline = None):
        "" "makefile (...) -> поток ввода-вывода, подключенный к сокету

        Аргументы такие же, как для io.open () после имени файла, за исключением единственного
        поддерживаемые значения режима: «r» (по умолчанию), «w» и «b».
        "" "
        Рефакторинг # XXX, чтобы поделиться кодом?
        если не установлен (режим) <= {"r", "w", "b"}:
            Raise ValueError ("недопустимый режим% r (разрешены только r, w, b)"% (mode,))
        Writing = "w" в режиме
        read = "r" в режиме или без записи
        утверждать чтение или письмо
        binary = "b" в режиме
        rawmode = ""
        при чтении:
            rawmode + = "г"
        если пишете:
            rawmode + = "ш"
        raw = SocketIO (собственный, rawmode)
        себя._io_refs + = 1
        если буферизация отсутствует:
            буферизация = -1
        если буферизация <0:
            буферизация = io.DEFAULT_BUFFER_SIZE
        если буферизация == 0:
            если не двоичный:
                поднять ValueError («небуферизованные потоки должны быть двоичными»)
            вернуть сырой
        при чтении и письме:
            buffer = io.BufferedRWPair (необработанный, необработанный, буферизация)
        elif чтение:
            buffer = io.BufferedReader (необработанный, буферизация)
        еще:
            утверждать письменное
            буфер = io.BufferedWriter (необработанный, буферизация)
        если двоичный:
            буфер возврата
        text = io.TextIOWrapper (буфер, кодировка, ошибки, новая строка)
        text.mode = режим
        текст возврата

    если hasattr (os, 'sendfile'):

        def _sendfile_use_sendfile (self, file, offset = 0, count = None):
            self._check_sendfile_params (файл, смещение, количество)
            sockno = self.fileno ()
            пытаться:
                fileno = файл.fileno ()
            за исключением (AttributeError, io.UnsupportedOperation) как err:
                Raise _GiveupOnSendfile (err) # не обычный файл
            пытаться:
                fsize = os.fstat (fileno) .st_size
            кроме OSError как err:
                Raise _GiveupOnSendfile (err) # не обычный файл
            если не fsize:
                return 0 # пустой файл
            # Обрежьте до 1 ГБ, чтобы избежать ошибки OverflowError, см. Bpo-38319.
            Blocksize = min (count или fsize, 2 ** 30)
            тайм-аут = self.gettimeout ()
            если тайм-аут == 0:
                поднять ValueError («неблокирующие сокеты не поддерживаются»)
            # poll / select имеют то преимущество, что не требуют
            # дополнительный дескриптор файла, в отличие от epoll / kqueue
            # (также они требуют одного системного вызова).если hasattr (селекторы, 'PollSelector'):
                selector = selectors.PollSelector ()
            еще:
                селектор = селекторы.SelectSelector ()
            selector.register (sockno, selectors.EVENT_WRITE)

            total_sent = 0
            # локализуем доступ к переменным, чтобы минимизировать накладные расходы
            selector_select = selector.select
            os_sendfile = os.sendfile
            пытаться:
                в то время как True:
                    если тайм-аут, а не selector_select (тайм-аут):
                        поднять _socket.тайм-аут ("тайм-аут")
                    если считать:
                        Blocksize = count - total_sent
                        если размер блока <= 0:
                            перерыв
                    пытаться:
                        отправлено = os_sendfile (sockno, fileno, смещение, размер блока)
                    кроме BlockingIOError:
                        если не тайм-аут:
                            # Блокировать, пока сокет не будет готов отправить
                            # данные; позволяет избежать перегрузки ресурсов ЦП.selector_select ()
                        Продолжать
                    кроме OSError как err:
                        если total_sent == 0:
                            # Попасть сюда мы можем по разным причинам, главные
                            # one, являющийся 'файлом', не является обычным mmap (2) -подобным
                            # file, и в этом случае мы вернемся к использованию
                            # простой send ().
                            поднять _GiveupOnSendfile (ошибка)
                        поднять ошибку с None
                    еще:
                        если отправлено == 0:
                            break # EOF
                        смещение + = отправлено
                        total_sent + = отправлено
                вернуть total_sent
            наконец-то:
                если total_sent> 0 и hasattr (file, 'seek'):
                    файл.искать (смещение)
    еще:
        def _sendfile_use_sendfile (self, file, offset = 0, count = None):
            поднять _GiveupOnSendfile (
                "os.sendfile () недоступен на этой платформе")

    def _sendfile_use_send (self, file, offset = 0, count = None):
        self._check_sendfile_params (файл, смещение, количество)
        если self.gettimeout () == 0:
            поднять ValueError («неблокирующие сокеты не поддерживаются»)
        если смещение:
            file.seek (смещение)
        Blocksize = min (count, 8192), если count else 8192
        total_sent = 0
        # локализуем доступ к переменным, чтобы минимизировать накладные расходы
        file_read = файл.читать
        sock_send = self.send
        пытаться:
            в то время как True:
                если считать:
                    Blocksize = min (count - total_sent, Blocksize)
                    если размер блока <= 0:
                        перерыв
                data = memoryview (file_read (размер блока))
                если не данные:
                    break # EOF
                в то время как True:
                    пытаться:
                        отправлено = sock_send (данные)
                    кроме BlockingIOError:
                        Продолжать
                    еще:
                        total_sent + = отправлено
                        если отправлено  0 и hasattr (file, 'seek'):
                файл.искать (смещение + total_sent)

    def _check_sendfile_params (self, file, offset, count):
        если 'b' отсутствует в getattr (file, 'mode', 'b'):
            поднять ValueError («файл должен открываться в двоичном режиме»)
        если не self.type & SOCK_STREAM:
            поднять ValueError ("поддерживаются только сокеты типа SOCK_STREAM")
        если count не None:
            если не isinstance (count, int):
                поднять TypeError (
                    "count должно быть положительным целым числом (got {! r})". format (count))
            если count <= 0:
                поднять ValueError (
                    "count должно быть положительным целым числом (got {! r})".формат (количество))

    def sendfile (self, file, offset = 0, count = None):
        "" "файл отправки (файл [, смещение [, количество]]) -> отправлено

        Отправляйте файл до тех пор, пока не будет достигнут EOF, используя высокопроизводительный
        os.sendfile () и вернуть общее количество байтов, которые
        были отправлены.
        * файл * должен быть обычным файловым объектом, открытым в двоичном режиме.
        Если os.sendfile () недоступен (например, Windows) или файл
        вместо этого будет использоваться обычный файл socket.send ().
        * offset * указывает, откуда начать чтение файла.Если указано, * count * - это общее количество байтов для передачи.
        в отличие от отправки файла до достижения EOF.
        Положение файла обновляется при возврате или также в случае ошибки в
        в каком случае file.tell () можно использовать для определения количества
        отправленных байтов.
        Сокет должен быть типа SOCK_STREAM.
        Неблокирующие сокеты не поддерживаются.
        "" "
        пытаться:
            вернуть self._sendfile_use_sendfile (файл, смещение, количество)
        кроме _GiveupOnSendfile:
            вернуть себя._sendfile_use_send (файл, смещение, количество)

    def _decref_socketios (сам):
        если self._io_refs> 0:
            self._io_refs - = 1
        если self._closed:
            self.close ()

    def _real_close (self, _ss = _socket.socket):
        # Эта функция не должна ссылаться ни на какие глобальные объекты. См. Проблему № 808164.
        _ss.close (сам)

    def close (self):
        # Эта функция не должна ссылаться ни на какие глобальные объекты. См. Проблему № 808164.
        self._closed = Верно
        если self._io_refs <= 0:
            себя._real_close ()

    def detach (self):
        "" "detach () -> дескриптор файла

        Закройте объект сокета, не закрывая базовый дескриптор файла.
        Объект не может быть использован после этого вызова, но дескриптор файла
        можно повторно использовать для других целей. Возвращается дескриптор файла.
        "" "
        self._closed = Верно
        вернуть super (). detach ()

    @имущество
    def family (self):
        "" "Доступ только для чтения к семейству адресов для этого сокета.
        "" "
        вернуть _intenum_converter (super ().семья, Адрес Семья)

    @имущество
    def type (self):
        "" "Доступ только для чтения к типу сокета.
        "" "
        return _intenum_converter (super (). type, SocketKind)

    если os.name == 'nt':
        def get_inheritable (сам):
            вернуть os.get_handle_inheritable (self.fileno ())
        def set_inheritable (собственный, наследуемый):
            os.set_handle_inheritable (self.fileno (), наследуемый)
    еще:
        def get_inheritable (сам):
            вернуть os.get_inheritable (self.fileno ())
        def set_inheritable (собственный, наследуемый):
            Операционные системы.set_inheritable (self.fileno (), наследуемый)
    get_inheritable .__ doc__ = "Получить наследуемый флаг сокета"
    set_inheritable .__ doc__ = "Установить наследуемый флаг сокета"

def fromfd (fd, family, type, proto = 0):
    "" "fromfd (fd, family, type [, proto]) -> объект сокета

    Создать объект сокета из дубликата данного файла
    дескриптор. Остальные аргументы такие же, как для socket ().
    "" "
    nfd = dup (fd)
    возвратный сокет (семейство, тип, прото, nfd)

если hasattr (_socket.socket, "доля"):
    def fromshare (информация):
        "" "fromshare (информация) -> объект сокета

        Создайте объект сокета из объекта байтов, возвращенного
        socket.share (pid).
        "" "
        return socket (0, 0, 0, информация)
    __all __. append ("fromshare")

если hasattr (_socket, "socketpair"):

    def socketpair (family = None, type = SOCK_STREAM, proto = 0):
        "" "socketpair ([семейство [, тип [, proto]]]) -> (объект сокета, объект сокета)

        Создайте пару объектов сокета из сокетов, возвращаемых платформой.
        Функция socketpair ().Аргументы такие же, как для socket (), за исключением того, что семейство по умолчанию
        AF_UNIX, если он определен на платформе; в противном случае значение по умолчанию - AF_INET.
        "" "
        если семьи нет:
            пытаться:
                family = AF_UNIX
            кроме NameError:
                family = AF_INET
        a, b = _socket.socketpair (семейство, тип, прото)
        a = socket (семейство, тип, прото, a.detach ())
        b = socket (семейство, тип, прототип, b.detach ())
        вернуть а, б

еще:

    # Происхождение: https: // gist.github.com/4325783, автор - Герт Янсен. Всеобщее достояние.
    def socketpair (family = AF_INET, type = SOCK_STREAM, proto = 0):
        если семья == AF_INET:
            host = _LOCALHOST
        семья elif == AF_INET6:
            host = _LOCALHOST_V6
        еще:
            Raise ValueError ("Только семейства адресов сокетов AF_INET и AF_INET6"
                             "поддерживаются")
        если тип! = SOCK_STREAM:
            поднять ValueError ("Поддерживается только тип сокета SOCK_STREAM")
        если proto! = 0:
            Raise ValueError ("Поддерживается только нулевой протокол")

        # Создаем подключенный TCP-сокет.Обратите внимание на трюк с
        # setblocking (False), который не позволяет нам создавать поток.
        lsock = socket (семейство, тип, прото)
        пытаться:
            lsock.bind ((хост, 0))
            lsock.listen ()
            # В IPv6 игнорировать flow_info и scope_id
            адрес, порт = lsock.getsockname () [: 2]
            csock = socket (семейство, тип, прото)
            пытаться:
                csock.setblocking (Ложь)
                пытаться:
                    csock.connect ((адрес, порт))
                кроме (BlockingIOError, InterruptedError):
                    проходить
                csock.setblocking (Истина)
                ssock, _ = lsock.accept ()
            Кроме:
                csock.close ()
                поднимать
        наконец-то:
            lsock.close ()
        возврат (ssock, csock)
    __all __. append ("пара сокетов")

socketpair .__ doc__ = "" "socketpair ([семейство [, тип [, прототип]]]) -> (объект сокета, объект сокета)
Создайте пару объектов сокета из сокетов, возвращаемых платформой.
Функция socketpair ().
Аргументы такие же, как для socket (), за исключением семейства по умолчанию AF_UNIX.
если определено на платформе; в противном случае значение по умолчанию - AF_INET."" "

_blocking_errnos = {EAGAIN, EWOULDBLOCK}

класс SocketIO (io.RawIOBase):

    "" "Реализация прямого ввода-вывода для потоковых сокетов.

    Этот класс поддерживает метод makefile () для сокетов. Это обеспечивает
    необработанный интерфейс ввода-вывода поверх объекта сокета.
    "" "

    # Может возникнуть вопрос, почему бы вместо этого не позволить FileIO выполнить эту работу. Есть два
    # основные причины, по которым FileIO не адаптирован:
    # - не будет работать под Windows (где нельзя использовать read () и
    # write () для дескриптора сокета)
    # - не сработает с таймаутом сокета (FileIO проигнорирует
    # тайм-аут и считать сокет неблокирующим)

    # XXX Другие документы

    def __init __ (сам, носок, режим):
        если режим не в ("r", "w", "rw", "rb", "wb", "rwb"):
            поднять ValueError ("недопустимый режим:% r"% режим)
        io.RawIOBase .__ init __ (сам)
        self._sock = носок
        если «b» не в режиме:
            mode + = "b"
        self._mode = режим
        self._reading = "r" в режиме
        self._writing = "w" в режиме
        self._timeout_occurred = Ложь

    def readinto (self, b):
        "" "Прочитать до len (b) байтов в записываемый буфер * b * и вернуть
        количество прочитанных байтов. Если сокет неблокирующий и нет байтов
        доступны, ничего не возвращается.

        Если * b * не пусто, возвращаемое значение 0 указывает, что соединение
        был отключен на другом конце."" "
        self._checkClosed ()
        self._checkReadable ()
        если self._timeout_occurred:
            поднять OSError ("невозможно прочитать из объекта с истекшим временем ожидания")
        в то время как True:
            пытаться:
                вернуть self._sock.recv_into (b)
            кроме тайм-аута:
                self._timeout_occurred = Верно
                поднимать
            кроме ошибки как e:
                если e.args [0] в _blocking_errnos:
                    return None
                поднимать

    def write (self, b):
        "" "Записать данные байты или объект массива байтов * b * в сокет
        и вернуть количество записанных байтов.Это может быть меньше, чем
        len (b), если не все данные могут быть записаны. Если розетка
        неблокирование и запись байтов невозможна. Не возвращается.
        "" "
        self._checkClosed ()
        self._checkWritable ()
        пытаться:
            вернуть self._sock.send (b)
        кроме ошибки как e:
            # XXX а как насчет EINTR?
            если e.args [0] в _blocking_errnos:
                return None
            поднимать

    def читаемый (сам):
        "" "Истина, если SocketIO открыт для чтения."" "
        если self.closed:
            поднять ValueError ("Операция ввода-вывода на закрытом сокете.")
        вернуть self._reading

    def записываемый (сам):
        "" "Истина, если SocketIO открыт для записи.
        "" "
        если self.closed:
            Raise ValueError ("Операция ввода-вывода на закрытом сокете.")
        вернуть self._writing

    def seekable (self):
        "" "Верно, если SocketIO открыт для поиска.
        "" "
        если self.closed:
            raise ValueError ("Операция ввода-вывода на закрытом сокете.")
        вернуть super (). seekable ()

    def fileno (сам):
        "" "Вернуть файловый дескриптор нижележащего сокета.
        "" "
        self._checkClosed ()
        вернуть self._sock.fileno ()

    @имущество
    def имя (сам):
        если не self.closed:
            вернуть self.fileno ()
        еще:
            возврат -1

    @имущество
    режим def (сам):
        вернуть self._mode

    def close (self):
        "" "Закройте объект SocketIO. Это не закрывает базовый
        socket, за исключением случаев, когда все ссылки на него исчезли."" "
        если self.closed:
            возвращаться
        io.RawIOBase.close (сам)
        self._sock._decref_socketios ()
        self._sock = Нет


def getfqdn (имя = ''):
    "" "Получить полное доменное имя по имени.

    Пустой аргумент интерпретируется как означающий локальный хост.

    Сначала проверяется имя хоста, возвращаемое gethostbyaddr (), затем
    возможно существующие псевдонимы. Если полное доменное имя недоступно, имя хоста
    from gethostname () возвращается.
    "" "
    name = name.strip ()
    если не имя или имя == '0.0.0.0 ':
        имя = gethostname ()
    пытаться:
        имя хоста, псевдонимы, ipaddrs = gethostbyaddr (имя)
    кроме ошибки:
        проходить
    еще:
        aliases.insert (0, имя хоста)
        для имени в псевдонимах:
            если '.' по имени:
                перерыв
        еще:
            имя = имя хоста
    возвращаемое имя


_GLOBAL_DEFAULT_TIMEOUT = объект ()

def create_connection (адрес, тайм-аут = _GLOBAL_DEFAULT_TIMEOUT,
                      source_address = Нет):
    "" "Подключиться к * адресу * и вернуть объект сокета.Функция удобства. Подключиться к * адресу * (2-кортеж `` (host,
    порт) '') и вернуть объект сокета. Прохождение необязательного
    Параметр * timeout * устанавливает время ожидания для экземпляра сокета
    перед попыткой подключения. Если * тайм-аут * не указан,
    глобальная настройка тайм-аута по умолчанию, возвращаемая: func: `getdefaulttimeout`
    используется. Если * source_address * установлен, это должен быть кортеж из (host, port)
    для сокета для привязки в качестве адреса источника перед установкой соединения.
    Хост '' или порт 0 указывает ОС использовать значение по умолчанию."" "

    хост, порт = адрес
    err = Нет
    для res в getaddrinfo (хост, порт, 0, SOCK_STREAM):
        af, socktype, proto, canonname, sa = res
        sock = Нет
        пытаться:
            sock = socket (af, socktype, proto)
            если тайм-аут не равен _GLOBAL_DEFAULT_TIMEOUT:
                sock.settimeout (тайм-аут)
            если исходный_адрес:
                sock.bind (адрес_источника)
            sock.connect (sa)
            # Явно прервите ссылочный цикл
            err = Нет
            вернуть носок

        кроме ошибки как _:
            err = _
            если sock не None:
                носок.Закрыть()

    если ошибка не равна None:
        пытаться:
            поднять ошибку
        наконец-то:
            # Явно прервите ссылочный цикл
            err = Нет
    еще:
        ошибка повышения ("getaddrinfo возвращает пустой список")


def has_dualstack_ipv6 ():
    "" "Вернуть True, если платформа поддерживает создание сокета SOCK_STREAM
    который может обрабатывать как AF_INET, так и AF_INET6 (IPv4 / IPv6) соединения.
    "" "
    если не has_ipv6 \
            или нет hasattr (_socket, 'IPPROTO_IPV6') \
            или нет hasattr (_socket, 'IPV6_V6ONLY'):
        вернуть ложь
    пытаться:
        с сокетом (AF_INET6, SOCK_STREAM) как носок:
            носок.setsockopt (IPPROTO_IPV6, IPV6_V6ONLY, 0)
            вернуть True
    кроме ошибки:
        вернуть ложь


def create_server (адрес, *, family = AF_INET, backlog = None, reuse_port = False,
                  dualstack_ipv6 = Ложь):
    "" "Удобная функция, которая создает сокет типа SOCK_STREAM
    привязан к * адресу * (2-кортеж (хост, порт)) и возвращает сокет
    объект.

    * family * должно быть AF_INET или AF_INET6.
    * backlog * - размер очереди, переданной в socket.listen ().
    * reuse_port * определяет, следует ли использовать опцию сокета SO_REUSEPORT.* dualstack_ipv6 *: если true и платформа поддерживает его, будет
    создать сокет AF_INET6, способный принимать как IPv4, так и IPv6
    соединения. Если установлено значение false, эта опция будет явно отключена.
    платформы, которые включают его по умолчанию (например, Linux).

    >>> с create_server (('', 8000)) в качестве сервера:
    ... пока True:
    ... conn, addr = server.accept ()
    ... # обработать новое соединение
    "" "
    если reuse_port, а не hasattr (_socket, "SO_REUSEPORT"):
        поднять ValueError ("SO_REUSEPORT не поддерживается на этой платформе")
    если dualstack_ipv6:
        если не has_dualstack_ipv6 ():
            поднять ValueError ("dualstack_ipv6 не поддерживается на этой платформе")
        если семья! = AF_INET6:
            поднять ValueError ("dualstack_ipv6 требует семейства AF_INET6")
    sock = socket (семейство, SOCK_STREAM)
    пытаться:
        # Примечание о Windows.Мы не устанавливаем SO_REUSEADDR, потому что:
        # 1) В этом нет необходимости: bind () будет успешным даже в случае
        # предыдущий закрытый сокет по тому же адресу, но все еще в
        # Состояние TIME_WAIT.
        # 2) Если установлено, другой сокет может использовать bind () на том же самом
        # адрес, эффективно предотвращающий прием этого
        # соединений. Кроме того, он может установить процесс в состояние, в котором
        # он больше не будет реагировать на какие-либо сигналы или корректные убийства.
        # См .: msdn2.microsoft.com/en-us/library/ms740621(VS.85) .aspx
        если os.name не входит в ('nt', 'cygwin') и \
                hasattr (_socket, 'SO_REUSEADDR'):
            пытаться:
                sock.setsockopt (SOL_SOCKET, SO_REUSEADDR, 1)
            кроме ошибки:
                # Сбой позже при bind (), для платформ, которые не могут
                # поддерживают эту опцию.
                проходить
        если reuse_port:
            sock.setsockopt (SOL_SOCKET, SO_REUSEPORT, 1)
        если has_ipv6 и family == AF_INET6:
            если dualstack_ipv6:
                носок.setsockopt (IPPROTO_IPV6, IPV6_V6ONLY, 0)
            elif hasattr (_socket, "IPV6_V6ONLY") и \
                    hasattr (_socket, «IPPROTO_IPV6»):
                sock.setsockopt (IPPROTO_IPV6, IPV6_V6ONLY, 1)
        пытаться:
            sock.bind (адрес)
        кроме ошибки как err:
            msg = '% s (при попытке привязки к адресу% r)'% \
                (ошибка, ошибка, адрес)
            поднять ошибку (err.errno, msg) из None
        если отставание отсутствует:
            sock.listen ()
        еще:
            носок.слушай (отставание)
        вернуть носок
    кроме ошибки:
        sock.close ()
        поднимать


def getaddrinfo (хост, порт, family = 0, type = 0, proto = 0, flags = 0):
    "" "Разрешить хост и порт в списке записей информации об адресе.

    Преобразуйте аргумент хоста / порта в последовательность из 5 кортежей, содержащих
    все необходимые аргументы для создания сокета, подключенного к этой службе.
    host - это доменное имя, строковое представление адреса IPv4 / v6 или
    Никто. порт - это строковое имя службы, такое как 'http', числовой номер порта или
    Никто.Передав None в качестве значения хоста и порта, вы можете передать NULL в
    базовый C API.

    Аргументы семейства, типа и прототипа могут быть дополнительно указаны, чтобы
    сузить список возвращаемых адресов. Передача нуля в качестве значения для каждого из
    эти аргументы выбирают полный диапазон результатов.
    "" "
    # Мы переопределяем эту функцию, так как хотим перевести числовое семейство
    # и значения типа сокета для перечисления констант.
    addrlist = []
    для res в _socket.getaddrinfo (хост, порт, семейство, тип, прото, флаги):
        af, socktype, proto, canonname, sa = res
        список адресов.добавить ((_ intenum_converter (af, AddressFamily),
                         _intenum_converter (тип сокета, SocketKind),
                         прото, каноническое имя, са))
    вернуть список адресов
 

Розетка и разъемы ZIF: в чем преимущества?

В моем последнем посте я писал о соединителях Bendix-Amphenol Bristle Brush, у которых сила сопряжения составляла 1,5 унции на контакт. (Для сравнения, большинство конструкций с двухлучевыми контактами имеют силы сопряжения в диапазоне 5 унций на контакт.) Высокие усилия сопряжения могут быть проблемой для многих конструкций разъемов, включая разъемы ввода-вывода, которые часто сопрягаются и не сопрягаются, тестовые разъемы, которые сопрягаются с сотнями или тысячи раз в день, особенно для разъемов с большим количеством контактов.Многие конструкции систем могут действительно выиграть от использования разъемов, предназначенных для соединения с нулевым усилием вставки.

Межблочный переходник Cannon DLM ZIF для ультразвукового датчика.

В 1970-х годах начали появляться соединители с функциями, позволяющими использовать ZIF (Zero Insertion Force). Принцип для большинства этих разъемов был аналогичен. Контакты расположены так, что пластмассовые корпуса могут полностью входить в контакт без соприкосновения контактов, что исключает трение сопряжения и связанный с ним износ. После сопряжения корпусов кулачок вращается, перемещая контакты так, чтобы они полностью сопрягались с заданной нормальной силой.Вместо силы трения кулачок — обычно на четверть или пол-оборота — перемещается в нужное положение путем вращения ручки. Это можно сделать, повернув ручку, как дверную ручку, или отвертку, чтобы аппарат оставался маленьким.

Концепция ЗИФ имеет ряд преимуществ:

  • Минимальный износ сопряжения, поскольку между сопряженными контактами мало или отсутствует трение.
  • Увеличить срок службы стыковки с соединителями ZIF легко, поскольку они не изнашиваются при трении.
  • Зачастую ручку сцепления можно активировать одной рукой, что делает ее удобной в местах, где к ней трудно получить доступ двумя руками или инструментами.
  • Ручка механизма ZIF может выполнять двойную функцию за счет сопряжения сигнальных контактов внутри металлического корпуса с подходящей защитой от электромагнитных помех, сводящей к минимуму или устраняющей электрические помехи

Есть и недостатки:

  • Минимальное протирание сопряжения требует чистых контактов без изолирующих пленок в области сопряжения.Вы хотите использовать разъемы ZIF в чистых помещениях.
  • Конструкции
  • ZIF с кулачками более громоздкие, а сила кручения, приводящая в действие кулачки, увеличивается с увеличением количества контактов, и может потребоваться большой рычаг.
  • Обычно в разъемах ZIF используются однолучевые контакты, стыкующиеся с одной стороны сопрягаемой поверхности. В обычных решениях кабельного ввода-вывода чаще всего используются резервные двухлучевые контакты для обеспечения высокой надежности во время вибрации, ударов или неблагоприятных условий. Решения ZIF менее подходят для этих приложений.

Типичные области применения кабельных соединителей ZIF:

  • Соединения датчиков для ультразвуковых систем, в которых датчики часто меняются в течение дня для различных исследований
  • Многие приложения, требующие частой стыковки, в промышленном, испытательном и автомобильном сегментах рынка

Итак, если у вас есть приложение, требующее частого подключения и отключения кабелей, рассмотрите решение ZIF в качестве кандидата. Медицинские приложения являются наиболее важными, но аналогичные требования существуют для любого оборудования, которое требует частой перенастройки.Подумайте о тестовом оборудовании, особенно на сборочных линиях, которые должны тестировать широкий спектр продуктов, каждая из которых имеет специальную тестовую головку, подключенную к тестеру с общим интерфейсом ZIF. Развлекательное оборудование часто настраивается для определенного этапа или действия, а затем перенастраивается для следующего действия или следующего выступления. Соединители ZIF имеют срок службы, превышающий 20 000 циклов соединения, что делает их чрезвычайно полезными для этих приложений.

Еще одно важное применение ZIF — это тестовые разъемы, особенно для тех, кто тестирует большие массивы штыревой сетки.Расположение ZIF позволяет легко подключать многополюсную матрицу без нагрузки на часто керамическую подложку. Комбинация нулевого усилия сочленения с очень высокими требованиями к сроку службы сделала ZIF идеальным решением для тестирования полупроводниковых устройств и многокристальных модулей. Розетки ZIF обычно работают с двухсекционным пластиковым корпусом. Одна часть прикрепляет контакты к печатной плате, а вторая часть приводится в действие кулачком с помощью рычага или винтового соединения, чтобы закрыть контактную балку после того, как тестируемая упаковка полностью вставлена.В некоторых случаях этот разъем ZIF также используется при производстве продуктов для замены хрупких многополюсных массивов в полевых условиях. Нажмите на иллюстрацию выше, чтобы увидеть анимацию этого действия. Сегодня полупроводниковые корпуса с решетчатыми выводами быстро переходят на матричные блоки с контактными площадками, которые требуют других решений, обычно сжатия по оси Z.

Коннектор плоской гибкой цепи (FFC) Molex ZIF.

Подход ZIF также часто используется для разъемов, соединяющих плоские гибкие кабели с платами ПК. В этом случае мотивация состоит в том, чтобы сделать коннектор максимально низкопрофильным.Оператор сборки открывает верхнюю часть разъема, вставляет плоский кабель, затем защелкивает дверцу, закрывающуюся на верхней части разъема, создавая нормальное усилие, необходимое для надежного соединения. Эта низкопрофильная конструкция разъема хорошо подходит для ноутбуков, планшетов и других портативных устройств, особенно для гибких цепей, ведущих к дисплеям, клавиатурам и переключателям.

Конструкции

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

Да пребудет с вами ЗИФ. (Пожалуйста, простите меня. Я не мог устоять перед ссылкой на «Звездные войны».)

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *