2. Синтаксис определения и вызова M-функций .
Текст M-функции должен начинаться с заголовка , после которого следует тело функции .
Заголовок определяет " интерфейс" функции (способ взаимодействия с ней) и устроен следующим образом:
function [ RetVal1, RetVal2, ] = FunctionName(par1, par2, )
Здесь провозглашается функция (с помощью неизменного "ключевого" слова function) с именем FunctionName, которая принимает входные параметры par1, par2, , и вырабатывает (вычисляет) выходные (возвращаемые) значения RetVal1, RetVal2
По-другому говорят, что аргументами функции являются переменные par1, par2,.., а значениями функции (их надо вычислить) являются переменные RetVal1, RetVal2, .
Указанное в заголовке имя функции (в приведённом примере - FunctionName) должно служить именем файла, в который будет записан текст функции. Для данного примера это будет файл FunctionName.m (расширение имени, по-прежнему, должно состоять лишь из одной буквы m). Рассогласования имени функции и имени файла не допускается!
Тело функции состоит из команд, с помощью которых вычисляются возвращаемые значения. Тело функции следует за заголовком функции. Заголовок функции плюс тело функции в совокупности составляют определение функции.
Как входные параметры, так и возвращаемые значения могут быть в общем случае массивами (в частном случае - скалярами) различных размерностей и размеров. Например, функция MatrProc1
function [ A, B ] = MatrProc1(X1, X2, x)
A = X1 .* X2 * x;
B = X1 .* X2 + x;
рассчитана на "приём" двух массивов одинаковых (но произвольных) размеров и одного скаляра.
Эти массивы в теле функции сначала перемножаются поэлементно, после чего результат такого перемножения ещё умножается на скаляр. Таким образом порождается первый из выходных массивов. Одинаковые размеры входных масивов X1 и X2 гарантируют выполнимость операции их поэлементного умножения. Второй выходной массив (с именем B) отличается от первого тем, что получается сложением со скаляром (а не умножением).
Вызов созданной нами функции осуществляется из командного окна системы MATLAB (или из текста какой-либо другой функции) обычным образом: записывается имя функции, после которого в круглых скобках через запятую перечисляются фактические входные параметры , со значениями которых и будут произведены вычисления. Фактические параметры могут быть заданы числами (массивами чисел), именами переменных, уже имеющими конкретные значения, а также выражениями.
Если фактический параметр задан именем некоторой переменной, то реальные вычисления будут производиться с копией этой переменной (а не с ней самой). Это называется передачей параметров по значению .
Ниже показан вызов из командного окна MATLABа ранее созданной нами для примера функции MatrProc1.
Здесь имена фактических входных параметров (W1 и W2) и переменных, в которых записываются результаты вычислений (Res1 и Res2), не совпадают с именами аналогичных переменных в определении функции MatrProc1. Очевидно, что совпадения и не требуется, тем более, что у третьего входного фактического параметра нет имени вообще! Чтобы подчеркнуть это возможное отличие, имена входных параметров и выходных значений в определении функции называют формальными.
В рассмотренном примере вызова функции MatrProc1 из двух входных квадратных матриц 2 x 2 получаются две выходные матрицы Res1 и Res2 точно таких же размеров:
Res1
=
9
6
6 6
Res2 =
6
5
5 5
Вызвав функцию
MatrProc1 = MatrProc1([ 1 2 3; 4 5 6 ], [ 7 7 7; 2 2 2 ], 1);
с двумя входными массивами размера 2x3, получим две выходные матрицы размера 2x3. То есть, одна и та же функция MatrProc1 может обрабатывать входные параметры различных размеров и размерностей! Можно вместо массивов применить эту функцию к скалярам (это всё равно массивы размера 1x1).
Теперь рассмотрим вопрос о том, можно ли использовать эту функцию в составе выражений так, как это делается с функциями, возвращающими единственное значение? Оказывается это делать можно, причём в качестве значения функции, применяемого для дальнейших вычислений, используется первое из возвращаемых функцией значений. Следующее окно системы MATLAB иллюстрирует это положение:
При вызове с параметрами 1,2,1 функция MatrProc1 возвращает два значения: 2 и 3. Для использования в составе выражения используется первое из них.
Так как вызов любой функции можно осуществить, написав произвольное выражение в командном окне MATLABа, то всегда можно совершить ошибку, связанную с несовпадением типов фактических и формальных параметров. MATLAB не выполняет никаких проверок на эту тему, а просто передаёт управление функции. В результате могут возникнуть ошибочные ситуации. Чтобы избежать (по-возможности) возникновения таких ошибочных ситуаций, предлагается в тексте M-функций осуществлять проверку входных параметров. Например, в функции MatrProc1 легко осуществить выявление ситуации, когда размеры первого и второго входных параметров различны. Для написания такого кода требуются конструкции управления, которые мы пока ещё не изучали. Самое время приступить к их изучению!
Язык технических вычислений
Миллионы инженеров и ученых во всем мире используют MATLAB ® , чтобы анализировать и разработать системы и продукты, преобразовывающие наш мир. Матричный язык MATLAB является самым естественным способом в мире выразить вычислительную математику. Встроенная графика облегчает визуализацию и понимание данных. Окружение рабочего стола способствует экспериментированию, исследованиям и открытиям. Эти средства MATLAB и возможности все строго протестированы и разработаны, чтобы работать совместно.
MATLAB помогает вам воплощать свои идеи за пределами рабочего стола. Можно запустить исследования больших наборов данных и масштабировать до кластеров и облаков. Код MATLAB может быть интегрирован с другими языками, позволив вам развернуть алгоритмы и приложения в сети, предприятии и промышленных системах.
Изучите основы MATLAB
Синтаксис, индексация и обработка массива, типы данных, операторы
Импорт и экспорт данных, в том числе и больших файлов; предварительная обработка данных, визуализация и исследования
Линейная алгебра, дифференцирование и интегрирование, преобразования Фурье и прочая математика
2D и 3D графики, изображения, анимация
Скрипты, функции и классы
Разработка приложений с помощью App Designer, программируемого рабочего процесса или GUIDE
Отладка и тестирование, организация крупных проектов, интеграция с системой контроля версий, упаковка тулбоксов
В настоящее время для программирования систем ЧПУ используется множество языков программирования, в основе которых лежит универсальный язык ИСО 7 бит. Однако каждый производитель вносит свои особенности, которые реализуются через подготовительные (G-коды) и вспомогательные (M-коды) функции.Функции с адресом G – называются подготовительными , они определяют условия работы станка связанные с программированием геометрии перемещения инструмента. Подробное описание G-кодов можно найти в главе код ИСО 7 бит .
В данной главе подробно рассмотрим назначение вспомогательных функций.
Функции с адресом M – называются вспомогательными (от анг. Miscellaneous) и предназначены для управления различными режимами и устройствами станка.
Вспомогательные функции могут использоваться одиночно или совместно с другими адресами, например, кадр ниже производит установку инструмента с номером 1 в шпиндель.
N10 T1 M6, где
T1
– инструмент номер 1;
M6
– смена инструмента;
В данном случае под командой М6 на стойке ЧПУ скрывается целый набор команд, которые обеспечивают процесс замены инструмента:
Перемещение инструмента в позицию смены;
- выключение оборотов шпинделя;
- перемещение устанавливаемого инструмента в магазине;
- замена инструмента;
Использование М-кодов допускается в кадрах с перемещением инструмента, например в строке ниже охлаждение включится (M8) одновременно с началом движения фрезы.
N10 X100 Y150 Z5 F1000 M8
М-коды, включающие какое-либо устройство станка, имеют парный М код, который это устройство выключает. Например,
M8
– включить охлаждение, M9
– выключить охлаждение;
M3
– включить обороты шпинделя, M5
– выключить обороты;
Допускается использование нескольких М команд в одном кадре.
Соответственно чем больше устройств имеет станок, тем больше М команд будет задействовано в его управлении.
Условно все вспомогательные функции можно разделить на стандартные и специальные . Стандартные вспомогательные функции используются производителями ЧПУ для управления устройствами, имеющимися на каждом станке (шпиндель, охлаждение, смена инструмента и т.д.). Тогда как специальные программируют режимы на одном конкретном станке или группе станков данной модели (вкл/выкл измерительную головку, зажим/разжим поворотных осей).
На картинке выше представлен поворотный шпиндель многоосевого станка. Для увеличения жесткости при позиционной обработке станок оснащен зажимами поворотных осей, которые управляются М кодами: M10/M12 – включить зажимы для осей A и С. М11/М13 – выключить зажимы. На другом оборудовании производитель станка может данные команды настроить на управление другими устройствами.
Специальные вспомогательные функции производитель станка описывает в соответствующей технической документации.
Воскобойников Б.С., Митрович В.Л.. Русско-Английский словарь по машиностроению и автоматизации производства. Russian-English dictionary of mechanical engineering and manufacturing automation. 2003
More meanings of this word and English-Russian, Russian-English translations for the word «М-ФУНКЦИИ» in dictionaries.
Важным примером замкнутого класса является класс монотонных функций. Тот факт, что монотонные функции образуют замкнутый класс, докажем позже, а пока познакомимся с тем, что такое монотонная булева функция.
На множестве B=0,1 введём полный порядок: будем считать, что 0<1. Нам придётся иметь дело с функциями от n переменных, поэтому полезно ввести частичное упорядочение в булевом пространстве В n .
Определение 1. Пусть б=(б 1 б 2 …б n) и в=(в 1 в 2 …в n) - элементы из В n . Будем говорить, что б предшествует (младше) в, и обозначать бв, если б k в k для k=1,2,…,n, причём хотя бы для одного k имеет место строгое неравенство.
Пример. б=(001100), в=(001110); б 1 =в 1 , б 2 =в 2 , б 3 =в 3 , б 4 =в 4 , б 5 <в 5 , б 6 =в 6 . Значит, бв.
Определение 2. Два вектора б и в называются сравнимыми между собой, если бв или вб. В противном случае векторы считаются несравнимыми. Частичным такой порядок называется потому, что не все элементы из В n сравнимы. Поэтому не надо путать частичный порядок на В n с полным упорядочением, которое использовалось при задания булевой функции таблицей или вектором её значений.
Вот пара примеров несравнимых между собой векторов.
1. б =(1100), в =(0110). Здесь б 1 > в 1 , б 2 =в 2 , б 3 < 3 , б 4 =в 4 .
2. б =(01), в =(10). Здесь б 1 < в 1 , б 2 > в 2 .
Из примеров видно, что несравнимые наборы - это те, в которых есть компоненты типа (01) в одном наборе и (10) в другом наборе на соответствующих местах.
Определение 3. Функция f(х 1 ,…,х n) называется монотонной (принадлежит классу М), если для любых двух сравнимых между собой наборов б, в В n из того, что б предшествует в, следует, что f(б) не больше f(), то есть бв f(б) f(в).
Если же существует такая пара наборов, что бв, но f(б) > f(в), то функция f(х1,…,хn) - немонотонная По аналогии с непрерывными функциями, которые изучаются в курсе математического анализа, функции алгебры логики можно было бы назвать неубывающими . Но поскольку мы не будем иметь дело с невозрастающими функциями, можно говорить просто о монотонности ..
Пример 20. Тождественная функция f(x) = x является монотонной, поскольку б=(0) (1)=в и f(б)=0 < 1=f()
Пример 21. f(x,y) = xy - монотонная функция.
Действительно, наборы (01) и (10) несравнимы, их в расчёт брать не будем. Для других наборов имеем:
(00)-- (11) и f(0,0)=0 1= f(1,1).
(01) (11) и f(0,1)=1 1= f(1,1).
(10)-- (11) и f(1,0)=1 1= f(1,1).
Мы убедились, что xy равна 0 лишь на наборе (00), который предшествует всем остальным наборам, так что условие монотонности функции выполняется.
Пример 22. f(x,y)=x&y - монотонная функция, т.к. равна 1 лишь на наборе (11), которому предшествуют все остальные.
Пример 23. Константы 0 и 1 являются монотонными функциями, т.к. для любых наборов будет f(б)=f(в).
Пример 24. f(x)=x" - немонотонная функция, т.к. при б=(0) и в=(1) имеем бв, но f(б)=1> 0=f(в).
Пример 25. f(x,y)=xy - немонотонная функция.
Действительно,
(00)---- (01) и f(0,0)=1 1=f(1,1) ,
(10)---- (11) и f(1,0)=0 1=f(1,1).
Но при (00)---- (10) получим
f(0,0)=1 > 0=f(1,0).
Условие монотонности функции не выполняется!
Пример 26. Определим монотонность функции сложение по модулю 2:
Наборы (01) и (10) несравнимы, их в расчёт брать не будем.
Для других наборов имеем:
(00) (01) и f(0,0)=0 1= f(0,1).
(00)-- (10) и f(0,0)=0 1= f(1,0).
(00) (11) и f(0,0)=0 0= f(1,1).
(10) (11) и f(1,0)=1 > 0= f(1,1).
Последнее условие говорит о том, что функция x+y немонотонна.