Главная страница
Навигация по странице:

  • Не было разговора про OB

  • Курсы. Контроллеры Занятие 1 (4 часа)


    Скачать 59.5 Kb.
    НазваниеКонтроллеры Занятие 1 (4 часа)
    Дата21.11.2019
    Размер59.5 Kb.
    Формат файлаdoc
    Имя файлаКурсы.doc
    ТипЗадача
    #96323

    Контроллеры:

    Занятие 1 (4 часа):


    • Состав (модули), семейства S5/S7-200,300,400; Profibus

    • Запуск STEP7, создание проекта, простые цепи в LAD (здесь же вызов симулятора, открытие окошек в нем, загрузка, наблюдение в редакторе через очки)

    • Цепи AND, OR, XOR;

    • Две простых цепи выключатель-лампочка

    • Игры с операндами в этой паре цепей:


    A i0.0

    = q0.0

    A i0.1

    = q0.0 // тот же выход, что и в первой цепи. Что будет? Понятие образа выходов
    A i0.0

    = i0.1 // запись в "вход". Понятие образа входов.

    A i0.1

    = q0.0


    • Задачка: двухклавишный выключатель, 5 лампочек (3 + 2)

    • Логический шаг

    • Коннектор

    • Элементы с памятью – s/r-триггеры, выявители фронта/спада

    • Задача о транспортере: две кнопки режима + кнопка подтверждения выбора, две лампы режима, лампа движения, кнопки влево и вправо для ручных прогонов, по умолчанию ручной режим, в автоматическом режиме движение влево без перерыва. (Сразу после изложения условия рассказать о таблице символов!)

    • Главное управляющее реле: пример с лампой, пример с s-r. Сброс всех сигналов в MCR-зоне тавтологией: "L QD addr4; T QD addr4". Выбор режима можно сделать на s/r-триггерах, запитывая MCR по кнопке подтверждения.

    • Задание на самостоятельное чтение: глава 1 (состав контроллера), глава про битовые операции, глава про MCR.

    • Возможно — про вложенные битовые операции: operation( ….. ); предложить записать сложные формулы.

    Занятие 2 (3 часа):


    • Арифметика, простой пример (сложение), наблюдение через очки.

    • Разные типы операндов и операций — int, long, float (bcd16, bcd32). Демонстрация разницы между типами на примере сложения (смотрим через очки).

    • На примере целых — вычитание, показ сначала с неправильным порядком, потом с правильным. Польская запись для пары операндов.

    • Задачка на вычисление формулы (например, площадь кольца или сопротивление трех параллельно включенных R) с двумя аккумуляторами. Промежуточные данные сохраняются в M-памяти.


    6 и 3 – радиусы

    pi * (r1**2 – r2**2)
    Понятие о четырех аккумуляторах, ENT (a2->a3->a4)

    Задача: сопротивление параллельно включенных r. При 19, 23, 28 Ом должно получиться примерно 8 Ом.
    Задания на дом:

    Из “ассемблера” стр. 232- три варианта


    • Понятие о временных переменных. Разница между M и L: демонстрация счетчика на M (тут и покажу однократное и непрерывное сканирование в симуляторе) и на temp — каковой не работает, потому что не сохраняется между вызовами блока. Корректировка решения предыдущей задачи: все M заменяем на temp-переменные.

    • Функции преобразования типа. Расширение задачи: ввод числа с декадного переключателя


    L IW 0

    BTD

    DTR

    T MD 0
    и вывод на декадный индикатор.
    L 1.000000e+000

    L 2.000000e+001

    +R

    RND

    DTB

    T QW 0


    • Функции без параметров в STL (в SCL есть еще тип результата — что он означает? Ставлю void).

    • Функции с параметрами — делаем для площади круга, потом на ее основе — для площади кольца.

    • То же — на SCL.

    Занятие 3 (5 часов):


    Команды AW, сдвиги и вращения, jp/jz.

    Прочие j (кроме br), loop

    Итерации.
    L 1

    T #result
    L 4

    m1: T #tmp
    L #result

    L #tmp

    *D

    T #result // result := result * tmp;
    L #tmp // A <- tmp

    LOOP m1
    L #result
    Это факториал в OB1. Изобразить в виде функции.
    L #n // эта проверка поставлена в самом конце рассказа

    L 0

    >I

    JCB do // jc (RLO -> BR)

    BEU
    do: L 1

    T #result
    L #n

    m1: T #tmp
    L #result

    L #tmp

    *D

    JO fail

    T #result // result := result * tmp;
    L #tmp // A <- tmp

    LOOP m1
    Jos fail // почему-то не работает при смене знака -- смена происходит

    // на 13, а jos дает сбой только на 34. Поэтому поставлено JO сразу после *D

    SET // RLO := 1

    SAVE // BR := RLO

    BEU // block end uncoditional

    fail: CLR

    SAVE

    Далее – вычисление числа e в виде ряда:

    2 + ½! + 1/3! + ¼! + … = 2.71828182845904

    Есть еще вариант для e: предел (1+1/n)**n при п –> inf.
    Далее OB100.

    Далее – генератор sin-cos в виде функции.

    Занятие 4 (5 часов):


    Часть 1: таймеры, счетчики, retentive memory
    S5-таймеры (масштаб 10ms–10s), доработка конвейера. Кнопка T=0 в симуляторе.

    Запись нажатий в симуляторе (к вопросу о тестировании и сдаче курсовика). (Внимание: сохранение работает в RUN-P, но не в STOP. Также, похоже, что фиксируются именно факты нажатия, а не установки в 1 или 0.)

    Дополняем конвейер счетчиком.

    Вариант 1: через P и ADD_I.

    Вариант 2: S5-счетчик.

    Как сделать, чтобы счетчик не терялся при рестарте. Retentive memory. (Открываем конфигурацию, видим только процессор, но этого достаточно для установок. Оказывается, что MB0-7 уже отмечены как Retentive, и счетчики — до какого не помню).
    Часть 2:

    Блоки данных — структуры данных (в отдельных областях памяти) в дополнение к общей (неструктурированной) M-памяти. Создание блока с простыми и сложными типами (массив). Начальные значения. Просмотр в режиме структуры и в режиме данных. Изменение actual value и, в результате, несоответствие ранее заданным начальным значениям.
    Обращение к элементу блока: полное (сначала у DB нет имени, потом дадим), короткое. Команда OPN и регистр DB. Практика: копировать счетчик (двоичный выход) в блок данных.
    Шаблон (UDT). Создание и варианты использования: создание DB на основе UDT -- или UDT в качестве типа внутри обычного блока.
    Изменение UDT — и связанные с ним блоки уродуются. Попытка получить исходники не проходит! Приходится восстановить UDT, потом получить исходники, исправить UDT там, и перекомпилировать.
    Функциональный блок. Пример создания — вычисление площади круга по радиусу (in, с начальным значением 1.0; выход square тоже с начальным значением –100.0; pi — static). Вызов, генерирование instance DB; смотрим, что получилось. Загружаем, смотрим через очки на DB. Практика: переделать FC sin-cos: чтоб {in }— x, y, {stat} — x_pred, y_pred, A, B, C, D. Затем сделать функцию, которая в открытом блоке (экземплярном) вычисляет (по входному параметру hz) число точек (10/hz, потому что вызываем FB из OB35) и по нему коэффициенты A–D. Функция вызывается из OB100 для двух частот 2 и 0,5 Hz.

    Занятие 5 (3 часа):


    Часть 1:

    HWConfig – полностью набираем конфигурацию. 312FM не позволяет менять адреса, 3162DP позволяет.

    Раз уж здесь, разговор о модулях аналогового ввода, кодировка, диапазон измерений, FC105 из Standard Library/TI-S7 converting blocks. Практика – емкость для воды на 500 литров с сливом и наливом, д.б. от 50 до 450 л.
    Часть 2: служба времени
    В HWConfig настроить OB35 на 10 мс. Проверить, как работает FB sin-cos теперь.

    Clock memory (просто посмотреть на MB в симуляторе).

    Ограничение по времени (150 ms) — реакция OB80 (дает вторую попытку); есть еще и SFC retrigger (перевзвод сторожевого таймера).

    Прерывание будильника (раз в минуту): конфигурируемое и программируемое (через SFC SET_TINT и еще-одно-не-помню-какое для активизации) — эти SFC запускаем из OB100, проверяем RET_VAL, и если оно не 0, то вызываю SFC для останова.

    Таймер, запускаемый через SFC (32). Доступ к стартовой информации OB 20 (чтобы выяснить, какой таймер закончился).
    Не было разговора про OB ошибок — 121 и 122 и маскирование (на симуляторе бесполезно, так что только в теории).

    Занятие 6 (5 часов):



    Косвенная адресация — 16-битные индексы таймеров, счетчиков и блоков (FC и DB). Практика: сделать функцию, которая возвращает длину заданног блока. Номер блока в in-параметре, OPN выполняем внутри функции. L DBNO и L DBLG — для опеределения текущего открытого блока и его длины в байтах. (FC не восстанавливает DB, поэтому надо сохранять-восстанавливать самим.)
    Адресация бит. Задача: сделать функцию, которая возвращает номер бита, установленного в 1, отсчет от 0-го бита. Исследуем байт MB100. Усложнение: номер байта задаем на входе (надо преобразовать в номер бита.).
    FUNCTION FC 5 : VOID

    TITLE =

    VERSION : 0.1
    VAR_INPUT

    n_byte : INT ;

    END_VAR

    VAR_OUTPUT

    n_bit : INT ;

    END_VAR

    VAR_TEMP

    ptr : DWORD ;

    cnt : INT ;

    ptr0 : DWORD ;

    END_VAR

    BEGIN

    NETWORK

    TITLE =
    L #n_byte;

    SLD 3;

    T #ptr;

    T #ptr0;

    L 8;

    m1: T #cnt;

    A M [#ptr]; // L MB [#ptr]

    JC m2;

    L #ptr;

    L 1;

    +D ;

    T #ptr;

    L #cnt;

    LOOP m1;

    m2: L #ptr;

    L #ptr0;

    -D ;

    T #n_bit;
    Задача на ту же тему: посчитать число бит, установленных в 1.

    Далее: поиск ненулевого байта в массиве M или DB.
    Использование констант P#m.k

    Адресные регистры ARn. Обращение: A I[ar1, p#0.0] – обязательно указывать смещение. загрузка -- LARn (из аккумулятора или константы), увеличение +ARn (аналогично).
    Тело цикла теперь для задачи о поиске бита:
    A M [AR1,P#0.0]

    JC m2

    +AR1 P#0.1
    Задача: копирование MB0..9 -> MB100..109. Здесь можно обойтись одним AR1 с разными смещениями.
    Далее – внутризонная адресация (с указанием области). После разговора об ANY – пример SFC 20 (MOVBLK); демонстрация ошибки BOOL 10 (должно быть кратно 8). Задача на самостоятельную проработку: заполнение области SFC 21 (FILL).
    Задача: из книжки АССЕМБЛЕР. Где есть задачки с ASCII-кодами, нужно использовать в качестве источника STRING. По умолчанию строка занимает 256 байт, первый байт – максимальная емкость (254), второй – счетчик (длина строки), в конце нули.

    Занятие 7 (3 часа):


    Контрольная – вопрос по теории и задача. Маловато задач на обработку массивов (косвенная адресация). По задача 1 вопрос: можно слово вместо байта, слово проще крутить (для байта нет команды вращения).
    Кто успешно выполнил, получает задание по курсовой.


    Занятие 8 (3 часа):


    Продолжение контрольной, кто не успел. Консультации по проекту, обсуждение Паскаля.


    Варианты задачек:

    1. Задача о емкости 500 л с парой вентилей (слив и налив) — сделать гистерезис: включаем налив, когда объем падает до 425, а выключаем, когда возрастает до 475; слив аналогично — выключаем, когда падает до 30, а включаем, когда поднимается до 60. (Решение — через триггеры)

    2. Автоматический режим: езда до фотодатчика по кнопке от рабочего места, если сработал датчик места (при этом никакие другие датчики не работают)

    *3. Задачка для курсовой: развозить и увозить железки по рабочим местам. Заявка принимается по кнопке; при этом лампа начинает медленно мигать. Либо к вам везут — когда привезут, лампа быстро мигает, чтобы забрали и нажали подтверждение. Либо вам предлагают выгрузить — когда будут готовы забрать, то остановятся пустыми, мелко замигают и будут ждать детали и кнопки. Хотя вариант простой, но решение о загрузке или выгрузке принимает ВУ (могут, вместо того чтобы забрать, привезти еще)

    4. Задачка с таймером: защита от быстрого реверса в ручном режиме.

    5. Еще задачка: при наличии некоего бита лампа горит постоянно, при исчезновении — моргает, и перестанет только по нажатию кнопки сброса. Можно добавить два таймера: один не дает мигать сразу (во избежание дерготни при дребезге ошибки), другой прекращает мигание через час после снятия причины. Туда же добавить счетчик событий.


    написать администратору сайта