返回主站|会员中心|保存桌面

西门子PLC服务商    

PLC、变频器、电机,触摸屏,低压

联系方式
  • 联系人:方经理
  • 电话:13073017555
  • 邮件:gzws26@126.com
新闻分类
  • 暂无分类
首页 > 新闻中心 > LC S7-300 如何通过 cp341,走 modbus 协议,读取智能仪表的数据!
新闻中心
LC S7-300 如何通过 cp341,走 modbus 协议,读取智能仪表的数据!
发布时间:2026-08-08        浏览次数:1        返回列表

CP341 是串口通信模块,本身不带 Modbus 协议栈,必须额外购买 Modbus RTU 从站 / 主站授权狗(硬件 Dongle)

  • 读智能仪表:PLC 做 Modbus‑RTU 主站 (Master),仪表是 Modbus 从站 (Slave)。硬件:S7‑300 CPU + CP341(6ES7 341‑1CH02‑0AE0)+ Modbus‑RTU 主站硬件狗;接线:RS485 两线 A/B。软件:STEP7 V5.x,需要安装 CP341 Modbus RTU 驱动库。

区分:

  1. CP341 硬件 + Modbus 主站 Dongle:才能做 Modbus RTU 主站读仪表;

  2. 没有 dongle:只能做 ASCII、3964R,不能跑 Modbus

一、硬件准备

  1. CP341 订货号:6ES7341‑1CH02‑0AE0(RS422/485 版本)

  2. Modbus RTU MASTER 硬件加密狗:6ES7870‑1AA01‑0YA0,插在 CP341 前面。

没有这个狗,PTP 库不能执行 Modbus 功能码。

  1. 接线 RS485:

    • CP341 端子:A ↔ 仪表 A;B ↔ 仪表 B;

    • 两端共地;总线两端加终端电阻 120Ω;

    • 手拉手总线,禁止星型布线。

二、软件库安装

STEP7 需要安装:SIMATIC S7‑300 CP341 Modbus RTU 库包,安装后库里面出现:

  • FB08:MBUS_CTRL  Modbus 主站初始化

  • FB07:MBUS_MSG  Modbus 读写消息(读仪表就调用 FB07)

⚠不要和 S7‑200 的 Modbus 库混淆,CP341 这一套是专用库。

三、关键参数(必须和智能仪表完全一致)

在仪表手册获取:

  1. 从站地址 Slave ID(1‑247)

  2. 波特率:9600 /19200;数据位 8;停止位 1;校验位:无 / 奇 / 偶

  3. 需要读取的寄存器:

    • 0x03 功能码:读保持寄存器 Holding Register(绝大多数智能仪表)

    • 寄存器起始地址、寄存器数量。

注意 Modbus 地址坑:仪表手册写寄存器 40001,对应 Modbus 逻辑地址是0;40002 对应 1。4xxxx 地址 = 逻辑地址 +40001。

四、PLC 程序编写(LAD)

新建 DB,背景数据块,不要优化块访问(S7‑300 老式库要求)。

1. FB08 MBUS_CTRL(初始化,OB1 循环调用)

表格

引脚说明示例
EN一直接通M0.0=TRUE
Mode1=Modbus RTU 模式1
Baud波特率;9600=96009600
Parity校验:0 无,1 奇,2 偶0
Done完成位M0.1
Error错误代码M0.2
Status状态字MW10

FB08 每个 OB1 周期调用一次,完成初始化 CP341 的串口参数。

2. FB07 MBUS_MSG 读仪表(触发调用,不能一直使能)

注意:多个仪表读取,必须轮询调用 FB07,同一时刻只能激活 1 个 FB07,不能同时多个 EN=1。

表格

引脚说明示例
EN上升沿触发读,不要常 ONM0.3 脉冲触发
First1 = 新请求1
Slave仪表从站地址例如:1
RW0 = 读;1 = 写0
Func功能码,读保持寄存器 = 33
DAddrModbus 逻辑起始地址例如读 40010 → DAddr=9
DataPtPLC 接收数据指针,P#DB20.DBX0.0P#DB20.DBX0.0
Len读取寄存器个数,如读 4 个寄存器4
Done本次读取完成M0.4
Error出错标志M0.5
Status故障状态码MW12
  • DataPt:指向 PLC 的接收 DB 块,DB20,非优化访问;读到的寄存器就存放在 DB20 里面,每个寄存器占 1 个字(16bit)。例:读 4 个寄存器:DB20.DBW0、DB20.DBW2、DB20.DBW4、DB20.DBW6。

轮询逻辑(多仪表标准写法)

  1. 用计数器 / 状态机轮询,同一时间只允许 1 个 MBUS_MSG 的 EN 接通;

  2. FB07 Done 或者 Error 之后,延时一小段,切换下一个从站任务。

如果一直 EN 接通,会报通信错误。

五、DB 块定义示例 DB20(接收缓冲区)

属性:取消 “优化的块访问”

plaintext

DB20:
Offset 0: Word  Reg0   //对应仪表40010
Offset 2: Word  Reg1   //40011
Offset 4: Word  Reg2   //40012
Offset 6: Word  Reg3   //40013

读到之后,根据仪表手册,做转换:

  • 整数直接使用;

  • 有部分仪表是两个 Word 组成浮点数 Real,需要把 DBW0 和 DBW2 合并 REAL。

六、CP341 硬件参数设置(HW‑Config)

  1. 硬件组态插入 CP341;

  2. 双击 CP341 → Parameters:

    • Protocol 选择:Modbus‑RTU Master

这里只是组态,真正协议由硬件狗 + FB 库实现。

  1. 保存编译,下载硬件组态到 PLC。

七、常见故障排查(看 FB07 的 Status 状态字 MW12)

  1. Status=16#8180:没有 Modbus 硬件狗!最常见,狗没插、狗损坏。

  2. Status=16#80C8:超时,没有收到仪表应答:

    • 接线 A/B 颠倒;

    • 波特率、校验、从站地址不匹配;

    • 终端电阻没接;仪表没上电。

  3. Status=16#80E0:非法 DAddr 寄存器地址,超出仪表寄存器范围。

  4. Status=16#80A1:请求正在处理,上一次消息还没结束,又触发 FB07,需要轮询。

调试手段:CP341 可以用 PTrace 串口跟踪,监视收发报文,确认 PLC 发出去什么、仪表回复什么,快速定位问题。

重要注意点

  1. 硬件狗不可省略,没有狗不能跑 Modbus RTU 主站;很多人只买 CP341,漏掉 dongle,调试卡很久。

  2. DB 块必须关闭优化访问,否则 FB07 的 DataPt 指针报错。

  3. FB07 不能常 ON,必须脉冲触发,任务完成 (Done/Error) 之后再发下一条,多仪表严格轮询。

  4. RS485 总线注意共地、终端电阻;A/B 线千万不要接反。

  5. Modbus 地址区分:40001 对应逻辑地址 0,很多人直接填 40001 进去 DAddr,直接报错。

  6. 浮点数:很多仪表把 REAL 放在 2 个连续寄存器,需要用T_CONV或者间接拼接成 REAL。

收缩
  • QQ咨询

  • 电话咨询

  • 13073017555
  • 添加微信客服