Просмотр полной версии : ИП320. Работа с битами. Помогите новичку.
на экране №1 определил две кнопки. хочу сделать так, чтобы при нажатии на 1-ю кнопку устанавливался бит в "1"в плк в определенной переменной и одновременно происходил переход на экран №2. а при нажатии на 2-ю кнопку - также бит в "1" в другой переменной и переход на экран № 3. Я так понял, что в конфигураторе ип-320 можно или присвоить какое-то значение переменной, или выполнить переход на другой экран. А мне надо одновременно выполнить и то, и другое. Спасибо всем, кто откликнется без мании величия.
тоесть мне можно не откликаться, а я то хотел предложить по изменению бита в плк, вслед отправить регистр с номером экрана :)
Sergey666
16.01.2014, 22:38
Как мало , оказывается надо , для погашения 2х кредитов .
как это сделать, можно подробнее немного?
В визуализации нужно собрать цепь нажав стоп и ворота, нажать "ручной", потом подготовить для автоматической работы станка нажав "формы вниз" , формы открыть и дорны вниз. Затем нажать авто и старт. на панели хочу реализовать выбор ручного и автоматического режима с переходом на соответствующий экран
Sergey666
16.01.2014, 23:34
Надо было на ПР работать , Rovki уже-б проект по этим данным:confused: наваял.:D
я дальше идей, тоже ни чего не подскажу, тут надо объяснять взаимодействие, если панель слейв, то намного легче, если мастер то показывать наглядно надо как работать не по времени, а по изменению, вобщем легче проект выдать, а у меня такой возможности нет, в эмуляции отладить такие вещи не реально
на экране №1 определил две кнопки. хочу сделать так, чтобы при нажатии на 1-ю кнопку устанавливался бит в "1"в плк в определенной переменной и одновременно происходил переход на экран №2. а при нажатии на 2-ю кнопку - также бит в "1" в другой переменной и переход на экран № 3. Я так понял, что в конфигураторе ип-320 можно или присвоить какое-то значение переменной, или выполнить переход на другой экран. А мне надо одновременно выполнить и то, и другое. Спасибо всем, кто откликнется без мании величия.
по кнопам только ходим
только читаем экран
b:=b or экран = такойто;
Sergey666
17.01.2014, 00:21
по кнопам только ходим
только читаем экран
b:=b or экран = такойто;
Может быть :
IF b THEN
Экран:= такой-то;
END_IF
Но лучше через триггер .
А мне надо одновременно выполнить и то, и другое. Спасибо всем, кто откликнется без мании величия.
В руководстве по программированию на 11 стр. есть описание группы "Управление". По ходу это то что надо.
Склифос Артем
21.01.2014, 12:39
Как мало , оказывается надо , для погашения 2х кредитов .
Ага.))) Было бы все так просто. Миллионерами все стали бы.
Я так и не победил это... В тот раз вроде обойти получилось, а теперь надо сделать вход в режим настройки времени в ИП-320 удержанием кнопки ... А для этого надо из программы делать переходы на другие экраны и биты устанавливать. Я где-то видел эту тему подымали, а теперь найти не могу. Как такое на форуме искать?
А в чем затык был?...
1) Ип320 мастер, устанавливает бит в плк.
2) В плк по переднему фронту этого бита присваиается регистру записи экрана нужное число.
3) Панель увидела это число и сменила экран....
-------------------------------------------------------------------
"а теперь надо сделать вход в режим настройки времени в ИП-320 удержанием кнопки ..." - я ничего не понял. по русски пожалуйста.
Предположу что на экране ип320 после длительного нажатия на кнопку произошло событие смены экрана. так? если так, то не получится.
если отдельная кнопка подключенная ко входу плк, то без проблем.
Предположу что на экране ип320 после длительного нажатия на кнопку произошло событие смены экрана. так? если так, то не получится.
если отдельная кнопка подключенная ко входу плк, то без проблем.
момент "1", и тоже - без проблем
момент "1", и тоже - без проблем
с моментом "1" длительность состояния TRUE от вас никак не зависит, тоесть изменится с TRUE снова на FALSE ДО того как отпустите кнопку, а значит не получится.
Могу ошибаться конечно, завтра проверю на 100%.
Я вот тоже слегка русский, но тоже ничего не понял. Как я из плк могу установить бит в панели или сделать переход? А удержание - да, не получается.... А комбинацию из двух кнопок можно сделать? Я хочу сделать защиту от случайного нажатия.
а теперь надо сделать вход в режим настройки времени в ИП-320 удержанием кнопки ... А для этого надо из программы делать переходы на другие экраны и биты устанавливать...
А чего спросили -то ?
Я понял что вход куда-то по длинному нажатию кнопы ИП. Так ?
Если так - то см. выше. Если нет - то повторю Ваши слова
Я вот тоже слегка русский, но тоже ничего не понял.
А удержание - да, не получается.
Читаем РЭ про момент '1'
А комбинацию из двух кнопок можно сделать?
Нет
Я хочу сделать защиту от случайного нажатия.
Сразу по нажатию перейти в экран типа
"Уверен, брат ?" ESC-НЕТ ENT-ДА
(esc-выход обратно, ent- сделать что нужно)
+ добавить что-то типа
ton(in := CurrentScreen = ARE_YOU_SURE, pt := T#3s);
if ton.q then выход обратно end_if
Ок. Ща попробую... А че опять на ST? Это мне надо TON в ФБ сделать, а потом этот ФБ в PLC_PRG воткнуть, правильно?
Ну да. Я-то думал - момент "1" это что-то типа R_TRIG. С удержанием понял. Ну вот у меня в Modbus Slave, в конфигурации ПЛК есть бит 13, переменная х1, к примеру. В панели этот бит кнопка в режиме "Уст 1". Если х1 поменять в программе - в ИП-320 тоже изменится состояние кнопки? А переход на другой экран - это ведь даже не бит... А как?
А че опять на ST?
А что - есть другие языки с таким же функционалом и лаконичностью ?
Если х1 поменять в программе - в ИП-320 тоже изменится состояние кнопки?
Кнопа в ИП320 вообще НЕ изменяет свое состояние, она воздействует на указанный бит. Имели ввиду индикатор ?
А переход на другой экран - это ведь даже не бит..
Где-то на 3-й ступени посвящения люди постигают существование WORD, INT...
... А как?
Зависит от текущей ступени посвящения
Я Петрова читал про ST - все понимаю, а как до дела доходит - буксую жестко в этих знаках препинания, надо постоянно на примеры смотреть - вообщем нелегко дается как-то. Но ведь у других получается, и так легко еще. Я тоже так хочу. Методика какая-то есть секретная, издание... Что-то вроде "ST для дебилов"....Поделитесь опытом - как его выучить. CFC - язык понятный, но очень громоздкий, разрастается до пугающих размеров... это же и на скорость ПЛК тоже влияет,правильно?
Modbus Slave, в конфигурации ПЛК есть бит 13, переменная х1, к примеру. В панели этот бит кнопка в режиме "Уст 1". Если х1 поменять в программе - в ИП-320 тоже изменится состояние кнопки?
Если х1 поменять в программе - в ИП-320 тоже изменится состояние бита
.. А как?
Где-то на 3-й ступени посвящения ..., в РЭ про чтение/запись экрана ....
название темы просто "убило" ;)
в Modbus Slave, в конфигурации ПЛК есть бит 13, переменная х1, к примеру. В панели этот бит кнопка в режиме "Уст 1". Если х1 поменять в программе - в ИП-320 тоже изменится состояние кнопки? А переход на другой экран - это ведь даже не бит... А как?
Как-то так
15306
ПЛК видит нажатие кнопки и может через регистр управления сменить номер текущего экрана
Где-то на 3-й ступени посвящения люди постигают существование WORD, INT...
Вот с этого момента можно поподробнее? А именно - управление из ПЛК переходом на другой экран
Спасибо,petera. Как я Вас долго ждал... Сколько народу успело надо мной поизмываться...
Придется тебе взять 3й кредит и купить какую нить книгу о паскале. Там ты постигнешь навыки владением ST.
---------------------------
Чего ж ждать, есть РЭ, там всё есть это.
Я Петрова читал про ST - все понимаю, а как до дела доходит - буксую жестко в этих знаках препинания, надо постоянно на примеры смотреть - вообщем нелегко дается как-то. Но ведь у других получается, и так легко еще. Я тоже так хочу. Методика какая-то есть секретная, издание... Что-то вроде "ST для дебилов"....Поделитесь опытом - как его выучить. CFC - язык понятный, но очень громоздкий, разрастается до пугающих размеров... это же и на скорость ПЛК тоже влияет,правильно?
Секретная методика: можно вообще использовать только конструкции IF и CASE. С циклами можно не заморачиваться, ПЛК и так в цикле работает. Только вот с таймерами надо аккуратней, изучить досконально как они работают, чтобы не запутаться. Берете фрагмент на CFC и пытаетесь перевести его на ST. Так постепенно и привыкните. И самое главное: в каждой строчке пишите для себя комментарии.
Я выбрал в слейве подэлемент 4 байта. В нем два регистра - 38 и 39. Переменную обозначил как ip. А в проге разделять WORD по битам умею, а DWORD по регистрам - не умею.
Я выбрал в слейве подэлемент 4 байта. В нем два регистра - 38 и 39. Переменную обозначил как ip. А в проге разделять WORD по битам умею, а DWORD по регистрам - не умею.
попробуйте wVarUno:=dwVar AND 16#FFFF; и wVarDuo:=SHR(dwVar,16) AND 16#FFFF;
возможно если компилятор будет ругаться то придется добавить DWORD_TO_WORD
wVarUno:=dwVar AND 16#FFFF; и wVarDuo:=SHR(dwVar,16) AND 16#FFFF;
Стесняюсь признаться - но мне помельче бы разжевать... Это как в CFC впендюрить?
Стесняюсь признаться - но мне помельче бы разжевать... Это как в CFC впендюрить?
Так как написано, дословно
15322
"Если компилятор будет ругаться то придется добавить DWORD_TO_WORD"
15323
А что - 2 byte взять не судьба ?
Это что-то типа вместо одного большого кредита - один, но маленький. Должны чувствовать разницу.
А что - 2 byte взять не судьба ?
Так в конфигураторе ИП в настройках проекта в "управление" надо только один регистр указать... А если будет два подэлемента по два бита подряд и я укажу только первый, про второй ПЛК сам догадается, так?
Я потому и выбрал один на 4 бита, чтобы два регистра запихать..
Два раза по 2 byte - опять же, легче чем пилить 4 byte
PS
в "управление" надо только один регистр указать.
Вы б в "управлении" поиграли бы галочками - циферки бы и объяснили б вам адресацию регистров
добавить DWORD_TO_WORD
и and'ы вообще не нужны
Так как написано, дословно
15322
Я "dwVar" назвал переменную в слейве ПЛК, а не в PLC_PRG. Это мои 38-39 регистры. Работает вроде. Завтра 2 по 2 байта взять попробую.
Я выбрал в слейве подэлемент 4 байта. В нем два регистра - 38 и 39. Переменную обозначил как ip. А в проге разделять WORD по битам умею, а DWORD по регистрам - не умею.
Я упустил нить обсуждения, оказывается вот оно что:confused:
Ваши попытки по последующему выделению отдельных WORD просто "жесть":eek:. Сами создаем себе трудности, которые потом пытаемся преодолеть.
А нужно-то просто иметь два последовательных элемента 2byte адр.38 и 39. Для панели задать Регистр № 4х38 и все. Тем более, что назначение у них разное.
Регистр 38 панель читает и переходит на номер экрана, который в нем записан и затем обнуляет этот регистр. А в регистр 39, всякий раз когда на панели ходим по экранам, например с помощью кнопок, панель будет записывать номер экрана на который произошел переход .
Да. Спасибо большое, всё работает как надо. Жаль, раньше не знал этого. Теперь дофига переделывать. Можно очень сильно упростить работу оператора с панелью. А на сп-270 примерно так же надо конфигурировать? Заказали эту панель, а я про нее пока что ничего не знаю. Опыт конфигурирования ИП-320 пригодится?
Опыт всегда пригодится:rolleyes:
А вот еще вопрос: Мне сказали, что в слейве ПЛК регистры FLOAT должны всегда идти последними последними, и младший должен быть четным. А если мне надо добавить подэлемент какой-нибудь, то приходится все номера сдвигать и в конфигураторе Ип - тоже. Уже несколько раз так делал -нудный гемор... Может я опять что-то через ж..у делаю, а есть более простой вариант ??
Мне сказали, что в слейве ПЛК регистры FLOAT должны всегда идти последними последними
Плюньте в того - кто это сказал. В слейве ПЛК что угодно может идти где угодно. Раз уже наваяли ИП - ничего не двигая там добавляете в конец слейва ПЛК что нужно. Но учитывайте что dword/float начнется с четного регистра. КДС, при необходимости, сам неявно добавит регистры/байты для выравнивания.
Если кто приведет какие-то таблички - то не попутайте "должно" с "удобней кому-то"
Это чё, я в Кирилла Гайнутдинова плюнуть должен? Я это в видеоуроках видел. А если я так буду делать - у меня все вперемешку будет в слейве.Точно ничего не заглючит? Он же неспроста обратил на это внимание - что FLOAT идет последним.... Я то не проверял - руки не доходили...
Это чё, я в Кирилла Гайнутдинова плюнуть должен?
Да. Если он сказал что так НАДО.
не попутайте "должно" с "удобней кому-то"
Он же неспроста обратил на это внимание - что FLOAT идет последним.
Пофигу где стоит Ваш флоат. Курите про выравнивание.
А если я так буду делать - у меня все вперемешку будет в слейве.
А кто заставляет-то вперемешку ?
перед ... и ... после слова "НАДО" были ещё слова, которые прошли мимо ушей ...
...мимо ушей...
Вот так и рождаются легенды
Я бы сказал... Жаль я, сцуко, интеллигент...
15352
-Красиво идут -
-Интелехенция .. (С)
Жду когда скажете что непонятно что на экране, а я вам в ответ - а регистры в float - кто переставлять будет ?
Блин, тут чтобы что-то новое узнать, надо столько всего выслушать про свою невнимательность и умственные способности...Но все равно - спасибо всем.
Я смотрел Чапаева.
Для того, чтобы узнавать новое, надо, чтобы читаемое и услышанное задерживалось в мозгу, а не вылетало, как в выхлопную трубу или унитаз даже не завихряясь ;)
Кстати, AFB, Вашей помощи было ровно "0". Вы всю дорогу только какахи на вентилятор закидывали. И продолжаете это делать. Спецыализд...
читаем ещё два раза пост №49 ;)
Ага, а то больше заняться нечем...
Мне надо измеряемый вес сравнить с уставкой, задаваемой с панели. Это сигнал с датчика/ модуля в мастере ПЛК подэлемент FLOAT , тип переменной REAL. Два регистра занимает. На панель индикацию веса каким типом переменной лучше передать? Ведь Уставку можно и WORD сделать чобы меньше регистров занимать, а в проге в REAL перевести, или ее лучше сразу задать REAL? И вообще я думаю - в чем лучше сравнивать, чтобы быстрее и точнее реагировало на уставку?
Если Вам хватит целого числа делаете WORD я если нужно десятые ловить то тогда REAL
Мне надо измеряемый вес сравнить с уставкой, задаваемой с панели. Это сигнал с датчика/ модуля в мастере ПЛК подэлемент FLOAT , тип переменной REAL. Два регистра занимает. На панель индикацию веса каким типом переменной лучше передать? Ведь Уставку можно и WORD сделать чобы меньше регистров занимать, а в проге в REAL перевести, или ее лучше сразу задать REAL? И вообще я думаю - в чем лучше сравнивать, чтобы быстрее и точнее реагировало на уставку?
В программе пускай будет REAL. А для панели REAl умножить на 100 (если надо 2 знака после запятой) и преобразовать в WORD. Тогда в панель передаете получившийся WORD и для отображения указываете 2 знака после запятой.
Хотелось бы три знака после запятой.. значит все будет в REAL?
Хотелось бы три знака после запятой.. значит все будет в REAL?
если температура будет меньше 65 градусов можно инт с тремя знаками
Нет. Это будет вес. Диапазон -до тонны. И шоб граммы тоже отображать.
Нет. Это будет вес. Диапазон -до тонны. И шоб граммы тоже отображать.
Тогда REAl
А как можно граммы в отдельный регистр вывести? Как на советских весах кг - в одном окошке повыше, граммы - в другом, нижнем. Чтобы смотрибельней было. А то в одну строчку - страшное число будет
А как можно граммы в отдельный регистр вывести? Как на советских весах кг - в одном окошке повыше, граммы - в другом, нижнем. Чтобы смотрибельней было. А то в одну строчку - страшное число будет
конечно можно, в бибке оскат готовое решение имеется
Спасибо.Но я у себя посмотрел - нет у меня такой либки. Ссылкой поделитесь? Мож там еще чего вкусного есть?
А как можно граммы в отдельный регистр вывести? Как на советских весах кг - в одном окошке повыше, граммы - в другом, нижнем. Чтобы смотрибельней было. А то в одну строчку - страшное число будет
Как-то так
15382
Sergey666
22.11.2014, 10:27
var
ves_real:real;
ves_kg:int;
ves_gr:int;
end_var
Ves_kg:=real_to_int(ves_real);
Ves_gr:=real_to_int((ves_real-int_to_real(Ves_kg))*1000);
var
ves_real:real;
ves_kg:int;
ves_gr:int;
end_var
Ves_kg:=real_to_int(ves_real);
Ves_gr:=real_to_int((ves_real-int_to_real(Ves_kg))*1000);
реал_то_инт, округляет до ближайшего целого, в этом случае трунк нужно использовать для килограмм
Sergey666
22.11.2014, 11:26
реал_то_инт, округляет до ближайшего целого, в этом случае трунк нужно использовать для килограмм
Точняк . Но сути дела не меняет .
Точняк . Но сути дела не меняет .
точно? попробуйте через свой код прогнать число 36.87599
ЗЫ
Ves_kg:=TRUNC(ves_real);
Ves_gr:=REAL_TO_INT((ves_real-INT_TO_REAL(Ves_kg))*1000.0);
.. Диапазон -до тонны. И шоб граммы тоже отображать.
А dword'то чем не угодил ? Отправил 123456 грамм, сместил точку на 3 знака - вот те и 123.456 кг без всяких потерь
Зачем подпускать людей которым это число страшно ? Они с рынка что ли ?
Зачем подпускать людей которым это число страшно ? Они с рынка что ли ?
Наша кадровая политика идет ногавно ...гу с химической промышленностью. Отсюда и желание изучать автоматизацию.
Так химики любят же точность. Крайний химик с которым общался очень переживал что не может отдозировать точно 3.35056704 литра какой-то химической фигни в емкость где содержится 100..120м3 воды (точней измерить не удалось)
Отсюда и желание изучать автоматизацию.
Что-то плохо у тебя получается. Может, не твоя это стезя ? Ты по образованию кто ?
Химия она тоже разная бывает. Мы же не яды делаем. А бытовую химию. Большими замесами Тут + /- литр- два допустимо. Хотя я в технологию не вникаю особо... Мне просто надо добиться теми средствами, что у меня есть, максимальной точности.
Вольд, я уверен, такие как ты сожгли Джордано Бруно.
Что-то плохо у тебя получается.
Конкретно можешь указать, где у меня плохо получилось? Спросил с целью повышения квалификации
Может, не твоя это стезя ?
Может быть. Я вообще себя яхтсменом вижу, а приходится всякой ерундой заниматься...
Ты по образованию кто ?
Многие говорят, что диплом - это бумажка. Это далеко не так. У меня высшее. И я точно знаю, диплом - это картонка
Вольд, я уверен, такие как ты сожгли Джордано Бруно.
Типун тебе на язык.
Как распечатать только PLC_PRG на одном листе А4 ? А то мне уже пора глобус программы создавать
Как распечатать только PLC_PRG на одном листе А4 ? А то мне уже пора глобус программы создавать
что, еще и уроки офисного делопроизводства надо давать? :)
Печатает PLC_PRG частями, уменьшить масштаб до листа не получается. Нужны уроки делопроизводства, если не трудно..
тяжко копипаст сделать в офисную программу? Сделайте экспорт ПОУ и откройте его в ворде в таком случае
Вроде Dimooon программу пишет в CFC, а там этот способ не сработает.
этот способ не сработает.
А вообще есть какой-нибудь способ? Я уже тонну бумаги сегодня ночью перевел...
способы есть, перейти на st или писать на cfc так, чтоб блоки помещались в пределах видимости , по функциональному значению объединять поу в отдельное вложение
чтоб блоки помещались в пределах видимости , по функциональному значению объединять поу в отдельное вложение
Хотя бы направление покажите, пжс, дальше я сам...
например элементы с нулевого по одинадцатый, вывести в отдельную функцию, тогда на главном холсте от этой группы останется только один квадратик, ну и т.д.
А конкретно этот пример, с 0 по 11, можно мне показать, как ВЫ это сделали, сам еще так не делал ни разу. Спасибо.
Как распечатать только PLC_PRG на одном листе А4 ? А то мне уже пора глобус программы создавать
На одном листе формата А4 всю PLC_PRG у меня не получилось, получилось на трех листах формата А0.
Напечатал в pdf. А его можно распечатать и на трех листах формата А4. Правда не знаю, будет ли все видно при таком уменьшении.
А вообще есть какой-нибудь способ? Я уже тонну бумаги сегодня ночью перевел...
Хотя бы направление покажите, пжс, дальше я сам...
Способ есть, нужно установить виртуальный принтер. Например, pdfFactory Pro или FinePrint.
FinePrint позволяет уменьшать например А0 в А4 и сразу распечатать на обычном принтере.
Теперь про направление.
Для начала нужно включить отображение границ рабочего листа. Проект-->Опции-->Рабочий стол установить галку "Границы листа".
Теперь экран редактора будет разлинеен красными пунктирными линиями -границами листов печати. По умолчании границы соответствуют листу формата А4.
Изменить границы под другой формат листа, например для принтера pdfFactory, можно в меню Файл-->Настройки печати.
Границы печати определяются файлом фрейма печати *.DFR. Изначально кодесис предлагает файл DEFAULT.DFR.
15445
Теперь нужно выбрать принтер и формат листа больше чем А4
15446
Затем нужно отредактировать сам фрейм печати. Нужно нажать кнопку "Правка".
Откроется экран с фреймом
15447
Красная область -это границы листа бумаги выбранного формата, а белая область {Contents} -это границы печати. Про другие настройки шаблона страницы см. справку 'Файл' 'Параметры печати'
В простейшем случае нужно растянуть/сжать область {Contents}, чтобы она полностью помещалась в красную область
15448
Закрыть окно с фреймом печати (крестик справа вверху окна) и согласиться с сохранением результата.
Теперь в окне редактора будет видно как компоновать ФБ, чтобы они помещались на листах печати так, как нужно.
Хотя бы направление покажите, пжс, дальше я сам...
как то так, не думал что это вызывает какие то сложности
Теперь в окне редактора будет видно как компоновать ФБ, чтобы они помещались на листах печати так, как нужно.
Научился печатать как угодно, Громадное СПАСИБО Вам. Можно я Вас теперь буду называть Сенсей?))))
Capzap, спасибо Вам, но почему Вы для этого выбрали именно функцию, а не ФБ? И для чего там этот выход fun0to11? А если ее вообще в PLC_PRG не отображать - она будет работать? Я просто ПЛК еще не включал даже, задергали, по заводу бегаю
Capzap,этот блок с 0 по 11 , по Вашему примеру, в функцию скопипастить не получается... Вы его перерисовывали?
так и знал, что надо было не проект выкладывать, а видео снимать, конечно копировал, зачем сидеть перерисовывать то что уже кто то сделал
Да я понял, Вы же коммент не стали бы переписывать.... А почему у меня не копируется?
потому что холст большой и для копирования много времени уходит видимо
Нет, я создал функцию, и хотел туда скопипастить элементы с 0 по 11. Вырезается, но в функцию не вставляется...
Название функции может быть произвольное, кроме зарезервированных слов, правильно?
а с чего решили что не вставилось, уменьшите масштаб холста в три раза обязательно что нить увидите, копипастица на те же координаты, а не в область видимости
Capzap, в Вашем примере переменная panel3 объявлена и в PLC_PRG и в Вашей функции. Но при компиляции ошибок нет. Это нормально? Что переменная с одним именем объявлена в нескольких местах.
sashakim
19.12.2014, 14:00
Доброе время суток. Подскажите как подкорректировать время в ИП320, а то спешат на 5 минут. И есть возможности выбрать формат даты и время?
sashakim
22.12.2014, 09:59
Что, так никто и не поможет?....
Я временем с панели не пользуюсь. У меня есть блок, который я в программе плк использую. Работает нормально. И формат дата\время на панель как хочешь можно выводить
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot