diff --git a/TEMA8/MM0.py b/TEMA8/MM0.py new file mode 100644 index 0000000..89443a5 --- /dev/null +++ b/TEMA8/MM0.py @@ -0,0 +1,4 @@ +# MM0 +# Запуск и вывод вых сигнала +import MM2 +print('y=',MM2.vyhod) diff --git a/TEMA8/MM1.py b/TEMA8/MM1.py new file mode 100644 index 0000000..b195e92 --- /dev/null +++ b/TEMA8/MM1.py @@ -0,0 +1,31 @@ +# MM1 +# Функции узлов САУ +def realdvig(xtt,kk1,TT,yti1,ytin1): + """Реальный двигатель + xtt - входной сигнал + kk1 - коэффициент усиления + TT - постоянная времени""" + yp=kk1*xtt # усилитель + yti1=yp+yti1 # интегратор + ytin1=(yti1+TT*ytin1)/(TT+1) + return [yti1,ytin1] + +def tahogen(xtt,kk2,yti2): + """Тахогенератор + xtt - входной сигнал + kk2 - коэф. усиления""" + yp=kk2*xtt # усилитель + yti2=yp+yti2 # интегратор + return yti2 + +def nechus(xtt,gran): + """Зона нечувствительности + xtt - входной сигнал + gran - границы зоны""" + if xtt(-gran): + ytt=0 + elif xtt>=gran: + ytt=xtt-gran + elif xtt<=(-gran): + ytt=xtt+gran + return ytt diff --git a/TEMA8/MM2.py b/TEMA8/MM2.py new file mode 100644 index 0000000..6a61ba2 --- /dev/null +++ b/TEMA8/MM2.py @@ -0,0 +1,25 @@ +# MM2 +# Инструкции, обеспечивающие ввод параметров задачи, формирование вх. сигнала, импорт модуля ММ1 и реализацию модели при расчете вых. сигнала. +znach=input('k1,T,k2,Xm,A,F,N=').split(',') +k1=float(znach[0]) +T=float(znach[1]) +k2=float(znach[2]) +Xm=float(znach[3]) +A=float(znach[4]) +F=float(znach[5]) +N=int(znach[6]) + +import math +vhod=[] +for i in range(N): + vhod.append(A*math.sin((2*i*math.pi)/F)) + +import MM1 as mod +yi1=0;yin1=0;yi2=0 +vyhod=[] +for xt in vhod: + xt1=xt-yi2 #отрицательная обратная связь + [yi1,yin1]=mod.realdvig(xt1,k1,T,yi1,yin1) + yi2=mod.tahogen(yin1,k2,yi2) + yt=mod.nechus(yin1,Xm) + vyhod.append(yt) diff --git a/TEMA8/Mod0.py b/TEMA8/Mod0.py index 6337fc3..a0464cf 100644 --- a/TEMA8/Mod0.py +++ b/TEMA8/Mod0.py @@ -1,9 +1,12 @@ #Модуль Mod0 import Mod1 print('perm1=',Mod1.perm1) +Mod1.perm1 = str(int(Mod1.perm1)*3) +print('3*perm1=',Mod1.perm1) from Mod2 import alpha as al tt=al() print('tt=',tt) from Mod2 import beta qq=beta(float(tt)) print('qq=',qq) + diff --git a/TEMA8/Ris1.png b/TEMA8/Ris1.png new file mode 100644 index 0000000..c842faf Binary files /dev/null and b/TEMA8/Ris1.png differ diff --git a/TEMA8/report.md b/TEMA8/report.md new file mode 100644 index 0000000..cd040a6 --- /dev/null +++ b/TEMA8/report.md @@ -0,0 +1,270 @@ +# Отчёт по Теме 8 +Таболин Иван, А-01-23 +## 1. Запуск и первоначальная настройка. +```py +import os,sys,importlib +os.chdir('C:\\Users\\User\\Desktop\\python-labs\\TEMA8') +os.getcwd() +'C:\\Users\\User\\Desktop\\python-labs\\TEMA8' +``` +## 2. Создание и использование модулей. +Модуль - любая часть программного кода, записанная в отдельном файле. +В языке Python модули являются объектами класса `module`. +## 2.1. Запуск модуля на выполнение путем его импорта. +Создан файл Mod1.py c программой: +```py +perm1=input('Mod1:Введите значение = ') +print('Mod1:Значение perm1=',perm1) +``` +Импорт модуля +```py +import Mod1 +Mod1:Введите значение = 5 +Mod1:Значение perm1= 5 + +type(Mod1) + + +dir(type) +['__abstractmethods__', '__annotations__', '__base__', '__bases__', '__basicsize__', '__call__', '__class__', '__delattr__', '__dict__', '__dictoffset__', '__dir__', '__doc__', '__eq__', '__flags__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__instancecheck__', '__itemsize__', '__le__', '__lt__', '__module__', '__mro__', '__name__', '__ne__', '__new__', '__or__', '__prepare__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__setattr__', '__sizeof__', '__str__', '__subclasscheck__', '__subclasses__', '__subclasshook__', '__text_signature__', '__type_params__', '__weakrefoffset__', 'mro'] + +Mod1.perm1 +'5' +``` +Повторное выполнение модуля +```py +import Mod1 + # запуска модуля не произошло + +importlib.reload(Mod1) +Mod1:Введите значение = 3 +Mod1:Значение perm1= 3 + +Mod1.perm1 +'3' +``` +## 2.2. Занесение импортированных модулей в словарь. +```py +print(sorted(sys.modules.keys())) +['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', ... +``` +```py +sys.modules.pop('Mod1') + + +print(sorted(sys.modules.keys())) +['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', ... + +import Mod1 +Mod1:Введите значение = 35 +Mod1:Значение perm1= 35 +sys.modules.pop('Mod1') + +``` +## 2.3. Запуск модуля на выполнение с помощью функции. +Выполняется с помощью функции `exec()` +```py +exec(open('Mod1.py').read()) +Mod1:Введите значение = 6 +Mod1:Значение perm1= 6 +Mod1.perm1 +'35' +exec(open('Mod1.py').read()) +Mod1:Введите значение = 44 +Mod1:Значение perm1= 44 +Mod1.perm1 +'35' +exec(open('Mod1.py').read()) +Mod1:Введите значение = 12 +Mod1:Значение perm1= 12 +Mod1.perm1 +'35' +``` +## 2.4. Использование инструкции `from ... import ...`. +Пример 1. +```py +from Mod1 import perm1 +print(sorted(sys.modules.keys())) +['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', ... +Mod1.perm1 +'35' +``` +Пример 2. +```py +from Mod2 import beta +g=beta(2) +****BETA**** +g +535.4916555247646 +dir() +['Mod1', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '__warningregistry__', 'beta', 'g', 'importlib', 'os', 'perm1', 'sys'] +alpha() +Traceback (most recent call last): + File "", line 1, in + alpha() +NameError: name 'alpha' is not defined +from Mod2 import alpha as al +al() +****ALPHA**** +Значение t=55 +'55' +del al,beta +from Mod2 import alpha as al, beta as bt +del al,bt +from Mod2 import * +tt=alpha() +****ALPHA**** +Значение t=0.12 +uu=beta(float(tt)) +****BETA**** +uu +1.4578913609506803 +``` +## 3. Создание многомодульных программ. +## 3.1. Пример простой многомодульной программы. +```py +sys.modules.pop('Mod1') + +sys.modules.pop('Mod2') + +``` +```py +import Mod0 +Mod1:Введите значение = 4 +Mod1:Значение perm1= 4 +perm1= 4 +****ALPHA**** +Значение t=5 +tt= 5 +****BETA**** +qq= 6635623.99934113 +Mod0.tt,Mod0.qq,Mod0.Mod1.perm1 +('5', 6635623.99934113, '4') +``` +## 3.2. Пример. +```py +import MM0 +y= [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.995050282999456, 7.337875156918653, 10.174309420549172, 10.298227259219182, ... +``` +```py +import matplotlib.pyplot as plt +y=MM0.MM2.vyhod +plt.plot(y) +[] +plt.show() +``` +!(Ris1.png)[Выходной сигнал] +Выходной сигнал +## 3.3. Области действия объектов в модулях. +Новое содержание модуля `Mod2.py`: +```py +def alpha(): + print('****ALPHA****') + t=input('Значение t=') + beta(int(t)) + return t + +def beta(q): + print('****BETA****') + import math + expi=q*math.pi + return math.exp(expi) +``` +Вызов модуля: +```py +from Mod2 import * +alpha() +****ALPHA**** +Значение t=5 +****BETA**** +'5' +``` +Новое содержимое модуля `Mod2`(вызов `beta` из `alpha`): +```py +from Mod2 import * +beta(6) +****BETA**** +****ALPHA**** +Значение t=5 +153552935.39544657 +``` +Другой пример - отображение на экране в модуле `Mod0` значения объектов `t` и `expi` +Новое содержимое модуля `Mod0` +```py +#Модуль Mod0 +import Mod1 +print('perm1=',Mod1.perm1) +from Mod2 import alpha as al +tt=al() +print('tt=',tt) +from Mod2 import beta +qq=beta(float(tt)) +print('qq=',qq) +print(t,expi) +``` +Запуск +```py +import Mod0 +perm1= 4 +****ALPHA**** +Значение t=7 +tt= 7 +****BETA**** +****ALPHA**** +Значение t=6 +qq= 3553321280.847041 +Traceback (most recent call last): + File "", line 1, in + import Mod0 + File "C:\Users\User\Desktop\python-labs\TEMA8\Mod0.py", line 10, in + print(t,expi) +NameError: name 't' is not defined +``` +Ещё один пример - увеличение в 3 раза значения объекта `perm1` в модуле `Mod0` +Новое содержимое модуля `Mod0`: +```py +#Модуль Mod0 +import Mod1 +print('perm1=',Mod1.perm1) +Mod1.perm1 = int(Mod1.perm1)*3 +from Mod2 import alpha as al +tt=al() +print('tt=',tt) +from Mod2 import beta +qq=beta(float(tt)) +print('qq=',qq) +``` +```py +import Mod0 +perm1= 12 +3*perm1= 36 +****ALPHA**** +Значение t=9 +tt= 9 +****BETA**** +****ALPHA**** +Значение t=90 +qq= 1902773895292.1592 +``` +Увеличение в 2 раза объектов `perm`,`tt`,`qq` в командной строке. +```py +import Mod0 +perm1= 36 +3*perm1= 108 +****ALPHA**** +Значение t=2 +tt= 2 +****BETA**** +****ALPHA**** +Значение t=2 +qq= 535.4916555247646 +Mod0.Mod1.perm1=int(Mod0.Mod1.perm1)*2 +Mod0.Mod1.perm1 +'216' +Mod0.tt=int(Mod0.Mod1.perm1)*2 +Mod0.tt +432 +Mod0.qq=Mod0.qq*2 +Mod0.qq +1070.9833110495292 +``` \ No newline at end of file