PLC数据类型与进制转换入门:从INT到REAL一次讲清
2026/9/1 18:38:27 网站建设 项目流程

PLC 编程入门最常见的一道坎,不是梯形图怎么写,而是数据类型搞不清楚。很多新手写程序时遇到INTDINTREALWORD混用的报错,或者上位机读到的数值和触摸屏对不上,本质都是数据类型和进制转换没吃透。

本文从 PLC 数据类型的底层存储讲起,把 BOOL、BYTE、WORD、DINT、REAL 这些常见类型一次说清,然后配合进制转换实操,带你完成二进制、十进制、十六进制、BCD 码的转换练习,最后再讲数据类型转换指令和排错方法。内容以西门子、三菱、汇川 PLC 为主,兼顾 Modbus 通信场景,适合刚入门的电气工程师、PLC 编程初学者和准备做自动化项目毕设的同学收藏。


1. 核心内容速览

本文虽然是一篇教程,但先给你一个信息速览表,方便判断哪些内容对你有用。

内容项说明
核心主题PLC 数据类型分类、取值范围、存储长度与进制转换实操
涉及品牌西门子 S7-200 SMART / S7-1200、三菱 FX 系列、汇川 H5U / EASY 系列
数据类型BOOL、BYTE、WORD、DWORD、INT、DINT、REAL、STRING、TIME 等
进制范围二进制、八进制、十进制、十六进制、BCD 码
转换指令西门子I_BIBI_II_DIDI_R、三菱MOV、汇川DINT_TO_REAL
实操工具博途 TIA Portal、GX Works3 / GX Developer、汇川 InoProShop、Windows 计算器
适合读者PLC 入门、自动化专业学生、电气工程师、Modbus 调试人员

结论先放前面:数据类型决定了你程序中每个变量的长度和范围,进制转换决定了你能否读懂设备里存的原始码值。两件事都通了,后面学 PID、伺服控制、Modbus 通信都会顺很多。


2. PLC 数据类型到底是什么

2.1 为什么数据类型会决定程序成败

PLC 程序运行的本质,是 CPU 对存储区中的数据进行读写和运算。你写M0.0M10.3这种位地址时,操作的是 1 位;写MW100时,操作的是 2 个字节 16 位;写MD104时,操作的是 4 个字节 32 位。

如果数据类型不匹配,会出现几种典型的程序故障:

  • 把一个WORD类型变量直接传给一个INT类型变量,编译器报错或者数值被解释成完全不同的数。
  • 上位机写入一个 16 位无符号数 65535,PLC 端用INT接收,变成 -1。
  • 触摸屏上显示的温度值翻了好几倍,因为浮点数寄存器被当成了整数读取。
  • 伺服电机的运行速度异常,因为目标速度值在REALDINT之间转换时丢精度。

所以,理解数据类型不是理论问题,而是直接影响设备动作的实际问题。

2.2 PLC 数据的最小存储单位

先明确几个基础概念:

单位位数说明
bit(位)10 或 1,最小存储单位
nibble(半字节)416 种状态
byte(字节)8可表示 0~255 或 -128~127
word(字)162 字节
dword(双字)324 字节

西门子 PLC 的存储区中,MB表示字节,MW表示字,MD表示双字。三菱和汇川惯用D寄存器表示 16 位数据,用两个连续的D寄存器组成 32 位数据。

在程序里,数据类型就是把"这一段存储区代表什么"这件事显式定下来。比如同样占用 2 字节的数据,INT把它当作有符号整数,WORD把它当作无符号 16 位二进制数,SINT只占 1 字节。


3. PLC 基本数据类型详解

3.1 BOOL:布尔型

  • 长度:1 位。
  • 取值范围:TRUE / FALSE。
  • 在西门子中体现为触点、线圈和MIQ区域的位。
  • 在梯形图中通常直接使用位地址,不需要额外声明变量,但在 ST 语言或 HMI 脚本中需要设为 BOOL。

示例:

VAR bStart : BOOL; bStop : BOOL; END_VAR bStart := TRUE; bStop := FALSE;

3.2 整型数据家族

整型是 PLC 程序中最常用的一类数据,主要区别在于位数和有无符号。

类型位数有无符号取值范围西门子对应
SINT8有符号-128 ~ 127BYTE 的部分使用场景
USINT8无符号0 ~ 255无直接地址对应
INT16有符号-32768 ~ 32767MW / DBW
UINT16无符号0 ~ 65535MW / DBW
DINT32有符号-2147483648 ~ 2147483647MD / DBD
UDINT32无符号0 ~ 4294967295无直接地址对应
LINT64有符号很大,工艺中少见需要 DB 变量

实际使用中,INT最容易踩坑。例如 Modbus 保持寄存器默认是 16 位,如果从站的寄存器值是十六进制FFFF,按无符号理解是 65535,按有符号理解是 -1。通信协议里没有明确说明时,读写双方必须约定同一套解释方式。

示例,西门子博途中的变量声明:

VAR iCounter : INT; dwResult : DINT; uiRegVal : UINT; END_VAR

三菱 GX Works 中,D0默认就是 16 位,如果需要 32 位,要用D0D1组合,适用DD0指令时表示双字。

3.3 实数 REAL:浮点数

  • 长度:32 位。
  • 采用 IEEE 754 标准表示。
  • 适合温度、压力、速度等连续量。
  • 取值范围大约为 ±3.4028235E+38,有效精度约为 7 位十进制数字。

REAL 型数据在通信和触摸屏显示时很常用,但要注意:

  • 浮点数不能直接和INT做比较运算,必须先转换。
  • 浮点数存储格式特殊,直接用十六进制查看工具读取时,看到的是 4 字节的十六进制序列,只有 PLC 和上位机都按浮点解析才能还原原始值。
  • 在博途和汇川 InoProShop 中,LREAL(64 位)同样存在,但多数工艺场景用REAL足够。

示例:

VAR rTemp : REAL; rSpeed : REAL; END_VAR rTemp := 36.5; rSpeed := 1500.0;

3.4 其他常用数据类型

STRING:字符串
  • 用于存储人机界面显示文本、报警信息、文件名等。
  • 西门子 S7-1200 的STRING默认长度 254 字节。
  • 三菱和汇川的字符串处理能力相对弱一些,更多靠 HMI 处理。
TIME / TON 定时器相关时间类型
  • 长度 32 位。
  • 以毫秒(ms)为基本单位。
  • 通常与定时器指令联用。
VAR tDelay : TIME := T#5s; END_VAR

3.5 数据长度速查表

类型位数字节数说明
BOOL10.125(位寻址)布尔量
BYTE81无符号字节
WORD162无符号字
DWORD324无符号双字
INT162有符号整数
DINT324有符号双整数
REAL324浮点数
STRING可变默认 254字符串

4. 不同品牌 PLC 的数据类型差异

4.1 西门子 PLC

西门子 STEP 7 / TIA Portal 中,数据类型规则最严格。变量必须在 PLC 变量表中声明,地址类型和数据类型严格对应。

常见地址写法:

地址数据类型说明
I0.0BOOL输入位
IB0BYTE输入字节
IW0WORD / INT输入字
ID0DWORD / DINT / REAL输入双字
Q0.0BOOL输出位
M0.0BOOL中间位
MW10INT / WORD中间字
MD14DINT / REAL中间双字

有一点特别容易混淆:MW10占用的字节是 MB10 和 MB11,MD10占用的字节是 MB10~MB13。所以写程序时,MW12 和 MD10 实际上地址重叠,会造成数据互相覆盖,现场调试时要特别小心。

4.2 三菱 PLC

三菱 FX 系列中,数据寄存器D是 16 位,占用一个地址。32 位数据占用两个连续地址,比如D0D1

数据类型上,三菱不像西门子那样强制区分INTWORD。在梯形图中的MOV指令,可以直接把D0的值传送到D10,有没有符号由后续指令和软件解释决定。这种宽松的机制方便快速编程,但调试时容易忽略溢出问题。

在 GX Works3 中,结构化文本和 FB 函数块支持显式类型声明,和三菱自家扩展指令配合使用。

4.3 汇川 PLC

汇川 InoProShop 的编程环境和三菱 GX Works3 的体验很接近,同时兼容 IEC 61131-3 标准。数据类型包括BOOLINTDINTREALSTRINGTIME等。

汇川应用中,很多工艺场景涉及伺服控制,伺服轴的目标位置和速度建议使用DINTREAL,避免 16 位INT溢出。汇川 H5U 系列还支持LREAL,但常规单轴应用用不上。

4.4 Modbus 通信中的数据类型长度

Modbus 是一种非常常见的工业通信协议,常涉及寄存器数据类型问题。

Modbus 对象数据长度说明
线圈 Coil1 bit开关量读写
离散输入 Discrete Input1 bit只读开关量
保持寄存器 Holding Register16 bit读写寄存器
输入寄存器 Input Register16 bit只读寄存器

如果一个浮点数要放在 Modbus 寄存器中,通常需要占用 2 个保持寄存器,也就是 4 字节 32 位,并且需要约定字节顺序(ABCD 或 CDAB),这正是很多初学者调试上位机时遇到的"数据读出来怎么是乱的"的原因。


5. 进制转换基础

5.1 为什么 PLC 编程必须懂进制

PLC 内部所有数据本质都是二进制。梯形图中的K10是十进制常数,但显示在设备监控表里可能以十六进制呈现。以下场景都会用到进制转换:

  • 设备原点开关、限位开关组合成位模式时,需要按二进制位去判断。
  • 触摸屏地址和 PLC 软元件地址的对应关系。
  • 通信报文解析时,寄存器原始值是十六进制。
  • BCD 码来自旋转编码器或 BCD 拨码开关。
  • 伺服驱动器参数写入时,需要将十进制数值转成十六进制指令值。

5.2 四种常用进制的表示

进制可用字符PLC 编程中的写法
二进制20, 1西门子2#1010
八进制80~7西门子地址 I0.0 到 I7.7
十进制100~9直接写数字,如 10
十六进制160~9, A~F16#A0xA

三菱中,十六进制常数前加H,例如H0A。汇川类似,十六进制写作16#0AH0A,具体看软件版本。


6. 进制转换实操计算

6.1 二进制与十进制互转

二进制1011转十进制:

  • 从右往左,每一位乘以 2 的 n 次方。
  • 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8 + 0 + 2 + 1 = 11。

十进制转二进制用短除法:

  • 将 25 不断除以 2,记录余数。
  • 25 ÷ 2 = 12 余 1
  • 12 ÷ 2 = 6 余 0
  • 6 ÷ 2 = 3 余 0
  • 3 ÷ 2 = 1 余 1
  • 1 ÷ 2 = 0 余 1
  • 从下往上读余数:11001

所以十进制 25 = 二进制 11001。

6.2 十六进制与十进制互转

十六进制A3F转十进制:

  • A×16² + 3×16¹ + F×16⁰
  • 10×256 + 3×16 + 15×1 = 2560 + 48 + 15 = 2623。

十进制 300 转十六进制:

  • 300 ÷ 16 = 18 余 12(记 C)
  • 18 ÷ 16 = 1 余 2
  • 1 ÷ 16 = 0 余 1
  • 从下往上读:12C

所以十进制 300 = 十六进制 12C。

6.3 常见数值对照表

十进制二进制八进制十六进制BCD
00000000000
50101550101
10101012A0001 0000
15111117F0001 0101
161 000020100001 0110
2551111 1111377FF0010 0101 0101

6.4 用 Windows 计算器快速验证

Windows 自带的科学计算器可以在"程序员"模式下完成进制互转,还能看到对应位的值。

操作路径:

  1. 按下Win + S,输入"计算器"并打开。
  2. 切换到"程序员"模式。
  3. 选择 DEC,输入数值。
  4. 切换到 HEX、BIN、OCT 查看对应进制结果。
  5. 右侧可以看到位开关状态,方便核对每一位。
输入:255(十进制) BIN:1111 1111 HEX:FF OCT:377

注意:程序员模式下输入的十进制如果是负数,显示的是补码形式。例如 -1 的十六进制显示为FFFFFFFF

6.5 BCD 码实操

BCD 码(Binary-Coded Decimal)用 4 位二进制表示一位十进制数字。比如:

  • 十进制 35 的 BCD 码是0011 0101
  • 十六进制0x35从表面上看和 BCD 码35一样,但含义完全不同。

PLC 中常遇到旋转编码器输出 BCD 码,或者触摸屏输入时以 BCD 码发送,此时要用 BCD 转换指令:

  • 西门子:BCD_II_BCD
  • 三菱:BCDBIN
  • 汇川:BCD_TO_INTINT_TO_BCD

示例,三菱 FX 系列:

// 将 D0 中的 BCD 码转换为二进制数值存入 D10 BCD D0 D10 // 将 D10 中的二进制数值转换为 BCD 码存入 D20 BIN D10 D20

调试时,先在监控表里看 D0 的数值显示。如果 D0 =H0123,则对应十进制 123,但注意 PLC 监控显示形式不同,有的是十六进制显示,有的是十进制显示,需手动切换。


7. 数据类型转换实操

7.1 为什么要做类型转换

PLC 程序中,不同数据类型之间不能直接赋值或比较。例如INT变量不能直接赋给REAL变量,WORD不能直接传给DINT。此时必须使用转换指令。

常见的转换场景:

  • 模拟量模块读取的原始值(INT)转成工程量(REAL),如 0~27648 转 0~100°C。
  • 触摸屏输入的目标值(REAL)转成DINT给伺服轴。
  • Modbus 通信读取的WORD变量转成INTREAL参与运算。

7.2 隐式转换与强制转换

隐式转换:PLC 自动完成,只适用于安全范围。例如INTDINT不会损失数据,部分软件可以自动完成。

强制转换:使用指令或函数完成。可能损失数据或引入舍入误差。例如REALINT时,小数部分会被省略,具体舍入方式不同品牌可能不同,有的四舍五入,有的截断。

示例,西门子 ST 语言:

VAR iRaw : INT; rTemp : REAL; iRounded : INT; END_VAR // INT 转 REAL rTemp := INT_TO_REAL(iRaw); // REAL 转 INT,注意精度损失 iRounded := REAL_TO_INT(rTemp);

示例,博途 LAD 中的转换指令:在基本指令目录中搜索CONV,选择CONV "Int to Real"即可。

7.3 WORD 与 INT 的转换

WORDINT占用内存长度相同,都是 16 位,但解释方式不同。WORD无符号,INT有符号。

  • 十六进制16#FFFF作为WORD是 65535。
  • 作为INT是 -1。
  • 转换指令:WORD_TO_INTINT_TO_WORD

示例:

VAR wReg : WORD; iVal : INT; END_VAR iVal := WORD_TO_INT(wReg);

7.4 三菱与汇川中的类型转换

三菱 FX 系列中,MOV指令最常见。它按位传送数据,不做类型检查,因此很容易出现类型混乱。最好在指令前明确使用DINT相关的双字传送:

// 将 D0, D1 组合成的 32 位数据传送到 D20, D21 DMOV D0 D20

汇川 InoProShop 支持 IEC 标准的转换函数:

rValue := DINT_TO_REAL(dPosition); iIntValue := REAL_TO_INT(rValue);

还有更多组合,比如WORD_TO_BYTEDWORD_TO_REALBCD_TO_INT,具体函数名参考软件内的函数库。


8. 数据类型与进制转换常见错误

问题现象可能原因排查方式解决方案
程序编译报错,变量类型不匹配将 WORD 传给 INT,或 REAL 直接做比较看编译器提示的具体行使用WORD_TO_INTREAL_TO_INT显式转换
上位机读取的数值和 HMI 显示不一致数据长度/字节顺序不一致对比 16 位和 32 位读取方式改成一致的寄存器长度和字节顺序
模拟量换算倍率错误原始值当作有符号或无符号解释错误查模块手册的原始值范围用正确类型读取后换算
伺服位置偏差很大32 位数据被读成 16 位检查寄存器组合是否连贯用双字读取,注意D0D1顺序
BCD 码显示为 16#99 但十进制却不对BCD 码没经过转换直接运算确认数据来源是 BCD 格式BCDBCD_TO_INT转换
触摸屏写入负数后变成很大的正数有符号 INT 与无符号 UINT 混用查看变量类型定义统一为 INT,避免 UINT 接受负数
地址重叠导致数据被覆盖MW10 和 MD10 范围重叠检查变量表地址分配地址时留出足够间隔

实际调试时还常遇到一个问题:PLC 程序在线修改后数据不刷新。这通常不是数据类型问题,而是没有执行下载或启用了保持功能,需要把 PLC 切到 STOP 再 RUN,或者手动下载块。


9. 最佳实践与建议

9.1 首次编程先列变量表

不要直接写梯形图。先在变量表里把输入、输出、中间变量全部声明好,明确每个变量的数据类型和地址范围。这样能避免大半类型匹配问题。

变量表示例:

变量名地址数据类型注释
StartBtnI0.0BOOL启动按钮
SpeedSetMD10REAL速度设定值
PositionMD20DINT当前位置
CmdWordMW40WORD通信命令字

9.2 保持浮点数与整数分离

在一个程序段中,尽量不让REALINT直接混用。需要参与运算的变量,先转换成统一类型。例如模拟量工程量换算,统一用REAL

9.3 进制转换要形成肌肉记忆

  • 十进制0~255对应十六进制00~FF
  • 十进制0~65535对应十六进制0000~FFFF
  • 16#FF是 255,16#FFFF是 65535(无符号)或 -1(有符号)。

遇到一个通信报文值,先确认这是十六进制还是十进制,再确认是有符号还是无符号,最后再看字节顺序。

9.4 批量处理时使用变量名而非绝对地址

工程中如果涉及大量寄存器读写,建议用符号名 + 数据块的方式。西门子博途中建立 DB 块,三菱/汇川用全局标签。不要到处写D100D101这种裸地址,后期改一处地址会非常痛苦。

9.5 用在线监控验证类型理解

调试时打开 PLC 在线监控表,切换到二进制和十六进制显示,观察同一个地址在不同进制下的值变化。这是最快建立"数据类型 + 进制"直觉的方法。

比如让MW100等于16#A5,监控表里:

  • 二进制显示:1010 0101。
  • 十进制显示:165。
  • 如果用INT解释:-91。
  • 如果用WORD解释:165。

直观看到同一个 16 位数据在不同类型下的差异,比死记硬背规格表有效得多。

9.6 关于调试安全

如果在真实设备上调试,涉及电机、气缸、机械手等输出动作时,先断开动力电源,用信号强制功能验证逻辑,再上电试动作。涉及伺服和变频器参数写入时,备份当前参数文件。涉及通信报文解析时,先确认从站设备型号和寄存器地址表,避免误写控制字。


10. 总结与后续方向

PLC 数据类型和进制转换是编程技能的底座。本文把 BOOL、BYTE、WORD、DINT、REAL 等类型的内存长度、取值范围和品牌差异讲了一遍,又给出了二进制、十六进制、BCD 码的换算方法和验证工具,最后补充了类型转换指令和调试排错思路。

如果你正在学 PLC,建议先把INTWORDDINTREAL这四种类型的区别搞透,再配合 Windows 计算器做 10 组进制换算练习,然后在一台真实 PLC 上做在线监控试验。这是成本最低、收益最明显的一条路径。

后面可以继续深入的内容包括:模拟量工程量换算、Modbus 通信报文解析、西门子 DB 块的数据结构设计、三菱/汇川伺服轴参数的类型选择、梯形图与 ST 语言混合编程。这些内容都建立在数据类型和进制转换的基础之上。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询