Курсы. Контроллеры Занятие 1 (4 часа)
Скачать 59.5 Kb.
|
Контроллеры:Занятие 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. Еще задачка: при наличии некоего бита лампа горит постоянно, при исчезновении — моргает, и перестанет только по нажатию кнопки сброса. Можно добавить два таймера: один не дает мигать сразу (во избежание дерготни при дребезге ошибки), другой прекращает мигание через час после снятия причины. Туда же добавить счетчик событий. |