PLC的数据类型

📊 PLC 常用数据类型及字节数

为了让你有更清晰的认识,我把常用数据类型和它们与 C# 的对应关系整理成表格。这些是 IEC 61131-3 标准中定义的类型,也是大多数主流 PLC(如西门子、罗克韦尔、倍福)支持的。

数据类型 英文全称 字节数 取值范围 / 说明 对应 C# 类型
BOOL Boolean 1 位 (Bit) TRUE / FALSE bool
BYTE Byte 1 0 ~ 255 byte
WORD Word 2 0 ~ 65535 ushort
DWORD Double Word 4 0 ~ 4,294,967,295 uint
LWORD Long Word 8 0 ~ 2^64-1 ulong
SINT Short Integer 1 -128 ~ 127 sbyte
USINT Unsigned Short Integer 1 0 ~ 255 byte
INT Integer 2 -32,768 ~ 32,767 short
UINT Unsigned Integer 2 0 ~ 65,535 ushort
DINT Double Integer 4 -2,147,483,648 ~ 2,147,483,647 int
UDINT Unsigned Double Integer 4 0 ~ 4,294,967,295 uint
LINT Long Integer 8 -2^63 ~ 2^63-1 long
ULINT Unsigned Long Integer 8 0 ~ 2^64-1 ulong
REAL Real 4 32位浮点数 (约 ±1.18e-38 ~ ±3.4e38) float
LREAL Long Real 8 64位浮点数 (约 ±2.23e-308 ~ ±1.79e308) double
WSTRING Wide String 2 * 字符数 Unicode 字符串 string (UTF-16)
TIME Time 4 持续时间 (单位:毫秒) TimeSpan (需手动转换)
DATE Date 4 日期 (自 1970-01-01 起的天数) DateTime (需手动转换)
DT Date and Time 8 日期和时间 DateTime (需手动转换)

🔄 为什么需要类型转换?

这背后有几个核心原因,在你编写通讯代码时至关重要:

  1. 内存大小和位宽不同:这是最根本的原因。例如,PLC 的 DINT 是 32 位,而 C# 的 int 也是 32 位,这种可以安全映射。但 PLC 的 INT 是 16 位,如果你在 C# 中用一个 32 位的 int 去接它,虽然能接住,但如果直接操作数组或指针,不进行正确的字节序转换就可能出错。
  2. 字节序(Endianness)问题:这是工控领域最容易踩的坑之一。通常 Intel 架构的 PC 是小端(Little-Endian),而很多 PLC(特别是西门子)是大端(Big-Endian)。这意味着,你从 PLC 读取的 4 个字节 [01, 02, 03, 04],在 C# 中解析为 int 时,可能是 0x01020304(大端)或 0x04030201(小端),取决于你的处理方式。如果不进行转换,数值会完全错误。
  3. PLC 内存的“位”访问特性:PLC 允许按位访问(BOOL),而 C# 通常按字节访问。当你需要从 PLC 的 WORD 中提取某一个 BOOL 位时,就需要通过位运算来转换。
  4. 字符串编码差异:早期 PLC 常用 STRING(ASCII),而现在常用 WSTRING(Unicode)。C# 的 string 是 UTF-16,和 PLC 的 WSTRING 通常能直接对应,但和 STRING 则需要进行编码转换。

💻 实战中的转换策略

  1. 使用 BitConverter:对于数值类型,最常用的是 BitConverter.ToInt32() / ToSingle() 以及 BitConverter.GetBytes()
  2. 手动字节顺序转换:如果遇到大端/小端问题,需要在使用 BitConverter 之前,先对字节数组调用 Array.Reverse()
  3. 使用高级库:在像 S7.NET PlusSharp7 等成熟的 PLC 通讯库中,它们封装了这些转换逻辑,提供类似 ReadInt()ReadFloat() 的方法,直接返回正确的 C# 类型,让你无需关心底层细节。

💎 总结

PLC 和 C# 交互时,数据类型转换是不可避免的日常工作。理解这些基础类型的大小和它们的对应关系,是写出健壮通讯代码的第一步。在你的上位机开发中,如果要对 PLC 进行读写,掌握这些转换是必须的技能。

posted @ 2026-07-09 20:00  孤沉  阅读(12)  评论(0)    收藏  举报