資源簡介
自適應(yīng)PID的C語言源碼,適合于更加智能化的控制,也是經(jīng)典PID的進(jìn)階版。
代碼片段和文件信息
//VAR_INPUT
#ifndef?TRUE
??#define?TRUE?0x01
#endif?
#ifndef?FALSE
??#define?FALSE?0x00
#endif?
float????PV_IN?=?0.0?;???//過程變量輸入
//可以在“過程變量輸入”輸入端設(shè)置初始值,或者也可以連接到浮點(diǎn)數(shù)格式的外部過程變量上。
int??????PV_PER??=?0?;??????//外圍設(shè)備過程變量?外圍設(shè)備I/O?格式的過程變量連接到控制器的“外圍設(shè)備過程變量”輸入端。
float????DISV?=?0.0?;???//干擾變量?對于前饋控制,干擾變量連接到“干擾變量”輸入端。
unsigned?char????INT_HPOS?=?FALSE?;?//積分作用保持在正方向 積分作用的輸出可以鎖定在正方向。為此,INT_HPOS?輸入端必須設(shè)置成TRUE。在級聯(lián)控制中,主控制器的INT_HPOS?互連到次級控制器的QLMN_HLM。
unsigned?char????INT_HNEG?=?FALSE?;?//積分作用保持在負(fù)方向
//積分作用的輸出可以鎖定在負(fù)方向。為此,INT_HNEG?輸入端必須設(shè)置成TRUE。在級聯(lián)控制中,主控制器的INT_HNEG?互連到次級控制器的QLMN_LLM。
int????SELECT?=?0?;??????//調(diào)用PID?和脈沖發(fā)生器的選項
//如果激活了脈沖發(fā)生器,則有幾種方法可用于調(diào)用PID?算法和脈沖發(fā)生//器:
//.?SELECT?=0:在一個快速周期性中斷級中調(diào)用控制器,并處理PID算法和脈沖發(fā)生器。
//.?SELECT?=1:在OB1?中調(diào)用控制器,并且只處理PID?算法。
//.?SELECT?=2:在一個快速周期性中斷級中調(diào)用控制器,并只處理脈沖發(fā)生器。
//.?SELECT?=3:在一個慢速周期性中斷級中調(diào)用控制器,并只處理PID?算法。
//END_VAR
//VAR_OUTPUT
float????PV?=?0.0?;???//過程變量???有效的過程變量在“過程變量”輸出端輸出。
float????LMN?=?0.0?;???//可調(diào)節(jié)變量 可調(diào)節(jié)變量的有效值以浮點(diǎn)數(shù)格式,?在“可調(diào)節(jié)變量”輸出端輸出。
int????LMN_PER?=?0?;??????//外圍設(shè)備操作可調(diào)節(jié)變量?外圍設(shè)備格式的可調(diào)節(jié)變量值連接到控制器的“外圍設(shè)備操作可調(diào)節(jié)變量”輸出端。
unsigned?char????QPULSE?=?FALSE?;?//輸出脈沖信號?可調(diào)節(jié)變量的值是在QPULSE?輸出端調(diào)制的輸出脈沖寬度。
unsigned?char????QLMN_HLM?=?FALSE?;?//達(dá)到可調(diào)節(jié)變量的上限?可調(diào)節(jié)變量的值始終限制在上限和下限范圍之內(nèi)。當(dāng)超過了上限時,通過QLMN_HLM?輸出端進(jìn)行指示。
unsigned?char????QLMN_LLM?=?FALSE?;?//達(dá)到可調(diào)節(jié)變量的下限?可調(diào)節(jié)變量的值始終限制在上限和下限范圍之內(nèi)。當(dāng)超過了下限時,通過QLMN_LLM?輸出端進(jìn)行指示。
unsigned?char????QC_ACT?=?TRUE?;??//下一個循環(huán)周期,連續(xù)控制器繼續(xù)工作
//該參數(shù)指示在下一個塊調(diào)用時是否執(zhí)行連續(xù)控制器環(huán)節(jié)(只有當(dāng)SELECT?具有數(shù)值0?或1?時才相關(guān))。
//END_VAR
//VAR_IN_OUT
float????CYCLE?=?0.1?;???//連續(xù)控制器的采樣時間[秒]
//在此設(shè)置PID?算法的采樣時間。調(diào)諧器在階段1?中計算采樣時間,然后將其輸入到CYCLE?中。
float????CYCLE_P?=?0.02?;??//脈沖發(fā)生器的采樣時間[秒]
//在該輸入端,輸入脈沖發(fā)生器環(huán)節(jié)的采樣時間。FB?58“TCONT_CP”在階段1?中計算采樣時間,然后將其輸入到CYCLE_P。
float????SP_INT?=?0.0?;???//內(nèi)部設(shè)定值?“內(nèi)部設(shè)定值”輸入端用于指定一個設(shè)定值。
float????MAN?=?0.0?;???//手動值 “手動值”輸入端用于指定一個手動值。在自動模式中,它被改成可調(diào)節(jié)變量。
unsigned?char????COM_RST?=?FALSE?;?//完全重啟動 該塊有一個初始化例行程序,當(dāng)COM_RST?輸入端被置位時執(zhí)行該例行程序。
unsigned?char????MAN_ON?=?TRUE;???//手動操作打開?如果“手動操作打開”輸入被置位,則中斷控制回路。MAN?手動值被設(shè)置為可調(diào)節(jié)變量的值。
//END_VAR
//VAR
float????DEADB_W?=?0.0?;???//死區(qū)寬度?偏差通過死區(qū)。“死區(qū)寬度”輸入決定死區(qū)大小。
float????I_ITLVAL?=?0.0?;???//積分作用的初始化值
//積分作用的輸出可以在I_ITL_ON?輸入端上設(shè)置。該初始化值用于“積分作用的初始化值”輸入。在重啟動期間,
//COM_RST?=?TRUE,積分作用被設(shè)置成初始值。
float????LMN_HLM?=?100.0;??//可調(diào)節(jié)變量上限
//可調(diào)節(jié)變量的值始終限制在上限和下限范圍之內(nèi)。“可調(diào)節(jié)變量上限”輸入指定了上限。
float????LMN_LLM?=?0.0?;???//可調(diào)節(jié)變量下限
//可調(diào)節(jié)變量的值始終限制在上限和下限范圍之內(nèi)。“可調(diào)節(jié)變量下限”輸入指定了下限。
float????PV_FAC?=?1.0?;???//過程變量因子
//“過程變量因子”輸入和“外圍設(shè)備過程值”相乘。該輸入用于調(diào)整過程變量的范圍。
float????PV_OFFS?=?0.0?;???//過程變量偏移量
//“過程變量偏移量”輸入被加到“外圍設(shè)備過程變量”上。該輸入用于調(diào)整過程變量的范圍。
float????LMN_FAC?=?1.0?;???//可調(diào)節(jié)變量因子
//“可調(diào)節(jié)變量因子”輸入和可調(diào)節(jié)變量相乘。該輸入用于調(diào)整可調(diào)節(jié)變量的范圍。
float????LMN_OFFS?=?0.0?;???//可調(diào)節(jié)變量偏移量
//“可調(diào)節(jié)變量偏移量”輸入加到可調(diào)節(jié)變量的數(shù)值上。該輸入用于調(diào)整可調(diào)節(jié)變量的范圍。
float????PER_TM?=?1.0?;???//周期[秒]
//脈寬調(diào)制的脈沖重復(fù)周期在PER_TM?參數(shù)上輸入。脈沖發(fā)生器的脈沖重復(fù)周期和采樣時間之間的關(guān)系決定脈寬調(diào)制的精度。
float????P_B_TM?=?0.0?;???//最小脈沖/斷開時間[秒]
//最小脈沖或最小斷開時間可以在“最小脈沖/斷開時間”參數(shù)上設(shè)置。P_B_TM?在內(nèi)部被限制為大于CYCLE_P。
float????TUN_DLMN?=?20.0?;??//用于過程激勵的可調(diào)節(jié)變量增量
//用于控制器整定的過程激勵來自于TUN_DLMN?上的設(shè)定值階躍變化。
int????PER_MODE?=?0?;??????//外圍設(shè)備模式可以在這個開關(guān)上輸入I/O?模塊的類型。輸
評論
共有 條評論