二、Modbus_Master
Modbus_Master是西门子 S7-1200/1500 PLC 中用于Modbus RTU 串行通信 的主站功能块。它让 PLC 作为主站主动发起通信,读写 Modbus 从站设备的数据。
1.具体功能
功能类别 | 说明 |
读操作 | 读取从站的线圈(Coils)、离散输入(Discrete Inputs)、保持寄存器(Holding Registers)、输入寄存器(Input Registers) |
写操作 | 写入单个/多个线圈、单个/多个保持寄存器到从站 |
轮询控制 | 通过 `REQ` 信号触发单次通信,可编程实现多从站轮询 |
错误诊断 | 提供详细的错误代码,便于故障排查 |
2.参数详解(MB_MASTER)
参数名 | 数据类型 | 含义与功能 |
REQ | Bool | 请求触发信号。上升沿(0→1)触发一次 Modbus 通信请求。通常使用脉冲信号或定时器触发 |
MB_ADDR | UInt | 从站地址。范围 1-247,指定要通信的 Modbus 从站设备地址 |
MODE | USInt | 操作模式/功能码选择。决定读写类型:• 0 = 读线圈(功能码 01) • 1 = 读离散输入(功能码 02) • 2 = 读保持寄存器(功能码 03) • 3 = 读输入寄存器(功能码 04) • 4 = 写单个线圈(功能码 05) • 5 = 写单个寄存器(功能码 06) • 6 = 写多个线圈(功能码 15) • 7 = 写多个寄存器(功能码 16) |
DATA_ADDR | UDInt | 从站数据起始地址。指定从站中数据的起始地址(Modbus 地址,通常从 0 或 1 开始,注意偏移) |
DATA_LEN | UInt | 数据长度。要读写的数据数量:• 线圈/离散输入:1-2000(位)• 寄存器:1-125(字) |
DATA_PTR | Variant | 数据指针。指向 PLC 中用于存储读写数据的变量或数据块地址 |
DONE | Bool | 完成标志。通信成功完成后置 1,持续一个扫描周期 |
BUSY | Bool | 忙标志。通信进行中时为 1,此时不能接受新请求 |
ERROR | Bool | 错误标志。通信出错时置 1 |
STATUS | Word | 状态/错误代码。详细的错误信息:• 0000 = 无错误• 8180 = CRC 错误• 8181 = 功能码不支持• 8182 = 数据地址错误• 8183 = 数据长度错误• 8184 = 从站无响应• 其他详见手册 |
MB_DB | DB_ANY | Modbus 背景数据块。指向 `MB_COMM_LOAD` 配置的背景 DB,包含通信端口配置信息 |
3.使用前提
在使用MB_MASTER之前,必须先调用MB_COMM_LOAD进行通信端口初始化:
MB_COMM_LOAD 关键参数:
参数 | 说明 |
PORT | 通信端口硬件标识符(如 CM1241 的硬件 ID) |
BAUD | 波特率(9600, 19200, 38400 等) |
PARITY | 校验方式(0=无校验, 1=奇校验, 2=偶校验) |
MB_DB | 背景数据块,供MB_MASTER 引用 |
4.注意事项
REQ 触发:必须使用脉冲信号,不能在BUSY为1时重复触发。
地址偏移:Modbus 地址通常从 0 开始,但某些设备从 1 开始,注意转换。
数据格式:保持寄存器是 16 位字,高低字节顺序可能需要转换。
轮询间隔:多个从站轮询时,确保间隔足够,避免总线冲突。
错误处理:建议监控ERROR和STATUS,实现故障诊断。
三、Receive_Config
1.Receive_Config 是什么?
Receive_Config(接收配置)是西门子 TIA Portal V15 中用于 CM PtP(点对点通信模块)串行通信的一个系统指令/功能块。它属于 PtP 通信指令集的一部分,专门用于 在运行过程中动态配置串行接收参数。
2.具体含义与作用
核心功能
Receive_Config 用于配置接收数据的起始和结束条件,即定义什么样的信号特征标志着一帧数据的开始和结束。这决定了PLC 如何识别和截断接收到的串行数据流。
与相关指令的关系
在 PtP 通信中,Receive_Config 与以下指令配合使用:
指令 | 功能 |
Port_Config | 配置串口基本参数(波特率、数据位、停止位、校验位等) |
Receive_Config | 配置接收数据的起止条件(起始符、结束符、固定长度等) |
Send_Config | 配置发送数据的起止条件 |
Receive_P2P | 实际接收数据,将 CM 中的电报传输到 CPU |
Send_P2P | 实际发送数据 |
注:Receive_Config 是可选的。如果硬件配置中的默认参数已经满足需求,或者通信伙伴(如手持读码器 MV340)的默认设置与之一致,则不需要额外调用 Receive_Config。
3. 典型应用场景
自由口通信(Freeport):当使用非标准协议进行串行通信时,需要通过 Receive_Config 定义数据帧格式。
动态协议切换:在运行过程中根据通信伙伴的不同,切换接收数据的解析方式。
处理变长数据:通过配置结束符(如换行符 `\n`、回车符 `\r`)来识别数据帧边界。
在"系统块程序资源"中的位置
在 TIA Portal V15 的项目树中,Receive_Config 通常位于:
项目树 → PLC → 程序块 → 系统块 → 程序资源(Program Resources)
或者可以在指令任务卡的 "通信" → "点对点" 类别下找到。
4.关键参数说明
参数类别 | 说明 |
起始条件 | 如:起始字符、线路空闲时间、任意字符等 |
结束条件 | 如:结束字符、固定长度、字符间超时、最大长度等 |
缓冲区设置 | 接收缓冲区大小配置 |
5.总结
项目 | 说明 |
所属 | CM PtP 点对点通信指令集 |
作用 | 在运行中配置串行接收数据的起始和结束识别条件 |
必要性 | 可选,仅在需要覆盖硬件默认配置时使用 |
使用前提 | 需配合 CM PtP 通信模块(如 RS232/RS422/RS485)使用 |
四、Receive_P2P
1.指令含义
Receive_P2P(Receive Point-to-Point)全称"使用点对点通信接收数据",用于检查通信模块(CM 1241、CB 1241 等)接收缓冲区中的数据帧。如果检测到有效数据帧,指令会将其从通信模块传输到 CPU 指定的接收缓冲区 。
2.主要作用
功能 | 说明 |
数据接收 | 从串口通信模 块(RS232/RS485) 读取外部设备发送的数据 |
缓冲区管理 | 将 CM/CB 中的接收数据搬运到 CPU 的 BUFFER 参数指定区域 |
状态反馈 | 通过 NDR、ERROR、STATUS、LENGTH 等参数报告接收状态和错误信息 |
FIFO 机制 | 当通信模块缓冲多个帧时,按先进先出顺序逐帧输出 |
3.关键参数说明
参数 | 类型 | 作用 |
EN | Bool | 使能端,建议常通或持续接通一段时间,而非沿触发。这样通信模块一旦接收到新数据,可立即传送到 BUFFER |
PORT | PORT | 串口硬件模块标识符(在 PLC 变量表的系统常量中查找) |
BUFFER | Variant | 接收数据存储区,支持 String、WString、数组、结构体等 |
NDR | Bool | 新数据接收完成,置位一个扫描周期 |
ERROR | Bool | 接收错误,置位一个扫描周期 |
STATUS | Word | 状态/错误代码 |
LENGTH | UInt | 接收到的实际字节数(接收完成时有效) |
COM_RST | Bool | 初始化指令(CPU 启动时置 TRUE) |
4.使用要点
调用方式:建议放在循环OB中尽可能快地调用,EN 端常通,确保不遗漏数据 。
数据一致性:仅在 NDR = TRUE 的扫描周期内读取 BUFFER 数据,此时数据是完整一致的 。
多帧处理:如果通信模块缓冲区积压了 n 帧数据,需要 Receive_P2P 的 EN 端连续 n 个扫描周期为 TRUE 才能全部接收完毕 。
5. 性能优化选项:
UNIVERSAL = 0(同步模式):响应更快,但接收帧最大 24 字节。
UNIVERSAL = 1(异步模式):支持更长帧(最大 1024/2048/4096 字节,取决于模块)。
6.典型应用场景
接收条形码扫描器、RFID 读写器、视觉系统、GPS 装置、无线电调制解调器等外部串口设备的数据
与打印机、称重仪表、温控器等支持自由口协议的设备进行数据交互
7.配套指令
Send_P2P:对应的发送指令。
Receive_Reset:清除通信模块接收缓冲区。
Signal_Get / Signal_Set:读取/设置 RS232 握手信号(DTR、DSR、RTS、CTS 等)。
8.总结:Receive_P2P 是 S7-1200/S7-1500 实现自由口串口通信的核心接收指令,负责将外部设备通过RS232/RS485 发送的数据搬运到 PLC 程序中处理。
五、Receive_Reset
1.指令含义
Receive_Reset(接收复位)用于清空通信模块(CM 1241、CB 1241 等)的接收缓冲区,丢弃其中所有已接收但尚未被 CPU 读取的数据帧。
2.主要作用
功能 | 说明 |
清除接收缓冲区 | 将通信模块(CM/CB)中积压的所有数据帧清空 |
丢弃未读数据 | 清除那些已到达串口但尚未通过 Receive_P2P 传送到 CPU 的数据 |
通信恢复 | 在通信异常、数据错乱或协议切换时,重置到干净状态 |
防止缓冲区溢出 | 避免因长期未读取导致缓冲满而丢失新数据 |
3.关键参数说明
参数 | 类型 | 作用 |
REQ | Bool | 上升沿触发执行清除操作(建议用脉冲触发) |
PORT | PORT | 串口硬件模块标识符 |
DONE | Bool | 清除成功完成,置位一个扫描周期 |
ERROR | Bool | 执行出错,置位一个扫描周期 |
STATUS | Word | 状态/错误代码 |
4.使用场景
通信初始化:在建立新连接或切换通信协议前,确保缓冲区干净。
错误恢复:检测到通信异常(如帧格式错误、校验失败)后,清除残留数据重新开始。
协议切换:同一串口在不同时段使用不同协议时,清除旧协议残留数据。
防止数据堆积:长时间未处理接收数据后,先清空再恢复正常接收。
5.与 Receive_P2P 的关系
指令 | 作用对象 | 功能 |
Receive_P2P | 逐帧读取缓冲区数据到 CPU | 正常数据接收 |
Receive_Reset | 一次性清空整个缓冲区 | 丢弃所有未读数据 |
Receive_Reset 不会清除CPU 中已接收的数据,只清除通信模块(CM/CB)硬件缓冲区中的待传输数据。
6.总结:Receive_Reset 是一个管理型指令,不用于正常数据收发,而是在需要丢弃未读数据、重置通信状态时使用,是 PtP 通信故障恢复和协议切换时的重要工具。
六、Send_Config
1.核心含义
Send_Config 的全称是
"Configure serial transmission parameters dynamically"(动态配置串行传输参数)。它属于 PtP 通信指令库中的组态指令类别,与 `Port_Config`(端口组态)、`Receive_Config`(接收组态)等配合使用 。
2.具体作用
动态配置发送相关参数
通过 Send_Config 可以在用户程序运行期间,动态修改以下串口发送参数:
参数 | 数据类型 | 说明 |
RTSONDLY | UInt | RTS(请求发送)信号开启延迟时间(位时间) |
RTSOFFDLY | UInt | RTS 信号关闭延迟时间(位时间) |
BREAK | UInt | 发送中断信号的持续时间 |
IDLELINE | UInt | 发送前线路空闲等待时间 |
USR_END | STRING[2] | 用户自定义结束符(CM1241/CB1241 不支持,需留空) |
APP_END | STRING[5] | 应用层结束符(CM1241/CB1241 不支持,需留空) |
3. 执行时的重要特性
丢弃未决数据:执行 Send_Config 时,通信模块(CM/CB)中所有已排队但未发送的消息会被丢弃 。
非永久保存:通过 Send_Config 设置的参数不会永久存储在 CPU 中。当 CPU 从 RUN 切换到 STOP,或发生断电重启后,参数会自动恢复为设备组态中的初始设置 。
4.使用场景
场景 | 说明 |
多协议切换 | 同一串口需要在不同时间使用不同的发送参数(如不同的结束符或 RTS 控制方式) |
动态调整时序 | 根据通信对象的不同,实时调整 RTS 延迟、线路空闲时间等 |
调试与测试 | 在不修改硬件组态的情况下,快速测试不同的发送参数组合 |
5.注意事项
版本要求:CM1241 模块需固件版本 V2.1 及以上才能使用该指令 。
参数单位:RTSONDLY、RTSOFFDLY、BREAK、IDLELINE 等参数以位时间为单位,与波特率无关,最大可设为 65535 。
结束符限制:对于CM1241和CB1241,USR_END 和 APP_END 参数不被支持,必须传入空字符串 `""` 。
状态监控:DONE、ERROR、STATUS 输出仅在一个扫描周期内有效,如需监控建议将 STATUS 复制到变量中保存 。
七、Send_P2P
1.Send_P2P 的含义
Send_P2P 是西门子TIA Portal V15 编程软件中用于S7-1200/1500 系列 PLC 的一个通信指令,全称可以理解为 "Send Point-to-Point"(点对点发送)。它属于 PtP(Point-to-Point,点对点)通信 功能的一部分,主要用于通过串行通信接口(如 RS232、RS485)发送数据。
2.具体作用
核心功能
发送数据:将 CPU 指定的数据缓冲区(DB 块或内存区域)中的数据通过串口发送出去。
点对点通信:实现 PLC 与第三方设备(如扫码枪、打印机、变频器、仪表等)之间的串行数据交换。
3. 主要应用场景
场景 | 说明 |
与扫码枪通信 | 接收条码数据(通常配合 RCV_P2P 接收指令) |
与打印机连接 | 发送打印指令或数据到串口打印机 |
与变频器/仪表通信 | 发送控制命令或参数设置 |
与第三方PLC通信 | 实现自定义协议的数据交换 |
Modbus RTU通信 | 作为Modbus主站发送请求帧 |
4. 指令特点
非周期性发送:需要触发信号(上升沿)才会执行发送
异步操作:发送过程在后台进行,不会阻塞主程序扫描
需配合硬件:需要 CPU 或通信模块(如 CM1241)支持 PtP 通信
4. 与相关指令的关系
Send_P2P → 发送数据(PLC → 外部设备)
RCV_P2P → 接收数据(外部设备 → PLC)
两者通常配合使用,实现双向串行通信。
5.使用前提条件
硬件要求:S7-1200/1500 CPU 自带串口,或安装 CM1241 等 PtP 通信模块
软件配置:在 TIA Portal 的设备组态中,需要:启用 PtP 通信接口;配置波特率、数据位、停止位、校验位等串口参数
程序调用:在程序块(OB/FB/FC)中调用 Send_P2P 指令
6.总结
Send_P2P 就是西门子 PLC 通过串口(RS232/RS485)向外部设备"写信"的指令。 只要你的设备支持串口通信,就可以用它来发送数据,是工业现场实现点对点串行通信的核心指令之一。