发布于 2011-09-16 17:20:04
1楼
首先,你的这段程序应该是德国工程师编写的速度控制程序。
当然此处要求的速度调节是按照一定的梯度变化的,之所以没有出现如楼主所说的825,实际上已经在程序中用速度的递增量来体现。当然,楼主贴出来的仅仅是一个FC,最好的将它的接口参数,以及在OB中的调用情况引出来最好。
L 15 // [%/step]
T #step_width
L 25 // [%]
T #min_speed
L 100 // [%]
T #max_speed
L 20000 // [ms/3000rpm] 20s from stop to 3000 rpm
T #ramp
A "M_1" //调速标志位
= L 18.0
A(
A L 18.0
= #increase_speed
A #increase_speed
A "+I_020_A1_S2:24" //增速标志位
JNB _001
L "DB_Dynamisch".Pos_020_speed
L #step_width
+I
T "DB_Dynamisch".Pos_020_speed
AN OV
SAVE
CLR
_001: A BR //OV=0时,BR=1
)
A(
L "DB_Dynamisch".Pos_020_speed
L #max_speed
>I
)
JNB _002 //增速(没有溢出)并速度大于最大值时,将最大值输出
L #max_speed
T "DB_Dynamisch".Pos_020_speed
_002: NOP 0
A(
A L 18.0
= #lower_speed
A #lower_speed
A "+I_020_A1_S2:14" //降速标志位
JNB _003
L "DB_Dynamisch".Pos_020_speed
L #step_width
-I
T "DB_Dynamisch".Pos_020_speed
AN OV
SAVE
CLR
_003: A BR
)
A(
L "DB_Dynamisch".Pos_020_speed
L #min_speed
<I
)
JNB _004
L #min_speed
T "DB_Dynamisch".Pos_020_speed
_004: NOP 0
L DW#16#0
T "PQW_020_A1_CTRL1"
// inhibit PWM of drive
AN #start
= "Q_020_A1_INHIBIT"
// start/ stop drive
A #start
= "Q_020_A1_/FAST_STOP"
= "Q_020_A1_/STOP"
A "M_AREA2_FLT_ACK"
= "Q_020_A1_RESET"
//**********一下部分为调速程序,需要结合该FC的调用环境理解
L W#16#7FFF // digits 100% Sollwertvorgabe
ITD
DTR
L 6554 // Drehzahlvorgabe [1/min] bei 7fffh=32767 digits
ITD
DTR
/R
L 5500 // Max.Drehzahl Antrieb [1/min]
ITD
DTR
*R
L 1.000000e+002 // 100%
/R
T #digits_per_percent // [digits/%] Drehzahlsollwert
L "DB_Dynamisch".Pos_020_speed // [%]
ITD
DTR
L #digits_per_percent // : 100%
*R
RND
T "PQW_020_A1_SPEED"
L #ramp
T "PQW_020_A1_RAMP"
No discussion, no outcome.