发布于 2012-02-22 07:48:08
82楼
虽然,一天比较累了,但我还是抑制不住兴奋,真的很高兴有人这么快能给出此帖的正解。
这题的关键之处大家现在可能也知道了,在于如何检测多个新报警位的到来,对于单个新报警位的到达检测我们很容易的想到用上升沿指令,而对于多个报警该如何做?利用字逻辑指令,我们可以一次检测多达16/32位的上升沿,指令如下:
L ALARM_WORD
L ALARM_BUF
XOW
L ALARM_WORD
AW
T ALARM_NEW
判断 ALARM_NEW是否为0,即可知道有无新的报警了。如果我们以字为单位,50次循环判断可以从800条报警位中检测是否有新到报警,如果是双字为单位,可以更快或检测更多条报警信息。为什么建议用字为基本单位呢,1.siemens面板的报警数据接口是以字为单位定义的,我们直接在已有的报警程序上即可添加此功能;2.数据接口字长度有可能是奇数,双字为基本单位会带来程序处理的不方便。
至于,间址寻址等大家处理的方式就很多了,这里不再累述。
点评给出答案的三位:冬日,火麒麟,liucs_2009
冬日最早给出包含上述指令的答案,火麒麟的答案是根据冬日的答案的改进,liucs_2009的答案比冬日晚了6个多小时,而且辅助的寻址程序不可用。 不知道,三位匆忙中做的程序是否有过测试,我粗看一下都有问题,但瑕不掩瑜,冬日是最佳答案的提供者,我会按我所说为冬日申请下一季本版唯一的版区标兵。
我也给出我的程序,尽量的规范,经过测试,请大家指正!
谢谢大家的积极参与,我想此帖可以告一段落,不知楼主是否满意?
Zane
注册自动化系统工程师
Always save before download