『7x24小时有问必答』
一、Modbus_Comm_Load   Send_P2P
Modbus_Comm_Load(在西门子 S7-1200/1500 PLC 中通常写作 MB_COMM_LOAD)是西门子TIA Portal 编程环境中用于Modbus RTU串行通信的核心初始化指令。
1.主要作用
Modbus_Comm_Load 是一个通信端口组态指令,用于通过 Modbus RTU 协议对通信模块(如 CM1241、CB1241 等点对点通信模块)进行初始化配置。
2.核心功能
功能
说明
端口初始化
配置 RS485/RS232 串口的通信参数

协议设置
启用 Modbus RTU 协议模式
参数绑定
将通信端口与主站(MB_MASTER)或从站(MB_SLAVE)指令关联
硬件配置
设置波特率、校验位、流控制等物理层参数

3.关键参数说明
参数
含义
常用值
REQ
上升沿触发执行
首次扫描位(FirstScan)
PORT
通信模块硬件标识符
如 "LocalCM_PtP_RS422_485_HF_1"
BAUD
波特率
9600、19200、38400、57600 等
PARITY
奇偶校验
0=无校验,1=奇校验,2=偶校验
FLOW_CTRL
流控制使能
0(FALSE):无流控制(默认)
1(TRUE):启用RTS硬件流控制
使用RS485/RS422半双工通信时必须启用(CB1241硬件自动流控,软件参数无效)
RTS_ON_DLY
RTS置位延迟
发送数据前,RTS信号置位后的等待时间(毫秒)
确保从机准备好接收,范围:0-65535ms
RTS_OFF_DLY
RTS复位延迟
发送完成后,RTS信号保持置位的额外时间(毫秒)
确保从机完整接收最后字节,范围:0-65535ms
RESP_TO
响应超时时间
等待从机响应的最大时间,范围:1-32767ms
MB_DB
关联的主站/从站数据块
指向 MB_MASTER 或 MB_SLAVE 的背景 DB
DONE
初始化完成
1(TRUE):指令执行成功,通信端口已配置完成。
仅在一个扫描周期内为1,需用上升沿检测。
ERROR
错误标志
1(TRUE):指令执行出错
具体错误代码查看STATUS
STATUS
状态/错误代码
DONE=1时,状态信息(通常为0或警告)
ERROR=1时,错误代码(需查看手册)
4.使用要点
只需调用一次:通常在 PLC 首次扫描时执行,完成端口初始化后无需重复调用。
关联指令:通过 `MB_DB` 参数与 `Modbus_Master`(主站)或 `Modbus_Slave`(从站)指令建立关联。
RS485 模式设置:对于 V3.0 及以上版本,需手动将背景数据块的静态参数 `MODE` 设为 4(表示 RS485 半双工两线模式)。
数据块要求:关联的数据块必须是标准 DB 块(取消"优化的块访问"),以便支持指针寻址。
5.典型应用场景
PLC 作为 Modbus 主站轮询多个从站设备(如变频器、传感器、仪表等)
PLC 作为 Modbus 从站响应上位机或 HMI 的请求
工业现场 RS485 总线通信的初始化配置
简言之,Modbus_Comm_Load 是 Modbus RTU 通信的"开门钥匙",没有它正确执行,后续的读写操作都无法进行。
二、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)向外部设备"写信"的指令。 只要你的设备支持串口通信,就可以用它来发送数据,是工业现场实现点对点串行通信的核心指令之一。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码