数据表搜索(16位搜索)
如果触发器EN处于ON状态,则搜索与指定16位区块s2_Start(起始区域)至s3_End(结束区域)中的s1相同的值。
输入
存储搜索值的 16 位区域或等效常量
数据块的起始16位区域
数据块的结束16位区域
执行搜索操作时,搜索结果按以下方式存储:
与s1相同的数据量将传输至sys_iNumberOfFoundMatches。
第一次找到数据的位置,从起始的16位区域开始计算,传输至sys_iPositionOfFirstMatch。
确保s2_Start £ s3_End.
变量s1、s2_Start和s3_End必须为相同的数据类型。
如果使用索引寄存器指定的区域超出限制。
如果s2_Start>s3_End
如果使用索引寄存器指定的区域超出限制。
如果s2_Start>s3_End
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR
start: BOOL:=FALSE;
(*activates the fuction*)
search_value: WORD:=16#20;
(*specifies the value to
search for*)
data_array: ARRAY [0..3] OF WORD:=[16#101,16#2A04,16#20,16#20];
(*2 matches for 16#20
data_array[2] = 1st match*)
number_matches: INT:=0;
position1_match: INT:=0;
END_VAR
当变量start设置为TRUE时,执行此函数。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 3 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_CONTACT,,start,4,2,6,4,);
B(B_VARIN,,search_value,7,3,9,5,);
B(B_VARIN,,data_array[0],7,4,9,6,);
B(B_VARIN,,data_array[3],7,5,9,7,);
B(B_F,F96_SRC,,9,1,16,7,,?DEN?D@'s1'?Ds2?Ds3?AENO);
L(1,3,4,3);
L(6,3,9,3);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_CONTACT,,start,4,1,6,3,);
B(B_F,E_MOVE,,9,0,16,4,,?DEN?Da_Num?AENO?C);
B(B_VARIN,,DT90037,7,2,9,4,);
B(B_VAROUT,,number_matches,16,2,18,4,);
L(1,0,1,6);
L(1,2,4,2);
L(6,2,9,2);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,start,4,1,6,3,);
B(B_F,E_MOVE,,9,0,16,4,,?DEN?Da_Num?AENO?C);
B(B_VARIN,,DT90038,7,2,9,4,);
B(B_VAROUT,,position1_match,16,2,18,4,);
L(1,2,4,2);
L(6,2,9,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F96_SRC( s1:= search_value ,
s2_Start:= data_array[0] ,
s3_End:= data_array[3] );
number_matches:=DT90037;
position_1match:=DT90038;
END_IF;