PLC论坛-全力打造可编程控制器专业技术论坛

 找回密码
 注册哦

QQ登录

只需一步,快速开始

微信扫码登录

查看: 733|回复: 0

自己编的一个对于数组进行的‘变态’或运算

[复制链接]
发表于 2010-10-26 01:14:00 | 显示全部楼层 |阅读模式
我在一个案例中,用FB创建了很多相似的控制对象(FB1),他们都会输出一个请求信号,暂且叫做req_status[1..n] ,这些状态都要交给另一个FB块(FB2)作为输入信号,控制逻辑是,只要这些对象FB1中有请求,都会触发FB2中的一个动作。 普通的或运算显得有些冗长,于是我就做了个‘变态’的或运算。 这个‘或’可以处理布尔类型的数组。这样1号对象的输出叫做req_status[1], 2号对象叫 req_status[2] ...., 然后我只要把数组的名称送到这个‘变态’或的输入端,就搞定了。 上程序: FUNCTION "Large_OR" : VOID TITLE = VERSION : 0.1 VAR_INPUT sig_Array : POINTER ; max : INT ; DBnumber : WORD ; END_VAR VAR_TEMP T_AR1 : DWORD ; T_AR2 : DWORD ; Cnter : INT ; Has_one : BOOL ; PointerWord0 : WORD ; PointerDWord2 : DWORD ; Db_NO : WORD ; sum_status : BOOL ; END_VAR BEGIN NETWORK TITLE = Save the contents of the address registers AR1 and AR2 TAR1 #T_AR1; TAR2 #T_AR2; SET ; R #Has_one; NETWORK TITLE = L P##sig_Array; LAR1 ; L W [AR1,P#0.0]; T #PointerWord0; L D [AR1,P#2.0]; T #PointerDWord2; L #PointerDWord2; LAR2 ; L #DBnumber; L 0; ==I ; JC N2L2; L #DBnumber; T #Db_NO; OPN DB [#Db_NO]; L #max; N2L1: T #Cnter; A DBX [AR2,P#0.0]; S #Has_one; +AR2 P#0.1; L #Cnter; DEC 1; T #Cnter; L #Cnter; L 0; <=I ; JC End; L #Cnter; JU N2L1; N2L2: L #max; N2L3: T #Cnter; A [AR2,P#0.0]; S #Has_one; +AR2 P#0.1; L #Cnter; DEC 1; T #Cnter; L #Cnter; L 0; <=I ; JC End; L #Cnter; JU N2L3; NETWORK TITLE = Restore the contents of the address registers AR1 and AR2 End: A #Has_one; = #sum_status; SAVE ; LAR1 #T_AR1; LAR2 #T_AR2; END_FUNCTION 新建stl source --- 编译后可见。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册哦

本版积分规则

QQ|小黑屋|手机版|Archiver|PLC技术网-PLC论坛 ( 粤ICP备17165530号 )|网站地图

GMT+8, 2024-9-20 18:01 , Processed in 0.042538 second(s), 24 queries .

快速回复 返回顶部 返回列表