quote:以下是引用Zane在2012-07-22 16:46:30的发言:quote:以下是引用godkonws在2012-07-22 10:51:28的发言:
Zane斑竹的程序中 输入管脚:Alarm 的格式要怎么写?我总是写不对,p#db7.dbx0.0 BYTE 20???
麻烦高手指导下,谢谢了
1,程序比较简单的话,可以直接利用ALARM做OP的报警位,外部程序访问背景数据块的alarm绝对地址即可,按全局数据访问,调用信号处理块时,不用填ALARM输入,留空即可。
2. 如果另外有报警位数据区,首先确认报警数据区的数据定义格式与ALARM定义的相同,数据块取好符号名,以"数据块符号名"."报警数据区符号名"的形式填入
3. 用SFC20强行拷贝,可能对于有些已经做好的老程序有用,当数据区格式长短不一致的时候,当然拷贝应在调用信号处理块之前,调用时亦不用填ALARM输入,留空即可
4. 改变程序块ALARM和ALARM_BUF的数据结构的定义,使之符合原报警数据区的数据格式定义。
谢谢Zane斑竹的解答,我有点不太明白,关于第一点, ALARM输入留空,那报警内容的数据源从哪里来呢?
我的做法类似第二种,我的项目比较小,一共就60几个报警位,在单独一个全局数据块(DB7)中按bool定义的(对应具体故障),预留100个字的长度作备用,然后在该数据块中接着定义一个数组----8个字,再用SFC20拷贝上面的BOOL位(8个字),到这个数组中,再用这个数组作Alarm的实参。方法可能比较笨,呵呵。
关于第三点,SFC20是拷贝全局数据块(比如我上面的DB7数据块),到Alarm FB块的背景数据块中吗?
第4点,如果Alarm管脚要输入内容,一般的项目都用不到128个字,如果不改短,程序做的无用功太多(循环次数太多),效率就低了。