循环读模拟量入DB块 L #DB_NO ; 局域变量(存储的是块号) T LW 0; 将数据块的块号存放在LW0中! OPN DB [LW 0]; 打开数据块! L #PIW_ADDR; 将模拟通道的起始地址左移三位,以便与寄存器内部寻址的格式相匹配! SLD 3 T LD 4 L #DBD_ADDR; 将数据块内双字地址左移三位,以便与寄存器内部寻址的格式相匹配! SLD 3; 因双字做寄存器间接寻址时,低三位必须为0!
T LD 8 L #CH_LEN; 将通道数量传到累加器1中!
NEXT: T LW 0 L LD 4; 将模拟通道起始地址传数据到累加器1中! LAR1 ; 将累加器1中的内容送到地址寄存器1中! L PIW [AR1,P#0.0]; 将第一次采集的模拟量数据存到LW2中! T LW 2
{ CALL "Read Analog Value 464-2" IN :=LW2 HI_LIM :=5.000000e+002 LO_LIM :=-1.000000e+001 将模拟量转换成工程量 BIPOLAR:=TRUE
RET_VAL:=LW10 OUT :=LD12 }
L LD 8 LAR1 L LD 2 T DBD [AR1,P#0.0]; 将采集到的模拟量存储 在数据块中!(从字地址DBW_Addr)开始 L LD 4 + L#16 T LD 4; 将模拟量的起始地址加16,表示采集下一个模拟通道的数据! L LD 8 + L#32 T LD 8; 数据块字地址加32(因为采集后的模拟量是以32位的数保存在数据块内) L LW 0;
DEC 1; 将通道字节数减一。
JN UMP; 如果通道数未采集结束,则继续循环采集。如果一个循环完毕的话,则重新
L #CH_LEN; 设置起始参数!
L #PIW_ADDR; 将模拟通道的起始地址左移三位,以便与寄存器内部寻址的格式相匹配! SLD 3 T LD 4
UMP:LOOP NEXT PIW_Addr :模拟块通道起始地址 CHI_LEN :要读入的 通道数 DB_NO :存储数据块的块号 DBW_Addr :存储在数据块中的双字地址 |