importmatplotlib.pyplot as pltimportnumpy as npimporttimeimportthreadingimporttkinter
method=1 #method為1時自動控制,為其他值時手動控制
sp=10 #設定值
t1=10 #第乙個水箱的引數
t2=20 #第二個水箱的引數
k1=1.5 #第乙個水箱的引數
k2=1.2 #第二個水箱的引數
deltat=0.05 #**的步距
showt=0.5 #顯示的步距
#pid控制引數
kp=2ki=0.05kd=0#輸出限幅
umax=20umin=0#初始化
y1=0 #第乙個水箱的初始水位
y2=0 #第二個水箱的初始水位
t=0 #執行的時間
i=0u=1 #第乙個水箱的進水量
#三個顯示視窗的設定
p1=plt.subplot(3,1,1)
p1.set_title('inflow u')
p2=plt.subplot(3,1,2)
p2.set_title('water level y1')
p3=plt.subplot(3,1,3)
p3.set_title('water level y2')
plt.plot(0,0)defloop():globaly1,y2,t,i,u,sp
y1=[y1]
y2=[y2]
t=[t]
u=[u]
xi=0
e0=0whiletrue:
i=i+1t=t+deltat#輸出限幅
if u
u=uminif u>umax:
u=umax#控制物件**
y1=(k1*u-y1)/t1*deltat+y1
y2=(k2*y1-y2)/t2*deltat+y2
t+=[t]
y1+=[y1] #記錄下第乙個水箱的歷史水位
y2+=[y2] #記錄下第二個水箱的歷史水位
u+=[u] #記錄下歷史輸入
if showt/deltat<=i :
i=0if method==1:#pid控制演算法
e=sp-y2
xp=kp*e
xi=xi+ki*e
xd=(e-e0)*kd/showt
e0=e
u=xp+xi+xd#抗積分飽和
if xp+xi>umax:
xi=umax-xpif xp+xi
xi=umin-xp
p1.plot(t,u)
p2.plot(t,y1)
p3.plot(t,y2)
p3.set_xlabel('y2=%.2f' %y2)
plt.draw()
time.sleep(showt)defgui():globalentrysp,entryu
root=tkinter.tk()
framesp=tkinter.frame(root)
frameu=tkinter.frame(root)
frameam=tkinter.frame(root)
labelsp=tkinter.label(framesp,text='設定值')
labelu=tkinter.label(frameu,text='輸入u')
entrysp=tkinter.entry(framesp)
entryu=tkinter.entry(frameu)
buttonsp=tkinter.button(framesp,text='更改',command=gui_sp)
buttonu=tkinter.button(frameu,text='更改',command=gui_u)
buttonm2a=tkinter.button(frameam,text='自動控制',command=gui_m2a)
buttona2m=tkinter.button(frameam,text='手動控制',command=gui_a2m)
framesp.pack()
frameu.pack()
frameam.pack()
labelsp.pack(side='left')
entrysp.pack(side='left')
buttonsp.pack(side='left')
labelu.pack(side='left')
entryu.pack(side='left')
buttonu.pack(side='left')
buttonm2a.pack(side='left')
buttona2m.pack(side='left')
root.mainloop()defgui_sp():globalsp
strsp=entrysp.get()
sp=float(strsp)defgui_u():globalu
stru=entryu.get()
u=float(stru)defgui_m2a():globalmethod
method=1
defgui_a2m():globalmethod
method=0
threading.thread(target=loop,args=()).start()
threading.thread(target=gui,args=()).start()
plt.show()
Kafka 水位詳解
kafka中用水位來描述,乙個分割槽中的可見資料的offset。大概你需要知道這幾點 hw 水位 你可以理解成是乙個全域性 所有副本最小offset 的offset,針對的是乙個分割槽 leo代表著該副本的所有訊息的最大offset,針對的是乙個副本,也就是每個副本都有leo,並且不一樣。其中所有副...
SHRINK SEGMENT降低高水位
oracle 10g 語法 alter tableshrink space compact cascade alter tableshrink space compcat 收縮表,但會保持 high water mark 這怎麼理解?相當於沒回縮?相當於把塊中資料打結實了。沒有變動hwm alter...
城市水位監測系統
可實時監測城區低窪地區,低窪路段的積水水位,重點河段的河道水位並實現自動報警。市政管理部門借助該系統可整體掌握城區的內澇狀況,及時進行排水排程。1 地下水水位監測 2 河道水位監測 3 水庫水位監測 4 水池水位監測 5 其他 3.1 系統拓撲圖 3.2 硬體系統 水位計 雨量筒實時監測測量現場水位...