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声明
在全局变量表中声明带有地址映射的全局变量。
操作步骤
- 打开全局变量表编辑器
- 在变量列表中 添加新变量
- 在"地址"列中输入AT地址(如
%IW0,%QX100.0) - 设置变量类型和初始值
界面示例
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变量分配地址映射。
操作步骤
- 打开设备树,选择目标设备
- 进入IO映射配置界面
- 将变量拖放到对应的IO地址位置
- 保存配置