找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
问题
取消精华
首页精华问答
取消推荐
高端用户推荐
申请置评
已申请置评
修改
修改标签
添加标签
官方认证
取消官方认证
修改标签
添加标签
转移分类
删除
{{itemCategory}}
其实这个程序的功能问题已经通过其他方式解决,只需要在块的EN前增加一个关于A[i]的上升沿,然后把B[i]=Ture放到块的ENO后面就能解决了,但是这样写就需要把每个A[i]都单独调用一次FB块。
于是有了上述的程序段,因为这四个数组中的元素是严格一一对应的,所以有以下连锁反应:
在A数组中任一元素产生一个上升沿信号后均会给D数组中对应的元素赋值,同时将边沿数组B中的对应元素置位。
在这里遇到了一个问题就是引脚的定义:
A数组定义为Input,C变量定义为InOut,D数组定义为Output。
唯独这个边沿数组B,在块中即需要作为输入,又需要在每次满足IF条件后修改数值输出,同时由于本身是一个由word变量B转化而来的布尔数组,无法定义为InOut。
如果简单地将B的引脚定义为Output固然块可以运行,但是想请教一下各位大佬们是否有更合理的修改方法?
收藏({{answerDetail.Q_FavoriteCounts}})
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
专家建议
取消最佳答案
修改
个人觉得,B[i] 是作为 A[i] 信号的沿触发结果。那么,在 FB 块程序中把 B[i] 定义为 Static 静态变量的话可能更合适吧(不是 Temp 临时变量)。也就是说,既不是 In 变量,也不是 Out 变量,而是会保持的内部变量。
试试看下面的程序是否可行:
For i := 1 TO 16 DO
IF A[i] THEN
IF NOT B[i] THEN //若 A[i] 变为 TRUE,但上升沿 B[i] 还未置位
C := C + 1;
D[i] := C;
B[i] := TRUE; //给上升沿 B[i] 置位,防止重复处理数据
End_IF;
ELSE
B[i] := FALSE; //若 A[i] 为 FALSE,复位 B[i]
End_IF;
End_For;
等您来回答
换一换
{{item.CoinValue}}西币
{{item.VisitNum}}人想问
本版相关问题
换一换
专家置评
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!

西门子商城
如果说程序代码简洁有效的话,还是 @zhangli0 写得更好!