拓冰建站拓冰建站
首页 / 资讯中心 / 正文

PLC编程进制转换与数据类型详解:从通信报文到工程实战

在实际 PLC 编程项目中进制转换和数据类型从来不只是教科书里的基础概念。程序跑不起来、通信读出来是乱码、触摸屏显示数值不对、模拟量换算结果异常追到根上很多问题都出在这两个知识点上。PLC 的 CPU 内部只能处理 0 和 1但工程师要读十进制、写十六进制、看 BCD 码还要面对 BOOL、INT、DINT、REAL 这些数据类型中间的桥没有搭好数据传到哪里都会出错。这一讲围绕一条主线展开为什么 PLC 程序离不开进制转换数据类型又是如何决定数据长度和解析方式的。我会从进制规则讲起再对照西门子和三菱这类常见 PLC 的数据类型体系给出地址、存储、通信和触摸屏场景中的具体用法最后补上工程中最高频的报错现象和排查链路。目标是让初学者能把“进制”和“数据类型”这两块基础真正落到梯形图、结构化文本和通信报文里而不是只记住几个换算公式。1. 为什么 PLC 编程要先理解进制转换和数据类型1.1 从一条读不懂的通信报文说起现场两台设备走 Modbus 通信PLC 读回来的寄存器数值是16#3F80。如果直接把这个值送给触摸屏显示屏幕上会出现一个巨大的整数完全不是预期中的物理量。实际上16#3F80按 IEEE 754 规则解析后对应浮点数 1.0只是寄存器里存的是十六进制触摸屏按十进制整数去解释了。这个例子说明一个非常现实的道理PLC 程序里的每一个数据既要看它在存储器里占用多少位也要看 CPU 和外部设备按什么进制、什么数据类型去解释它。进制决定了数据的书写和传输形式数据类型决定了数据的长度和语义。寄存器原始值16#3F80 按十六进制理解一个字内容为 3F80 按无符号整数理解16256 按浮点数理解1.0同一个存储内容三种解释得到三个完全不同的结果。PLC 编程的基础能力就是在合适的位置选择正确的进制和数据类型让程序内部、触摸屏、上位机、第三方设备对同一段数据的理解保持一致。1.2 进制与数据类型是程序的“共同语言”PLC 程序里需要换进制的场景非常集中。输入输出映像区、通信报文、触摸屏地址、模拟量工程量换算、配方数据、报警代码这些地方几乎每天都在接触十六进制、二进制、十进制和 BCD 码。数据类型则决定了这些数据能存多大、能不能表示负数、是整数还是小数。可以这样理解两者的分工进制决定了数据的“外部表达能力”。二进制适合描述开关量十六进制适合压缩和阅读寄存器内容BCD 码适合和人机界面上的数码管、拨码开关配合。数据类型决定了数据的“内部存储长度和解释规则”。BOOL 只占一位BYTE 占 8 位INT 占 16 位且有符号DINT 占 32 位REAL 也占 32 位但按浮点规则解释。如果只懂进制不懂类型程序里会出现符号位被当成数值位的情况。如果只懂类型不懂进制触摸屏和通信报文里会出现数值翻倍、乱码、溢出这类现象。两个知识点必须放在一起学。1.3 数制理解错误会带来什么后果工程中最常见的问题不是 CPU 坏了而是数据解释错位。下面这张表是我在排查现场问题时经常对工程师说的对照关系。现象常见深层原因触摸屏显示数值是实际值的两倍字与双字混用高字低字顺序颠倒通信报文里数字全部错位寄存器按十六进制收发程序按十进制解析计数值到 32767 后变成负数使用了 16 位有符号整数没有考虑溢出称重仪表读数乱跳BCD 码数据没有转成二进制整数模拟量换算结果始终不对数据类型用了 INT工程量乘除后小数被截断这些问题如果等到设备联调时才暴露排查成本会非常高。反过来在写程序之前把进制和类型理清楚很多故障在设计阶段就能避免。2. 掌握四种进制与 BCD 码关键是理解各自用途2.1 十进制人类习惯但 CPU 不直接处理十进制是工程师最熟悉、最自然的计数方式。PLC 编程软件里的常数值、定时器预设值、计数器预设值默认情况下都按十进制输入。例如输出线圈延时 5 秒定时器预设值填 50 还是 500取决于定时器的分辨率但输入形式通常都是十进制。需要明确的是CPU 内部并不存在“十进制”这个形式。所有十进制数在参与运算之前都会被编译成二进制。这个转换由编程软件和 CPU 自动完成程序员不需要手动干预。但有一个例外值得注意如果程序里用字符串接收外部设备传来的十进制文本例如扫码枪传来的重量值就需要先将 ASCII 字符转换成数值再交给运算指令。这种情况下十进制是通信层的表示方式程序要做的是字符到数值的解析。2.2 二进制开关量与寄存器数据的本源二进制是 PLC 最底层的表示方式。一个位Bit只有 0 和 1 两种状态对应线圈断电和得电、触点断开和闭合。理解二进制的关键不是会算 1010 等于多少而是知道每一位在寄存器中的排列位置。比如一个 16 位寄存器存储二进制数0000 0000 0000 0101从低位到高位分别是 bit0、bit1、bit2……bit15。bit0 为 1bit2 为 1其他位为 0因此这个寄存器的数值等于 1 4 5。这种位级理解在实际项目里非常重要。设备报警字通常会定义 bit0 代表急停触发、bit1 代表油压低、bit2 代表温度过高上位机读取报警字后按位判断。如果不懂位排列就很难写清楚报警判断逻辑。15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1这个 16 位寄存器表示十进制数 5同时意味着 bit0 和 bit2 两个报警位同时有效。2.3 八进制三菱 PLC 输入输出地址的遗留八进制在三菱 PLC 的输入输出地址中非常常见。X0 到 X7 是前 8 个输入点X10 到 X17 是第 9 到第 16 个输入点X20 到 X27 是第 17 到第 24 个输入点。这里没有 X8 和 X9因为地址按八进制排列。很多初学者在写三菱程序时看到 X8、X9 不存在的现象会以为是手册写错了。其实这是八进制地址体系的特征。同样输出点 Y0 到 Y7、Y10 到 Y17 也遵循八进制规则。另一个常见场景是触摸屏或上位机提供输入点地址列表时有些软件要求按八进制填写地址有些则自动换算成十进制。如果在两个软件之间手动抄地址很容易把 X10 写成 X8导致点位错位。西门子 PLC 的输入输出地址比较特殊I0.0 到 I0.7 是按位编址的字节加位结构使用的是十进制位偏移不涉及八进制规则。也就是说八进制主要是三菱体系的特点跨品牌移植程序时必须格外注意。2.4 十六进制通信报文与地址的简洁表达十六进制是 PLC 编程中使用频率最高的进制之一。原因有两点一是每位十六进制数正好对应 4 位二进制数读写都很直观二是 16 位寄存器用 4 位十六进制就能表达完整例如16#00FF表示低 8 位全 1。Modbus 通信报文里的寄存器地址、功能码、CRC 校验值几乎都使用十六进制。例如读取保持寄存器的报文寄存器地址一般写成16#0000或16#0100这样的形式。如果不懂十六进制连报文都看不懂。十六进制与二进制的换算可以直接按位对应十六进制 二进制 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 A 1010 B 1011 C 1100 D 1101 E 1110 F 111116#A5展开成二进制就是1010 0101。这个换算关系熟练之后看通信报文会比十进制快得多。2.5 BCD 码数显、拨码和触摸屏之间的约定BCD 码Binary Coded Decimal二进制编码的十进制是一种用二进制位组合表示十进制数字的编码方式。它与普通二进制的最大区别是每 4 位二进制只表示一位十进制数字范围从 0000 到 1001也就是 0 到 9超过 9 的编码在 BCD 中是无效的。例如十进制数 25用普通二进制表示是11001用 BCD 码表示则是0010 0101高四位表示十位 2低四位表示个位 5。BCD 码在工业现场的应用场景非常集中数码管显示、拨码开关设定、某些计数器和仪表的数据输出。PLC 外部设备如果直接输出 BCD 码程序必须先经过 BCD 转二进制指令才能进行数学运算。BCD 码值0010 0101 按 BCD 解释25 按二进制解释37同一个存储内容解释方式不同结果不同。这也是初学者最容易踩的坑仪表显示 25PLC 读回来却是 37因为程序把 BCD 码当成了普通二进制数处理。2.6 进制转换速查表做项目时不需要每次都用计算器熟练之后常用的值可以直接查表。这张表覆盖了 0 到 15 的四种进制等价关系。十进制二进制八进制十六进制000011112102231133410044510155611066711177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F建议把这张表打印出来贴在工位旁边写通信程序时非常实用。进制转换本身不是目的正确理解设备之间的数据格式才是目的。3. PLC 数据类型体系从位到实数3.1 基本存储单位位、字节、字、双字PLC 的存储区可以按位bit、字节byte、字word、双字dword四种粒度访问。位是最小的存储单位只有 0 和 1 两种状态字节由 8 个位组成字由 2 个字节组成也就是 16 个位双字由 2 个字组成也就是 32 个位。这里要特别注意不同 PLC 对“字”的定义。西门子 PLC 中WORD 固定表示 16 位数据DWORD 表示 32 位数据。三菱 PLC 中字软元件 D 的默认长度也是 16 位用两个 D 软元件可以组合成 32 位数据。虽然叫法略有差异但底层存储长度是一致的。为什么长度很重要因为 CPU 在读取数据时必须知道从哪个地址开始、连续读多少位、按什么规则解释。读取长度差一位结果可能完全错误。存储单位位数可表示的无符号整数范围位bit10 到 1字节byte80 到 255字word160 到 65535双字dword320 到 42949672953.2 整数类型BOOL、BYTE、WORD、INT、DINTPLC 编程中最常用的数据类型包括 BOOL、BYTE、WORD、INT、DINT 等。BOOL 用于开关量BYTE 和 WORD 通常用于存储无符号数据或位组合INT 是 16 位有符号整数范围从 -32768 到 32767DINT 是 32 位有符号整数范围更大。实际项目中大量数值运算都用 INT但 INT 的 16 位范围在生产设备里并不算大。比如一台包装机的产量计数值如果一天生产 5 万件产品用 INT 存储会在 32767 处溢出变成负数。这时就必须使用 DINT 或通过两个寄存器组合实现 32 位计数。数据类型长度有符号范围典型用途BOOL1 位0 或 1启动、停止、报警标志BYTE8 位0 到 255状态字、小范围数据WORD16 位0 到 65535通信寄存器、位组合INT16 位-32768 到 32767普通整数运算DINT32 位-2147483648 到 2147483647大范围计数、累计值3.3 实数类型REAL 和 LREALREAL 是 32 位浮点数按 IEEE 754 标准存储可以表示小数和很大范围的数值。LREAL 是 64 位浮点数精度更高但在中小型 PLC 中并不常用而且会占用更多存储空间和运算时间。需要特别强调的是REAL 虽然能表示小数但它不是精确数。某些十进制小数在二进制浮点表示下是无限循环的例如 0.1 在二进制浮点里无法精确表示。因此比较两个 REAL 是否相等时不要直接比较应该比较差值是否小于某个很小的容差。模拟量工程量换算、PID 运算、称重数据处理时几乎都要用到 REAL。直接用 INT 做除法会丢掉小数部分导致控制精度不足。例如温度量程 0 到 100 度模拟量采集值 14400工程量换算结果是 52.63 度如果全程用 INT小数部分会被截断。3.4 有符号与无符号符号位是数据解释的边界有符号数据类型用最高位表示符号0 为正1 为负。无符号数据类型没有符号位所有位都参与数值计算。同一个存储内容按有符号和无符号解释结果完全不同。存储内容1111 1111 1111 1111 按无符号 WORD 解释65535 按有符号 INT 解释-1通信协议中如果对方设备按无符号整数发送寄存器值而 PLC 程序按有符号 INT 解析大于 32767 的数据都会变成负数。典型场景是变频器状态字、温度传感器负温度、能量表累计值等数据。3.5 不同品牌 PLC 的数据类型差异与命名西门子、三菱、欧姆龙、基恩士等品牌的数据类型命名并不完全一致但底层原理相通。移植程序时不要直接照搬数据类型必须核对长度和符号规则。品牌16 位有符号16 位无符号32 位有符号32 位浮点西门子INTWORD / UINTDINTREAL三菱默认按二进制整数处理视指令而定双字 D 组合浮点指令处理欧姆龙INTWORD / UINTDINT / LINTREAL / LREAL三菱 PLC 的数据类型概念比西门子弱一些更多是通过指令来选择解释方式。例如MOV指令只负责移动数据不关心符号而浮点运算指令专门处理 REAL 数据。这也是很多初学者从西门子转到三菱后觉得数据类型“消失”了的原因。3.6 数据类型与软元件的对应关系PLC 的软元件本身没有固定类型类型由指令和数据类型声明决定。同一个 D 寄存器既可以被MOV指令当作 16 位整数使用也可以被浮点指令当作 32 位浮点数处理还可以被位指令按位读取。以三菱 FX 系列为例D0 和 D1 两个 16 位寄存器组合起来可以构成一个 32 位数据 D0D1高 16 位在 D1低 16 位在 D0。如果是 32 位浮点数也占用相同的 32 位空间。西门子 S7-1200 使用 DB 数据块时数据类型是在声明时确定的。例如声明一个 INT 变量占用 16 位声明一个 REAL 变量占用 32 位。这种显式声明方式比三菱更清晰但也要注意访问越界问题。软元件或存储区常见数据类型说明M 继电器BOOL开关量标志D 数据寄存器16 位整数、32 位整数、浮点由指令决定DB 数据块BOOL、INT、DINT、REAL 等声明时确定输入输出映像区BOOL以位为单位访问4. 进制转换与数据类型在工程中的综合应用4.1 触摸屏显示与 BCD 码转换触摸屏上显示外部计数器的当前值最稳妥的做法是让 PLC 先读取仪表的 BCD 输出再转换成二进制整数。如果仪表是并行 BCD 输出PLC 需要读取对应的输入点组合再用 BCD 转 BIN 指令还原成真正的计数值。以三菱 PLC 为例BCD 转二进制使用BIN指令。假设外部拨码开关设定的 BCD 值通过输入端子读到 K4X0程序处理后存入 D0BIN K4X0 D0这条指令的含义是把 X0 到 X17 共 16 位输入组成的 BCD 码转换成二进制数值后存入 D0。触摸屏读取 D0 时就能显示正常的十进制数字。西门子 S7-1200 中对应指令是BCD_I或BCD_DI具体用法取决于数据长度。假如程序里有一个 WORD 变量bcdValue保存从外部读取的 BCD 码可以这样转换#intValue : BCD_TO_INT(#bcdValue);需要注意 BCD 码输入数据的每一位必须是 0 到 9 之间的值。如果某些位出现 A 到 F说明外部设备数据格式不是 BCD或接线有误。4.2 模拟量采集与工程量换算模拟量模块采集到的原始值是 0 到 27648 或 0 到 4000 这样的整数而工程师真正关心的是压力、温度、流量等工程量。这个过程需要一次乘除运算并且必须使用 REAL 类型否则精度不够。以西门子 S7-1200 为例4 到 20 mA 信号对应 0 到 27648工程量量程为 0 到 100 度#rawValue : INT; // AI 模块原始值 #engineeringValue : REAL; // 换算后的工程量 #engineeringValue : INT_TO_REAL(#rawValue) / 27648.0 * 100.0;这段代码先把 INT 转换为 REAL再调用浮点除法可以保留小数部分。如果直接写#rawValue / 27648 * 100两个 INT 相除结果还是 INT小数会被截断最终结果可能一直是 0。三菱 FX 系列中同样使用浮点指令例如FLT指令把整数转成浮点DEADD、DEMUL等指令完成浮点运算。实际项目中要把原始值、量程上限、量程下限做成可调参数方便现场校准。4.3 通信协议的数值解析Modbus 通信是进制和数据类型问题最密集的场景。一条 Modbus RTU 报文读取保持寄存器时返回的数据是两个字节例如01 03 02 00 0A 78 0F。其中00 0A是寄存器数值按十六进制看是 0x000A按十进制看是 10。PLC 程序中需要根据设备手册确认寄存器数据是无符号还是有符号是单寄存器还是双寄存器高位在前还是低位在前。两种字节顺序解析结果完全不同。寄存器内容01 02 按大端解析0x0102 258 按小端解析0x0201 513很多通信数据错误的根因就是字节序。编程前必须确认协议的字节序规则或通过上位机先读取并和仪表显示值对照确认解析方式后再写 PLC 程序。4.4 配方管理与数据包组装配方管理是 PLC 工程中很常见的功能。配方预置温度、压力、时间等参数启动时把配方数据从保持寄存器搬运到当前运行区。这个过程中不同数据类型之间的相互转换非常频繁。例如西门子 S7-1200 中配方数据以 REAL 保存通信发送时需要变成两个 WORD 寄存器。这时可以用MOVE指令或联合体方式处理但要注意 REAL 的 32 位存储在内存中并不是直观的十进制展开。#realValue : 23.5; // 将 REAL 值直接按位复制到两个字中 #wordLow : WORD_BLKMOVE(...);更常见的做法是用一个 DINT 中间变量把 REAL 放大 10 倍后取整再拆成高 16 位和低 16 位发送。这种做法的缺点是精度有限适合对精度要求不高的场合。要求高精度时应直接按 32 位浮点格式传输。4.5 结构化文本中的转换函数示例结构化文本ST语言提供了类型转换函数用于在整数、双整数、实数之间切换。以 IEC 61131-3 标准为例常用转换包括转换函数含义INT_TO_REAL16 位整数转 32 位浮点数REAL_TO_INT32 位浮点数转 16 位整数DINT_TO_REAL32 位整数转 32 位浮点数DWORD_TO_REAL按位复制 32 位数据到浮点数INT_TO_WORD16 位整数转 16 位无符号数一个典型的温度换算函数块在 ST 中可以这样定义FUNCTION_BLOCK FB_Scale VAR_INPUT rawValue : INT; // 原始采集值 rawMin : INT; // 采集量程下限 rawMax : INT; // 采集量程上限 engMin : REAL; // 工程量下限 engMax : REAL; // 工程量上限 END_VAR VAR_OUTPUT engValue : REAL; // 换算结果 valid : BOOL; // 输入有效标志 END_VAR IF rawMax rawMin THEN engValue : INT_TO_REAL(rawValue - rawMin) / INT_TO_REAL(rawMax - rawMin) * (engMax - engMin) engMin; valid : TRUE; ELSE valid : FALSE; END_IF;这个函数块把输入的范围检查和换算逻辑封装在一起调用时只需要给原始值和量程参数。工程中如果有多个模拟量通道就可以重复使用同一个功能块避免在每个程序段里重复写换算逻辑。5. 实际工程中常见的坑与排查链路5.1 整数溢出计数到 32767 后变成负数现象是计数器的数值到 32767 后不是继续增加而是突然变成 -32768再继续增加显示完全混乱。原因是计数器使用了 16 位有符号整数 INT最大值只有 32767。检查方式是在在线监视里查看该数据变量的类型。如果声明为 INT且数值范围可能超过 32767就要改成 DINT 或改用双字存储。三菱 PLC 中要注意 32 位计数器必须连续占用两个 D 寄存器而且指令要使用 32 位版本。预防建议设计阶段先估算可能出现的最大值再选择数据类型。产量计数、累计运行时间、长度累计这类数据优先考虑 DINT。5.2 有符号与无符号混用导致负数现象是通信读回来的数值超过 32767 后变成负数。例如设备手册写明寄存器范围是 0 到 65535但程序按 INT 解析一半的数值范围被错误地当成了负数。检查方式是先通过 Modbus 调试工具直接读取该寄存器确认原始十六进制值再和程序解析结果对比。如果调试工具显示 60000程序显示 -5536说明有符号无符号解析错误。处理方式是把变量类型改为 WORD 或 UINT。西门子 S7-1200 可以直接声明为 WORD需要运算时再转换为 DINT 或 REAL。三菱 PLC 中可以通过MOV到 D 寄存器后使用无符号处理指令。5.3 字节序错误导致数值完全不对现象是通信报文里读取的数值与设备显示值完全不一致而且数据长度越长错误越明显。常见原因是大端小端约定不一致。Modbus 协议默认大端传输但有些设备实现时使用小端。检查方式是用串口调试工具抓取报文找到寄存器数据对应的两个字节手动交换后算出数值和仪表显示值对比。如果交换顺序后一致说明程序里需要调整字节顺序。报文数据0x01 0x02 当前解析0x0102 258 交换字节0x0201 513处理方式是在 PLC 程序中做一个字节交换逻辑或者使用移位指令重新组装。西门子 S7-1200 可以用SWAP指令三菱 PLC 可以分别读取高字节和低字节再MOV到目标位置。5.4 BCD 码与十六进制混用现象是数码管显示 15PLC 读回来却是 21。原因是外部设备输出的是 BCD 码程序却按普通十六进制或二进制处理。这个坑在称重仪表、计数器和编码器上非常常见。检查方式是查看设备手册里“输出码制”的说明。如果写的是 BCD、8421 码或并行 BCD 输出就必须在 PLC 程序里做 BCD 转二进制。处理方式三菱使用BCD和BIN指令西门子使用BCD_I和I_BCD指令。转换后一定要做范围检查因为 BCD 码中如果出现 A 到 F说明数据源或接线有异常程序应触发报警而不是继续计算。5.5 双字存储高低字顺序错误现象是 32 位数据在高位和低位之间出现明显错位数值变化规律像是左右两半互换。原因是不同品牌 PLC 对双字的排列方式不同。西门子通常高字在前、低字在后三菱 FX 系列中低地址放低字、高地址放高字字节序也可能不同。检查方式是在线监视中查看 32 位变量对应的两个字地址内容对比输入值和拆字结果。例如 32 位数据 0x12345678西门子高字是 0x1234、低字是 0x5678如果程序按反序读取会得到 0x56781234。处理方式是根据具体 PLC 的手册调整高低字组合或在程序中使用专门的 32 位指令。西门子使用DINT和REAL变量后不需要手动组合三菱则要明确用DFROM、DTO等 32 位指令。5.6 排查链路表遇到数据不对时按下面这张表逐级排查能快速缩小问题范围。不要一开始就怀疑 PLC 硬件大多数问题出在数据解释方式上。排查顺序检查项检查方式常见结果1原始值是否正确在线监视、串口调试工具原始值正确但显示错误说明问题在后面2进制解释是否正确查看设备手册中的码制说明BCD 当二进制、十六进制当十进制是最常见错误3字节序是否正确交换高字节和低字节对比交换后数值正确说明字节序反了4有符号无符号是否匹配用无符号方式重新解析大于 32767 变负数说明符号位处理错误5数据类型长度是否匹配检查变量声明长度16 位和 32 位混用会导致高字丢失6监视值和实际值是否一致手动演算一组已知数据不一致时按上述顺序继续排查6. 最佳实践清单与学习建议6.1 编程规范建议进制转换和数据类型相关的代码最容易在维护阶段出问题。下面的清单是多年工程实践整理出来的可以直接拿去作为程序检查项。所有通信数据在程序注释里写明寄存器地址、数据类型、码制、字节序和量纲。模拟量工程量换算统一使用 REAL 类型避免整数除法截断。计数累计类数据优先使用 DINT并设置溢出报警。外部 BCD 数据在转换后增加 0 到 9 的范围检查出现异常编码时置错误标志。不要在不同品牌 PLC 之间直接照搬数据类型声明要对照长度和符号规则。通信接收缓冲区用字节数组或 WORD 数组保存不要在报文边界处直接强转成 REAL。关键数据变化时保存到掉电保持区之前先确认数据类型长度和地址范围。6.2 跨品牌和跨设备调试建议多品牌设备联调时建议先做一次“最小数据验证”。给设备一个已知输入例如让变频器输出固定频率 50.00 Hz然后读取通信数据反推寄存器的十六进制内容和字节序。确认无误后再写完整的解析逻辑能大幅减少联调时间。触摸屏和上位机同样存在数据类型解释问题。触摸屏上的数值显示格式、小数位数、数据类型、字节顺序设置都必须和 PLC 程序对齐。建议在组态软件里设置变量时显式填写数据类型而不使用默认值。6.3 学习阶段怎么练最有效初学者不建议直接背进制换算表更有效的做法是在编程软件里反复做对照实验。用指令把同一个常数分别写成二进制、八进制、十进制、十六进制再用在线监视看寄存器的实际内容能直观看到不同进制的等价关系。可以做这样一组小练习用 MOV 指令把十进制 255 存入 D0在线监视 D0 以十六进制模式显示应看到 16#00FF。把 16#0100 存入 D1用二进制模式监视应看到最高位为 1。用 BCD 指令把十进制 35 转为 BCD存入 D2再转回二进制观察数值是否恢复。用 ST 语言写一个 INT 转 DINT 再转 REAL 的转换函数块观察不同转换阶段的数据形态。做完这几个实验后再回头看通信报文、模拟量换算和触摸屏显示很多困惑会自然解开。进制转换和数据类型是 PLC 编程里最值得花时间打牢的基础后面学指令、学通信、学运动控制都会反复用到这两块知识。先把它们理解透后面的工程实践会顺畅得多。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门