ПОЗНАВАТЕЛЬНОЕ Сила воли ведет к действию, а позитивные действия формируют позитивное отношение Как определить диапазон голоса - ваш вокал
Игровые автоматы с быстрым выводом Как цель узнает о ваших желаниях прежде, чем вы начнете действовать. Как компании прогнозируют привычки и манипулируют ими Целительная привычка Как самому избавиться от обидчивости Противоречивые взгляды на качества, присущие мужчинам Тренинг уверенности в себе Вкуснейший "Салат из свеклы с чесноком" Натюрморт и его изобразительные возможности Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д. Как научиться брать на себя ответственность Зачем нужны границы в отношениях с детьми? Световозвращающие элементы на детской одежде Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия Как слышать голос Бога Классификация ожирения по ИМТ (ВОЗ) Глава 3. Завет мужчины с женщиной 
Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д. Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу. Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) - В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар. | СОГЛАСОВАНИЕ ИМЕН ПЕРЕМЕННЫХ Если вы не являетесь единственным в вашей организации, кто работает с JavaScript, или вам приходится поддерживать большое число сценариев (скажем, более полудюжины), желательно согласовать правила назначения имен для переменных. Неукоснительное следование определенному согласованному стилю при выборе имен делает программный код понятнее и упрощает его сопровождение. Теоретическая справка об идентификаторах (переменных): Идентификатор - это любая последовательность символов(буквы, цифры и знаки подчеркивания), начинающаяся с буквы или символа подчеркивания (без пробелов). Или можно сказать, что идентификатор — это имя любого объекта программы, т.е. может использоваться в качестве имен переменных, констант и т.д. В качестве имени можно использовать буквы: A,B,C,D, ... ,Z и a,b,c,d, ... ,z. При этом прописные и строчные не различаются. Идентификаторы FILENAME, filename и FileName - это одно и тоже. В идентификатор можно включать арабские цифры0. Они могут присутствовать в любой позиции кроме первой. Символ подчеркивания "_" может находиться в любой позиции идентификатора. Примеры идентификаторов с символом подчеркивания: My_First, His_friend, Squre_1, Squre_2, _House Именно эти символы являются конструктором идентификаторов. Их длина не ограничена, но различаются лишь первые 63 символа, остальные игнорируются. Рекомендуется при выборе идентификаторов использовать содержательные идентификаторы Примеры правильных идентификаторов: x, max, max1, max_2. Примеры неправильных идентификаторов: x-y, 1_2_3, max#. Переменные Переменные - это такие данные, которые могут меняться в процессе выполнения программы. Для того, чтобы использовать в программе переменные, их надо описать в начале программы. Это делается в разделе описания переменных Var. Описание переменных имеет следующий вид: Var <идентификатор>:<тип переменной>; <идентификатор>:<тип переменной>. Например: Var x : integer; y : real; Слово integer обозначает, что переменная с именем x может принимать только целые значения. Слово real — переменная с именем y — дробные значения. Integer и Real — это типы данных. Под типом данных понимается множество допустимых значений этих данных, а также совокупность операций над ними. В Turbo Pascal'е выделяется несколько групп типов. Каждая группа в свою очередь также имеет свое разделение. Мы рассмотрим пока лишь стандартные типы данных. К стандартным относятся следующие типы данных: целый, вещественный, символьный и строковый. Вот диапазон значений некоторых типов данных: Shortint: -128 ... 127 Integer: -32768 ... 32767 Longint: -2147483648...214748364 Byte: 0 ... 255 Word: 0 ... 65535 Для того, чтобы записать в переменную какое либо значение, используется оператор присваивания. Эта команда всегда имеет следующую структуру: <идентификатор>:=<выражение> По данной команде выполняются следующие действия: вычисляется значение выражения, стоящего в правой части; переменная величина, имя которой стоит в левой части, принимает вычисленное значение. Например: X := 5 Y := 2.4 Z := 2 + 3 Пример программы: Program z; Var X : integer; Begin X := 4 + 5; Writeln(x); End. Управление памятью Память является важнейшим ресурсом, требующим тщательного управления со стороны мультипрограммной операционной системы. Распределению подлежит вся оперативная память, не занятая операционной системой. Обычно ОС располагается в самых младших адресах, однако может занимать и самые старшие адреса. Функциями ОС по управлению памятью являются: отслеживание свободной и занятой памяти, выделение памяти процессам и освобождение памяти при завершении процессов, вытеснение процессов из оперативной памяти на диск, когда размеры основной памяти не достаточны для размещения в ней всех процессов, и возвращение их в оперативную память, когда в ней освобождается место, а также настройка адресов программы на конкретную область физической памяти. 15. Адресация — осуществление ссылки (обращение) к устройству или элементу данных по его адресу[1]; установление соответствия между множеством однотипных объектов и множеством их адресов; метод идентификации местоположения объекта[2]. Прямая адресация[править | править вики-текст] Адрес указывается непосредственно в виде некоторого значения, все ячейки располагаются на одной странице. Преимущество этого способа в том, что он самый простой, а недостаток — в том, что разрядность регистров общего назначения процессора должна быть не меньше разрядности шины адреса процессора.  Индексная адресация[править | править вики-текст] Для реализуемых на ЭВМ методов решения математических задач и обработки данных характерна цикличность вычислительных процессов, когда одни и те же процедуры выполняются над различными операндами, упорядоченно расположенными в памяти. Поскольку операнды, обрабатываемые при повторениях цикла, имеют разные адреса, без использования индексации требовалось бы для каждого повторения составлять свою последовательность команд, отличающихся адресными частями. Программирование циклов существенно упрощается, если после каждого выполнения цикла обеспечено автоматическое изменение в соответствующих командах их адресных частей согласно расположению в памяти обрабатываемых операндов. Такой процесс называется модификацией команд, и основан на возможности выполнения над кодами команд арифметических и логических операций. Приведе́ние (преобразование) ти́па (англ. type conversion, typecasting, coercion) — в информатике преобразование значения одного типа в значение другого типа. Выделяют приведения типов: · явные (англ. explicit); · неявные (англ. implicit). Явное приведение задаётся программистом в тексте программы с помощью: · конструкции языка; · функции, принимающей значение одного типа и возвращающей значение другого типа. Неявное приведение выполняется транслятором (компилятором или интерпретатором) по правилами, описанным в стандарте языка. Стандарты большинства языков запрещают неявные преобразования. В слабо типизированных объектно-ориентированных языках, таких как C++, механизм наследования реализуется посредством приведения типа указателя на текущий объект к базовому классу (в типобезопасных, таких как OCaml, понятие о приведении типов отсутствует принципиально, и допустимость обращения к компоненту подтипа контролируется механизмом проверки согласования типов на этапе компиляции, а в машинном коде остаётся прямое обращение). Компоненты организации программ образуют код прикладного программного обеспечения ПЛК. Именно на уровне компонентов доступно совмещение различных языков МЭК. В англоязычных документах компоненты организации программ сокращенно обозначаются POU — Program Organization Unit. Чтобы не вызывать неоднозначность, мы далее также будем использовать эту аббревиатуру. Определение компонента Компоненты организации программ являются базовыми элементами, из которых строится код проекта. Каждый компонент программы имеет собственное наименование, определенный интерфейс и описание на одном из МЭК-языков. Один компонент может вызвать другие компоненты. Вызов самого себя (рекурсия) в стандарте МЭК не разрешена. Комбинировать различные языки в одном проекте можно при описании различных компонентов, но отдельный компонент целиком реализуется на одном языке МЭК. При вызове компонента язык его реализации значения не имеет. К компонентам организации программ в МЭК-стандарте относятся функции, функциональные блоки и программы. Все они во многом похожи, но имеют определенные особенности и различное назначение. Компонент обладает свойством инкапсуляции — работает как «черный ящик», скрывая детали реализации. Для работы с компонентом достаточно знать его интерфейс, включающий описание входов и выходов. Внутреннее его устройство знать необязательно. В графической форме представления компонент выглядит как Прямоугольник с входами слева и выходами справа. Локальные (внутренние) переменные компонента недоступны извне и в графическом представлении не отображаются. Готовый компонент всегда можно вскрыть, изучить и поправить. Это, конечно, относится только к пользовательским компонентам и открытым библиотекам. Некоторые стандартные компоненты включены в транслятор и недоступны для просмотра и изменения. Это относится и к внешним библиотекам. Внешние библиотеки реализуются в виде объектного кода при помощи внешних средств, например компилятора С или ассемблера. Возможно даже, что компонент реализован не только программно, а использует вспомогательные аппаратные средства, например часы реального времени или математический сопроцессор. Еще одной задачей, решаемой компонентами, является локализация имен переменных. Это означает, что в различных компонентах можно использовать повторяющиеся имена. Так, например, любимую переменную с оригинальным идентификатором «X» можно использовать в каждом компоненте, и всякий раз это будет новая переменная. Область видимости локальных переменных определяется рамками одного компонента. Конечно, можно все переменные проекта объявить глобальными. Модификация и отладка подобных проектов вызывает такие же ощущения, как распутывание «бороды» из лески на удочке во время клева. Ограничение области видимости является обязательным во всех современных системах программирования. Экземпляры функциональных блоков, объявленные внутри других компонентов, также обладают локальной областью видимости. Программы и функции всегда определены глобально. 5.2. Функции Функция - это программный компонент, отображающий множество значений входных параметров на выход. Функция всегда возвращает только одно значение. При объявлении функции указывается тип возвращаемого значения, имя функции и список входных параметров. Вызов функции производится по имени с указанием значений входных параметров. Функция может испо- Функции 83 льзоватьея в математических выражениях наряду с операторами и переменными. Функция не имеет внутренней памяти. Это означает, что функция с одними и теми же значениями входных параметров всегда возвращает одно и то же значение. Функция - это чистый код. Многократное использование функции не приводит к повторному включению кода функции при компонбвке. Реализация функции присутствует в коде проекта только один раз. Всякий раз при вызове функции процессор исполняет один и тот же поименованный код. Функция может иметь локальные (временные) переменные. Но при окончании своей работы функция освобождает локальную память. Тип функции (тип возвращаемого значения) может быть любым из числа стандартных типов данных или типов созданных пользователем. Тело функции может быть описано иа языках IL, ST, LD нли FBD. Использовать SFC нельзя. Из функции можно вызывать библиотечные функции и другие функции текущего проекта. Вызывать функциональные блоки и программы из функций нельзя. 1 " 5.2.1. Вызов функции с перечислением значений параметров В прародителях языка ST - языках Паскаль и С вызов функций производится по имени с перечислением в скобках списка ак- ¦ туальных входных параметров, через запятую, слева направо. Аналогичный способ приемлем и в языке ST. Например: у := MUX(0, xl, х2); (*Возвращает нулевой вход - хх*) Здесь Интересно обратить внимание на то, что наименования параметров нам не нужны. При перечислении параметров важно только соблюсти правильную последовательность в соответствии с определением в объявлении функции. В графических языках порядок входных параметров задан направлением сверху вниз (рис. 5.1). Рис. 5.1. Графическое отображение вызова функции 84 Глава 5. Компоненты организация программ (POU) Некоторые функции могут иметь равноценные параметры, тогда нх порядок очевидно безразличен. Например: у := МАХ(х1, х2); (*Возвращает наибольшее нз значений входных параметров*) у := МАХ(х2, xl); (*Результат тот же*) 5.2.2. Присваивание значений параметрам функции Второй способ вызова функции предусматривает непосредственное присваивание значений параметрам функции по именам: stHhello := CONCAT(STR 1:='Добрый 8ТК2:-*день*); Это равносильно: stHhello :- CONCAT('Добрый *, 'день'); или: stHello := CONCАТ('Добрый ', 8ТК2:-'день*); Если в программе уже определена переменная с именем, совпадающим с наименованием входного параметра (STR1 'Добрый';), вызов может вызывать Функциональный блок— программный компонент, отображающий множество значений входных параметров на множество выходных. После выполнения экземпляра функционального блока все его переменные сохраняются до следующего выполнения. Следовательно, функциональный блок, вызываемый с одними и теми же входными параметрами, может производить различные выходные значения. Сохраняются все переменные, включая входные и выходные. Так, если мы вызовем экземпляр функционального блока, не определяя значения некоторых входных параметров, он будет использовать ранее установленные значения. Извне доступны только входы и выходы функционального блока, получить доступ к внутренним переменным блока нельзя. Прежде чем использовать функциональный блок, необходимо создать его экземпляр. Эта операция аналогична по смыслу объявлению переменной. Описав новый блок, мы фактически создали новый тип данных подобный структуре. Каждый функциональный блок может иметь любое количество экземпляров. После создания экземпляра функционального блока можно сразу начать работать с его данными. При этом совсем не обязательно вызывать его. Обращаться к переменным экземпляра можно так же, как к элементам структуры данных, через точку: ctuTimeMeter.RESET := FALSE. Операция начальной инициализации переменных функционального блока производится по сбросу, который выполняется непосредственно после загрузки проекта в память ПЛК, по команде отладчика или при перезапуске контроллера. Возможны случаи, когда экземпляру функционального блока нужна разумная инициализация. Например, для настройки блока необходимо провести некоторые вычисления. Специальной процедуры инициализации в функциональных блоках не предусмотрено. Здесь придется потратить на инициализацию один или несколько первых циклов выполнения экземпляра. Окончание сложной процедуры инициализации индицируют обычно выходом готовности (ENO). |