main
TabolinIA 5 дней назад
Родитель 18ae4e843b
Сommit c3488f3aff

@ -0,0 +1,4 @@
# MM0
# Запуск и вывод вых сигнала
import MM2
print('y=',MM2.vyhod)

@ -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 and xtt>(-gran):
ytt=0
elif xtt>=gran:
ytt=xtt-gran
elif xtt<=(-gran):
ytt=xtt+gran
return ytt

@ -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)

@ -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)

Двоичные данные
TEMA8/Ris1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 16 KiB

@ -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)
<class 'module'>
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
<module 'Mod1' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod1.py'>
Mod1.perm1
'3'
```
## 2.2. Занесение импортированных модулей в словарь.
```py
print(sorted(sys.modules.keys()))
['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', ...
```
```py
sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod1.py'>
print(sorted(sys.modules.keys()))
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', ...
import Mod1
Mod1:Введите значение = 35
Mod1:Значение perm1= 35
sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod1.py'>
```
## 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 "<pyshell#52>", line 1, in <module>
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')
<module 'Mod1' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod1.py'>
sys.modules.pop('Mod2')
<module 'Mod2' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod2.py'>
```
```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)
[<matplotlib.lines.Line2D object at 0x0000015D4E13D950>]
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 "<pyshell#108>", line 1, in <module>
import Mod0
File "C:\Users\User\Desktop\python-labs\TEMA8\Mod0.py", line 10, in <module>
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
```
Загрузка…
Отмена
Сохранить