Тригонометрические функции. 6 глава
Метки. Метки предназначены для реализации условных и безусловных переходов и могут вставляться перед любой инструкцией программы. Они не влияют на выполнение инструкций и имеют синтаксис: Mnn: где nn – номер метки. При ссылках на метку символ “:” должен отсутствовать. Количество меток, доступных в программах типа FB, не может быть больше 5, а в программах типа PRG – 40. Операторы. В языке Техно IL реализованы следующие операторы: – оператор подстановки имен переменных; – операторы обмена с аккумулятором; – операторы обмена с портами ввода/вывода; – операторы условных переходов; – оператор безусловного перехода; – условный оператор; – операторы циклов; – операторы работы с таймерами; – операторы обмена с файлами данных; – операторы вызова функциональных блоков; – оператор завершения программы. Оператор #DEFINE. Этот оператор позволяет использовать в тексте IL-программы любые имена для входных и выходных переменных типа I и Q. Оператор #DEFINE имеет следующий синтаксис: #DEFINE <операнд> <name>, где операнд – имя переменной в терминах идентификаторов I и Q, name – мнемоническое имя. В файле с расширением def и в заголовке FBD-блока отображаются только первые три символа мнемонического имени. Операторы обмена с аккумулятором. Существует два оператора, предназначенных для обмена данными с переменной result (аккумулятор): LD <операнд> и ST <операнд>. Первый из них записывает в аккумулятор значение операнда. Второй – копирует значение аккумулятора в указанный операнд.
Операторы обмена с портами ввода/вывода. Эти операторы позволяют обмениваться с портами ввода/вывода. Это делает возможной разработку драйверов обмена с УСО без использования дополнительных инструментальных средств. Существует три оператора Техно IL, предназначенных для работы с портами ввода/вывода. Они имеют следующий синтаксис: BASEPORT <операнд> INP <операнд1> <операнд2> OUTP <операнд1> <операнд2> Оператор BASEPORT по значению операнда устанавливает базового адреса порта. Оператор INP предназначен для чтения данных из порта. В первый его операнд записывается считанное значение. Второй задает смещение порта относительно базового адреса. Оператор OUTP записывает данные в порт. Он также использует два операнда. Первый из них содержит посылаемое в порт значение. Второй задает смещение порта относительно базового адреса. Операторы условных переходов. Техно IL поддерживает три оператора условных переходов. Они имеют следующий синтаксис: JMPC <метка> JMPN <метка> JMPX <метка> Первый из них осуществляет переход на указанную метку при значении истина переменной CMP, второй – при значении ложь, а последний – значение аккумулятора отличном от 0. Операторы безусловных переходов. Этот оператор осуществляет переход на указанную метку, независимо ни от каких условий. Он имеет следующий синтаксис: JMP <метка> Здесь, как и для условных операторов, можно вместо JMP использовать обозначение GOTO. Условный оператор. Этот оператор имеет следующий синтаксис: IF <текст программы> THEN <текст программы> ELSE <текст программы> END_IF Текст программы между словами IF и THEN должен содержать операции, формирующие значение переменной CMP. Она анализируется после выполнения этого фрагмента. В случае ее истинности выполняется фрагмент программы между ключевыми словами THEN и ELSE. В противном случае - между ELSE и END_IF. Максимальное количество условных операторов в одной программе равно 254. При этом количество вложений не ограничивается.
Операторы циклов. В Техно IL существуют два оператора циклов, оператор завершения цикла и оператор перехода на конец цикла. Первый оператор цикла записывается следующим образом: WHILE <операнд> <текст программы> END_WHILE Здесь фрагмент программы между строками начала и конца цикла будет выполняться, пока значение операнда не станет равно 0. Второй оператор цикла проверяет значения операнда на равенство 0 не в его начале, а в конце цикла. Он имеет следующий синтаксис: REPEAT <текст программы> UNTIL <операнд> Следующий оператор управляет выходом из циклов: BREAK При его выполнении работа цикла завершается и выполняется следующая после цикла инструкция. Следующий оператор позволяет перейти на конец цикла без выполнения оставшегося текста программы: CONTINUE. Оператор завершения программы. Этот оператор завершает выполнение программы. Он может присутствовать в любом ее месте и обязательно в конце. Этот оператор имеет следующий синтаксис: EXIT [1] Наличие после оператора цифры 1 для программ типа FB является указанием не изменять значения выходов при завершении. В программах типа PRG наличие 1 после оператора EXIT игнорируется. Операторы работы с таймерами. Чтобы делать временные засечки в одной программе можно использовать до 32 таймеров. Для управления ими и контроля их значения, предусмотрены два оператора. Первый из них используется для включения таймера и задания ему временной уставки. Он выглядит следующим образом: SETTMR <операнд1> <операнд2> Здесь операнд1 задает номер таймера (от 0 до 31), а операнд2 - величину уставки. Значение уставки задается в прерываниях системного таймера (tick). Второй оператор контролирует превышение значением таймера величины его уставки. Он имеет следующий синтаксис: CHECKTMR <операнд> Если значение таймера больше величины уставки, то переменной CMP присваивается значение истина. Номер контролируемого таймера указывается значением операнда.
Операторы обмена с файлами данных. Техно IL позволяет формировать значения переменных типа W, считывая их из файлов, и сохранять их в файлы. Для этого предусмотрены три оператора. READ <операнд1> <операнд2> WRITE <операнд1> <операнд2> PRINT <операнд1> <операнд2> Оператор READ предназначен для считывания переменных типа W из файла. При выполнении этого оператора считываются переменные, начиная с номера 0 до переменной с номером, заданным в операнд1. Значение второго операнда указывает файл, из которого будут считываться данные. Этот файл должен иметь текстовый формат. Его имя формируется следующим образом: W<число>.txt, где число – значение второго операнда. Каждая строка файла должна содержать два числа, разделенных пробелом. Первое число – это номер переменной, а второе – ее значение. Таких строк в файле может быть неограниченное количество. При выполнении оператора READ переменной присваивается последнее в файле значение с соответствующим номером. В любом месте текста программы может быть вставлен комментарий. Он должен начинаться с символов "(*" и заканчиваться на той же строке символами "*)". После символов открытия комментария до начала его текста должен присутствовать хотя бы один пробел. После завершения текста комментария до символов его закрытия также должен присутствовать хотя бы один пробел. Текст комментария может располагаться на нескольких строках. Вместо символов скобок в ограничителях текста комментария допускается использование символа «/».
5.4.2 Язык функциональных блоков FBD
FBD-программа разрабатывается размещением функциональных блоков в рабочем поле и соединением их в одну диаграмму. Рассмотрим детально основные понятия языка Техно FBD, компоненты FBD-программ и операции по их созданию и отладке. Переменные FBD-программы могут быть внутренние или внешние. Внешние переменные называются аргументами. Суммарное количество переменных в одной программе не может превышать 254. Каждая переменная имеет числовой индекс, который используется при ссылках на нее. Индексы переменных выводятся радом с аргументами и константами в диалоге Реквизиты при подключении программы к каналу. Они могут быть изменены при редактировании программы. Элементарным звеном FBD-программ является функциональный блок. Блок - это графическое изображение вызова одной из функций. Это могут быть либо стандартные, встроенные в систему функции, либо разработанные пользователем. Изображение функционального блока приведено на следующем рисунке.
Каждый функциональный блок имеет следующие атрибуты: выполняемая функция, номер, входы, выходы. Функция блока определяет действия, выполняемые с его входами при формировании значений выходов. Ее наименование выводится в верхней части блока. Функция блока выбирается перед его размещением. Для этого используется диалог Меню FBD, показанный на следующем рисунке.
Каждый блок в зависимости от выполняемой им функции имеет определенное количество входов и выходов. Входы всегда расположены слева, а выходы - справа. Вход блока может быть связан с переменной или константой, а может быть свободным. Последние не учитываются при его пересчете. На диаграмме они выводятся ярко-зеленым цветом. Назначение входов и выходов блока определяется его функцией. Исключением является первый вход. Он всегда управляет пересчетом блока. Далее он будут называться входом запуска/блокировки (RUN), а остальные – функциональными. Эти входы и выходы блоков имеют обозначения, включающие в себя до трех символов.
В режим эмуляции программы рядом с каждым входом и выходом выводится его значение. При этом для входов выводимые значения заменяют их обозначения. Вид представления входа/выхода Существует два вида представления данных для входов и выходов функциональных блоков: FLOAT; HEX. Первый предназначен для работы с аналоговыми переменными, представленными числом с плавающей точкой одинарной точности, а второй - с целыми 16-битовыми переменными. При связывании входов и выходов, имеющих разный вид представления, данные преобразуются автоматически. Тип входа/выхода определяет переменную, с которой он будет связан. Это может быть либо внутренняя переменная, либо константа, либо внешняя переменная – аргумент. Входы и выходы блоков могут иметь один из следующих типов: свободен; блок; константа; аргумент. Тип Свободен устанавливается автоматически для всех незадействованных входов. Этот тип недоступен для установки вручную. Тип Блок устанавливается для всех выходов при размещении блока. Вход или выход, имеющий данный тип, связан с внутренней переменной программы. Этот тип автоматически устанавливается для входа, связанного с выходом любого блока. Тип Константа может быть задан только для входа. Такой вход имеет фиксированное значение и не может меняться в процессе выполнения программы. Вход или выход типа аргумент при вызове программы связывается с внешними переменными. Такими переменными являются атрибуты каналов.
Для разработки и отладки FBD-программ предусмотрено специальное окно редактора базы каналов. Вход в него осуществляется нажатием ЛК на соответствующей иконке панели инструментов, командой FBD-программы из меню Окна или нажатием сочетания клавиш ALT-3. Существует три режима работы в окне редактирования FBD-программ: – редактирование связей; – размещение блоков; – эмуляция работы программы. Режим устанавливается в диалоге управления редактированием. Он называется Меню FBD и появляется на экране при входе в окно редактирования FBD-программ. Вид этого диалога показан на следующем рисунке.
Все функции, которые могут быть установлены добавлением в FBD-программу блокам, разбиты на следующие 18 разделов. Функция блока устанавливается в диалоге Меню FBD. Здесь сначала выбирается функциональный раздел. После этого на кнопках диалога появляются названия функций этого раздела. Нажатие ЛК на любой из них задает ее функцию размещаемым блокам. Рассмотрим теперь функции каждого из перечисленных разделов. Логические функции. Инверсия (!). Блок, реализующий эту функцию, имеет один функциональный вход и один выход. Значение входа анализируется на равенство 0. Если это равенство выполняется, то выходу присваивается значение 1, в противном случае – 0. Групповая инверсия (_!). Этот блок имеет четыре функциональных входа и четыре выхода. Каждому входу соответствует один выход. В этой паре они работают как один описанный выше блок (!). Побитовая инверсия (~). Этот блок имеет один функциональный вход. При отработке блока осуществляется побитовая инверсия значения входа. Результат присваивается единственному выходу блока. Логическое сложение (|). Для этого блока определены четыре функциональных входа и один выход. Выход принимает значение, равное 1, если хотя бы один из входов отличен от 0. При равенстве всех входов 0 выход блока также принимает значение 0. Логическое умножение (&). Эта функция проверяет на равенство 0 значения четырех функциональных входов блока. При отличии всех входов от 0 значение выхода устанавливается равным 1, в противном случае – 0. Побитовое логическое сложение (_|). Для данного блока определены два функциональных входа и один выход. Значение выхода получается побитовым логическим сложением двух входов. Побитовое логическое умножение (_&). Данный блок имеет два функциональных входа и один выход. Значение выхода формируется как результат побитового логического умножения входов. Побитовое исключающее или (_^). Значение выхода этого блока формируется как результат побитового сложения по XOR значений его функциональных входов. Сдвиг вправо (>>). Этот блок осуществляет побитовое смещение вправо значения первого функционального входа и присваивает выходу полученный результат. Величина смещения в битах задается вторым входом. Сдвиг влево (<<). Этот блок смещает влево значения первого функционального входа и присваивает полученное значение выходу. Величина смещения в битах задается значением второго входа. Распаковка битов (UPV). Значения восьми выходов данного блока формируются значениями битов его младшего байта входа INW. Он должен иметь тип HEX. При этом младший бит формирует выход QB0, а старший – QB7. Упаковка битов (PB). Этот блок собирает значения восьми входов в одно выходное значение. При отличии любого входа от 0 соответствующий ему бит выхода будет равен 1, в противном случае - 0. Входу IB0 соответствует младший бит выходного значения, а IB7 – старший. Распаковка байтов (HLB). Значение выхода QLB данного блока формируется младшим байтом входа INP, а QHB – старшим. Вид представления входа INP должен быть HEX. Упаковка байтов (WHL). Этот блок реализует упаковку значений двух его входов в соответствующие байты выхода. Вход ILB определяет значение младшего байта выхода, а IHB – старшего. Выделение бита (TEST). Функцией этого блока является присвоение величины указанного бита входного значения выходу. На вход INW подается значение, из которого будет выделяться бит. Он должен иметь тип HEX. Номер бита задается входом NB. Его значению 0 соответствует младший бит, а значению 15 - старший. Установка бита (SB). Данный блок устанавливает в 1 значение указанного бита во входном значении и присваивает результат выходу. Вход INP должен иметь тип HEX. На него подается модифицируемое значение. Вход NB задает номер бита. При его равенстве 0 модифицируется младший бит, а при 15 - старший. Сброс бита (RB). Этот блок устанавливает в 0 указанный бит входного значения и присвоение результата выходу. Модифицируемое значение подается на вход INP данного блока, а номер обнуляемого бита - на NB. Арифметические функции. Сложение (+2). Данный блок складывает значения входов AD1 и AD2. Полученная величина присваивается выходу SUM. Вычитание (-). Этот блок вычитает значения входа AS из значения входа AD и присваивает результат выходу. Умножение (*). Этот блок выполняет операцию умножения его двух функциональных входов и присваивает результат выходу. Деление (//). Данный блок делит значение входа DVD на значение входа DVS и присваивается результат выходу. Остаток от деления (%). Блок, реализующий эту функцию, присваивает выходу величину остатка от деления значения входа DVD на значение входа DVS. Возведение в степень (**). Этот блок возводит значения входа INP в степень, заданную значением входа IND. Полученный результат присваивается выходу. Сложение четырех элементов (+4). Работа этого блока аналогична работе блока (+2). Однако здесь осуществляется сложение четырех функциональных входов. Абсолютное значение (ABS). Этот блок имеет только один функциональный вход. Он присваивает выходу абсолютное значение входа. Инверсия знака (_-Х). Этот блок, в отличие от предыдущего, не отбрасывает знак входной величины, а инвертирует его. Целая часть (FLOOR). Функция этого блока заключается в присвоении целой части значения входа INP величине выхода. Не стоит путать эту функцию с округлением до целого. Для округления потребуется два блока, как показано на следующем рисунке. Обратная величина (1/х). Выходу этого блока присваивается величина, полученная при делении 1 на значение входа INP. Квадратный корень (SQRT). Этот блок имеет один функциональный вход и один выход. Выходу присваивается значение, равное квадратному корню от входа. Возведение в квадрат (Х**2). Данный блок осуществляет возведение в квадрат значения, поданного на его вход, и присваивает это значение выходу. Сумма квадратов (HYPOT). Этот блок имеет два функциональных входа и один выход. Выходу присваивается значение, равное сумме квадратов значений входов. Масштабирование (SCALE). Этот блок реализует функцию масштабирования со смещением. На вход INP подается преобразуемое значение, на MUL - коэффициент пропорциональности, а на ADD - смещение. Тригонометрические функции. Этот раздел включает в себя 8 блоков, реализующих вычисление следующих функций: вычисление синуса (SIN); вычисление косинуса (COS); вычисление тангенса (TAN); вычисление арктангенса (ATAN); вычисление арксинуса (ASIN); вычисление арккосинуса (ACOS); вычисление арктангенса отношения (_ATAN); преобразование полярных координат в декартовы (PDT). Блоки, реализующие первые 6 функций, имеют один функциональный вход и один выход. Выходу присваивается результат выполнения соответствующей функции. Значение входов первых трех блоков считается заданным в радианах. Блоки, реализующие обратные преобразования (арксинус, арккосинус и арктангенс), выходное значение также формируют в радианах. Вычисление арктангенса отношения (_ATAN). Данный блок отличается от остальных в этом функциональном разделе дополнительным входом. Дело в том, что этот блок перед вычислением арктангенса осуществляет операцию деления первого функционального входа на второй. Частное от этого деления используется в качестве аргумента для функции арктангенса. Преобразование полярных координат в декартовы (PDT). На вход IL этого блока подается длина, а на IA – угол в радианах. На выходе QX формируется значение координат по оси абсцисс, а на QY - по оси ординат. Алгебраические функции. Вычисление экспоненты (EXP). Значению выхода присваивается результат вычисления экспоненциальной функции от величины входа INP. Вычисление натурального логарифма (LN). Данный блок имеет один функциональный вход и один выход. Здесь вычисляется натуральный логарифм от величины входа, а полученный результат присваивается выходу. Вычисление десятичного логарифма (LOG). Работа этого блока аналогична предыдущему. Только здесь вычисляется не натуральный, а десятичный логарифм. Полином второй степени (POL). Данный блок реализует функцию преобразования – полином второй степени. На его вход K2 подается величина коэффициента при члене полинома второй степени, на вход K1 –при первой степени, на ADD – свободного члена и на INP – преобразуемое значение. Расчет статистических характеристик (STAT). Этот блок вычисляет четыре характеристики. На выход MIN подается минимальное значение, на MAX – максимальное значение, на AVR –среднее значение, на SUM – сумма. На вход INP данного блока подается анализируемое значение. При подаче на вход CLR значения, отличного от 0, на всех выходах устанавливается значение, поданное на вход. Величина суммы не является интегралом. Она просто увеличивается на значение первого входа на каждом такте пересчета блока. Перевод в проценты (t%). Эта функция переводить входную величину в проценты по отношению к заданному диапазону. Для ввода входной величины и границ диапазона используются три входа. На вход MIN подается минимальное значение диапазона, на INP - преобразуемое значение и на MAX - максимальное значение диапазона. Перевод из процентов (f%). Данный блок переводит в реальную величину значение, заданное в процентах по отношению к установленному диапазону. Среднее по трем точкам (AVR3). Значение выхода этого блока формируется как средняя величина от значений входов. Блок суммирует все входы (задействованные и незадействованные) и делит сумму на 3. Среднее по восьми точкам (AVR8). Этот блок вычисляет среднее значение по входам IN1, …, IN8, имеющим тип аргумент, константа или блок. В отличие от блока AVR3 данный блок суммирует только задействованные (несвободные) входы и делит сумму на количество таких входов (от 1 до 8). Скользящее среднее (AVRT). Этот блок имеет один функциональный вход и один выход. Значение выхода формируется как средняя величина его функционального входа за последние четыре такта пересчета. Интеграл (INTG). Данный блок интегрирует входную величину. Приращение интеграла на каждом пересчете определяется по среднему значению за такт. Время при интегрировании исчисляется в секундах. Интегрируемое значение подается на вход INP. При подаче на вход CLR отличного от нуля значения из него вычитается 1, и результат присваивается выходу. Производная по двум точкам (DIFF). Данный блок рассчитывает значение производной как отношение приращения входа блока за такт пересчета ко времени такта. Время такта при этом измеряется в секундах. Округление (NDGT). Этот блок округляет величину, поданную на вход INP, до заданной точности. Вход NDG используется для управления точностью округления. Его значения задают следующие режимы округления: -2 – округление до сотен; -1 – округление до десятков; 0 – округление до целых; 1 – округление до первого разряда после запятой; 2 – округление до второго разряда после запятой; 3 – округление до третьего разряда после запятой; 4 – округление до четвертого разряда после запятой. Блок линейной интерполяции (LINTER). Данный блок реализует линейную интерполяцию величины, поданной на его вход INP. Таблицы точек для преобразования описываются в файле itabl.cfg. Он должен располагаться в директории проекта и имеет следующий формат: QTABL=M TABL00=N0 X1 Y1 X2 Y2 ……. XN0 YN0 ……. TABL<M-1>=NM-1 X1 Y1 X2 Y2 ……. XNM-1 YNM-1 где M – количество таблиц, используемых в проекте (максимум 99); Ni – количество узловых точек в i-й таблице (максимум 124); X – входное значение; Y – выходное значение. Таблица выбирается входом SEL. При его отрицательном значении выходу присваивается величина из столбца X или Y одной из таблицы, номер строки в которой определяется значением входа INP. Номер таблицы и ее столбца следующим образом зависит от значения входа SEL: нечетные числа (-1, -3, -5 и т.д.) выбирают столбцы X таблиц 00, 01, 02 и т.д. соответственно, а четные (-2, -4, -6 и т.д.) – столбцы Y этих таблиц. Функции сравнения. Равенство (==). В случае равенства значений входов IN1 и IN2 этого блока значение его выхода устанавливается равным 1. В противном случае - 0. Неравенство (<>). Отличие этого блока от предыдущего заключается в том, что его выход равен 1 при неравенстве входов, а 0 – при равенстве. Больше (>). Значение выхода этого блока устанавливается равным 1, если вход IN1 больше входа IN2. В противном случае выход равен 0. Меньше (<). Выход этого блока равен 1 если значение входа IN1 меньше значения IN2, а 0 - в противном случае. Больше или равно (>=). Эта функция работает так же, как функция Больше. Но значение 1 будет сформировано на выходе блока и при равенстве входов. Меньше или равно (<=). Этот блок формирует на выходе значение 1 при равенстве его входов IN1 и IN2. Равенство нулю (==0). Работа этого блока аналогична блоку Равенство. Однако здесь вместо значения второго входа используется 0. Неравенство нулю (<>0). Выход этого блока равен 1 при отличии его входа IN1 от 0. Знаковая функция (SIGN). Выход SN+ блока равен 1 при положительном значении входа, а SN- - при отрицательном. Значение входа 0 обнуляет оба выхода. Анализ на совпадение (CMP). Этот блок сравнивает значение входа INP с входами PD1,..., PD6. Выходу присваивается номер входа, величина которого совпадает с входом INP. При этом входу PD1 соответствует значение 1, а PD6 – 6. При отсутствии совпадения величина выхода не меняется. Анализ на совпадение (CMPN). Если значение входа INP не равно значению входа PD, то увеличивается на 1 значение выхода QT. Если QT превышает значение входа PT, то величина второго выхода (QE) устанавливается равной 1. Значения выходов QT и QE сбрасываются в 0 при каждом изменении входа INP. Анализ на совпадение (CMPE). Данный блок работает так же, как и предыдущий. Однако здесь условием увеличения выхода QT является равенство анализируемого значения (вход INP) уставке (вход PD), а сброс выходов в 0 осуществляется при каждой ситуации неравенства INP и PD. Управление по астрономическому времени (ALARM). Данный блок формирует на выходе 1 если астрономическое время совпадает с временем, заданном его входами. Это значение удерживается в течение одной секунды, затем выход обнуляется. При этом вход MON задает номер месяца, DAY – день месяца, DOF – день недели (от 1 – 7, первый день недели - воскресенье), H – час, M – минуту и S – секунду. Если хотя бы один параметр (вход MON, DAY, H, M, S) не совпадает, выход равен нулю. При формировании выходного сигнала, свободные и нулевые величины входов не учитываются. Функции выбора. Выбор из двух (SEL). Выход блока формируется значением одного из входов IN0 или IN1. Вход, адресуемый на выход, выбирается по входом IG. Если он равен 0, то на выход адресуется IN0, а если отлично от 0, то IN1. Выбор из пяти (nSEL). Выход NUM этого блока показывает номер одного из входов I0…I4, значение которого адресуется на выход VAL. Коммутацией управляют входы REG и BLK. Если значение REG равно 0, на выход передается меньшее из входных значений, если 1 – большее. Первые 5 битов числа, поданного на вход BLK, определяют участие входов в выборе. Если бит равен 0, соответствующий ему по номеру вход рассматривается, 1 – игнорируется. Если входом BLK заблокированы все 5 сигнальных входов, значение выхода NUM равно -2. Выбор максимального (MAX). Этот блок имеет два функциональных входа и один выход. На выход подается большее из входных значений. Выбор минимального (MIN). Эта функция похожа на предыдущую. Разница заключается в том, что на выход подается меньшее из двух входных значений. Ограничение (LIMIT). Этот блок ограничивает входную величину по заданным границам. Если значение попадает в заданный диапазон, то оно передается на выход без искажения. В противном случае передается значение нарушенной границы. Вход MIN задает значение нижней границы, MAX - верхней. Контролируемая величина подается на вход INP. Выбор из трех (MUX). Данный блок коммутирует на выход один из трех входов. Номер этого входа задается значением входа NUM. Оно указывает, какой из коммутируемых входов направить на выход. При этом значение 0 задает выбор входа IN0, 1 – IN1, 2 – IN2. Если величина входа NUM принимает любое другое значение, то на текущем такте пересчета значение выхода блока не меняется.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|