S7-300 PLC与S7-200 PLC通过PROFIBUS-DP通信时,300PLC不能直接将读取的数据写入其I存储区(输入存储区),但可通过特定方式实现数据交互。 以下是详细分析:
一、S7-300与S7-200的DP通信原理
主从架构
S7-300:作为PROFIBUS-DP主站,负责控制通信周期、读写从站数据。
S7-200:需通过EM277 PROFIBUS-DP扩展模块接入总线,作为从站,被动响应主站请求。
数据流向:主站(300)通过周期性轮询读取从站(200)的输出数据(对应200的Q区),并向从站写入输入数据(对应200的I区)。
存储区映射关系
PIB/PQB区:通过DP通信时,300PLC需配置过程映像区(Process Image),将200PLC的I/Q区映射到300的DB块或M区,而非直接操作I/Q区。
I区(输入):存储外部信号(如传感器状态),仅可被外部设备(如300PLC)写入。
Q区(输出):存储程序逻辑输出(如控制继电器),仅可被200PLC自身程序修改,但可被300PLC读取。
S7-200的I/Q区:
S7-300的存储区:
二、为何不能直接写入300PLC的I存储区?
I存储区的特性
只读属性:S7-300的I区(输入存储区)用于存储外部物理输入信号(如按钮、传感器),由硬件模块(如DI模块)直接刷新,程序无法直接修改。
数据流向限制:DP通信中,300PLC作为主站,只能从从站(200PLC)读取数据到自身存储区,或向从站写入数据,但无法通过通信将数据写入自身的I区。
替代方案
硬件组态:
数据映射:
程序逻辑:
200PLC的I0.0-I0.7(8位输入)→ 300PLC的DB1.DBB0(DB块第0字节)。
200PLC的Q0.0-Q0.7(8位输出)→ 300PLC的DB1.DBB8(DB块第8字节)。
读取200PLC数据:
MOV DB1.DBB0, MW200(将DB1.DBB0的值传送到MW200)。写入数据到200PLC:
MOV MW300, DB1.DBB8(将MW300的值传送到DB1.DBB8,再通过DP写入200的Q区)。在300PLC中定义一个DB块(如DB1)或M区(如MW100),通过DP通信将200PLC的数据写入该区域。
程序逻辑通过操作DB/M区间接使用数据,而非直接操作I区。
使用DB块或M区:
示例配置:
在STEP 7中组态S7-300为主站,S7-200+EM277为从站。
配置从站的输入/输出字节数(如输入8字节、输出8字节)。
三、特殊情况:300PLC的I区数据来源
若需将外部信号(如200PLC的数据)映射到300PLC的I区,需通过以下方式间接实现:
使用硬件中继:
将200PLC的输出信号(Q区)通过数字量输出模块转换为物理信号(如24V DC),再接入300PLC的数字量输入模块(DI),此时信号会刷新300的I区。
缺点:增加硬件成本和布线复杂度,仅适用于简单场景。
通过CPU间通信:
若300和200PLC支持其他通信协议(如MPI、以太网),可通过
PUT/GET指令或S7通信将数据写入300的DB/M区,再由程序逻辑将DB/M区数据复制到I区(但I区仍不可直接写入,需通过模拟量输入模块或特殊功能块间接实现)。限制:S7-200不支持S7通信,仅支持DP、PPI、MPI(有限功能)和以太网(需CP243-1模块)。
四、总结与建议
标准做法:
通过DP通信将200PLC的数据映射到300PLC的DB块或M区,程序逻辑操作DB/M区实现数据交互。
避免直接操作I区,因其设计初衷是存储硬件输入信号。
示例代码(STEP 7):
scl// 读取200PLC的I区数据(映射到300的DB1.DBB0)DATA_IN := DB1.DBB0; // 将300的MW100写入200PLC的Q区(映射到300的DB1.DBB8) DB1.DBB8 := MW100;
注意事项:
确保DP通信组态中输入/输出字节数与实际需求匹配。
使用
SFC14 "DPRD_DAT"和SFC15 "DPWR_DAT"指令可更灵活地读写DP从站数据(需定义通信区域地址)。


