python 水位 水箱水位控制程式

2021-10-11 13:20:38 字數 2732 閱讀 6521

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 硬體系統 水位計 雨量筒實時監測測量現場水位...