这次在SCL中有个小程序用到AT指令,程序如下:
FUNCTION FC2 : VOID //把流量计临时数据转换成实际数值
VAR_INPUT
Data_IN1:DWORD;
IN1_Tmp AT Data_IN1:ARRAY[0..1] OF WORD;
Data_IN2:DWORD;
IN2_Tmp AT Data_IN2:ARRAY[0..1] OF WORD;
END_VAR
VAR_OUTPUT
Data_Out:REAL;
END_VAR
VAR_TEMP
// Temporary Variables
Tmp1:REAL;
Tmp2:REAL;
Tmp3:REAL;
END_VAR
Tmp1:=DWORD_TO_REAL(Data_IN1)*16*16*16*16;
Tmp2:=Tmp1 + DINT_TO_REAL(WORD_TO_DINT(IN2_Tmp[0]))*1;//前六个字节转换为整数部分
Tmp3:=DINT_TO_REAL(WORD_TO_DINT(IN2_Tmp[1]))/(16*16*16*16);//后两个字节转换为小数部分
Data_Out:= Tmp2 + Tmp3;
END_FUNCTION
编译后显示:IN1_Tmp AT Data_IN1:ARRAY[0..1] OF WORD;
IN2_Tmp AT Data_IN2:ARRAY[0..1] OF WORD;
定义了无效的数据类型,但我查了资料可以这样用的。