恭喜,你发布的帖子
发布于 2019-06-12 19:33:25
12楼
用更加直观的方法说明问题,假设程序简化模型如下。
//定义:ex bool;
//定义:blastex bool;
//定义:btrig bool;
ex := 1;//这是中断程序第1行
//带ex接口的电机块,其内部一定含有上升沿检测程序(否则功能块无法感知上升沿),假设其内部上升沿检测如下:
//电机功能块简化模型------开始
btrig := ex and (not blastex);//上升沿检测,这是电机定位块的一部分
blastex := ex;//上次输入记忆,这是电机定位块的一部分,方便下次上升沿检测
if btrig then
//执行相关定位动作
end_if;
//电机功能块简化模型------结束
ex := 0;//这是中断程序最后行
//楼主源程序到此结束--------------
//修改,清零后再次执行一次功能块,让其内部的blastex也被清零,而此动作由于不会产生上升沿,对原程序动作不会有任何副作用
//电机功能块简化模型------开始
btrig := ex and (not blastex);//上升沿检测,这是电机定位块的一部分
blastex := ex;//上次输入记忆,这是电机定位块的一部分,方便下次上升沿检测
if btrig then
//执行相关定位动作
end_if;
//电机功能块简化模型------结束
说明:
程序执行由于blastex在上电时被清零,此程序段首个上升沿检测显然正确。从第2个上升沿开始,由于ex清零已经是最后一行,功能块没有再次扫描,所以blastex一直保持为1。所以以后的上升沿都无法检测了。跟多长时间的中断一点关系都没有。
请填写推广理由:
分享
只看
楼主