Skip to content

2.4 数据类型与寻址方式

本节将介绍PLC中的数据类型和寻址方法

学习目标

  • 掌握PLC常用数据类型
  • 理解不同的寻址方式
  • 能够正确使用地址进行编程

1. 基本数据类型

1.1 IEC 61131-3标准数据类型

PLC标准数据类型体系:

┌─────────────────────────────────────────────────────┐
│                  IEC 61131-3 数据类型               │
├─────────────────────────────────────────────────────┤
│  ┌─────────────────────────────────────────────┐   │
│  │           基本数据类型                       │   │
│  ├─────────────────────────────────────────────┤   │
│  │  位类型:BOOL, BYTE, WORD, DWORD, LWORD     │   │
│  │  整数型:SINT, INT, DINT, LINT              │   │
│  │  无符号:USINT, UINT, UDINT, ULINT          │   │
│  │  实数型:REAL, LREAL                        │   │
│  │  时间型:TIME, DATE, TOD, DT                │   │
│  │  字符串:STRING, WSTRING                    │   │
│  └─────────────────────────────────────────────┘   │
│  ┌─────────────────────────────────────────────┐   │
│  │           派生数据类型                       │   │
│  ├─────────────────────────────────────────────┤   │
│  │  数组:ARRAY                                │   │
│  │  结构:STRUCT                               │   │
│  │  枚举:ENUM                                 │   │
│  └─────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────┘

1.2 位数据类型

类型位数范围说明
BOOL10, 1布尔量,真/假
BYTE80-255字节
WORD160-65535
DWORD320-4294967295双字
LWORD640-2^64-1长字
位数据类型的关系:

LWORD (64位)
├── DWORD (32位)     DWORD (32位)
│   ├── WORD (16位)  WORD (16位)  WORD (16位)  WORD (16位)
│   │   ├── BYTE     BYTE         BYTE         BYTE...
│   │   │   └── 8个BOOL

1.3 整数数据类型

类型位数范围说明
SINT8-128 ~ 127短整型(有符号)
INT16-32768 ~ 32767整型(有符号)
DINT32-2^31 ~ 2^31-1双整型(有符号)
LINT64-2^63 ~ 2^63-1长整型(有符号)
USINT80 ~ 255无符号短整型
UINT160 ~ 65535无符号整型
UDINT320 ~ 4294967295无符号双整型
ULINT640 ~ 2^64-1无符号长整型

1.4 实数数据类型

类型位数精度范围
REAL32约7位有效数字±3.4×10^38
LREAL64约15位有效数字±1.7×10^308
REAL数据在内存中的存储(IEEE 754格式):

  符号位   指数部分(8位)     尾数部分(23位)
    │     ┌───────────┐   ┌─────────────────────────┐
    ▼     │           │   │                         │
   ┌─┬────┴───────────┴───┴─────────────────────────┐
   │S│   Exponent    │          Mantissa            │
   └─┴────────────────────────────────────────────────┘
   31 30           23 22                            0

示例:3.14 的存储 = 0x4048F5C3

1.5 时间数据类型

类型说明示例
TIME时间间隔T#5s, T#100ms, T#1h30m
DATE日期D#2025-12-01
TOD时刻(一天中的时间)TOD#14:30:00
DT日期和时间DT#2025-12-01-14:30:00

2. 位地址与字节地址

2.1 地址结构

西门子S7系列地址结构:

    区域标识 + 字节地址 + 位地址
    
    例如:I0.5
    │     │ │
    │     │ └── 位地址(0-7)
    │     └──── 字节地址(0, 1, 2...)
    └────────── 区域标识(I=输入)

地址层次:
          字节0                字节1
    ┌─┬─┬─┬─┬─┬─┬─┬─┐    ┌─┬─┬─┬─┬─┬─┬─┬─┐
    │7│6│5│4│3│2│1│0│    │7│6│5│4│3│2│1│0│
    └─┴─┴─┴─┴─┴─┴─┴─┘    └─┴─┴─┴─┴─┴─┴─┴─┘
     │           │        │           │
    I0.7       I0.0     I1.7       I1.0

2.2 不同数据宽度的地址表示

西门子S7地址表示方法:

【位地址】1位
I0.0      输入字节0的第0位
Q1.5      输出字节1的第5位
M10.3     标志位字节10的第3位

【字节地址】8位
IB0       输入字节0(包含I0.0~I0.7)
QB2       输出字节2
MB100     标志位字节100

【字地址】16位
IW0       输入字0(包含IB0和IB1)
QW4       输出字4
MW200     标志位字200

【双字地址】32位
ID0       输入双字0(包含IB0~IB3)
QD8       输出双字8
MD300     标志位双字300

2.3 地址重叠

地址重叠示意图:

         字节0    字节1    字节2    字节3
        ┌───────┬───────┬───────┬───────┐
        │  MB0  │  MB1  │  MB2  │  MB3  │
        └───────┴───────┴───────┴───────┘
        ├───────────────┼───────────────┤
        │      MW0      │      MW2      │
        └───────────────┴───────────────┘
        ├───────────────────────────────┤
        │             MD0               │
        └───────────────────────────────┘

注意:
- MW0 包含 MB0 和 MB1
- MD0 包含 MB0, MB1, MB2, MB3
- 修改 MW0 会影响 MB0 和 MB1 的值

3. 输入地址(I)

3.1 概述

输入地址用于访问PLC的物理输入端子状态,对应输入映像寄存器。

输入地址分配示意:

         PLC输入端子              输入地址
        ┌─────────┐
按钮SB1─┤ I0.0    │─────────────▶ I0.0
按钮SB2─┤ I0.1    │─────────────▶ I0.1
传感器S1┤ I0.2    │─────────────▶ I0.2
传感器S2┤ I0.3    │─────────────▶ I0.3
   ...  │ ...     │
        └─────────┘

程序中使用:
    I0.0                 
────┤├──────────────────( Q0.0 )──

3.2 各品牌输入地址表示

品牌位地址字节地址字地址
西门子I0.0IB0IW0
三菱X0-X0-XF(16点)
欧姆龙0.00-CIO 0
ABI:0/0I:0.0-

4. 输出地址(Q)

4.1 概述

输出地址用于控制PLC的物理输出端子,对应输出映像寄存器。

输出地址分配示意:

         PLC输出端子              输出地址
        ┌─────────┐
电机M1──┤ Q0.0    │◀───────────── Q0.0
指示灯L1┤ Q0.1    │◀───────────── Q0.1
电磁阀V1┤ Q0.2    │◀───────────── Q0.2
报警器A1┤ Q0.3    │◀───────────── Q0.3
   ...  │ ...     │
        └─────────┘

程序中使用:
    I0.0                 
────┤├──────────────────( Q0.0 )──
                          电机输出

4.2 各品牌输出地址表示

品牌位地址字节地址字地址
西门子Q0.0QB0QW0
三菱Y0-Y0-YF(16点)
欧姆龙100.00-CIO 100
ABO:0/0O:0.0-

5. 内部标志位(M)

5.1 概述

内部标志位(M)是PLC内部的存储区域,用于存储中间计算结果,不直接对应物理I/O。

内部标志位的作用:

┌──────────────────────────────────────────────────────┐
│  M区(标志位存储区)                                 │
├──────────────────────────────────────────────────────┤
│  ● 存储中间运算结果                                 │
│  ● 作为程序内部的"虚拟继电器"                       │
│  ● 实现复杂逻辑的分解                               │
│  ● 程序模块之间的信息传递                           │
│  ● 状态标志、模式选择等                             │
└──────────────────────────────────────────────────────┘

5.2 使用示例

使用内部标志位简化复杂逻辑:

控制要求:当条件A和B满足,或条件C和D满足时,输出Y

不使用M(逻辑复杂):
    I0.0   I0.1
────┤├────┤├────┬──────────────( Q0.0 )──

    I0.2   I0.3 │
────┤├────┤├────┘

使用M(逻辑清晰):
网络1:条件1 = A AND B
    I0.0   I0.1
────┤├────┤├──────────────────( M0.0 )──

网络2:条件2 = C AND D
    I0.2   I0.3
────┤├────┤├──────────────────( M0.1 )──

网络3:输出 = 条件1 OR 条件2
    M0.0
────┤├────┬──────────────────( Q0.0 )──

    M0.1  │
────┤├────┘

5.3 各品牌内部标志位表示

品牌位地址字地址说明
西门子M0.0MW0标志位
三菱M0D0(数据)辅助继电器
欧姆龙W0.00W0工作区
ABB3:0/0B3:0位文件

6. 数据块寻址(DB)

6.1 概述(西门子特有)

数据块(DB)是西门子PLC特有的数据存储区域,用于有组织地存储数据

数据块结构:

┌─────────────────────────────────────────────────────┐
│                    DB1(电机数据块)                │
├─────────────────────────────────────────────────────┤
│  偏移地址    数据类型    变量名          值        │
├─────────────────────────────────────────────────────┤
│    0.0      BOOL       Motor_Run       TRUE       │
│    0.1      BOOL       Motor_Error     FALSE      │
│    2.0      INT        Motor_Speed     1500       │
│    4.0      REAL       Motor_Current   12.5       │
│    8.0      STRING     Motor_Name      "M001"     │
└─────────────────────────────────────────────────────┘

访问方式:
DB1.DBX0.0    访问Motor_Run(位)
DB1.DBW2      访问Motor_Speed(字)
DB1.DBD4      访问Motor_Current(双字/实数)
"DB1".Motor_Run   符号访问(推荐)

6.2 数据块类型

类型说明用途
全局DB可被所有程序访问存储全局数据
背景DB与FB关联存储FB实例数据
优化DBS7-1500特有符号访问,效率高

6.3 DB寻址方式

DB寻址方式:

【绝对寻址】
DB1.DBX0.0    数据块1,字节0,位0(BOOL)
DB1.DBB4      数据块1,字节4(BYTE)
DB1.DBW10     数据块1,字10(WORD/INT)
DB1.DBD20     数据块1,双字20(DWORD/DINT/REAL)

【符号寻址】(推荐)
"Motor_Data".Run
"Motor_Data".Speed
"Motor_Data".Current

【指针寻址】(高级)
P#DB1.DBX0.0    指向DB1.DBX0.0的指针

7. 特殊存储区

7.1 定时器(T)和计数器(C)

定时器和计数器地址:

【西门子】
T1      定时器1
C1      计数器1

【三菱】
T0      定时器0(100ms)
T200    定时器200(10ms)
C0      计数器0

【访问内容】
定时器当前值、定时器状态位
计数器当前值、计数器状态位

7.2 系统存储区

西门子系统存储区:

┌────────────────────────────────────────────────────┐
│  系统存储区                                        │
├────────────────────────────────────────────────────┤
│  ● 时钟存储器(M区特殊位)                         │
│    M0.0 - 10Hz脉冲                                │
│    M0.1 - 5Hz脉冲                                 │
│    ...                                            │
│                                                    │
│  ● 首次扫描标志                                   │
│    用于初始化程序                                 │
│                                                    │
│  ● 诊断数据                                       │
│    故障信息、状态信息                             │
└────────────────────────────────────────────────────┘

8. 寻址方式总结

8.1 西门子S7地址一览表

区域字节双字说明
输入I0.0IB0IW0ID0物理输入
输出Q0.0QB0QW0QD0物理输出
标志M0.0MB0MW0MD0内部存储
数据块DBX0.0DBB0DBW0DBD0数据存储
定时器T0---定时器
计数器C0---计数器

8.2 三菱FX地址一览表

区域地址范围说明
输入X0-X377八进制编号
输出Y0-Y377八进制编号
辅助继电器M0-M7679内部继电器
状态继电器S0-S999步进状态
定时器T0-T255定时器
计数器C0-C255计数器
数据寄存器D0-D799916位数据

8.3 寻址注意事项

寻址注意事项:

┌────────────────────────────────────────────────────┐
│ 1. 注意地址重叠                                    │
│    MW0 和 MB0、MB1 是重叠的                        │
│    修改一个会影响另一个                            │
├────────────────────────────────────────────────────┤
│ 2. 数据类型匹配                                    │
│    确保变量类型与地址宽度一致                      │
│    INT用字地址,REAL用双字地址                     │
├────────────────────────────────────────────────────┤
│ 3. 推荐使用符号寻址                                │
│    比绝对地址更易读、易维护                        │
│    如:Motor_Start 比 I0.0 更清晰                  │
├────────────────────────────────────────────────────┤
│ 4. 做好地址规划                                    │
│    项目开始前规划好各区域的使用                    │
│    避免地址冲突                                    │
└────────────────────────────────────────────────────┘

本节小结

数据类型与寻址要点:

┌────────────────────────────────────────────────────┐
│  数据类型                                          │
│  ─────────                                         │
│  · BOOL(1位) → BYTE(8位) → WORD(16位) → DWORD(32位)│
│  · INT(整型)、REAL(实数)、TIME(时间)等             │
├────────────────────────────────────────────────────┤
│  地址区域                                          │
│  ─────────                                         │
│  · I:输入地址(物理输入)                         │
│  · Q:输出地址(物理输出)                         │
│  · M:内部标志位(中间变量)                       │
│  · DB:数据块(结构化数据存储)                    │
├────────────────────────────────────────────────────┤
│  地址格式(西门子)                                │
│  ─────────────────                                 │
│  · 位:I0.0、Q0.0、M0.0                           │
│  · 字节:IB0、QB0、MB0                            │
│  · 字:IW0、QW0、MW0                              │
│  · 双字:ID0、QD0、MD0                            │
└────────────────────────────────────────────────────┘

练习题

  1. 解释IW0包含哪些位地址?
  2. 如果要存储一个温度值(带小数),应该使用什么数据类型和多大的地址空间?
  3. 设计一个数据块结构,用于存储一台电机的信息(运行状态、故障状态、转速、电流)。

← 上一节:2.3 基本逻辑指令 | 下一节:2.5 编程软件的使用 →

本教程由 AI (Claude Opus 4.5) 生成,仅供学习参考