L L#16
L MW 906
*I
LAR1
L MW [AR1,P#92.0]
T #Order_Sew //各道次压下辊缝给定值
L 7000
>=I
JCB M001
L #Order_Sew
L 3000
<=I
JCB M001
L #Order_Sew //限幅:7000>=x>=3000
M001: T #Order_Sew
ITD
L L#5 //给定值*10(扩大10倍)/2 (计算单边辊缝值)
*D
T #PreSewWidth //单边预设的辊缝目标值,精确至0.01mm
A #Start_Pluse //此信号为上升沿信号,压下系统启动,以下为初始化过程
O M 0.1 //****
JNB M002
L #RWidth //现时刻操作侧(或传动侧)辊缝实际值 // *** //从此行开始至第24行用来判断辊缝给定值是否需要补偿。
L #PreSewWidth //下时刻预设的单边辊缝目标值
-D
T MD 3100 //差值(第一次检查本道次将要走的行程值,但作用并不是用来形成位置闭环,而是判断辊缝给定值是否需要补偿的素材)
L L#0
= #CLY_SewAD //如果pauseD1<0,即差值为负,则为放开状态(辊缝增加) // *** //主要作用不是判断动作状态,而是判断数值的正负//
SET //本行使能
A #CLY_SewAD //此变量主要作用是判断数值符号的正负。检查状态,差值为正(压下状态)则跳转m003,差值为负(放开状态)则数值符号反向,注意与变量Sew_ADD(增加补偿量后)的区别
JNB M003 //压下状态怎么办?当然是跳转M003,即:压下状态时,差值不用取反。 (第一次判断放开与压下状态的区别)
L MD 3100
NEGD //对长整数(32位)求补码(二进制补码指令相当于原码乘以"-1")
T MD 3100 //如果为负则符号反向
M003: L MD 3100
L L#300
<=D
= #CLY_SewOK //如果差值<=300(3mm),说明实际值与目标值相差不大,这时发出辊缝不用补偿的信号(不论是放开状态还是压下状态)
L L#0
T #Repair //差值正常时,补偿值为0
SET //使能
AN #CLY_SewOK //检查RLO,如果差值不用补偿的信号为0则继续执行补偿值计算
JNB M002 //如果有差值不做补偿的信号则跳转M002不再进行补偿计算
L MD 3100
DTR
L 1.000000e+002
/R
T MD 3104 //缩小100倍,也可以理解为规格化为mm
L 1.000000e+001
>R
JNB M015 //检查差值是否大于10mm,如大于10mm则限制为10mm (一般情况下都是大于10mm的),不大于10mm则跳转到M015
T MD 3104 //最大为10mm
JU M017
M015: L MD 3104 //补偿值的计算
T MD 3104
M017: L MD 3104
SQR //计算浮点数(32位)的平方
L 1.000000e+001
/R
T MD 3104 //差值(5 L #DNRepair //L#22,用补偿值*下降时(向内侧压下)的补偿系数22,得出补偿量
DTR
L MD 3104
*R
RND //取整
T #Repair //向内压下时的补偿量
SET //使能
A #CLY_SewAD //检查过程是否为放开过程(此项判断将压下过程与放开过程的补偿量区别开,如果为压下过程则跳转M002,如果为放开过程则向下执行)
JNB M002
L #UPRepair // L#-10,用补偿值*上升时(向两侧放开)的补偿系数。得出补偿量
DTR
L MD 3104
*R
RND //取整
T #Repair //放开状态时的补偿量
M002: L #PreSewWidth //以上为初始化过程,主要作用有两个:检查此过程为放开还是压下,并在此基础上确定补偿量
L #Repair //补偿值
+D
T #PreSewWidth //加入补偿量的单边辊缝预设值
L #RWidth //当前辊逢值
L #PreSewWidth //现时刻的辊缝实际值-本道次开始时的给定值
-D
T #Width_ERR //单边实际值与给定值的偏差量,需注意的是,这不是道次结束时最终产生的偏差,而是一个动态的、由给定向目标变化的正常过程
L L#0
= #Pre_GT_R //现时刻为放开状态,即时判断
A #Sew_ADD // //换道次时判定此次动作过程为增加状态(放开状态)*辊逢加信号(放开)
AN #Pre_GT_R //现时刻不是放开状态
A(
L #Width_ERR //单边实际值与给定植(含补偿量)的偏差量
L #UP_Over_S //抬起(放开)时辊缝门槛值,操作侧为0。传动侧为-5
>=D //当判定此过程为放开时,实际上实际值(当前)应小于给定值(下一道次),则此值为负,正常时都应小于-5
)
JNB M004 //三个条件都会导致跳转,但情况又各不相同。 1、道次初始时为压下状态则跳转。2、即时判断现时刻为放开状态则跳转。3、
L #Min_Spd //最小速度
T #Y_Speed //速度给定,指出了放开状态结尾时(已即时判断出现时刻不再是放开状态)的速度给定
SET
R #Sew_ADD //将放开状态信号取消
M004: SET
A #Sew_ADD //虽然发生了跳转,但不能说明具体原因,因此需要再次判断是不是由于为压下状态引起的跳转,因此需重新判断是否为放开状态
JNB M005 //压下状态跳转到M005
L #Width_ERR //放开状态时正常的速度给定计算过程
L #UP_Over_S
-D
T #Width_ERR //对偏差值进行处理
M005: L #Width_ERR
L L#0
JNB M006 //压下过程是大于0的,跳转M006
L #Width_ERR
L L#-1
*D
T #Width_ERR //取绝对值
M006: NOP 0 //ABS
A #Start_Pluse //辊缝计算开始
JNB M007
A #Pre_GT_R //检查现时刻是否为放开状态
S #Sew_ADD //确认此次换道次动作为放开过程并置位
SET
AN #Sew_ADD
JNB M007 //如果是放开过程则跳转M007
L #Width_ERR //处理后的差值数
L #StabRUNL //刚性系数
-D
L #GotoRUNL //?不太清楚,怀疑为间隙,10分之1的螺距,或者为了给减速留一定的S
-D
DTR //s
L #Acceler //a, 怀疑为2a
*R
T MD 3104
L 0.000000e+000
JNB M008
T MD 3104 //Vt平方一定要大于0
M008: L MD 3104
SQRT //开方,计算出Vt
L 4.028357e+005
*R
L #Vmax
/R
T #Vn //Vn=R*602931.2/vmax,转化为转速
L #Vn
L 1.064960e+004 //速度最大值限幅,8192的1.3倍
>R
JCB M009
L #Vn
L #NminR //速度最小值限幅(转速)
JCB M009
L #Vn //从0开始的加速过程
M009: T #Vn
L #Vmax
*R
L 1.638400e+004
/R
SQR
T MD 3104
L #Vmin
SQR
T MD 3108
L MD 3104
L MD 3108
-R
L 1.209055e+003
/R
L #Acceler
/R
TRUNC
L #GotoRUNL
+D
T #L3
L L#0
JNB M010
T #L3
L 0.000000e+000
T #Vn
M010: L #Vn
TRUNC
T #Y_Speed
M007: NOP 0
A #Start_Pluse
A #Sew_ADD
JNB M011
L #Width_ERR
L #StabRUNL
-D
L #UP_Over_S
+D
L #GotoRUNL
-D
DTR
L #Acceler
*R
T MD 3104
L 0.000000e+000
JNB M012
T MD 3104
M012: L MD 3104
SQRT
L 4.028357e+005
*R
L #Vmax
/R
T #Vn
L #Vn
L 1.064960e+004 // 8.192000e+003;
>R
JCB M013
L #Vn
L #NminR
JCB M013
L #Vn
M013: T #Vn
L #Vmax
*R
L 1.638400e+004
/R
SQR
T MD 3104
L #Vmin
SQR
T MD 3108
L MD 3104
L MD 3108
-R
L 1.209055e+003
/R
L #Acceler
/R
TRUNC
L #GotoRUNL
+D
T #L3
L L#0
JNB M014
T #L3
L 0.000000e+000
T #Vn
M014: L #Vn
L -1.000000e+000
*R
TRUNC
T #Y_Speed
M011: NOP 0
1楼
0
0
回复
L MW 906
*I
LAR1
L MW [AR1,P#92.0]
T #Order_Sew //各道次压下辊缝给定值
L 7000
>=I
JCB M001
L #Order_Sew
L 3000
<=I
JCB M001
L #Order_Sew //限幅:7000>=x>=3000
M001: T #Order_Sew
ITD
L L#5 //给定值*10(扩大10倍)/2 (计算单边辊缝值)
*D
T #PreSewWidth //单边预设的辊缝目标值,精确至0.01mm
A #Start_Pluse //此信号为上升沿信号,压下系统启动,以下为初始化过程
O M 0.1 //****
JNB M002
L #RWidth //现时刻操作侧(或传动侧)辊缝实际值 // *** //从此行开始至第24行用来判断辊缝给定值是否需要补偿。
L #PreSewWidth //下时刻预设的单边辊缝目标值
-D
T MD 3100 //差值(第一次检查本道次将要走的行程值,但作用并不是用来形成位置闭环,而是判断辊缝给定值是否需要补偿的素材)
L L#0
SET //本行使能
A #CLY_SewAD //此变量主要作用是判断数值符号的正负。检查状态,差值为正(压下状态)则跳转m003,差值为负(放开状态)则数值符号反向,注意与变量Sew_ADD(增加补偿量后)的区别
JNB M003 //压下状态怎么办?当然是跳转M003,即:压下状态时,差值不用取反。 (第一次判断放开与压下状态的区别)
L MD 3100
NEGD //对长整数(32位)求补码(二进制补码指令相当于原码乘以"-1")
T MD 3100 //如果为负则符号反向
M003: L MD 3100
L L#300
<=D
= #CLY_SewOK //如果差值<=300(3mm),说明实际值与目标值相差不大,这时发出辊缝不用补偿的信号(不论是放开状态还是压下状态)
L L#0
T #Repair //差值正常时,补偿值为0
SET //使能
AN #CLY_SewOK //检查RLO,如果差值不用补偿的信号为0则继续执行补偿值计算
JNB M002 //如果有差值不做补偿的信号则跳转M002不再进行补偿计算
L MD 3100
DTR
L 1.000000e+002
/R
T MD 3104 //缩小100倍,也可以理解为规格化为mm
L 1.000000e+001
>R
JNB M015 //检查差值是否大于10mm,如大于10mm则限制为10mm (一般情况下都是大于10mm的),不大于10mm则跳转到M015
T MD 3104 //最大为10mm
JU M017
M015: L MD 3104 //补偿值的计算
T MD 3104
M017: L MD 3104
SQR //计算浮点数(32位)的平方
L 1.000000e+001
/R
T MD 3104 //差值(5
DTR
L MD 3104
*R
RND //取整
T #Repair //向内压下时的补偿量
SET //使能
A #CLY_SewAD //检查过程是否为放开过程(此项判断将压下过程与放开过程的补偿量区别开,如果为压下过程则跳转M002,如果为放开过程则向下执行)
JNB M002
L #UPRepair // L#-10,用补偿值*上升时(向两侧放开)的补偿系数。得出补偿量
DTR
L MD 3104
*R
RND //取整
T #Repair //放开状态时的补偿量
M002: L #PreSewWidth //以上为初始化过程,主要作用有两个:检查此过程为放开还是压下,并在此基础上确定补偿量
L #Repair //补偿值
+D
T #PreSewWidth //加入补偿量的单边辊缝预设值
L #RWidth //当前辊逢值
L #PreSewWidth //现时刻的辊缝实际值-本道次开始时的给定值
-D
T #Width_ERR //单边实际值与给定值的偏差量,需注意的是,这不是道次结束时最终产生的偏差,而是一个动态的、由给定向目标变化的正常过程
L L#0
A #Sew_ADD // //换道次时判定此次动作过程为增加状态(放开状态)*辊逢加信号(放开)
AN #Pre_GT_R //现时刻不是放开状态
A(
L #Width_ERR //单边实际值与给定植(含补偿量)的偏差量
L #UP_Over_S //抬起(放开)时辊缝门槛值,操作侧为0。传动侧为-5
>=D //当判定此过程为放开时,实际上实际值(当前)应小于给定值(下一道次),则此值为负,正常时都应小于-5
)
JNB M004 //三个条件都会导致跳转,但情况又各不相同。 1、道次初始时为压下状态则跳转。2、即时判断现时刻为放开状态则跳转。3、
L #Min_Spd //最小速度
T #Y_Speed //速度给定,指出了放开状态结尾时(已即时判断出现时刻不再是放开状态)的速度给定
SET
R #Sew_ADD //将放开状态信号取消
M004: SET
A #Sew_ADD //虽然发生了跳转,但不能说明具体原因,因此需要再次判断是不是由于为压下状态引起的跳转,因此需重新判断是否为放开状态
JNB M005 //压下状态跳转到M005
L #Width_ERR //放开状态时正常的速度给定计算过程
L #UP_Over_S
-D
T #Width_ERR //对偏差值进行处理
M005: L #Width_ERR
L L#0
L #Width_ERR
L L#-1
*D
T #Width_ERR //取绝对值
M006: NOP 0 //ABS
A #Start_Pluse //辊缝计算开始
JNB M007
A #Pre_GT_R //检查现时刻是否为放开状态
S #Sew_ADD //确认此次换道次动作为放开过程并置位
SET
AN #Sew_ADD
JNB M007 //如果是放开过程则跳转M007
L #Width_ERR //处理后的差值数
L #StabRUNL //刚性系数
-D
L #GotoRUNL //?不太清楚,怀疑为间隙,10分之1的螺距,或者为了给减速留一定的S
-D
DTR //s
L #Acceler //a, 怀疑为2a
*R
T MD 3104
L 0.000000e+000
T MD 3104 //Vt平方一定要大于0
M008: L MD 3104
SQRT //开方,计算出Vt
L 4.028357e+005
*R
L #Vmax
/R
T #Vn //Vn=R*602931.2/vmax,转化为转速
L #Vn
L 1.064960e+004 //速度最大值限幅,8192的1.3倍
>R
JCB M009
L #Vn
L #NminR //速度最小值限幅(转速)
L #Vn //从0开始的加速过程
M009: T #Vn
L #Vmax
*R
L 1.638400e+004
/R
SQR
T MD 3104
L #Vmin
SQR
T MD 3108
L MD 3104
L MD 3108
-R
L 1.209055e+003
/R
L #Acceler
/R
TRUNC
L #GotoRUNL
+D
T #L3
L L#0
T #L3
L 0.000000e+000
T #Vn
M010: L #Vn
TRUNC
T #Y_Speed
M007: NOP 0
A #Start_Pluse
A #Sew_ADD
JNB M011
L #Width_ERR
L #StabRUNL
-D
L #UP_Over_S
+D
L #GotoRUNL
-D
DTR
L #Acceler
*R
T MD 3104
L 0.000000e+000
T MD 3104
M012: L MD 3104
SQRT
L 4.028357e+005
*R
L #Vmax
/R
T #Vn
L #Vn
L 1.064960e+004 // 8.192000e+003;
>R
JCB M013
L #Vn
L #NminR
L #Vn
M013: T #Vn
L #Vmax
*R
L 1.638400e+004
/R
SQR
T MD 3104
L #Vmin
SQR
T MD 3108
L MD 3104
L MD 3108
-R
L 1.209055e+003
/R
L #Acceler
/R
TRUNC
L #GotoRUNL
+D
T #L3
L L#0
T #L3
L 0.000000e+000
T #Vn
M014: L #Vn
L -1.000000e+000
*R
TRUNC
T #Y_Speed
M011: NOP 0