在 PLC 和变频器的通讯中,是否需要使用 CRC 校验,这个问题的核心取决于通讯协议的类型—— 因为 CRC 校验是部分工业通讯协议的内置机制,并非需要额外手动编写。
这是 PLC 与变频器通讯的主流场景,绝大多数工业级通讯协议都会将 CRC 校验(如 CRC16、CRC32)作为协议的一部分,由硬件或驱动自动完成,你不需要手动计算和添加 CRC 码。常见的协议包括:
Modbus-RTU:这是 PLC 与变频器最常用的通讯协议(如三菱、西门子、台达的变频器都支持)。Modbus-RTU 的帧结构末尾必须包含 2 个字节的 CRC16 校验码,用于检测数据传输过程中的错误(如电平干扰、传输丢包)。
CANopen:变频器的 CAN 总线通讯常用协议,内置 CRC 校验机制,保障数据传输的可靠性。
自由口通讯(自定义协议):如果你通过 PLC 的自由口(如三菱 FX 的 RS232/RS485 自由口)自定义与变频器的通讯协议,为了提升数据可靠性,建议手动添加 CRC 校验(此时需要自己编写 CRC 计算和验证的程序)。
部分通讯协议采用了其他校验方式(如奇偶校验、和校验),或本身基于以太网的可靠传输,此时不需要再使用 CRC 校验:
Modbus-TCP:基于以太网的 Modbus 协议,以太网本身的 TCP/IP 协议已经有完善的差错控制机制(如校验和、重传机制),因此 Modbus-TCP没有 CRC16 校验码,只保留了简单的长度校验。
以太网 / IP、Profinet、CC-link IE:这些工业以太网协议,底层依赖 TCP/IP 或专用以太网机制,自带高可靠性的校验,无需额外 CRC 校验。
ASCII 协议(如 Modbus-ASCII):使用 LRC(纵向冗余校验)代替 CRC,同样是协议内置的校验方式,无需手动处理。
以三菱 FX3U PLC 通过 RS485 与三菱 FR-D700 变频器通讯(Modbus-RTU)为例:
你只需在 PLC 中编写 Modbus-RTU 的读写指令(如使用 FX3U 的RS指令,或专用的 Modbus 库指令)。
PLC 的通讯驱动会自动计算并添加 CRC16 校验码到发送帧中。
变频器接收后自动验证 CRC 码,并在返回数据时也自动添加 CRC 码。
PLC 接收返回数据后,自动验证 CRC 码,若校验失败则视为通讯错误,若成功则提取数据。
你不需要做的事:手动计算 CRC16 的数值,或在指令中手动添加 CRC 码。
如果使用自由口自定义通讯协议,需要手动实现 CRC 校验,步骤如下:
在 PLC 中编写CRC16 计算子程序(输入要传输的数据,输出 CRC 码)。
发送数据时,先计算数据的 CRC 码,再将数据 + CRC 码一起发送给变频器。
变频器接收后,同样计算数据的 CRC 码,与接收的 CRC 码对比,一致则处理数据,否则丢弃。
变频器返回数据时,执行同样的 CRC 校验流程。
主流场景(Modbus-RTU 等):CRC 校验是协议内置的,由硬件 / 驱动自动执行,你无需手动编写,只需要确保通讯协议配置正确即可。
特殊场景(Modbus-TCP / 工业以太网):无需 CRC 校验,协议本身有其他可靠的校验机制。
自定义自由口协议:建议手动添加 CRC 校验以提升数据可靠性,需要自己编写 CRC 计算和验证的程序。