跳到主要内容

AT声明

什么是AT声明

AT声明是IEC 61131-3标准中用于将变量直接映射到PLC特定内存地址的声明方式。通过AT声明,可以将程序变量或全局变量与控制器的输入(I)、输出(Q)或内存(M)地址关联起来。

AT声明的用途

  • 直接访问硬件IO:将变量映射到物理输入/输出端子
  • 内存地址映射:访问特定的内存区域
  • 高效数据访问:绕过中间层直接读写硬件地址
  • 兼容性:与传统PLC编程方式兼容

地址格式说明

基本格式

变量名 AT %区域类型地址: 数据类型;

区域类型

区域类型说明示例
I输入区域(Input)%IW0, %IX0.0
Q输出区域(Output)%QW10, %QX100.1
M内存区域(Memory)%MW20, %MX100.5

数据大小标识

标识说明字节数
X位(Bit)1位
B字节(Byte)1字节
W字(Word)2字节
D双字(DWord)4字节
L长字(LWord)8字节

地址示例

地址说明
%IX0.0输入位0.0
%IW10输入字,起始地址10
%QX100.3输出位100.3
%QW20输出字,起始地址20
%MX50.2内存位50.2
%MD100内存双字,起始地址100

在程序变量中使用AT声明

在ST程序文件中声明带有地址映射的变量。

基本示例

PROGRAM DEMO_PLC_PRG1
VAR
(* 数组变量映射到输出字地址 *)
items AT %QW10: ARRAY[1..9] OF INT; (* 输出字地址QW10开始,9个INT *)
itemsIn AT %IW10: ARRAY[1..9] OF INT; (* 输入字地址IW10开始,9个INT *)

(* 不同数据类型的数组 *)
itemsSINT AT %QW40: ARRAY[1..3] OF SINT; (* 输出字节地址QB40开始 *)
itemsREAL AT %QW50: ARRAY[1..3] OF REAL; (* 输出字地址QW50开始 *)
itemsDINT AT %QW60: ARRAY[1..3] OF DINT; (* 输出双字地址QD60开始 *)

(* 布尔变量映射到位地址 *)
bOut AT %QX100.1: BOOL; (* 输出位100.1 *)
bOut3 AT %QX100.3: BOOL; (* 输出位100.3 *)
bOut2 AT %MX100.1: BOOL; (* 内存位100.1 *)
bIn3 AT %IX100.3: BOOL; (* 输入位100.3 *)
END_VAR

(* 使用映射变量 *)
bOut := TRUE; (* 设置输出位QX100.1为TRUE *)
items[1] := 123; (* 写入输出字地址QW10 *)
END_PROGRAM

更多示例

PROGRAM ATDeclarationDemo
VAR
(* 输入变量 *)
i_button1 AT %IX0.0: BOOL; (* 按钮1输入 *)
i_button2 AT %IX0.1: BOOL; (* 按钮2输入 *)
i_sensor AT %IW2: INT; (* 模拟量传感器输入 *)

(* 输出变量 *)
o_led1 AT %QX0.0: BOOL; (* LED1输出 *)
o_led2 AT %QX0.1: BOOL; (* LED2输出 *)
o_motorSpeed AT %QW4: WORD; (* 电机速度输出 *)

(* 内存变量 *)
m_counter AT %MW10: WORD; (* 计数器 *)
m_status AT %MX20.0: BOOL; (* 状态标志 *)
END_VAR
END_PROGRAM

在全局变量中使用AT声明

在全局变量表中声明带有地址映射的全局变量。

操作步骤

  1. 打开全局变量表编辑器
  2. 在变量列表中添加新变量
  3. 在"地址"列中输入AT地址(如 %IW0, %QX100.0
  4. 设置变量类型和初始值

界面示例

全局变量AT声明

ST文件中的全局AT声明

CONFIGURATION config_0
VAR_GLOBAL
(* 全局AT声明 *)
g_inputData AT %IW0: INT;
g_outputData AT %QW0: INT;
g_statusFlag AT %MX10.0: BOOL;
END_VAR

RESOURCE resource_0 ON PLC
TASK task_0(INTERVAL := T#10ms, PRIORITY := 1);
PROGRAM program_0 WITH task_0;
END_RESOURCE
END_CONFIGURATION

IO变量的AT声明

通过设备配置界面为IO变量分配地址映射。

操作步骤

  1. 打开设备树,选择目标设备
  2. 进入IO映射配置界面
  3. 将变量拖放到对应的IO地址位置
  4. 保存配置

界面示例

IO变量AT声明

注意事项

注意
  1. 地址冲突:确保同一个地址不会被多个变量映射
  2. 数据类型匹配:变量的数据类型必须与地址区域兼容
  3. 布尔变量分配:未指定位地址的布尔变量按字节分配,会占用8个位
  4. 输入变量只读:映射到输入区域(I)的变量通常为只读
  5. 不能用于IO变量:AT声明只能用于局部变量和全局变量,不能用于块的输入输出参数
  6. 内存布局:结构类型的内存布局取决于目标系统
提示
  • 明确指定位地址(如 %QX100.1)可以精确控制变量位置
  • 使用有意义的变量名,便于维护
  • 在大型项目中建议集中管理地址映射
  • 定期检查地址分配,避免冲突

完整示例

PROGRAM ATDeclarationComplete
VAR
(* 数字输入 *)
i_startButton AT %IX0.0: BOOL; (* 启动按钮 *)
i_stopButton AT %IX0.1: BOOL; (* 停止按钮 *)
i_emergency AT %IX0.2: BOOL; (* 急停按钮 *)

(* 数字输出 *)
o_runLight AT %QX0.0: BOOL; (* 运行指示灯 *)
o_errorLight AT %QX0.1: BOOL; (* 故障指示灯 *)
o_motorEnable AT %QX0.2: BOOL; (* 电机使能 *)

(* 模拟量输入 *)
i_temperature AT %IW2: INT; (* 温度传感器 *)
i_pressure AT %IW4: INT; (* 压力传感器 *)

(* 模拟量输出 *)
o_speed AT %QW2: WORD; (* 速度设定 *)
o_position AT %QW4: WORD; (* 位置设定 *)

(* 内存变量 *)
m_runCounter AT %MW10: WORD; (* 运行计数器 *)
m_errorCode AT %MW12: WORD; (* 错误代码 *)
m_systemReady AT %MX20.0: BOOL; (* 系统就绪标志 *)
END_VAR

(* 程序逻辑 *)
IF i_emergency THEN
o_motorEnable := FALSE;
o_errorLight := TRUE;
m_errorCode := 1;
ELSEIF i_startButton THEN
o_runLight := TRUE;
o_motorEnable := TRUE;
m_runCounter := m_runCounter + 1;
ELSEIF i_stopButton THEN
o_runLight := FALSE;
o_motorEnable := FALSE;
END_IF
END_PROGRAM

通过以上内容,您可以在WasomeCodeX_AI中灵活地使用AT声明将变量映射到PLC的输入/输出地址或内存地址。